tbpgr_utils 0.0.12 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -18,23 +18,27 @@ 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
- |AttributesInitializable::ClassMethods.attr_accessor_init|generate attr_accessors + initializer|
25
- |Ghostable module|help to create ghost method(dynamic method define by ussing method_missing + pattern-method-name)|
26
- |TbpgrUtils Kernel#bulk_define_methods|define methods to classes. methods have simple return value.|
27
- |TestToolbox Kernel#capture_stdout|capture STDOUT|
28
- |TestToolbox Kernel#dp_line|debug print line for print-debugging|
29
- |TbpgrUtils Kernel#print_eval|Print code + eval result|
30
- |TbpgrUtils Kernel#puts_eval|Puts code + eval result|
31
- |TbpgrUtils Object#any_of?|if self match any one of items, return true|
32
- |TbpgrUtils Object#boolean?|data type check for boolean|
33
- |TbpgrUtils Object#my_methods|return public/protected/private self define methods|
34
- |TbpgrUtils Object#to_bool|syntax sugar of !!. convert [false, nil] => fasel, other => true.|
35
- |TbpgrUtils String#justify_table|justify pipe format table string|
36
- |Templatable module|get result from template + placeholder|
37
- |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_with_index |loop all arrays by block with index |
25
+ |AttributesInitializable::ClassMethods.attr_accessor_init|generate attr_accessor + initializer |
26
+ |AttributesInitializable::ClassMethods.attr_reader_init |generate attr_reader + initializer |
27
+ |AttributesInitializable::ClassMethods.attr_writer init |generate attr_writer + initializer |
28
+ |Ghostable module |help to create ghost method(dynamic method define by ussing method_missing + pattern-method-name)|
29
+ |TbpgrUtils Kernel#bulk_define_methods |define methods to classes. methods have simple return value. |
30
+ |TestToolbox Kernel#capture_stdout |capture STDOUT |
31
+ |TestToolbox Kernel#dp_line |debug print line for print-debugging |
32
+ |TbpgrUtils Kernel#print_eval |Print code + eval result |
33
+ |TbpgrUtils Kernel#puts_eval |Puts code + eval result |
34
+ |TbpgrUtils Kernel#bulk_puts_eval |Puts each-line-code + eval result |
35
+ |TbpgrUtils Object#any_of? |if self match any one of items, return true |
36
+ |TbpgrUtils Object#boolean? |data type check for boolean |
37
+ |TbpgrUtils Object#my_methods |return public/protected/private self define methods |
38
+ |TbpgrUtils Object#to_bool |syntax sugar of !!. convert [false, nil] => fasel, other => true. |
39
+ |TbpgrUtils String#justify_table |justify pipe format table string |
40
+ |Templatable module |get result from template + placeholder |
41
+ |TemplateMethodable module |for Template Method Pattern |
38
42
 
39
43
  ### Array#together
40
44
  ~~~ruby
@@ -47,6 +51,17 @@ numbers = %w{1 2 3}
47
51
  end
48
52
  ~~~
49
53
 
54
+ ### Array#together_with_index
55
+ ~~~ruby
56
+ require 'tbpgr_utils'
57
+
58
+ alpha = %w{one two three}
59
+ numbers = %w{1 2 3}
60
+ [alpha, numbers].together_with_index do |first, second, index|
61
+ print "#{index.to_s}:#{first}:#{second}\n" # => output 0:one:1, 1:two:2, 2:three:3
62
+ end
63
+ ~~~
64
+
50
65
  ### AttributesInitializable::ClassMethods.attr_accessor_init
51
66
  ~~~ruby
52
67
  require 'attributes_initializable'
@@ -354,6 +369,23 @@ output
354
369
  "hoge-#{message}" # => "hoge-msg"
355
370
  ~~~
356
371
 
372
+ ### Kernel#bulk_puts_eval
373
+ multi line version of puts_eval.
374
+
375
+ ~~~ruby
376
+ message = "msg"
377
+ bulk_puts_eval binding, <<-EOS
378
+ "hoge-hige1" + "add" + message
379
+ "hoge-hige2" + "add" + message
380
+ EOS
381
+ ~~~
382
+
383
+ output
384
+ ~~~
385
+ "hoge-hige1" + "add" + message # => "hoge-hige1addmsg"
386
+ "hoge-hige2" + "add" + message # => "hoge-hige2addmsg"
387
+ ~~~
388
+
357
389
  ### Object#any_of?
358
390
  ~~~ruby
359
391
  require 'tbpgr_utils'
@@ -527,6 +559,7 @@ if you are Sublime Text2 user, you can use snippet for TbpgrUtils.
527
559
  https://github.com/tbpgr/tbpgr_utils_snippets
528
560
 
529
561
  ## History
562
+ * version 0.0.13 : add Array#together_with_index, Kernel#bulk_puts_eval
530
563
  * version 0.0.12 : AttributesInitializable::ClassMethods.attr_reader_init,attr_writer_init
531
564
  * version 0.0.11 : add Object#to_bool.
532
565
  * version 0.0.10 : add TemplateMethodable module.
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Array
4
4
  class Array
5
- # Arrays loop together
5
+ # Arrays loop together.
6
6
  #
7
7
  # alpha = %w{one two three}
8
8
  # numbers = %w{1 2 3}
@@ -10,7 +10,7 @@ class Array
10
10
  # print "#{first}:#{second}\n" # => output one:1, two:2, three:3
11
11
  # end
12
12
  def together
13
- each { |f|fail TypeError, "you have to use [Array1, Array2, ...] | #{f.class} is invalid" unless f.class == Array }
13
+ if_not_contain_array_rails_type_error
14
14
  first.each_with_index do |i_v, i|
15
15
  eval_each = []
16
16
  each_with_index do |j_v, j|
@@ -20,4 +20,30 @@ class Array
20
20
  instance_eval "yield(#{eval_each_str})"
21
21
  end
22
22
  end
23
+
24
+ # Arrays loop together with index.
25
+ #
26
+ # alpha = %w{one two three}
27
+ # numbers = %w{1 2 3}
28
+ # [alpha, numbers].together_with_index do |first, second, index|
29
+ # print "#{index.to_s}:#{first}:#{second}\n" # => output 0:one:1, 1:two:2, 2:three:3
30
+ # end
31
+ def together_with_index
32
+ if_not_contain_array_rails_type_error
33
+ first.each_with_index do |i_v, i|
34
+ eval_each = []
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(',')
40
+ instance_eval "yield(#{eval_each_str})"
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def if_not_contain_array_rails_type_error
47
+ each { |f|fail TypeError, "you have to use [Array1, Array2, ...] | #{f.class} is invalid" unless f.class == Array }
48
+ end
23
49
  end
@@ -1,98 +1,114 @@
1
- # encoding: utf-8
2
-
3
- # Kernel
4
- module Kernel
5
- # Print code + eval result
6
- #
7
- # print_eval 8/4, binding # => 8/4 # => 2
8
- # message = 'msg';print_eval "hoge-#{message}", binding # => "hoge-#{message}" # => "hoge-msg"
9
- def print_eval(code, binding)
10
- print exec_eval code, binding
11
- end
12
-
13
- # Puts code + eval result
14
- #
15
- # puts_eval 8/4, binding # => 8/4 # => 2\n
16
- # message = 'msg';puts_eval "hoge-#{message}", binding # => "hoge-#{message}" # => "hoge-msg"\n
17
- def puts_eval(code, binding)
18
- puts exec_eval code, binding
19
- end
20
-
21
- # define methods to classes. methods have simple return value.
22
- #
23
- # bulk_define_methods [NilClass, FalseClass], :blank?, true
24
- # bulk_define_methods [TrueClass, Numeric], "blank?", false
25
- #
26
- # puts nil.blank? # => true
27
- # puts false.blank? # => true
28
- # puts true.blank? # => false
29
- # puts 1.blank? # => false
30
- #
31
- # bulk_define_methods [NilClass, FalseClass], [:blank?, :present?], [true, false]
32
- # bulk_define_methods [TrueClass, Numeric], [:blank?, :present?], [false, true]
33
- #
34
- # puts nil.blank? # => true
35
- # puts nil.present? # => false
36
- # puts false.blank? # => true
37
- # puts false.present? # => false
38
- # puts true.blank? # => false
39
- # puts true.present? # => true
40
- # puts 1.blank? # => false
41
- # puts 1.present? # => true
42
- #
43
- # bulk_define_methods NilClass, :blank?, true is same as following code
44
- #
45
- # class NilClass
46
- # def blank?
47
- # true
48
- # end
49
- # end
50
- def bulk_define_methods(classes, methods, constants)
51
- validate_bulk_define_classes!(classes)
52
- validate_bulk_define_methods!(methods)
53
- size = get_classes_size(classes)
54
- tmp_classes = fill_same_values(classes, size)
55
- tmp_methods = fill_same_values(methods, size)
56
- tmp_constants = fill_same_values(constants, size)
57
- tmp_classes.each do |klass|
58
- define_method_constants(klass, tmp_methods, tmp_constants)
59
- end
60
- end
61
-
62
- private
63
- def get_classes_size(classes)
64
- size = classes.is_a?(Array) ? classes.size : 1
65
- end
66
-
67
- def fill_same_values(ary, size)
68
- return ary if ary.is_a?(Array)
69
- tmp = []
70
- size.times { tmp << ary }
71
- tmp
72
- end
73
-
74
- def validate_bulk_define_classes!(classes)
75
- return if classes.class.any_of?(Array, Class)
76
- fail TypeError, "invalid type #{a.class}. you have to use Array or Class or String or Symbol"
77
- end
78
-
79
- def validate_bulk_define_methods!(methods)
80
- return if methods.class.any_of?(Array, String, Symbol)
81
- fail TypeError, "invalid type #{a.class}. you have to use Array or Class or String or Symbol"
82
- end
83
-
84
- def define_method_constants(klass, methods, constants)
85
- methods.each_with_index do |m, i|
86
- klass.class_eval do
87
- define_method m do |*args|
88
- constants[i]
89
- end
90
- end
91
- end
92
- end
93
-
94
- def exec_eval(code, binding)
95
- ret = eval code, binding
96
- "#{code} # => #{ret.inspect}"
97
- end
98
- end
1
+ # encoding: utf-8
2
+
3
+ # Kernel
4
+ module Kernel
5
+ # Print code + eval result
6
+ #
7
+ # print_eval 8/4, binding # => 8/4 # => 2
8
+ # message = 'msg';print_eval "hoge-#{message}", binding # => "hoge-#{message}" # => "hoge-msg"
9
+ def print_eval(code, binding)
10
+ print exec_eval code, binding
11
+ end
12
+
13
+ # Puts code + eval result
14
+ #
15
+ # puts_eval 8/4, binding # => 8/4 # => 2\n
16
+ # message = 'msg';puts_eval "hoge-#{message}", binding # => "hoge-#{message}" # => "hoge-msg"\n
17
+ def puts_eval(code, binding)
18
+ puts exec_eval code, binding
19
+ end
20
+
21
+ # Puts each-line-code + eval result
22
+ #
23
+ # code
24
+ # message = 'msg'
25
+ # puts_eval binding, <<-EOS
26
+ # "hoge-#{message}1"
27
+ # "hoge-#{message}2"
28
+ # EOS
29
+ #
30
+ # result
31
+ # "hoge-#{message}1" # => "hoge-msg1"\n
32
+ # "hoge-#{message}2" # => "hoge-msg2"\n
33
+ def bulk_puts_eval(binding, codes)
34
+ codes.each_line { |code|puts_eval(code.chop, binding) }
35
+ end
36
+
37
+ # define methods to classes. methods have simple return value.
38
+ #
39
+ # bulk_define_methods [NilClass, FalseClass], :blank?, true
40
+ # bulk_define_methods [TrueClass, Numeric], "blank?", false
41
+ #
42
+ # puts nil.blank? # => true
43
+ # puts false.blank? # => true
44
+ # puts true.blank? # => false
45
+ # puts 1.blank? # => false
46
+ #
47
+ # bulk_define_methods [NilClass, FalseClass], [:blank?, :present?], [true, false]
48
+ # bulk_define_methods [TrueClass, Numeric], [:blank?, :present?], [false, true]
49
+ #
50
+ # puts nil.blank? # => true
51
+ # puts nil.present? # => false
52
+ # puts false.blank? # => true
53
+ # puts false.present? # => false
54
+ # puts true.blank? # => false
55
+ # puts true.present? # => true
56
+ # puts 1.blank? # => false
57
+ # puts 1.present? # => true
58
+ #
59
+ # bulk_define_methods NilClass, :blank?, true is same as following code
60
+ #
61
+ # class NilClass
62
+ # def blank?
63
+ # true
64
+ # end
65
+ # end
66
+ def bulk_define_methods(classes, methods, constants)
67
+ validate_bulk_define_classes!(classes)
68
+ validate_bulk_define_methods!(methods)
69
+ size = get_classes_size(classes)
70
+ tmp_classes = fill_same_values(classes, size)
71
+ tmp_methods = fill_same_values(methods, size)
72
+ tmp_constants = fill_same_values(constants, size)
73
+ tmp_classes.each do |klass|
74
+ define_method_constants(klass, tmp_methods, tmp_constants)
75
+ end
76
+ end
77
+
78
+ private
79
+ def get_classes_size(classes)
80
+ size = classes.is_a?(Array) ? classes.size : 1
81
+ end
82
+
83
+ def fill_same_values(ary, size)
84
+ return ary if ary.is_a?(Array)
85
+ tmp = []
86
+ size.times { tmp << ary }
87
+ tmp
88
+ end
89
+
90
+ def validate_bulk_define_classes!(classes)
91
+ return if classes.class.any_of?(Array, Class)
92
+ fail TypeError, "invalid type #{a.class}. you have to use Array or Class or String or Symbol"
93
+ end
94
+
95
+ def validate_bulk_define_methods!(methods)
96
+ return if methods.class.any_of?(Array, String, Symbol)
97
+ fail TypeError, "invalid type #{a.class}. you have to use Array or Class or String or Symbol"
98
+ end
99
+
100
+ def define_method_constants(klass, methods, constants)
101
+ methods.each_with_index do |m, i|
102
+ klass.class_eval do
103
+ define_method m do |*args|
104
+ constants[i]
105
+ end
106
+ end
107
+ end
108
+ end
109
+
110
+ def exec_eval(code, binding)
111
+ ret = eval code, binding
112
+ "#{code} # => #{ret.inspect}"
113
+ end
114
+ end
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Tbpgr Utilities
4
4
  module TbpgrUtils
5
- VERSION = '0.0.12'
5
+ VERSION = '0.0.13'
6
6
  end
@@ -3,7 +3,6 @@ require 'spec_helper'
3
3
  require 'tbpgr_utils'
4
4
 
5
5
  describe Array do
6
-
7
6
  context :together do
8
7
  cases = [
9
8
  {
@@ -49,4 +48,50 @@ describe Array do
49
48
  end
50
49
  end
51
50
  end
51
+
52
+ context :together_with_index do
53
+ cases = [
54
+ {
55
+ case_no: 1,
56
+ case_title: 'valid case',
57
+ inputs: [[1, 2, 3], %w{one two three}],
58
+ expected: ['0:1:one', '1:2:two', '2:3:three'],
59
+ },
60
+ {
61
+ case_no: 2,
62
+ case_title: 'contain nil case',
63
+ inputs: [[1, 2, 3], %w{one two}],
64
+ expected: ['0:1:one', '1:2:two', '2:3:'],
65
+ },
66
+ ]
67
+
68
+ cases.each do |c|
69
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
70
+ begin
71
+ case_before c
72
+
73
+ # -- given --
74
+ # nothing
75
+
76
+ # -- when/then --
77
+ actual = []
78
+ c[:inputs].together_with_index do |first, second, index|
79
+ actual << "#{index.to_s}:#{first}:#{second}"
80
+ end
81
+
82
+ expect(actual).to eq(c[:expected])
83
+ ensure
84
+ case_after c
85
+ end
86
+ end
87
+
88
+ def case_before(c)
89
+ # implement each case before
90
+ end
91
+
92
+ def case_after(c)
93
+ # implement each case after
94
+ end
95
+ end
96
+ end
52
97
  end
@@ -1,173 +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
- 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.12
4
+ version: 0.0.13
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-19 00:00:00.000000000 Z
12
+ date: 2014-01-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &27383724 !ruby/object:Gem::Requirement
16
+ requirement: &28466484 !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: *27383724
24
+ version_requirements: *28466484
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &27383028 !ruby/object:Gem::Requirement
27
+ requirement: &28465548 !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: *27383028
35
+ version_requirements: *28465548
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &27382476 !ruby/object:Gem::Requirement
38
+ requirement: &28464576 !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: *27382476
46
+ version_requirements: *28464576
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &28249968 !ruby/object:Gem::Requirement
49
+ requirement: &28464000 !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: *28249968
57
+ version_requirements: *28464000
58
58
  description: Utilities
59
59
  email:
60
60
  - tbpgr@tbpgr.jp