method_annotation 0.1.2 → 0.2.0

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: 1a9e76c2d6126d4625f6c6ef4f06bd20db5e5a1c
4
- data.tar.gz: fb858b5b634e8cf573ec958a7311504895cd3135
3
+ metadata.gz: ccbcf52da5ae78b9dc4247f8a47651ff8ae1affb
4
+ data.tar.gz: 0dcb7534c809472149aea6d53b9eb4211bd59b4c
5
5
  SHA512:
6
- metadata.gz: 681b3d844bf7209df5e66047a54d8891f3279cb6d219dfff315a4a2eb577b2201bd162d224ba941f3d8151c8fb54557e7107d42ea22da4385fbe373aa3d722d1
7
- data.tar.gz: aa01c3b9be3845d05c64b33b912f7ed614f2294c31888cafc717c194fe33f2982ad938c7f6020a5d1d7d09de252a3715d6ece3fd50c401c7dcef8bac28f7769a
6
+ metadata.gz: c4cb2e87f0d78c735fa06c60553a81e1c5a5c98a538c3252f7b4c30a19e86b163987b0959deb6f31a627c68dcdee7ed26a58ff1225cc6ae648baf8842aac0320
7
+ data.tar.gz: b33092ed50a8bd725dcab2efef12c7207696184b0b9f305483a9cf89fa8adf1319715c42d9623936e4f064d220fb523fe3817655db5f556af030709e9416261a
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- method_annotation (0.1.2)
4
+ method_annotation (0.2.0)
5
5
  activesupport (~> 4.2.3)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # MethodAnnotation
2
2
 
3
- MethodAnnotation You can define the Chuwake function method.
3
+ MethodAnnotation You can define the annotation function method.
4
4
  Note translation function can also be added simply tagged to only cross-processing from applications.
5
5
 
6
6
  ## Installation
@@ -41,15 +41,15 @@ You can define an annotation in this way
41
41
 
42
42
 
43
43
  About MethodAnnotation
44
- - .describe .description
44
+ - .describe .describe=
45
45
 
46
46
  You can set forth a description
47
47
 
48
48
  class MyMethodAnnotation < MethodAnnotation::Base
49
- describe 'sample annotation'
49
+ self.describe = 'sample annotation'
50
50
  end
51
51
 
52
- MyMethodAnnotation.description
52
+ MyMethodAnnotation.describe
53
53
  => "sample annotation"
54
54
 
55
55
  - .list
@@ -115,8 +115,10 @@ About MethodAnnotation
115
115
  # original is proc methods of target
116
116
  around do |original, *args|
117
117
  puts 'before'
118
- original.call(*args)
118
+ return_value = original.call(*args)
119
119
  puts 'after'
120
+
121
+ return_value
120
122
  end
121
123
  end
122
124
 
@@ -137,7 +139,7 @@ About MethodAnnotation
137
139
  Example1
138
140
 
139
141
  class PutsArg < MethodAnnotation::Base
140
- describe 'output the arguments of the method'
142
+ self.describe = 'output the arguments of the method'
141
143
 
142
144
  before do |*args|
143
145
  puts '-------args-------'
@@ -146,7 +148,7 @@ Example1
146
148
  end
147
149
  end
148
150
 
149
- PutsArg.description
151
+ PutsArg.describe
150
152
  => "output the arguments of the method"
151
153
 
152
154
  class Foo
@@ -180,12 +182,14 @@ Example1
180
182
  Example2
181
183
 
182
184
  class TimeMeasurement < MethodAnnotation::Base
183
- describe 'measure the processing time of the method'
185
+ self.describe = 'measure the processing time of the method'
184
186
 
185
187
  around do |original, *args|
186
188
  start = Time.now
187
- original.call(*args)
189
+ return_value = original.call(*args)
188
190
  puts "#{Time.now - start} sec"
191
+
192
+ return_value
189
193
  end
190
194
  end
191
195
 
@@ -204,7 +208,7 @@ Example2
204
208
  Example3
205
209
 
206
210
  class ArgsToString < MethodAnnotation::Base
207
- describe 'convert the arguments to string'
211
+ self.describe = 'convert the arguments to string'
208
212
 
209
213
  around do |original, *args|
210
214
  original.call(*args.map(&:to_s))
@@ -5,15 +5,7 @@ require 'active_support/core_ext'
5
5
  module MethodAnnotation
6
6
  class Base
7
7
  class << self
8
- attr_accessor :before_procs, :after_procs, :around_procs, :list
9
-
10
- def describe(desc)
11
- @desc = desc
12
- end
13
-
14
- def description
15
- @desc
16
- end
8
+ attr_accessor :before_procs, :after_procs, :around_procs, :list, :annotation_name, :describe
17
9
 
18
10
  def before(&block)
19
11
  (@before_procs ||= []) << block
@@ -70,11 +62,12 @@ module MethodAnnotation
70
62
  chain = annotation_map[:around_procs].reverse.inject(original) do |block_chain, blk|
71
63
  ->(*params) { instance_exec(block_chain, *params, &blk) }
72
64
  end
73
- instance_exec(*args, &chain)
65
+ return_value = instance_exec(*args, &chain)
74
66
  else
75
- original.call(*args)
67
+ return_value = original.call(*args)
76
68
  end
77
69
  annotation_map[:after_procs].try(:each) { |blk| instance_exec(*args, &blk) }
70
+ return_value
78
71
  end
79
72
 
80
73
  end
@@ -83,7 +76,11 @@ module MethodAnnotation
83
76
  end
84
77
 
85
78
  def method_missing(method, *args)
86
- annotation = MethodAnnotation::Base.subclasses.find { |c| c.name == method.to_s.classify }
79
+ annotation = MethodAnnotation::Base.subclasses.find do |c|
80
+ puts method
81
+ puts c.annotation_name
82
+ c.annotation_name == method.to_s || (c.name == method.to_s.classify)
83
+ end
87
84
  if annotation
88
85
  (@_annotations ||= []) << annotation
89
86
  else
@@ -0,0 +1,16 @@
1
+ module MethodAnnotation
2
+ class Cache < Base
3
+ self.annotation_name = 'cache'
4
+ self.describe = 'It is cached after the second time the execution result of the method is returned from the cache'
5
+
6
+ around do |original, *args|
7
+ @__chached ||= {}
8
+
9
+ key = "#{self.class}__#{__method__}".to_sym
10
+ @__chached[key] = original.call(*args) unless @__chached.key?(key)
11
+
12
+ @__chached[key]
13
+ end
14
+ end
15
+ end
16
+
@@ -1,3 +1,3 @@
1
1
  module MethodAnnotation
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: method_annotation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - masatoshi-watanuki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-11 00:00:00.000000000 Z
11
+ date: 2015-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -81,6 +81,7 @@ files:
81
81
  - bin/console
82
82
  - bin/setup
83
83
  - lib/method_annotation.rb
84
+ - lib/method_annotation/cache.rb
84
85
  - lib/method_annotation/version.rb
85
86
  - method_annotation.gemspec
86
87
  homepage: https://github.com/masatoshi-watanuki/gems/tree/master/method_annotation