method_object 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -25,22 +25,11 @@ Or install it yourself as:
25
25
 
26
26
  # take the following long method
27
27
  def drive_to location, speed=:slow
28
- # find location
29
- Lorem ipsum dolor sit amet, consectetur adipisicing
30
- elit, sed do eiusmod tempor incididunt ut labore
31
-
32
- # set speed
33
- et dolore magna aliqua. Ut enim ad minim veniam,
34
- quis nostrud exercitation ullamco laboris nisi ut
35
- aliquip ex ea commodo
36
-
37
- # start car
38
- consequat. Duis aute irure dolor in reprehenderit in voluptate
39
- cillum dolore eu fugiat nulla pariatur. Excepteur
40
- proident, sunt in culpa qui officia deserunt mollit anim
41
-
42
- # go
43
- id est laborum.
28
+ car = Car.new
29
+ car.location = GoogleMaps.find(location)
30
+ car.start!
31
+ car.speed = speed
32
+ return car
44
33
  end
45
34
 
46
35
  end
@@ -52,40 +41,36 @@ up your code without cluttering Car
52
41
  class Car
53
42
 
54
43
  class DriveTo < MethodObject
55
- def call location, speed
56
- @location, @speed = location, speed
57
- find_location
58
- set_speed
59
- start_car
60
- go
61
- end
62
44
 
63
- def find_location
64
- Lorem ipsum dolor sit amet, consectetur adipisicing
65
- elit, sed do eiusmod tempor incididunt ut labore
45
+ # Note: call takes no arguments. The hash given to Car.call is
46
+ # turn into instance variables
47
+ def call
48
+ find_location!
49
+ start_car!
50
+ set_speed!
51
+ return car
66
52
  end
67
53
 
68
- def set_speed
69
- et dolore magna aliqua. Ut enim ad minim veniam,
70
- quis nostrud exercitation ullamco laboris nisi ut
71
- aliquip ex ea commodo
54
+ def car
55
+ @car ||= Car.new
72
56
  end
73
57
 
74
- def start_car
75
- consequat. Duis aute irure dolor in reprehenderit in voluptate
76
- cillum dolore eu fugiat nulla pariatur. Excepteur
77
- proident, sunt in culpa qui officia deserunt mollit anim
58
+ def find_location!
59
+ car.location = GoogleMaps.find(@location)
78
60
  end
79
61
 
80
- def go
81
- id est laborum.
62
+ def start_car!
63
+ car.start!
82
64
  end
83
65
 
66
+ def set_speed!
67
+ car.speed = @speed
68
+ end
84
69
 
85
70
  end
86
71
 
87
72
  def drive_to location, speed=:slow
88
- DriveTo.call(location, speed)
73
+ DriveTo.call(:location => location, :speed => speed)
89
74
  end
90
75
 
91
76
  end
data/lib/method_object.rb CHANGED
@@ -1,12 +1,19 @@
1
- require File.expand_path('../method_object/version', __FILE__)
1
+ require 'simple_struct'
2
2
 
3
- class MethodObject
3
+ class MethodObject < SimpleStruct
4
+
5
+ VERSION = "0.0.3"
4
6
 
5
7
  class << self
6
8
 
7
- private :new
9
+ def new *members, &block
10
+ subclass = super(*members, &block)
11
+ subclass.send(:private_class_method, :new)
12
+ subclass
13
+ end
14
+
8
15
  def call *args
9
- new.call(*args)
16
+ new(*args).call
10
17
  end
11
18
 
12
19
  def to_proc
@@ -22,9 +29,9 @@ eval <<-RUBY if $0 == __FILE__
22
29
  require 'test/unit'
23
30
 
24
31
  # example method objects
25
- class FindTreasureChest < MethodObject
26
- def call *args
27
- args + [:treasure_chest]
32
+ FindTreasureChest = MethodObject.new(:color, :size) do
33
+ def call
34
+ [@color, @size, :treasure_chest]
28
35
  end
29
36
  end
30
37
 
@@ -35,17 +42,18 @@ class MethodObjectTestUnitTestCase < Test::Unit::TestCase
35
42
  assert_raises(NoMethodError){ FindTreasureChest.new }
36
43
  end
37
44
 
38
- def test_unknown_options
39
- assert_equal FindTreasureChest.call, [:treasure_chest]
40
- end
41
-
42
45
  def test_that_expected_options_are_ok
43
- assert_equal FindTreasureChest.call(:a, :size => 42), [:a, {:size => 42}, :treasure_chest]
46
+ run_proc_tests FindTreasureChest
44
47
  end
45
48
 
46
49
  def test_to_proc
47
- assert_equal FindTreasureChest.to_proc.call, [:treasure_chest]
48
- assert_equal FindTreasureChest.to_proc.call(:foo), [:foo, :treasure_chest]
50
+ run_proc_tests FindTreasureChest.to_proc
51
+ end
52
+
53
+ def run_proc_tests proc
54
+ assert_equal proc.call, [nil, nil, :treasure_chest]
55
+ assert_equal proc.call(:red), [:red, nil, :treasure_chest]
56
+ assert_equal proc.call(:red, 42), [:red, 42, :treasure_chest]
49
57
  end
50
58
 
51
59
  end
@@ -1,5 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/method_object/version', __FILE__)
2
+ require File.expand_path('../lib/method_object', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ["Jared Grippe"]
@@ -14,4 +14,6 @@ Gem::Specification.new do |gem|
14
14
  gem.name = "method_object"
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = MethodObject::VERSION
17
+
18
+ gem.add_runtime_dependency "simple_struct"
17
19
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: method_object
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,24 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-30 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2012-11-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: simple_struct
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
14
30
  description: wraps up the method object pattern into a class
15
31
  email:
16
32
  - jared@deadlyicon.com
@@ -24,7 +40,6 @@ files:
24
40
  - README.md
25
41
  - Rakefile
26
42
  - lib/method_object.rb
27
- - lib/method_object/version.rb
28
43
  - method_object.gemspec
29
44
  homepage: https://github.com/deadlyicon/method_object
30
45
  licenses: []
@@ -40,7 +55,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
40
55
  version: '0'
41
56
  segments:
42
57
  - 0
43
- hash: 1473977485945476681
58
+ hash: 296936207624278339
44
59
  required_rubygems_version: !ruby/object:Gem::Requirement
45
60
  none: false
46
61
  requirements:
@@ -49,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
49
64
  version: '0'
50
65
  segments:
51
66
  - 0
52
- hash: 1473977485945476681
67
+ hash: 296936207624278339
53
68
  requirements: []
54
69
  rubyforge_project:
55
70
  rubygems_version: 1.8.24
@@ -1,3 +0,0 @@
1
- class MethodObject
2
- VERSION = "0.0.2"
3
- end