tbpgr_utils 0.0.5 → 0.0.6

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
@@ -18,7 +18,7 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
  ### List
21
- | dsl| mean|
21
+ | class/module/method| mean|
22
22
  |:-----------|:------------|
23
23
  |Array#together|loop all arrays by block|
24
24
  |Object#any_of?|if self match any one of items, return true|
@@ -26,7 +26,8 @@ Or install it yourself as:
26
26
  |Object#my_methods|return public/protected/private self define methods|
27
27
  |String#justify_table|justify pipe format table string|
28
28
  |AttributesInitializable::ClassMethods.attr_accessor_init|generate attr_accessors + initializer|
29
- |Templatable|get result from template + placeholder|
29
+ |Templatable module|get result from template + placeholder|
30
+ |Ghostable module|help to create ghost method(dynamic method define by ussing method_missing + pattern-method-name)|
30
31
 
31
32
  ### Array#together
32
33
  ~~~ruby
@@ -183,7 +184,54 @@ line1:hoge-sample
183
184
  line2:hige-sample
184
185
  ~~~
185
186
 
187
+ ### Ghostable
188
+ * include Ghostable
189
+ * create ghost method by using Ghostable::ghost_method
190
+ * ghost_method first_args = method_name_pattern
191
+ * ghost_method second_args = method_base_name Symbol(using in Ghostable internal logic)
192
+ * ghost_method third = block. this block is main logic. block can use args[method_name, *args, &block]
193
+
194
+ sample ghost method define module.
195
+ ~~~ruby
196
+ module Checkable
197
+ include Ghostable
198
+ ghost_method /check_range_.*\?$/, :check_range do |method_name, *args, &block|
199
+ method_name.to_s =~ /(check_range_)(\d+)(_to_)(\d*)/
200
+ from = $2.to_i
201
+ to = $4.to_i
202
+ value = args.first
203
+ (from..to).include? value
204
+ end
205
+
206
+ ghost_method /^contain_.*\?$/, :check_contain do |method_name, *args, &block|
207
+ method_name.to_s =~ /^(contain_)(.*)(\?)/
208
+ word = $2
209
+ value = args.first
210
+ value.include? word
211
+ end
212
+ end
213
+ ~~~
214
+
215
+ * use ghost method
216
+
217
+ sample ghost method use class
218
+ ~~~ruby
219
+ class SampleChecker
220
+ include Checkable
221
+ end
222
+
223
+ sample = SampleChecker.new
224
+ sample.check_range_3_to_5?(4) # => return true
225
+ sample.check_range_3_to_5?(6) # => return false
226
+ sample.check_range_3_to_6?(6) # => return true
227
+
228
+ sample.contain_hoge? "test_hoge_test" # => return true
229
+ sample.contain_hoge? "test_hige_test" # => return false
230
+ sample.contain_hige? "test_hige_test" # => return true
231
+ ~~~
232
+
186
233
  ## History
234
+ * version 0.0.6 : add Ghostable
187
235
  * version 0.0.5 : add Templatable
188
236
  * version 0.0.4 : AttributesInitializable::ClassMethods.attr_accessor_init
189
237
  * version 0.0.3 : add Object#any_of?
data/lib/ghostable.rb ADDED
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+ require "active_support/concern"
3
+
4
+ module Ghostable
5
+ extend ActiveSupport::Concern
6
+
7
+ module ClassMethods
8
+ def ghost_method(pattern, basename, &ghost_block)
9
+ define_method basename do |method_name, *args, &block|
10
+ self.class.class_eval {ghost_block.call(method_name, *args, &block)}
11
+ end
12
+
13
+ @patterns ||= {}
14
+ @patterns[basename] = pattern
15
+ tmp_patterns = @patterns.dup
16
+ define_method :get_patterns do
17
+ tmp_patterns
18
+ end
19
+ end
20
+ end
21
+
22
+ def method_missing(method_name, *args, &block)
23
+ get_patterns.each do |basename, pattern|
24
+ return method(basename).call(method_name, *args, &block) if method_name.to_s.match /#{pattern}/
25
+ end
26
+ super
27
+ end
28
+ end
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Tbpgr Utilities
4
4
  module TbpgrUtils
5
- VERSION = '0.0.5'
5
+ VERSION = '0.0.6'
6
6
  end
@@ -0,0 +1,80 @@
1
+ # encoding: utf-8
2
+ require "spec_helper"
3
+ require "ghostable"
4
+
5
+ describe Ghostable do
6
+ context :ghost_method do
7
+ module Checkable
8
+ include Ghostable
9
+ ghost_method /check_range_.*\?$/, :check_range do |method_name, *args, &block|
10
+ method_name.to_s =~ /(check_range_)(\d+)(_to_)(\d*)/
11
+ from = $2.to_i
12
+ to = $4.to_i
13
+ value = args.first
14
+ (from..to).include? value
15
+ end
16
+
17
+ ghost_method /^contain_.*\?$/, :check_contain do |method_name, *args, &block|
18
+ method_name.to_s =~ /^(contain_)(.*)(\?)/
19
+ word = $2
20
+ value = args.first
21
+ value.include? word
22
+ end
23
+ end
24
+
25
+ class SampleChecker
26
+ include Checkable
27
+ end
28
+
29
+ cases = [
30
+ {
31
+ case_no: 1,
32
+ case_title: "valid case",
33
+ klass: SampleChecker,
34
+ methods: [:check_range_3_to_5?, :check_range_3_to_5? ,:contain_hoge?, :contain_hoge?],
35
+ values: [3, 6, "testhogetest", "testhigetest"],
36
+ expecteds: [true, false, true, false],
37
+ },
38
+ {
39
+ case_no: 2,
40
+ case_title: "method_missing case",
41
+ klass: SampleChecker,
42
+ methods: [:not_match_method],
43
+ values: [nil],
44
+ expect_error: true
45
+ },
46
+ ]
47
+
48
+ cases.each do |c|
49
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
50
+ begin
51
+ case_before c
52
+
53
+ # -- given --
54
+ instance = c[:klass].new
55
+
56
+ c[:methods].each_with_index do |method_name, index|
57
+ if c[:expect_error]
58
+ lambda { instance.send(method_name, c[:values][index]) }.should raise_error(StandardError)
59
+ next
60
+ end
61
+ # -- when --
62
+ actual = instance.send(method_name, c[:values][index])
63
+ # -- then --
64
+ expect(actual).to eq(c[:expecteds][index])
65
+ end
66
+ ensure
67
+ case_after c
68
+ end
69
+ end
70
+
71
+ def case_before(c)
72
+ # implement each case before
73
+ end
74
+
75
+ def case_after(c)
76
+ # implement each case after
77
+ end
78
+ end
79
+ end
80
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  # encoding: utf-8
2
+ require 'simplecov'
3
+ SimpleCov.start
2
4
  RSpec.configure do |config|
3
5
  config.treat_symbols_as_metadata_keys_with_true_values = true
4
6
  config.run_all_when_everything_filtered = true
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tbpgr_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-09 00:00:00.000000000 Z
12
+ date: 2014-01-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &24536892 !ruby/object:Gem::Requirement
16
+ requirement: &28366236 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 4.0.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *24536892
24
+ version_requirements: *28366236
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &24536604 !ruby/object:Gem::Requirement
27
+ requirement: &28365948 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '1.3'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *24536604
35
+ version_requirements: *28365948
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &24536376 !ruby/object:Gem::Requirement
38
+ requirement: &28365720 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *24536376
46
+ version_requirements: *28365720
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &24536052 !ruby/object:Gem::Requirement
49
+ requirement: &28365396 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: 2.14.1
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *24536052
57
+ version_requirements: *28365396
58
58
  description: Utilities
59
59
  email:
60
60
  - tbpgr@tbpgr.jp
@@ -69,6 +69,7 @@ files:
69
69
  - README.md
70
70
  - Rakefile
71
71
  - lib/attributes_initializable.rb
72
+ - lib/ghostable.rb
72
73
  - lib/open_classes/array.rb
73
74
  - lib/open_classes/object.rb
74
75
  - lib/open_classes/string.rb
@@ -77,6 +78,7 @@ files:
77
78
  - lib/templatable.rb
78
79
  - spec/array_spec.rb
79
80
  - spec/attributes_initializable_spec.rb
81
+ - spec/ghostable_spec.rb
80
82
  - spec/object_spec.rb
81
83
  - spec/spec_helper.rb
82
84
  - spec/string_spec.rb
@@ -110,6 +112,7 @@ summary: Utilities
110
112
  test_files:
111
113
  - spec/array_spec.rb
112
114
  - spec/attributes_initializable_spec.rb
115
+ - spec/ghostable_spec.rb
113
116
  - spec/object_spec.rb
114
117
  - spec/spec_helper.rb
115
118
  - spec/string_spec.rb