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 +50 -17
- data/lib/open_classes/array.rb +28 -2
- data/lib/open_classes/kernel.rb +114 -98
- data/lib/tbpgr_utils/version.rb +1 -1
- data/spec/open_classes/array_spec.rb +46 -1
- data/spec/open_classes/kernel_spec.rb +238 -173
- metadata +10 -10
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|TbpgrUtils Kernel#
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|TbpgrUtils
|
33
|
-
|TbpgrUtils
|
34
|
-
|TbpgrUtils
|
35
|
-
|TbpgrUtils
|
36
|
-
|
|
37
|
-
|
|
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.
|
data/lib/open_classes/array.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/open_classes/kernel.rb
CHANGED
@@ -1,98 +1,114 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
# Kernel
|
4
|
-
module Kernel
|
5
|
-
# Print code + eval result
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
def print_eval(code, binding)
|
10
|
-
print exec_eval code, binding
|
11
|
-
end
|
12
|
-
|
13
|
-
# Puts code + eval result
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
def puts_eval(code, binding)
|
18
|
-
puts exec_eval code, binding
|
19
|
-
end
|
20
|
-
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
#
|
32
|
-
#
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
#
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
41
|
-
#
|
42
|
-
#
|
43
|
-
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
end
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
def
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
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
|
data/lib/tbpgr_utils/version.rb
CHANGED
@@ -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
|
-
|
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.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-
|
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: &
|
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: *
|
24
|
+
version_requirements: *28466484
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: bundler
|
27
|
-
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: *
|
35
|
+
version_requirements: *28465548
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
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: *
|
46
|
+
version_requirements: *28464576
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
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: *
|
57
|
+
version_requirements: *28464000
|
58
58
|
description: Utilities
|
59
59
|
email:
|
60
60
|
- tbpgr@tbpgr.jp
|