tbpgr_utils 0.0.15 → 0.0.16

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -18,29 +18,30 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
  ### List
21
- | class/module/method | mean |
22
- |:----------- |:------------ |
23
- |TbpgrUtils Array#together |loop all arrays by block |
24
- |TbpgrUtils Array#together_map |together version of Enumerable#map. together_map has aliases [:tmap, :together_collect, :tcollect]|
25
- |TbpgrUtils Array#together_with_index |loop all arrays by block with index |
26
- |AttributesInitializable::ClassMethods.attr_accessor_init|generate attr_accessor + initializer |
27
- |AttributesInitializable::ClassMethods.attr_reader_init |generate attr_reader + initializer |
28
- |AttributesInitializable::ClassMethods.attr_writer init |generate attr_writer + initializer |
29
- |Ghostable module |help to create ghost method(dynamic method define by ussing method_missing + pattern-method-name) |
30
- |TbpgrUtils Kernel#bulk_define_methods |define methods to classes. methods have simple return value. |
31
- |TestToolbox Kernel#capture_stdout |capture STDOUT |
32
- |TestToolbox Kernel#dp_line |debug print line for print-debugging |
33
- |TbpgrUtils Kernel#print_eval |Print code + eval result |
34
- |TbpgrUtils Kernel#puts_eval |Puts code + eval result |
35
- |TbpgrUtils Kernel#bulk_puts_eval |Puts each-line-code + eval result |
36
- |TbpgrUtils Module.alias_methods |create alias methods |
37
- |TbpgrUtils Object#any_of? |if self match any one of items, return true |
38
- |TbpgrUtils Object#boolean? |data type check for boolean |
39
- |TbpgrUtils Object#my_methods |return public/protected/private self define methods |
40
- |TbpgrUtils Object#to_bool |syntax sugar of !!. convert [false, nil] => fasel, other => true. |
41
- |TbpgrUtils String#justify_table |justify pipe format table string |
42
- |Templatable module |get result from template + placeholder |
43
- |TemplateMethodable module |for Template Method Pattern |
21
+ | class/module/method | mean |
22
+ |:----------- |:------------ |
23
+ |TbpgrUtils Array#together |loop all arrays by block |
24
+ |TbpgrUtils Array#together_map |together version of Enumerable#map. together_map has aliases [:tmap, :together_collect, :tcollect] |
25
+ |TbpgrUtils Array#together_select |together version of Enumerable#select. together_select has aliases [:tselect, :together_find_all, :tfindall]|
26
+ |TbpgrUtils Array#together_with_index |loop all arrays by block with index |
27
+ |AttributesInitializable::ClassMethods.attr_accessor_init|generate attr_accessor + initializer |
28
+ |AttributesInitializable::ClassMethods.attr_reader_init |generate attr_reader + initializer |
29
+ |AttributesInitializable::ClassMethods.attr_writer init |generate attr_writer + initializer |
30
+ |Ghostable module |help to create ghost method(dynamic method define by ussing method_missing + pattern-method-name) |
31
+ |TbpgrUtils Kernel#bulk_define_methods |define methods to classes. methods have simple return value. |
32
+ |TestToolbox Kernel#capture_stdout |capture STDOUT |
33
+ |TestToolbox Kernel#dp_line |debug print line for print-debugging |
34
+ |TbpgrUtils Kernel#print_eval |Print code + eval result |
35
+ |TbpgrUtils Kernel#puts_eval |Puts code + eval result |
36
+ |TbpgrUtils Kernel#bulk_puts_eval |Puts each-line-code + eval result |
37
+ |TbpgrUtils Module.alias_methods |create alias methods |
38
+ |TbpgrUtils Object#any_of? |if self match any one of items, return true |
39
+ |TbpgrUtils Object#boolean? |data type check for boolean |
40
+ |TbpgrUtils Object#my_methods |return public/protected/private self define methods |
41
+ |TbpgrUtils Object#to_bool |syntax sugar of !!. convert [false, nil] => fasel, other => true. |
42
+ |TbpgrUtils String#justify_table |justify pipe format table string |
43
+ |Templatable module |get result from template + placeholder |
44
+ |TemplateMethodable module |for Template Method Pattern |
44
45
 
45
46
  ### Array#together
46
47
  ~~~ruby
@@ -73,6 +74,26 @@ ret = [alpha, numbers].together_map {|first, second|[["#{first}:ret"], ["#{secon
73
74
  print ret # => output [["one:ret", "two:ret", "three:ret"],["1:ret", "2:ret", "3:ret"]]
74
75
  ~~~
75
76
 
77
+ ### Array#together_select(or tselect, together_find_all, tfindall)
78
+ ~~~ruby
79
+ require 'tbpgr_utils'
80
+
81
+ firsts = [1, 2, 3, 4]
82
+ seconds = [4, 2, 3, 1]
83
+ ret = [firsts, seconds].together_select{|first, second|first == second}
84
+ print ret # => output [[2, 3], [2, 3]]
85
+ ~~~
86
+
87
+ if you want to return multi array, following.
88
+ ~~~ruby
89
+ require 'tbpgr_utils'
90
+
91
+ firsts = [1, 2, 3, 4]
92
+ seconds = [4, 2, 3, 1]
93
+ ret = [firsts, seconds].together_select{|first, second|[first.odd?, second.even?]}
94
+ print ret # => output [[1, 3], [4, 2]]
95
+ ~~~
96
+
76
97
  ### Array#together_with_index
77
98
  ~~~ruby
78
99
  require 'tbpgr_utils'
@@ -584,7 +605,7 @@ class BaseDeveloper
584
605
  end
585
606
  end
586
607
 
587
- # sample valid Concrete Class. it raises NotImplementedError.
608
+ # sample valid Concrete Class.
588
609
  class StarDeveloper < BaseDeveloper
589
610
  def easy_coding
590
611
  "complete 1 minutes"
@@ -614,6 +635,7 @@ if you are Sublime Text2 user, you can use snippet for TbpgrUtils.
614
635
  https://github.com/tbpgr/tbpgr_utils_snippets
615
636
 
616
637
  ## History
638
+ * version 0.0.16 : add Array#together_select(or tselect, together_find_all, tfindall)
617
639
  * version 0.0.15 : add Module.alias_methods
618
640
  * version 0.0.14 : add Array#together_map(aliases => [tmap, together_collect, tcollect])
619
641
  * version 0.0.13 : add Array#together_with_index, Kernel#bulk_puts_eval
@@ -1,5 +1,6 @@
1
1
  # encoding: utf-8
2
2
  require 'open_classes/object'
3
+ require 'open_classes/module'
3
4
 
4
5
  # Array
5
6
  class Array
@@ -56,14 +57,37 @@ class Array
56
57
  first.each_with_index do |i_v, i|
57
58
  eval_each_str = get_args_str_for_together i
58
59
  each_ret = instance_eval "yield(#{eval_each_str})"
59
- ret = set_together_each_return(ret, each_ret, i)
60
+ ret = set_together_each_return_map(ret, each_ret, i)
60
61
  end
61
62
  ret
62
63
  end
63
64
 
64
- alias_method :together_collect, :together_map
65
- alias_method :tmap, :together_map
66
- alias_method :tcollect, :together_map
65
+ # Arrays loop together select.
66
+ #
67
+ # if you want to single Array return
68
+ # firsts = [1, 2, 3, 4]
69
+ # seconds = [4, 2, 3, 1]
70
+ # ret = [firsts, seconds].together_select{|first, second|first == second}
71
+ # print ret # => output [[2, 3], [2, 3]]
72
+ #
73
+ # if you want to multi Array return
74
+ # firsts = [1, 2, 3, 4]
75
+ # seconds = [4, 2, 3, 1]
76
+ # ret = [firsts, seconds].together_select{|first, second|[first.odd?, second.even?}
77
+ # print ret # => output [[1, 3], [4, 2]]
78
+ def together_select
79
+ if_not_contain_array_rails_type_error
80
+ ret = []
81
+ first.each_with_index do |i_v, i|
82
+ eval_each_str = get_args_str_for_together i
83
+ each_ret = instance_eval "yield(#{eval_each_str})"
84
+ ret = set_together_each_return_select(ret, each_ret, i)
85
+ end
86
+ ret
87
+ end
88
+
89
+ alias_methods [:together_collect, :tmap, :tcollect], :together_map
90
+ alias_methods [:together_find_all, :tselect, :tfindall], :together_select
67
91
 
68
92
  private
69
93
 
@@ -82,7 +106,7 @@ class Array
82
106
  each_eval.join(',')
83
107
  end
84
108
 
85
- def set_together_each_return(ret, each_ret, index)
109
+ def set_together_each_return_map(ret, each_ret, index)
86
110
  if together_return_multi?(each_ret)
87
111
  size.times { |i|ret << [] } if index == 0
88
112
  (0..(size - 1)).each { |i|ret[i] << each_ret[i] }
@@ -92,6 +116,17 @@ class Array
92
116
  ret
93
117
  end
94
118
 
119
+ def set_together_each_return_select(ret, each_ret, index)
120
+ unless together_return_multi?(each_ret)
121
+ tmp_each_ret = []
122
+ size.times { tmp_each_ret << each_ret }
123
+ each_ret = tmp_each_ret
124
+ end
125
+ size.times { |i|ret << [] } if index == 0
126
+ (0..(size - 1)).each { |i|ret[i] << self[i][index] if each_ret[i] }
127
+ ret
128
+ end
129
+
95
130
  def together_return_multi?(list)
96
131
  (list.class == Array && list.size == size).to_bool
97
132
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Tbpgr Utilities
4
4
  module TbpgrUtils
5
- VERSION = '0.0.15'
5
+ VERSION = '0.0.16'
6
6
  end
@@ -172,4 +172,75 @@ describe Array do
172
172
  end
173
173
  end
174
174
  end
175
+
176
+ context :together_select do
177
+ cases = [
178
+ {
179
+ case_no: 1,
180
+ case_title: 'single valid case',
181
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
182
+ condition: 'first == second',
183
+ method_name: :together_select,
184
+ expected: [[2, 3], [2, 3]],
185
+ },
186
+ {
187
+ case_no: 2,
188
+ case_title: 'multi valid case',
189
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
190
+ condition: '[first.odd?, second.even?]',
191
+ expected: [[1, 3], [4, 2]],
192
+ method_name: :together_select,
193
+ },
194
+ {
195
+ case_no: 3,
196
+ case_title: 'multi valid case',
197
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
198
+ condition: '[first.odd?, second.even?]',
199
+ expected: [[1, 3], [4, 2]],
200
+ method_name: :tselect,
201
+ },
202
+ {
203
+ case_no: 4,
204
+ case_title: 'multi valid case',
205
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
206
+ condition: '[first.odd?, second.even?]',
207
+ expected: [[1, 3], [4, 2]],
208
+ method_name: :together_find_all,
209
+ },
210
+ {
211
+ case_no: 5,
212
+ case_title: 'multi valid case',
213
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
214
+ condition: '[first.odd?, second.even?]',
215
+ expected: [[1, 3], [4, 2]],
216
+ method_name: :tfindall,
217
+ },
218
+ ]
219
+
220
+ cases.each do |c|
221
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
222
+ begin
223
+ case_before c
224
+
225
+ # -- given --
226
+ # nothing
227
+
228
+ # -- when/then --
229
+ actual = c[:inputs].method(c[:method_name]).call { |first, second| eval c[:condition], binding }
230
+
231
+ expect(actual).to eq(c[:expected])
232
+ ensure
233
+ case_after c
234
+ end
235
+ end
236
+
237
+ def case_before(c)
238
+ # implement each case before
239
+ end
240
+
241
+ def case_after(c)
242
+ # implement each case after
243
+ end
244
+ end
245
+ end
175
246
  end
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.15
4
+ version: 0.0.16
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-22 00:00:00.000000000 Z
12
+ date: 2014-01-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &21078144 !ruby/object:Gem::Requirement
16
+ requirement: &21415440 !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: *21078144
24
+ version_requirements: *21415440
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &21077832 !ruby/object:Gem::Requirement
27
+ requirement: &20573484 !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: *21077832
35
+ version_requirements: *20573484
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &21077604 !ruby/object:Gem::Requirement
38
+ requirement: &21917292 !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: *21077604
46
+ version_requirements: *21917292
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &21077256 !ruby/object:Gem::Requirement
49
+ requirement: &20384916 !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: *21077256
57
+ version_requirements: *20384916
58
58
  description: Utilities
59
59
  email:
60
60
  - tbpgr@tbpgr.jp