method_struct 0.1.2 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bf459f6ff17c9357b93c8f2fd12103553754c5a9
4
- data.tar.gz: 074b41ab7bcb1d0daa48d58d7d221f695d9d306e
3
+ metadata.gz: 9f926384e2779bb5c2bd6859965c9438f59bc115
4
+ data.tar.gz: 246a7bc57b4a1abeef37da3f806a6d004d797a09
5
5
  SHA512:
6
- metadata.gz: 4bcf42d73fc1c079f13b6ed44e881c6d03d54f4d34ff270da2959c6a9498614e86520dc2a87ea3dd48d283ab9b5061c47d2e4d5a9333ab72393e371a87c49d7f
7
- data.tar.gz: 3dfc15a76521de4d6417d9c9510edcd369fc77c3e9f59ebe7fe7b18f8de441cc0aa1e60ceefbff5190f735b8360d5d1025457494f0d166331ab2977fdbe740b8
6
+ metadata.gz: da994bde0ba1d141d94c0d4adc14bc205f8ef3d0ada6e0d98c6ca96796be733da66b954eb3ae9254c7591e4c21ba576118f314d58db6c8e2922ac080a710271a
7
+ data.tar.gz: 2f02d119ea328144bdb26a664775a27edcffafef83109af3e902aa7cc7ce29ed99f052353d1cecdc4aa8b003bec416b229c9b1a685ac1e68d3040a39f4c7d014
data/.travis.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.1.1
3
4
  - 2.1.0
4
5
  - 2.0.0
5
6
  - 1.9.3
data/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+ 0.1.3
2
+ + Make it possible to call MethodStructs using [] like regular lambdas
3
+
1
4
  0.1.1
2
5
  + Implement #eql? in terms of #==
3
6
 
data/README.md CHANGED
@@ -25,56 +25,58 @@ Or install it yourself as:
25
25
  Say you have this:
26
26
 
27
27
  ```ruby
28
- class UsersController
29
- def create
30
- User.create(:email => params[:email], :name => params[:name])
31
- Mailer.registration_email(params[:email]).deliver
32
- end
33
- end
28
+ class UsersController
29
+ def create
30
+ User.create(:email => params[:email], :name => params[:name])
31
+ Mailer.registration_email(params[:email]).deliver
32
+ end
33
+ end
34
34
  ```
35
35
 
36
36
  You can change it into this:
37
37
 
38
38
  ```ruby
39
- class Registrator < MethodStruct.new(:email, :name)
40
- def call
41
- create_user!
42
- send_email!
43
- end
44
-
45
- private
46
- def create_user!
47
- User.create(:email => email, :name => name)
48
- end
49
-
50
- def send_email!
51
- Mailer.registration_email(:email).deliver
52
- end
53
- end
54
-
55
- class UsersController
56
- def create
57
- Registrator.call(params[:email], params[:name])
58
- # Or
59
- Registrator.call(:email => params[:email], :name => params[:name])
60
- end
61
- end
39
+ Registrator = MethodStruct.new(:email, :name) do
40
+ def call
41
+ create_user!
42
+ send_email!
43
+ end
44
+
45
+ private
46
+ def create_user!
47
+ User.create(:email => email, :name => name)
48
+ end
49
+
50
+ def send_email!
51
+ Mailer.registration_email(:email).deliver
52
+ end
53
+ end
54
+
55
+ class UsersController
56
+ def create
57
+ Registrator.call(params[:email], params[:name])
58
+ # Or
59
+ Registrator.call(:email => params[:email], :name => params[:name])
60
+ # Or - thanks to ruby changing [] into .call
61
+ Registrator[params[:email], params[:name]]
62
+ end
63
+ end
62
64
  ```
63
65
 
64
66
  You can also specify a different method name like so:
65
67
 
66
68
  ```ruby
67
- class Registrator < MethodStruct.new(:email, :name, :method_name => :register)
68
- def register
69
- # ...
70
- end
71
- end
72
-
73
- class UsersController
74
- def create
75
- Registrator.register(params[:email], params[:name])
76
- end
77
- end
69
+ Registrator = MethodStruct.new(:email, :name, :method_name => :register) do
70
+ def register
71
+ # ...
72
+ end
73
+ end
74
+
75
+ class UsersController
76
+ def create
77
+ Registrator.register(params[:email], params[:name])
78
+ end
79
+ end
78
80
  ```
79
81
 
80
82
  One hopes the benefits will be more obvious for more complex methods
data/lib/method_struct.rb CHANGED
@@ -16,6 +16,11 @@ module MethodStruct
16
16
  define_method(method_name) do |*field_values|
17
17
  new(*field_values).send(method_name)
18
18
  end
19
+ alias_method :[], method_name
20
+ end
21
+
22
+ define_method(:[]) do
23
+ send(method_name)
19
24
  end
20
25
 
21
26
  define_method(:initialize) do |*values|
@@ -1,3 +1,3 @@
1
1
  module MethodStruct
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -26,6 +26,16 @@ describe MethodStruct do
26
26
  create_poker(verifier).call(:x => argument1, :y => argument2)
27
27
  end
28
28
 
29
+ it "creates a [] version of the call method" do
30
+ verifier.should_receive(:poke).with(argument1, argument2)
31
+ create_poker(verifier)[:x => argument1, :y => argument2]
32
+ end
33
+
34
+ it "creates a [] instance version of the call method" do
35
+ verifier.should_receive(:poke).with(argument1, argument2)
36
+ create_poker(verifier).new(:x => argument1, :y => argument2)[]
37
+ end
38
+
29
39
  it "can change the name of the main method" do
30
40
  verifier.should_receive(:poke).with(argument1, argument2)
31
41
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: method_struct
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paweł Obrok
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-14 00:00:00.000000000 Z
11
+ date: 2014-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler