tbpgr_utils 0.0.12 → 0.0.13

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,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