SlideShare a Scribd company logo
Beware: Sharp Tools
Tools
Languages
 Java, PHP, Ruby
Frameworks
 Spring, Zend, Rails
Command Line Tools
    grep, awk, sed, ls, rm, find, ...
Source Control
 cvs, svn, perforce, git, mercurial
Editors/IDEs
notepad, pico, emacs, vim, eclipse
<bean id="application"
    class="org.springframework.richclient.application.Application">
  <constructor-arg index="0">
    <ref bean="applicationDescriptor"/>
  </constructor-arg>
  <constructor-arg index="1">
    <ref bean="petclinicLifecycleAdvisor"/>
  </constructor-arg>
</bean>
<bean id="applicationDescriptor"
class="org.springframework.richclient.application.support.DefaultApplicationDescr
iptor">
  <property name="version">
    <value>1.0</value>
  </property>
  <property name="buildId">
    <value>20041025001</value>
  </property>
</bean>

<bean id="petclinicLifecycleAdvisor”
class="org.springframework.richclient.samples.petclinic.PetClinicLifecycleAdvisor
">
   <property name="windowCommandBarDefinitions">
     <value>org/springframework/richclient/samples/petclinic/ui/commands-
context.xml</value>
   </property>
   <property name="startingPageId">
     <value>ownerManagerView</value>
   </property>
</bean>
public class Person<T>
{
    private Person<T> person;
...
}
...
// --- Create an Employee person ---
Person<Employee> emplPerson = new Person<Employee>();
...
// --- Create a Customer person ---
Person<Customer> custPerson = new Person<Customer>();
java, spring, svn, xcode, objc
java, spring, svn, emacs
               notepad
ruby, git, vi, web
ruby
optimised for programmer happiness
import java.util.*;
public class RedBlackTree<T extends Comparable<T>> {
  public static final int red    = 0;
  public static final int black = 1;
  private int               color;
  private T                 val;
  private RedBlackTree<T>   left;
  private RedBlackTree<T>   right;

    public RedBlackTree(T x) {
      val      = x;
      left     = null;
      right    = null;
      color = red;
    }
    public int color() {
      return color;
    }
}
class RedBlackTree
  RED   = 0
  BLACK = 1
  attr :color

public
  def initialize(val = nil)
    @left    = nil
    @right   = nil
    @val     = val
    @color   = RedBlackTree::RED
  end
end
compile
     type checking
long deployment cycles
rm -fr /
<murder`> lol i just got the rot password
to the linux machine running the network im
on
<m0zzie> you mean root pass?
<murder`> yea whatever its called do u know
some cool commands like to hack ppl?
<m0zzie> try this one.. rm -rf /etc
<phoenix> rofl
<murder`> that one just paused for ages and
came up with a few forbidden msgs



                                    http://bash.org/?34315
<murder`> got any better ones?
<m0zzie> hmm.. try rm -rf /root
<murder`> that one just paused for a bit
again, dont u know any to really hack
someone?
<agent3> lol
<m0zzie> ugh, ok I guess you're gonna keep
harrassing us until we tell you how to hack
people aren't you?
<murder`> yep



                                    http://bash.org/?34315
<m0zzie> ok do this exactly without the
quotes: "rm -rf /home" then do "shutdown -h
now"
<murder`> k sweet man thx!!
[n] Quit [murder`]-[Read error: Connection
reset by peer]
<m0zzie> I'm a bastard.




                                    http://bash.org/?34315
git update-index --remove -- $(git ls-files '*.o')
git update-index --remove -- $(git ls-files '*.c')
$ git push
To git@github.com:myrepo
 ! [rejected]   master -> master (non-fast-forward)

(Oh come on, just do it, we’re on a deadline)
$ git push -f
class String
  def malkify
   self.gsub(/w+/g, “Malkovich”)
  end
end

puts “Have you seen the film?”.malkify
=> “Malkovich Malkovich Malkovich Malkovich
Malkovich?”
class Fixnum
  def +(other)
   self * other
  end
end

puts 2 + 2
=> 4
done
class Klass; def bill; @er || 0; end
  REQUIRED = ('A'..'D').inject({}) {|hash, ltr| (ltr == 'A' ? (hash[ltr]={:a=>3, :x=>20}) :
(ltr == 'B' ? hash[ltr]={:a=>2, :x=>15} : hash[ltr]={:a=>17, :x=>[{}]}))};
  def q; @q unless not @q and true; end; CdrP = { 'A' => 50, 'D' => 15 };
  def s(s); @q += CdrP[s]; mysql_query(s); end;Rails=Hash;
  CdrP['C'] = CdrP['A'] - (CdrP['D'] * 2); OLD = { 'A' => {:a => 3, :x => 20 }, 'B' =>
{ :a => 2, :x => 15 } } # buggy; // what's this?
  # !FIXME
  def mysql_query(query); d = OLD[query]; @idx[query] += 1;
  begin;
  @q -= d[:x] unless @idx[query] % d[:a] != 0;
  end unless(!d) unless false and bill;
  end rescue(me) or $die;;
  #!IMPORTANT READ SPEC DOC p1132
  def initialize; @er = $stream = @q = 0; @idx = Rails.new(bill || $stream); CdrP['B']
= CdrP['A'] - CdrP['C']; end;
  end;
  #if foo=mysql_query('select * from users'); print foo; end;
  #
def add_to_cart_or_checkout(widget,
     in_cart = true)
 if in_cart
   cart.checkout
 else
   cart.add(widget)
 end
end
def add_to_cart_or_checkout(widget,
  in_cart = true, discount_offer = true)
 if in_cart
   cart.checkout
 elsif discount_offer
   cart.add(widget, widget.price *
widget.discount)
 end
end
def add_to_cart_or_checkout(widget,
 in_cart = true, discount_offer = true,
 discount = 0.65)
 if in_cart
   cart.checkout
 elsif discount_offer
   cart.add(widget, widget.price * (discount !=
1.0 ?
             discount : widget.discount)
 end
end
def add_to_cart_or_checkout(widget, in_cart = true,
 discount_offer = true, discount = 0.65, coupon = “”)
 if in_cart
   cart.checkout
 elsif discount_offer
   cart.add(widget, widget.price * (discount != 1.0 ?
             discount : widget.discount))
   if coupon != “”
     cart.apply_coupon(coupon, (discount != 1.0 ? discount :
                         widget.discount))
   end
 end
end
def add_to_cart_or_checkout(widget,
     in_cart = true)
 if in_cart
   cart.checkout
 else
   cart.add(widget)
 end
end
def add_to_cart(widget)
  cart.add(widget)
end

def checkout()
 cart.checkout()
end
# this code processes the payroll
# and sends it
process_payroll()
process_payroll_and_send()
payroll.process()
email_to_all_staff(payroll)
def process(q)
 p = 17 # this is the price of the
         # object
 cart.price += p * q
end
def process(quantity)
 p = 17 # this is the price
 cart.price += p * quantity
end
def increment_price(quantity)
 p = 17 # this is the price
 cart.price += p * quantity
end
def increment_price(quantity)
 price = 17 # this is the price
 cart.price += price * quantity
end
PRICE_OF_AIRCRAFT_IN_MILLIONS =
17

def increment_price_in_cart(quantity)
 cart.price +=
   PRICE_OF_AIRCRAFT_IN_MILLIONS
   * quantity
end
class Cart
  def increase_price_of_product(product,
   delta)
   unless product.price > MAX_PRICE
    product.price += delta
   end
  end
end
class Cart
  def increase_price_of_product(product, delta)
   product.increase_price(delta)
  end
end

class Product
  def increase_price(delta)
   unless self.price > MAX_PRICE
    self.price += delta
   end
end
...F..........
..............
..............
...F..........
........F.....
..............
...F..........
........F.....
..F.....F.....
...F...FFFF
FFFF.FF.FF
.FFFFFF....
F
Beware: Sharp Tools
Beware: Sharp Tools

More Related Content

What's hot

festival ICT 2013: Solid as diamond: use ruby in an web application penetrati...
festival ICT 2013: Solid as diamond: use ruby in an web application penetrati...festival ICT 2013: Solid as diamond: use ruby in an web application penetrati...
festival ICT 2013: Solid as diamond: use ruby in an web application penetrati...
festival ICT 2016
 
The Joy of Smartmatch
The Joy of SmartmatchThe Joy of Smartmatch
The Joy of Smartmatch
Andrew Shitov
 

What's hot (20)

Perl6 in-production
Perl6 in-productionPerl6 in-production
Perl6 in-production
 
C to perl binding
C to perl bindingC to perl binding
C to perl binding
 
festival ICT 2013: Solid as diamond: use ruby in an web application penetrati...
festival ICT 2013: Solid as diamond: use ruby in an web application penetrati...festival ICT 2013: Solid as diamond: use ruby in an web application penetrati...
festival ICT 2013: Solid as diamond: use ruby in an web application penetrati...
 
Python Programming Essentials - M11 - Comparison and Logical Operators
Python Programming Essentials - M11 - Comparison and Logical OperatorsPython Programming Essentials - M11 - Comparison and Logical Operators
Python Programming Essentials - M11 - Comparison and Logical Operators
 
Wx::Perl::Smart
Wx::Perl::SmartWx::Perl::Smart
Wx::Perl::Smart
 
PHP PPT FILE
PHP PPT FILEPHP PPT FILE
PHP PPT FILE
 
[Erlang LT] Regexp Perl And Port
[Erlang LT] Regexp Perl And Port[Erlang LT] Regexp Perl And Port
[Erlang LT] Regexp Perl And Port
 
Short Introduction To "perl -d"
Short Introduction To "perl -d"Short Introduction To "perl -d"
Short Introduction To "perl -d"
 
Perl Basics for Pentesters Part 1
Perl Basics for Pentesters Part 1Perl Basics for Pentesters Part 1
Perl Basics for Pentesters Part 1
 
NativeBoost
NativeBoostNativeBoost
NativeBoost
 
Why TypeScript?
Why TypeScript?Why TypeScript?
Why TypeScript?
 
Perl basics for pentesters part 2
Perl basics for pentesters part 2Perl basics for pentesters part 2
Perl basics for pentesters part 2
 
Replacing "exec" with a type and provider: Return manifests to a declarative ...
Replacing "exec" with a type and provider: Return manifests to a declarative ...Replacing "exec" with a type and provider: Return manifests to a declarative ...
Replacing "exec" with a type and provider: Return manifests to a declarative ...
 
Anyevent
AnyeventAnyevent
Anyevent
 
ES6 - Level up your JavaScript Skills
ES6 - Level up your JavaScript SkillsES6 - Level up your JavaScript Skills
ES6 - Level up your JavaScript Skills
 
Intro to OAuth
Intro to OAuthIntro to OAuth
Intro to OAuth
 
Practical JavaScript Programming - Session 6/8
Practical JavaScript Programming - Session 6/8Practical JavaScript Programming - Session 6/8
Practical JavaScript Programming - Session 6/8
 
Code obfuscation, php shells & more
Code obfuscation, php shells & moreCode obfuscation, php shells & more
Code obfuscation, php shells & more
 
全裸でワンライナー(仮)
全裸でワンライナー(仮)全裸でワンライナー(仮)
全裸でワンライナー(仮)
 
The Joy of Smartmatch
The Joy of SmartmatchThe Joy of Smartmatch
The Joy of Smartmatch
 

Similar to Beware: Sharp Tools

Ruby Language - A quick tour
Ruby Language - A quick tourRuby Language - A quick tour
Ruby Language - A quick tour
aztack
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
Dmitry Buzdin
 
Desarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosDesarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutos
Edgar Suarez
 

Similar to Beware: Sharp Tools (20)

Refactor like a boss
Refactor like a bossRefactor like a boss
Refactor like a boss
 
2013 28-03-dak-why-fp
2013 28-03-dak-why-fp2013 28-03-dak-why-fp
2013 28-03-dak-why-fp
 
Ruby Topic Maps Tutorial (2007-10-10)
Ruby Topic Maps Tutorial (2007-10-10)Ruby Topic Maps Tutorial (2007-10-10)
Ruby Topic Maps Tutorial (2007-10-10)
 
Ruby Language - A quick tour
Ruby Language - A quick tourRuby Language - A quick tour
Ruby Language - A quick tour
 
Stupid Awesome Python Tricks
Stupid Awesome Python TricksStupid Awesome Python Tricks
Stupid Awesome Python Tricks
 
R-House (LSRC)
R-House (LSRC)R-House (LSRC)
R-House (LSRC)
 
Ruby Intro {spection}
Ruby Intro {spection}Ruby Intro {spection}
Ruby Intro {spection}
 
Introduction to Groovy
Introduction to GroovyIntroduction to Groovy
Introduction to Groovy
 
SOLID Ruby, SOLID Rails
SOLID Ruby, SOLID RailsSOLID Ruby, SOLID Rails
SOLID Ruby, SOLID Rails
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
Rails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
Rails-like JavaScript Using CoffeeScript, Backbone.js and JasmineRails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
Rails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
 
Zend Framework Study@Tokyo #2
Zend Framework Study@Tokyo #2Zend Framework Study@Tokyo #2
Zend Framework Study@Tokyo #2
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
 
Extreme Swift
Extreme SwiftExtreme Swift
Extreme Swift
 
A limited guide to intermediate and advanced Ruby
A limited guide to intermediate and advanced RubyA limited guide to intermediate and advanced Ruby
A limited guide to intermediate and advanced Ruby
 
Desarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosDesarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutos
 
Where's My SQL? Designing Databases with ActiveRecord Migrations
Where's My SQL? Designing Databases with ActiveRecord MigrationsWhere's My SQL? Designing Databases with ActiveRecord Migrations
Where's My SQL? Designing Databases with ActiveRecord Migrations
 
Implementing Virtual Machines in Ruby & C
Implementing Virtual Machines in Ruby & CImplementing Virtual Machines in Ruby & C
Implementing Virtual Machines in Ruby & C
 
Beyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the codeBeyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the code
 
The Challenge of Bringing FEZ to PlayStation Platforms
The Challenge of Bringing FEZ to PlayStation PlatformsThe Challenge of Bringing FEZ to PlayStation Platforms
The Challenge of Bringing FEZ to PlayStation Platforms
 

Recently uploaded

Recently uploaded (20)

Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxUnpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
 
What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024
 
The architecture of Generative AI for enterprises.pdf
The architecture of Generative AI for enterprises.pdfThe architecture of Generative AI for enterprises.pdf
The architecture of Generative AI for enterprises.pdf
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
 
Powerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaPowerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara Laskowska
 
A Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System StrategyA Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System Strategy
 
Connecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAKConnecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAK
 
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomSalesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
 
Introduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG EvaluationIntroduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG Evaluation
 
Strategic AI Integration in Engineering Teams
Strategic AI Integration in Engineering TeamsStrategic AI Integration in Engineering Teams
Strategic AI Integration in Engineering Teams
 
In-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT ProfessionalsIn-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT Professionals
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi IbrahimzadeFree and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
ECS 2024 Teams Premium - Pretty Secure
ECS 2024   Teams Premium - Pretty SecureECS 2024   Teams Premium - Pretty Secure
ECS 2024 Teams Premium - Pretty Secure
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1
 
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
 

Beware: Sharp Tools

  • 5. Command Line Tools grep, awk, sed, ls, rm, find, ...
  • 6. Source Control cvs, svn, perforce, git, mercurial
  • 8. <bean id="application" class="org.springframework.richclient.application.Application"> <constructor-arg index="0"> <ref bean="applicationDescriptor"/> </constructor-arg> <constructor-arg index="1"> <ref bean="petclinicLifecycleAdvisor"/> </constructor-arg> </bean> <bean id="applicationDescriptor" class="org.springframework.richclient.application.support.DefaultApplicationDescr iptor"> <property name="version"> <value>1.0</value> </property> <property name="buildId"> <value>20041025001</value> </property> </bean> <bean id="petclinicLifecycleAdvisor” class="org.springframework.richclient.samples.petclinic.PetClinicLifecycleAdvisor "> <property name="windowCommandBarDefinitions"> <value>org/springframework/richclient/samples/petclinic/ui/commands- context.xml</value> </property> <property name="startingPageId"> <value>ownerManagerView</value> </property> </bean>
  • 9. public class Person<T> { private Person<T> person; ... } ... // --- Create an Employee person --- Person<Employee> emplPerson = new Person<Employee>(); ... // --- Create a Customer person --- Person<Customer> custPerson = new Person<Customer>();
  • 10. java, spring, svn, xcode, objc
  • 11. java, spring, svn, emacs notepad
  • 14. import java.util.*; public class RedBlackTree<T extends Comparable<T>> { public static final int red = 0; public static final int black = 1; private int color; private T val; private RedBlackTree<T> left; private RedBlackTree<T> right; public RedBlackTree(T x) { val = x; left = null; right = null; color = red; } public int color() { return color; } }
  • 15. class RedBlackTree RED = 0 BLACK = 1 attr :color public def initialize(val = nil) @left = nil @right = nil @val = val @color = RedBlackTree::RED end end
  • 16. compile type checking long deployment cycles
  • 17.
  • 19. <murder`> lol i just got the rot password to the linux machine running the network im on <m0zzie> you mean root pass? <murder`> yea whatever its called do u know some cool commands like to hack ppl? <m0zzie> try this one.. rm -rf /etc <phoenix> rofl <murder`> that one just paused for ages and came up with a few forbidden msgs http://bash.org/?34315
  • 20. <murder`> got any better ones? <m0zzie> hmm.. try rm -rf /root <murder`> that one just paused for a bit again, dont u know any to really hack someone? <agent3> lol <m0zzie> ugh, ok I guess you're gonna keep harrassing us until we tell you how to hack people aren't you? <murder`> yep http://bash.org/?34315
  • 21. <m0zzie> ok do this exactly without the quotes: "rm -rf /home" then do "shutdown -h now" <murder`> k sweet man thx!! [n] Quit [murder`]-[Read error: Connection reset by peer] <m0zzie> I'm a bastard. http://bash.org/?34315
  • 22. git update-index --remove -- $(git ls-files '*.o')
  • 23. git update-index --remove -- $(git ls-files '*.c')
  • 24. $ git push To git@github.com:myrepo ! [rejected] master -> master (non-fast-forward) (Oh come on, just do it, we’re on a deadline) $ git push -f
  • 25. class String def malkify self.gsub(/w+/g, “Malkovich”) end end puts “Have you seen the film?”.malkify => “Malkovich Malkovich Malkovich Malkovich Malkovich?”
  • 26. class Fixnum def +(other) self * other end end puts 2 + 2 => 4
  • 27. done
  • 28. class Klass; def bill; @er || 0; end REQUIRED = ('A'..'D').inject({}) {|hash, ltr| (ltr == 'A' ? (hash[ltr]={:a=>3, :x=>20}) : (ltr == 'B' ? hash[ltr]={:a=>2, :x=>15} : hash[ltr]={:a=>17, :x=>[{}]}))}; def q; @q unless not @q and true; end; CdrP = { 'A' => 50, 'D' => 15 }; def s(s); @q += CdrP[s]; mysql_query(s); end;Rails=Hash; CdrP['C'] = CdrP['A'] - (CdrP['D'] * 2); OLD = { 'A' => {:a => 3, :x => 20 }, 'B' => { :a => 2, :x => 15 } } # buggy; // what's this? # !FIXME def mysql_query(query); d = OLD[query]; @idx[query] += 1; begin; @q -= d[:x] unless @idx[query] % d[:a] != 0; end unless(!d) unless false and bill; end rescue(me) or $die;; #!IMPORTANT READ SPEC DOC p1132 def initialize; @er = $stream = @q = 0; @idx = Rails.new(bill || $stream); CdrP['B'] = CdrP['A'] - CdrP['C']; end; end; #if foo=mysql_query('select * from users'); print foo; end; #
  • 29.
  • 30.
  • 31.
  • 32.
  • 33. def add_to_cart_or_checkout(widget, in_cart = true) if in_cart cart.checkout else cart.add(widget) end end
  • 34. def add_to_cart_or_checkout(widget, in_cart = true, discount_offer = true) if in_cart cart.checkout elsif discount_offer cart.add(widget, widget.price * widget.discount) end end
  • 35. def add_to_cart_or_checkout(widget, in_cart = true, discount_offer = true, discount = 0.65) if in_cart cart.checkout elsif discount_offer cart.add(widget, widget.price * (discount != 1.0 ? discount : widget.discount) end end
  • 36. def add_to_cart_or_checkout(widget, in_cart = true, discount_offer = true, discount = 0.65, coupon = “”) if in_cart cart.checkout elsif discount_offer cart.add(widget, widget.price * (discount != 1.0 ? discount : widget.discount)) if coupon != “” cart.apply_coupon(coupon, (discount != 1.0 ? discount : widget.discount)) end end end
  • 37.
  • 38.
  • 39.
  • 40.
  • 41. def add_to_cart_or_checkout(widget, in_cart = true) if in_cart cart.checkout else cart.add(widget) end end
  • 42. def add_to_cart(widget) cart.add(widget) end def checkout() cart.checkout() end
  • 43. # this code processes the payroll # and sends it process_payroll()
  • 46. def process(q) p = 17 # this is the price of the # object cart.price += p * q end
  • 47. def process(quantity) p = 17 # this is the price cart.price += p * quantity end
  • 48. def increment_price(quantity) p = 17 # this is the price cart.price += p * quantity end
  • 49. def increment_price(quantity) price = 17 # this is the price cart.price += price * quantity end
  • 50. PRICE_OF_AIRCRAFT_IN_MILLIONS = 17 def increment_price_in_cart(quantity) cart.price += PRICE_OF_AIRCRAFT_IN_MILLIONS * quantity end
  • 51. class Cart def increase_price_of_product(product, delta) unless product.price > MAX_PRICE product.price += delta end end end
  • 52. class Cart def increase_price_of_product(product, delta) product.increase_price(delta) end end class Product def increase_price(delta) unless self.price > MAX_PRICE self.price += delta end end
  • 57.
  • 58. F