method_object 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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