tbpgr_utils 0.0.13 → 0.0.14
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 +43 -21
- data/lib/attributes_initializable.rb +1 -1
- data/lib/open_classes/array.rb +60 -11
- data/lib/tbpgr_utils/version.rb +1 -1
- data/spec/attributes_initializable_spec.rb +2 -2
- data/spec/open_classes/array_spec.rb +78 -0
- data/spec/open_classes/kernel_spec.rb +238 -238
- metadata +10 -10
data/README.md
CHANGED
@@ -18,27 +18,28 @@ 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#
|
25
|
-
|
|
26
|
-
|AttributesInitializable::ClassMethods.
|
27
|
-
|AttributesInitializable::ClassMethods.
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|TestToolbox Kernel#
|
32
|
-
|
|
33
|
-
|TbpgrUtils Kernel#
|
34
|
-
|TbpgrUtils Kernel#
|
35
|
-
|TbpgrUtils
|
36
|
-
|TbpgrUtils Object#
|
37
|
-
|TbpgrUtils Object#
|
38
|
-
|TbpgrUtils Object#
|
39
|
-
|TbpgrUtils
|
40
|
-
|
|
41
|
-
|
|
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 Object#any_of? |if self match any one of items, return true |
|
37
|
+
|TbpgrUtils Object#boolean? |data type check for boolean |
|
38
|
+
|TbpgrUtils Object#my_methods |return public/protected/private self define methods |
|
39
|
+
|TbpgrUtils Object#to_bool |syntax sugar of !!. convert [false, nil] => fasel, other => true. |
|
40
|
+
|TbpgrUtils String#justify_table |justify pipe format table string |
|
41
|
+
|Templatable module |get result from template + placeholder |
|
42
|
+
|TemplateMethodable module |for Template Method Pattern |
|
42
43
|
|
43
44
|
### Array#together
|
44
45
|
~~~ruby
|
@@ -51,6 +52,26 @@ numbers = %w{1 2 3}
|
|
51
52
|
end
|
52
53
|
~~~
|
53
54
|
|
55
|
+
### Array#together_map(or tmap, together_collect, tcollect)
|
56
|
+
~~~ruby
|
57
|
+
require 'tbpgr_utils'
|
58
|
+
|
59
|
+
alpha = %w{one two three}
|
60
|
+
numbers = %w{1 2 3}
|
61
|
+
ret = [alpha, numbers].together_map {|first, second|"#{first}:#{second}"}
|
62
|
+
print ret # => output [one:1, two:2, three:3]
|
63
|
+
~~~
|
64
|
+
|
65
|
+
if you want to return multi array, following.
|
66
|
+
~~~ruby
|
67
|
+
require 'tbpgr_utils'
|
68
|
+
|
69
|
+
alpha = %w{one two three}
|
70
|
+
numbers = %w{1 2 3}
|
71
|
+
ret = [alpha, numbers].together_map {|first, second|[["#{first}:ret"], ["#{second}:ret"]]}
|
72
|
+
print ret # => output [["one:ret", "two:ret", "three:ret"],["1:ret", "2:ret", "3:ret"]]
|
73
|
+
~~~
|
74
|
+
|
54
75
|
### Array#together_with_index
|
55
76
|
~~~ruby
|
56
77
|
require 'tbpgr_utils'
|
@@ -559,6 +580,7 @@ if you are Sublime Text2 user, you can use snippet for TbpgrUtils.
|
|
559
580
|
https://github.com/tbpgr/tbpgr_utils_snippets
|
560
581
|
|
561
582
|
## History
|
583
|
+
* version 0.0.14 : add Array#together_map(aliases => [tmap, together_collect, tcollect])
|
562
584
|
* version 0.0.13 : add Array#together_with_index, Kernel#bulk_puts_eval
|
563
585
|
* version 0.0.12 : AttributesInitializable::ClassMethods.attr_reader_init,attr_writer_init
|
564
586
|
* version 0.0.11 : add Object#to_bool.
|
@@ -57,7 +57,7 @@ module AttributesInitializable
|
|
57
57
|
define_method :initialize do |values = nil, &block|
|
58
58
|
return block.call self if block
|
59
59
|
# symbols.each { |symbol|send("#{symbol.to_s}=", values[symbol]) }
|
60
|
-
symbols.each { |symbol|
|
60
|
+
symbols.each { |symbol|instance_variable_set("@#{symbol.to_s}", values[symbol]) }
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
data/lib/open_classes/array.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
require 'open_classes/object'
|
2
3
|
|
3
4
|
# Array
|
4
5
|
class Array
|
@@ -12,11 +13,7 @@ class Array
|
|
12
13
|
def together
|
13
14
|
if_not_contain_array_rails_type_error
|
14
15
|
first.each_with_index do |i_v, i|
|
15
|
-
|
16
|
-
each_with_index do |j_v, j|
|
17
|
-
eval_each << "self[#{j}][#{i}]"
|
18
|
-
end
|
19
|
-
eval_each_str = eval_each.join(',')
|
16
|
+
eval_each_str = get_args_str_for_together i
|
20
17
|
instance_eval "yield(#{eval_each_str})"
|
21
18
|
end
|
22
19
|
end
|
@@ -31,19 +28,71 @@ class Array
|
|
31
28
|
def together_with_index
|
32
29
|
if_not_contain_array_rails_type_error
|
33
30
|
first.each_with_index do |i_v, i|
|
34
|
-
|
35
|
-
each_with_index do |j_v, j|
|
36
|
-
eval_each << "self[#{j}][#{i}]"
|
37
|
-
end
|
38
|
-
eval_each << i
|
39
|
-
eval_each_str = eval_each.join(',')
|
31
|
+
eval_each_str = get_args_str_for_together i, true
|
40
32
|
instance_eval "yield(#{eval_each_str})"
|
41
33
|
end
|
42
34
|
end
|
43
35
|
|
36
|
+
# Arrays together map.
|
37
|
+
#
|
38
|
+
# together_map has aliases [:tmap, :together_collect, :tcollect]
|
39
|
+
#
|
40
|
+
# if you want to single Array return
|
41
|
+
# alpha = %w{one two three}
|
42
|
+
# numbers = %w{1 2 3}
|
43
|
+
# print [alpha, numbers].together_map do |first, second|
|
44
|
+
# "#{first}:#{second}\n"
|
45
|
+
# end # => output one:1, two:2, three:3
|
46
|
+
#
|
47
|
+
# if you want to multi Array return
|
48
|
+
# alpha = %w{one two three}
|
49
|
+
# numbers = %w{1 2 3}
|
50
|
+
# print [alpha, numbers].together_map do |first, second|
|
51
|
+
# ["#{first}:#{second}", "#{second}:#{first}"]
|
52
|
+
# end # => output [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']]
|
53
|
+
def together_map
|
54
|
+
if_not_contain_array_rails_type_error
|
55
|
+
ret = []
|
56
|
+
first.each_with_index do |i_v, i|
|
57
|
+
eval_each_str = get_args_str_for_together i
|
58
|
+
each_ret = instance_eval "yield(#{eval_each_str})"
|
59
|
+
ret = set_together_each_return(ret, each_ret, i)
|
60
|
+
end
|
61
|
+
ret
|
62
|
+
end
|
63
|
+
|
64
|
+
alias_method :together_collect, :together_map
|
65
|
+
alias_method :tmap, :together_map
|
66
|
+
alias_method :tcollect, :together_map
|
67
|
+
|
44
68
|
private
|
45
69
|
|
46
70
|
def if_not_contain_array_rails_type_error
|
47
71
|
each { |f|fail TypeError, "you have to use [Array1, Array2, ...] | #{f.class} is invalid" unless f.class == Array }
|
48
72
|
end
|
73
|
+
|
74
|
+
def get_args_for_together(i)
|
75
|
+
eval_each = []
|
76
|
+
each_with_index {|j_v, j|eval_each << "self[#{j}][#{i}]"}
|
77
|
+
eval_each
|
78
|
+
end
|
79
|
+
|
80
|
+
def get_args_str_for_together(i, with_index = false)
|
81
|
+
each_eval = with_index ? get_args_for_together(i) << i : get_args_for_together(i)
|
82
|
+
each_eval.join(',')
|
83
|
+
end
|
84
|
+
|
85
|
+
def set_together_each_return(ret, each_ret, index)
|
86
|
+
if together_return_multi?(each_ret)
|
87
|
+
self.size.times {|i|ret << []} if index == 0
|
88
|
+
(0..(self.size - 1)).each {|i|ret[i] << each_ret[i]}
|
89
|
+
else
|
90
|
+
ret << each_ret
|
91
|
+
end
|
92
|
+
ret
|
93
|
+
end
|
94
|
+
|
95
|
+
def together_return_multi?(list)
|
96
|
+
(list.class == Array && list.size == self.size).to_bool
|
97
|
+
end
|
49
98
|
end
|
data/lib/tbpgr_utils/version.rb
CHANGED
@@ -127,12 +127,12 @@ describe AttributesInitializable do
|
|
127
127
|
reader_sample = nil
|
128
128
|
if c[:block]
|
129
129
|
# -- then --
|
130
|
-
lambda
|
130
|
+
lambda do
|
131
131
|
reader_sample = c[:klass].new do |a|
|
132
132
|
a.atr1 = c[:inputs][:atr1]
|
133
133
|
a.atr2 = c[:inputs][:atr2]
|
134
134
|
end
|
135
|
-
|
135
|
+
end.should raise_error(NoMethodError)
|
136
136
|
next
|
137
137
|
else
|
138
138
|
reader_sample = c[:klass].new atr1: 'atr1', atr2: 'atr2'
|
@@ -94,4 +94,82 @@ describe Array do
|
|
94
94
|
end
|
95
95
|
end
|
96
96
|
end
|
97
|
+
|
98
|
+
context :together_map do
|
99
|
+
cases = [
|
100
|
+
{
|
101
|
+
case_no: 1,
|
102
|
+
case_title: 'valid case',
|
103
|
+
method_name: :together_map,
|
104
|
+
inputs: [[1, 2, 3], %w{one two three}],
|
105
|
+
expected: ['1:one', '2:two', '3:three'],
|
106
|
+
},
|
107
|
+
{
|
108
|
+
case_no: 2,
|
109
|
+
case_title: 'contain nil case',
|
110
|
+
method_name: :together_map,
|
111
|
+
inputs: [[1, 2, 3], %w{one two}],
|
112
|
+
expected: ['1:one', '2:two', '3:'],
|
113
|
+
},
|
114
|
+
{
|
115
|
+
case_no: 3,
|
116
|
+
case_title: 'valid case',
|
117
|
+
method_name: :together_map,
|
118
|
+
inputs: [[1, 2, 3], %w{one two three}],
|
119
|
+
expected: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
|
120
|
+
is_multi: true,
|
121
|
+
},
|
122
|
+
{
|
123
|
+
case_no: 4,
|
124
|
+
case_title: 'valid case(alias together_collect)',
|
125
|
+
method_name: :together_collect,
|
126
|
+
inputs: [[1, 2, 3], %w{one two three}],
|
127
|
+
expected: ['1:one', '2:two', '3:three'],
|
128
|
+
},
|
129
|
+
{
|
130
|
+
case_no: 5,
|
131
|
+
case_title: 'valid case(alias tmap)',
|
132
|
+
method_name: :tmap,
|
133
|
+
inputs: [[1, 2, 3], %w{one two three}],
|
134
|
+
expected: ['1:one', '2:two', '3:three'],
|
135
|
+
},
|
136
|
+
{
|
137
|
+
case_no: 6,
|
138
|
+
case_title: 'valid case(alias tcollect)',
|
139
|
+
method_name: :tcollect,
|
140
|
+
inputs: [[1, 2, 3], %w{one two three}],
|
141
|
+
expected: ['1:one', '2:two', '3:three'],
|
142
|
+
},
|
143
|
+
]
|
144
|
+
|
145
|
+
cases.each do |c|
|
146
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
147
|
+
begin
|
148
|
+
case_before c
|
149
|
+
|
150
|
+
# -- given --
|
151
|
+
# nothing
|
152
|
+
|
153
|
+
# -- when/then --
|
154
|
+
if c[:is_multi]
|
155
|
+
actual = c[:inputs].method(c[:method_name]).call {|first, second|["#{first}:#{second}", "#{second}:#{first}"]}
|
156
|
+
else
|
157
|
+
actual = c[:inputs].method(c[:method_name]).call {|first, second|"#{first}:#{second}"}
|
158
|
+
end
|
159
|
+
|
160
|
+
expect(actual).to eq(c[:expected])
|
161
|
+
ensure
|
162
|
+
case_after c
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
def case_before(c)
|
167
|
+
# implement each case before
|
168
|
+
end
|
169
|
+
|
170
|
+
def case_after(c)
|
171
|
+
# implement each case after
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
97
175
|
end
|
@@ -1,238 +1,238 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
require 'open_classes/kernel'
|
4
|
-
require 'test_toolbox'
|
5
|
-
|
6
|
-
describe Kernel do
|
7
|
-
context :print_eval do
|
8
|
-
cases = [
|
9
|
-
{
|
10
|
-
case_no: 1,
|
11
|
-
case_title: 'no bind case',
|
12
|
-
code: '8/4',
|
13
|
-
expected: '8/4 # => 2',
|
14
|
-
},
|
15
|
-
{
|
16
|
-
case_no: 2,
|
17
|
-
case_title: 'with bind case',
|
18
|
-
code: "\"hoge-\#{message}\"",
|
19
|
-
bind: 'msg',
|
20
|
-
expected: "\"hoge-\#{message}\" # => \"hoge-msg\"",
|
21
|
-
},
|
22
|
-
]
|
23
|
-
|
24
|
-
cases.each do |c|
|
25
|
-
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
26
|
-
begin
|
27
|
-
case_before c
|
28
|
-
|
29
|
-
# -- given --
|
30
|
-
message = c[:bind] if c[:bind]
|
31
|
-
|
32
|
-
# -- when --
|
33
|
-
actual = capture_stdout { print_eval c[:code], binding }
|
34
|
-
|
35
|
-
# -- then --
|
36
|
-
expect(actual).to eq(c[:expected])
|
37
|
-
ensure
|
38
|
-
case_after c
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def case_before(c)
|
43
|
-
# implement each case before
|
44
|
-
end
|
45
|
-
|
46
|
-
def case_after(c)
|
47
|
-
# implement each case after
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
context :puts_eval do
|
53
|
-
cases = [
|
54
|
-
{
|
55
|
-
case_no: 1,
|
56
|
-
case_title: 'no bind case',
|
57
|
-
code: '8/4',
|
58
|
-
expected: "8/4 # => 2\n",
|
59
|
-
},
|
60
|
-
{
|
61
|
-
case_no: 2,
|
62
|
-
case_title: 'with bind case',
|
63
|
-
code: '"hoge-#{message}"',
|
64
|
-
bind: 'msg',
|
65
|
-
expected: '"hoge-#{message}" # => "hoge-msg"' + "\n",
|
66
|
-
},
|
67
|
-
]
|
68
|
-
|
69
|
-
cases.each do |c|
|
70
|
-
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
71
|
-
begin
|
72
|
-
case_before c
|
73
|
-
|
74
|
-
# -- given --
|
75
|
-
message = c[:bind] if c[:bind]
|
76
|
-
|
77
|
-
# -- when --
|
78
|
-
actual = capture_stdout { puts_eval c[:code], binding }
|
79
|
-
|
80
|
-
# -- then --
|
81
|
-
expect(actual).to eq(c[:expected])
|
82
|
-
ensure
|
83
|
-
case_after c
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def case_before(c)
|
88
|
-
# implement each case before
|
89
|
-
end
|
90
|
-
|
91
|
-
def case_after(c)
|
92
|
-
# implement each case after
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
context :bulk_define_methods do
|
98
|
-
cases = [
|
99
|
-
{
|
100
|
-
case_no: 1,
|
101
|
-
case_title: 'all Array case',
|
102
|
-
classes: [NilClass, FalseClass],
|
103
|
-
methods: [:blank?, :present?],
|
104
|
-
contents: [true, false],
|
105
|
-
instances: [nil, false],
|
106
|
-
expecteds: [true, false, true, false],
|
107
|
-
},
|
108
|
-
{
|
109
|
-
case_no: 2,
|
110
|
-
case_title: 'Class, String, String case',
|
111
|
-
classes: NilClass,
|
112
|
-
methods: 'hoge',
|
113
|
-
contents: 'ret hoge',
|
114
|
-
instances: [nil],
|
115
|
-
expecteds: ['ret hoge'],
|
116
|
-
},
|
117
|
-
{
|
118
|
-
case_no: 3,
|
119
|
-
case_title: 'invalid classes type case',
|
120
|
-
classes: :NilClass,
|
121
|
-
methods: 'hoge',
|
122
|
-
contents: 'ret hoge',
|
123
|
-
expect_error: true,
|
124
|
-
},
|
125
|
-
{
|
126
|
-
case_no: 4,
|
127
|
-
case_title: 'invalid methods type case',
|
128
|
-
classes: NilClass,
|
129
|
-
methods: 1,
|
130
|
-
contents: 'ret hoge',
|
131
|
-
expect_error: true,
|
132
|
-
},
|
133
|
-
]
|
134
|
-
|
135
|
-
cases.each do |c|
|
136
|
-
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
137
|
-
begin
|
138
|
-
case_before c
|
139
|
-
|
140
|
-
# -- given --
|
141
|
-
# nothing
|
142
|
-
|
143
|
-
# -- when --
|
144
|
-
if c[:expect_error]
|
145
|
-
lambda { bulk_define_methods c[:classes], c[:methods], c[:contents] }.should raise_error(StandardError)
|
146
|
-
next
|
147
|
-
end
|
148
|
-
bulk_define_methods c[:classes], c[:methods], c[:contents]
|
149
|
-
|
150
|
-
# -- then --
|
151
|
-
method_list = c[:methods].is_a?(Array) ? c[:methods] : [c[:methods]]
|
152
|
-
cnt = 0
|
153
|
-
c[:instances].each do |instance|
|
154
|
-
method_list.each do |method_name|
|
155
|
-
expect(instance.method(method_name).call).to eq(c[:expecteds][cnt])
|
156
|
-
cnt += 1
|
157
|
-
end
|
158
|
-
end
|
159
|
-
ensure
|
160
|
-
case_after c
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
def case_before(c)
|
165
|
-
# implement each case before
|
166
|
-
end
|
167
|
-
|
168
|
-
def case_after(c)
|
169
|
-
# implement each case after
|
170
|
-
end
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
context :bluk_puts_eval do
|
175
|
-
BULK_CODE1
|
176
|
-
"hoge-hige1" + "add"
|
177
|
-
"hoge-hige2" + "add"
|
178
|
-
EOS
|
179
|
-
|
180
|
-
BULK_EXPECTED1
|
181
|
-
"hoge-hige1" + "add" # => "hoge-hige1add"
|
182
|
-
"hoge-hige2" + "add" # => "hoge-hige2add"
|
183
|
-
EOS
|
184
|
-
|
185
|
-
BULK_CODE2
|
186
|
-
"hoge-hige1" + "add" + message
|
187
|
-
"hoge-hige2" + "add" + message
|
188
|
-
EOS
|
189
|
-
|
190
|
-
BULK_EXPECTED2
|
191
|
-
"hoge-hige1" + "add" + message # => "hoge-hige1addmsg"
|
192
|
-
"hoge-hige2" + "add" + message # => "hoge-hige2addmsg"
|
193
|
-
EOS
|
194
|
-
|
195
|
-
cases = [
|
196
|
-
{
|
197
|
-
case_no: 1,
|
198
|
-
case_title: 'no bind case',
|
199
|
-
code: BULK_CODE1,
|
200
|
-
expected: BULK_EXPECTED1
|
201
|
-
},
|
202
|
-
{
|
203
|
-
case_no: 2,
|
204
|
-
case_title: 'with bind case',
|
205
|
-
code: BULK_CODE1,
|
206
|
-
bind: 'msg',
|
207
|
-
expected: BULK_EXPECTED1
|
208
|
-
},
|
209
|
-
]
|
210
|
-
|
211
|
-
cases.each do |c|
|
212
|
-
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
213
|
-
begin
|
214
|
-
case_before c
|
215
|
-
|
216
|
-
# -- given --
|
217
|
-
message = c[:bind] if c[:bind]
|
218
|
-
|
219
|
-
# -- when --
|
220
|
-
actual = capture_stdout { bulk_puts_eval binding, c[:code] }
|
221
|
-
|
222
|
-
# -- then --
|
223
|
-
expect(actual).to eq(c[:expected])
|
224
|
-
ensure
|
225
|
-
case_after c
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
|
-
def case_before(c)
|
230
|
-
# implement each case before
|
231
|
-
end
|
232
|
-
|
233
|
-
def case_after(c)
|
234
|
-
# implement each case after
|
235
|
-
end
|
236
|
-
end
|
237
|
-
end
|
238
|
-
end
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'open_classes/kernel'
|
4
|
+
require 'test_toolbox'
|
5
|
+
|
6
|
+
describe Kernel do
|
7
|
+
context :print_eval do
|
8
|
+
cases = [
|
9
|
+
{
|
10
|
+
case_no: 1,
|
11
|
+
case_title: 'no bind case',
|
12
|
+
code: '8/4',
|
13
|
+
expected: '8/4 # => 2',
|
14
|
+
},
|
15
|
+
{
|
16
|
+
case_no: 2,
|
17
|
+
case_title: 'with bind case',
|
18
|
+
code: "\"hoge-\#{message}\"",
|
19
|
+
bind: 'msg',
|
20
|
+
expected: "\"hoge-\#{message}\" # => \"hoge-msg\"",
|
21
|
+
},
|
22
|
+
]
|
23
|
+
|
24
|
+
cases.each do |c|
|
25
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
26
|
+
begin
|
27
|
+
case_before c
|
28
|
+
|
29
|
+
# -- given --
|
30
|
+
message = c[:bind] if c[:bind]
|
31
|
+
|
32
|
+
# -- when --
|
33
|
+
actual = capture_stdout { print_eval c[:code], binding }
|
34
|
+
|
35
|
+
# -- then --
|
36
|
+
expect(actual).to eq(c[:expected])
|
37
|
+
ensure
|
38
|
+
case_after c
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def case_before(c)
|
43
|
+
# implement each case before
|
44
|
+
end
|
45
|
+
|
46
|
+
def case_after(c)
|
47
|
+
# implement each case after
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context :puts_eval do
|
53
|
+
cases = [
|
54
|
+
{
|
55
|
+
case_no: 1,
|
56
|
+
case_title: 'no bind case',
|
57
|
+
code: '8/4',
|
58
|
+
expected: "8/4 # => 2\n",
|
59
|
+
},
|
60
|
+
{
|
61
|
+
case_no: 2,
|
62
|
+
case_title: 'with bind case',
|
63
|
+
code: '"hoge-#{message}"',
|
64
|
+
bind: 'msg',
|
65
|
+
expected: '"hoge-#{message}" # => "hoge-msg"' + "\n",
|
66
|
+
},
|
67
|
+
]
|
68
|
+
|
69
|
+
cases.each do |c|
|
70
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
71
|
+
begin
|
72
|
+
case_before c
|
73
|
+
|
74
|
+
# -- given --
|
75
|
+
message = c[:bind] if c[:bind]
|
76
|
+
|
77
|
+
# -- when --
|
78
|
+
actual = capture_stdout { puts_eval c[:code], binding }
|
79
|
+
|
80
|
+
# -- then --
|
81
|
+
expect(actual).to eq(c[:expected])
|
82
|
+
ensure
|
83
|
+
case_after c
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def case_before(c)
|
88
|
+
# implement each case before
|
89
|
+
end
|
90
|
+
|
91
|
+
def case_after(c)
|
92
|
+
# implement each case after
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
context :bulk_define_methods do
|
98
|
+
cases = [
|
99
|
+
{
|
100
|
+
case_no: 1,
|
101
|
+
case_title: 'all Array case',
|
102
|
+
classes: [NilClass, FalseClass],
|
103
|
+
methods: [:blank?, :present?],
|
104
|
+
contents: [true, false],
|
105
|
+
instances: [nil, false],
|
106
|
+
expecteds: [true, false, true, false],
|
107
|
+
},
|
108
|
+
{
|
109
|
+
case_no: 2,
|
110
|
+
case_title: 'Class, String, String case',
|
111
|
+
classes: NilClass,
|
112
|
+
methods: 'hoge',
|
113
|
+
contents: 'ret hoge',
|
114
|
+
instances: [nil],
|
115
|
+
expecteds: ['ret hoge'],
|
116
|
+
},
|
117
|
+
{
|
118
|
+
case_no: 3,
|
119
|
+
case_title: 'invalid classes type case',
|
120
|
+
classes: :NilClass,
|
121
|
+
methods: 'hoge',
|
122
|
+
contents: 'ret hoge',
|
123
|
+
expect_error: true,
|
124
|
+
},
|
125
|
+
{
|
126
|
+
case_no: 4,
|
127
|
+
case_title: 'invalid methods type case',
|
128
|
+
classes: NilClass,
|
129
|
+
methods: 1,
|
130
|
+
contents: 'ret hoge',
|
131
|
+
expect_error: true,
|
132
|
+
},
|
133
|
+
]
|
134
|
+
|
135
|
+
cases.each do |c|
|
136
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
137
|
+
begin
|
138
|
+
case_before c
|
139
|
+
|
140
|
+
# -- given --
|
141
|
+
# nothing
|
142
|
+
|
143
|
+
# -- when --
|
144
|
+
if c[:expect_error]
|
145
|
+
lambda { bulk_define_methods c[:classes], c[:methods], c[:contents] }.should raise_error(StandardError)
|
146
|
+
next
|
147
|
+
end
|
148
|
+
bulk_define_methods c[:classes], c[:methods], c[:contents]
|
149
|
+
|
150
|
+
# -- then --
|
151
|
+
method_list = c[:methods].is_a?(Array) ? c[:methods] : [c[:methods]]
|
152
|
+
cnt = 0
|
153
|
+
c[:instances].each do |instance|
|
154
|
+
method_list.each do |method_name|
|
155
|
+
expect(instance.method(method_name).call).to eq(c[:expecteds][cnt])
|
156
|
+
cnt += 1
|
157
|
+
end
|
158
|
+
end
|
159
|
+
ensure
|
160
|
+
case_after c
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def case_before(c)
|
165
|
+
# implement each case before
|
166
|
+
end
|
167
|
+
|
168
|
+
def case_after(c)
|
169
|
+
# implement each case after
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
context :bluk_puts_eval do
|
175
|
+
BULK_CODE1 = <<-EOS
|
176
|
+
"hoge-hige1" + "add"
|
177
|
+
"hoge-hige2" + "add"
|
178
|
+
EOS
|
179
|
+
|
180
|
+
BULK_EXPECTED1 = <<-EOS
|
181
|
+
"hoge-hige1" + "add" # => "hoge-hige1add"
|
182
|
+
"hoge-hige2" + "add" # => "hoge-hige2add"
|
183
|
+
EOS
|
184
|
+
|
185
|
+
BULK_CODE2 = <<-EOS
|
186
|
+
"hoge-hige1" + "add" + message
|
187
|
+
"hoge-hige2" + "add" + message
|
188
|
+
EOS
|
189
|
+
|
190
|
+
BULK_EXPECTED2 = <<-EOS
|
191
|
+
"hoge-hige1" + "add" + message # => "hoge-hige1addmsg"
|
192
|
+
"hoge-hige2" + "add" + message # => "hoge-hige2addmsg"
|
193
|
+
EOS
|
194
|
+
|
195
|
+
cases = [
|
196
|
+
{
|
197
|
+
case_no: 1,
|
198
|
+
case_title: 'no bind case',
|
199
|
+
code: BULK_CODE1,
|
200
|
+
expected: BULK_EXPECTED1
|
201
|
+
},
|
202
|
+
{
|
203
|
+
case_no: 2,
|
204
|
+
case_title: 'with bind case',
|
205
|
+
code: BULK_CODE1,
|
206
|
+
bind: 'msg',
|
207
|
+
expected: BULK_EXPECTED1
|
208
|
+
},
|
209
|
+
]
|
210
|
+
|
211
|
+
cases.each do |c|
|
212
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
213
|
+
begin
|
214
|
+
case_before c
|
215
|
+
|
216
|
+
# -- given --
|
217
|
+
message = c[:bind] if c[:bind]
|
218
|
+
|
219
|
+
# -- when --
|
220
|
+
actual = capture_stdout { bulk_puts_eval binding, c[:code] }
|
221
|
+
|
222
|
+
# -- then --
|
223
|
+
expect(actual).to eq(c[:expected])
|
224
|
+
ensure
|
225
|
+
case_after c
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
def case_before(c)
|
230
|
+
# implement each case before
|
231
|
+
end
|
232
|
+
|
233
|
+
def case_after(c)
|
234
|
+
# implement each case after
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
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.
|
4
|
+
version: 0.0.14
|
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-
|
12
|
+
date: 2014-01-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &21287688 !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: *
|
24
|
+
version_requirements: *21287688
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: bundler
|
27
|
-
requirement: &
|
27
|
+
requirement: &21286752 !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: *
|
35
|
+
version_requirements: *21286752
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &21285780 !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: *
|
46
|
+
version_requirements: *21285780
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &21285204 !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: *
|
57
|
+
version_requirements: *21285204
|
58
58
|
description: Utilities
|
59
59
|
email:
|
60
60
|
- tbpgr@tbpgr.jp
|