tbpgr_utils 0.0.9 → 0.0.10

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
@@ -33,6 +33,7 @@ Or install it yourself as:
33
33
  |TbpgrUtils Object#my_methods|return public/protected/private self define methods|
34
34
  |TbpgrUtils String#justify_table|justify pipe format table string|
35
35
  |Templatable module|get result from template + placeholder|
36
+ |TemplateMethodable module|for Template Method Pattern|
36
37
 
37
38
  ### Array#together
38
39
  ~~~ruby
@@ -350,21 +351,78 @@ line1:hoge-sample
350
351
  line2:hige-sample
351
352
  ~~~
352
353
 
354
+ ## TemplateMethodable
355
+ sample usage
356
+
357
+ ~~~ruby
358
+ require "template_methodable"
359
+ # sample BaseClass
360
+ class BaseDeveloper
361
+ include TemplateMethodable
362
+ must_impl :easy_coding, :difficult_coding, :normal_coding
363
+ module DIFFICILTY
364
+ EASY = 1
365
+ NORMAL = 2
366
+ DIFFICILT = 3
367
+ end
368
+ def coding(difficulty)
369
+ ret = []
370
+ ret << "start coding"
371
+ case difficulty
372
+ when DIFFICILTY::EASY
373
+ ret << easy_coding
374
+ when DIFFICILTY::NORMAL
375
+ ret << normal_coding
376
+ when DIFFICILTY::DIFFICILT
377
+ ret << difficult_coding
378
+ else
379
+ fail 'error'
380
+ end
381
+ ret << "finish coding"
382
+ ret.join("\n")
383
+ end
384
+ end
385
+
386
+ # sample valid Concrete Class. it raises NotImplementedError.
387
+ class StarDeveloper < BaseDeveloper
388
+ def easy_coding
389
+ "complete 1 minutes"
390
+ end
391
+ def normal_coding
392
+ "complete 10 minutes"
393
+ end
394
+ def difficult_coding
395
+ "complete 59 minutes"
396
+ end
397
+ end
398
+
399
+ # sample invalid Concrete Class. if call NormalDeveloper#difficult_coding, it raises NotImplementedError.
400
+ class NormalDeveloper < BaseDeveloper
401
+ def easy_coding
402
+ "complete 10 minutes"
403
+ end
404
+ def normal_coding
405
+ "complete 100 minutes"
406
+ end
407
+ end
408
+ ~~~
409
+
353
410
  ## Relation
354
411
  if you are Sublime Text2 user, you can use snippet for TbpgrUtils.
355
412
 
356
413
  https://github.com/tbpgr/tbpgr_utils_snippets
357
414
 
358
415
  ## History
359
- * version 0.0.9 : add TestToolbox module. add Kernel#capture_stdout, Kernel#dp_line
360
- * version 0.0.8 : add Kernel#bulk_define_methods
361
- * version 0.0.7 : add Kernel#print_eval, Kernel#puts_eval
362
- * version 0.0.6 : add Ghostable
363
- * version 0.0.5 : add Templatable
364
- * version 0.0.4 : AttributesInitializable::ClassMethods.attr_accessor_init
365
- * version 0.0.3 : add Object#any_of?
366
- * version 0.0.2 : loop all arrays by block.
367
- * version 0.0.1 : first release.
416
+ * version 0.0.10 : add TemplateMethodable module.
417
+ * version 0.0.9 : add TestToolbox module. add Kernel#capture_stdout, Kernel#dp_line
418
+ * version 0.0.8 : add Kernel#bulk_define_methods
419
+ * version 0.0.7 : add Kernel#print_eval, Kernel#puts_eval
420
+ * version 0.0.6 : add Ghostable
421
+ * version 0.0.5 : add Templatable
422
+ * version 0.0.4 : AttributesInitializable::ClassMethods.attr_accessor_init
423
+ * version 0.0.3 : add Object#any_of?
424
+ * version 0.0.2 : loop all arrays by block.
425
+ * version 0.0.1 : first release.
368
426
 
369
427
  ## Contributing
370
428
 
@@ -28,7 +28,7 @@ module AttributesInitializable
28
28
  instance_eval do
29
29
  define_method :initialize do |values = nil, &block|
30
30
  return block.call self if block
31
- symbols.each {|symbol|self.method("#{symbol.to_s}=").call values[symbol]}
31
+ symbols.each { |symbol|method("#{symbol.to_s}=").call values[symbol] }
32
32
  end
33
33
  end
34
34
  end
data/lib/ghostable.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
- require "active_support/concern"
2
+ require 'active_support/concern'
3
3
 
4
4
  module Ghostable
5
5
  extend ActiveSupport::Concern
@@ -7,7 +7,7 @@ module Ghostable
7
7
  module ClassMethods
8
8
  def ghost_method(pattern, basename, &ghost_block)
9
9
  define_method basename do |method_name, *args, &block|
10
- self.class.class_eval {ghost_block.call(method_name, *args, &block)}
10
+ self.class.class_eval { ghost_block.call(method_name, *args, &block) }
11
11
  end
12
12
 
13
13
  @patterns ||= {}
@@ -1,98 +1,98 @@
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
+ # 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,51 +1,51 @@
1
- # encoding: utf-8
2
-
3
- # Object
4
- class Object
5
- # Check boolean type
6
- #
7
- # boolean? true # => true
8
- # boolean? false # => true
9
- # boolean? nil # => false
10
- # boolean? 'true' # => false
11
- # boolean? 'false' # => false
12
- # boolean? '' # => false
13
- def boolean?
14
- self.is_a?(TrueClass) || self.is_a?(FalseClass)
15
- end
16
-
17
- # Get self define methods.
18
- #
19
- # class SampleClass < String
20
- # def public_hello
21
- # "public hello"
22
- # end
23
- #
24
- # protected
25
- #
26
- # def protected_hello
27
- # "protected hello"
28
- # end
29
- #
30
- # private
31
- #
32
- # def private_hello
33
- # "private hello"
34
- # end
35
- # end
36
- #
37
- # SampleClass.new.my_methods # => [:public_hello, :protected_hello, :private_hello]
38
- def my_methods
39
- public_methods(false) + protected_methods(false) + private_methods(false)
40
- end
41
-
42
- # If self match any one of args, return true.
43
- #
44
- # "hoge".any_of? %w{hoge hige} # => true
45
- # "hige".any_of? %w{hoge hige} # => true
46
- # "hege".any_of? %w{hoge hige} # => false
47
- def any_of?(*args)
48
- args.each {|value|return true if self == value}
49
- false
50
- end
51
- end
1
+ # encoding: utf-8
2
+
3
+ # Object
4
+ class Object
5
+ # Check boolean type
6
+ #
7
+ # boolean? true # => true
8
+ # boolean? false # => true
9
+ # boolean? nil # => false
10
+ # boolean? 'true' # => false
11
+ # boolean? 'false' # => false
12
+ # boolean? '' # => false
13
+ def boolean?
14
+ self.is_a?(TrueClass) || self.is_a?(FalseClass)
15
+ end
16
+
17
+ # Get self define methods.
18
+ #
19
+ # class SampleClass < String
20
+ # def public_hello
21
+ # "public hello"
22
+ # end
23
+ #
24
+ # protected
25
+ #
26
+ # def protected_hello
27
+ # "protected hello"
28
+ # end
29
+ #
30
+ # private
31
+ #
32
+ # def private_hello
33
+ # "private hello"
34
+ # end
35
+ # end
36
+ #
37
+ # SampleClass.new.my_methods # => [:public_hello, :protected_hello, :private_hello]
38
+ def my_methods
39
+ public_methods(false) + protected_methods(false) + private_methods(false)
40
+ end
41
+
42
+ # If self match any one of args, return true.
43
+ #
44
+ # "hoge".any_of? %w{hoge hige} # => true
45
+ # "hige".any_of? %w{hoge hige} # => true
46
+ # "hege".any_of? %w{hoge hige} # => false
47
+ def any_of?(*args)
48
+ args.each { |value|return true if self == value }
49
+ false
50
+ end
51
+ end
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Tbpgr Utilities
4
4
  module TbpgrUtils
5
- VERSION = '0.0.9'
5
+ VERSION = '0.0.10'
6
6
  end
data/lib/templatable.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- require "erb"
3
- require "active_support"
2
+ require 'erb'
3
+ require 'active_support/concern'
4
4
 
5
5
  module Templatable
6
6
  extend ActiveSupport::Concern
@@ -14,7 +14,7 @@ module Templatable
14
14
  define_method :get_placeholders do
15
15
  ret = template.scan /<%=placeholders\[:(.*)\]%>/
16
16
  ret_hash = {}
17
- ret.each {|v| ret_hash[v.first.to_sym] = v.first}
17
+ ret.each { |v| ret_hash[v.first.to_sym] = v.first }
18
18
  ret_hash
19
19
  end
20
20
  end
@@ -0,0 +1,66 @@
1
+ # encoding: utf-8
2
+ require 'active_support/concern'
3
+ require 'tbpgr_utils'
4
+
5
+ module TemplateMethodable
6
+ extend ActiveSupport::Concern
7
+
8
+ module ClassMethods
9
+ # template method force class macro
10
+ #
11
+ # concrete class must define *methods.
12
+ # if not define '*method', raise NotImplementedError.
13
+ #
14
+ # sample BaseClass
15
+ # require "template_methodable"
16
+ # class BaseDeveloper
17
+ # include TemplateMethodable
18
+ # must_impl :easy_coding, :difficult_coding, :normal_coding
19
+ # module DIFFICILTY
20
+ # EASY = 1
21
+ # NORMAL = 2
22
+ # DIFFICILT = 3
23
+ # end
24
+ # def coding(difficulty)
25
+ # ret = []
26
+ # ret << "start coding"
27
+ # case difficulty
28
+ # when DIFFICILTY::EASY
29
+ # ret << easy_coding("hoge", "hige")
30
+ # when DIFFICILTY::NORMAL
31
+ # ret << normal_coding("hoge", "hige")
32
+ # when DIFFICILTY::DIFFICILT
33
+ # ret << difficult_coding("hoge", "hige")
34
+ # else
35
+ # fail 'error'
36
+ # end
37
+ # ret << "finish coding"
38
+ # ret.join("\n")
39
+ # end
40
+ # end
41
+ #
42
+ # sample Concrete Class. if you don't define xxxx_coding method, it raises NotImplementedError.
43
+ # class StarDeveloper < BaseDeveloper
44
+ # def easy_coding(hoge, hige)
45
+ # "complete 1 minutes"
46
+ # end
47
+ # def normal_coding(hoge, hige)
48
+ # "complete 10 minutes"
49
+ # end
50
+ # def difficult_coding(hoge, hige)
51
+ # "complete 59 minutes"
52
+ # end
53
+ # end
54
+ def must_impl(*methods)
55
+ return if methods.nil?
56
+ fail TypeError, "invalid args type #{methods.class}. you must use Array or Symbol" unless methods.class.any_of? Array, Symbol
57
+ methods = (methods.class.is_a? Symbol) ? [methods] : methods
58
+ methods.each do |method_name|
59
+ fail TypeError, "invalid args type #{method_name.class}. you must use Symbol" unless method_name.is_a? Symbol
60
+ define_method method_name do |*args|
61
+ fail NotImplementedError.new
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -1,46 +1,46 @@
1
- require "stringio"
2
-
3
- # Kernel
4
- module Kernel
5
- # capture STDOUT
6
- #
7
- #
8
- # capture print
9
- # print capture_stdout { print "hoge" } # => hoge
10
- #
11
- # if block have no STDOUT, capture_stdout returns empty.
12
- # print capture_stdout { }.empty? # => true
13
- def capture_stdout
14
- begin
15
- $stdout = StringIO.new
16
- yield
17
- result = $stdout.string
18
- ensure
19
- $stdout = STDOUT
20
- end
21
- result
22
- end
23
-
24
- # debug print line for print-debugging
25
- #
26
- #
27
- # debug print default
28
- # dp_line __LINE__
29
- # # yy = call line no
30
- # # => --------------------|filename=|line=yy|--------------------
31
- #
32
- # debug print with filename
33
- # dp_line __LINE__, filename: __FILE__
34
- # # xx = filename, yy = call line no
35
- # # => --------------------|filename=xx|line=yy|--------------------
36
- #
37
- # debug print with no filename, specific char
38
- # dp_line __LINE__, char: '@'
39
- # # xx = filename, yy = call line no
40
- # # => @@@@@@@@@@@@@@@@@@@@|filename=|line=yy|@@@@@@@@@@@@@@@@@@@@
41
- def dp_line(line, options = {filename: "", char: '-'})
42
- filename = options[:filename].nil? ? "" : options[:filename]
43
- char = options[:char].nil? ? "-" : options[:char]
44
- puts "#{char*20}|filename=#{filename}|line=#{line}|#{char*20}"
45
- end
46
- end
1
+ require 'stringio'
2
+
3
+ # Kernel
4
+ module Kernel
5
+ # capture STDOUT
6
+ #
7
+ #
8
+ # capture print
9
+ # print capture_stdout { print "hoge" } # => hoge
10
+ #
11
+ # if block have no STDOUT, capture_stdout returns empty.
12
+ # print capture_stdout { }.empty? # => true
13
+ def capture_stdout
14
+ begin
15
+ $stdout = StringIO.new
16
+ yield
17
+ result = $stdout.string
18
+ ensure
19
+ $stdout = STDOUT
20
+ end
21
+ result
22
+ end
23
+
24
+ # debug print line for print-debugging
25
+ #
26
+ #
27
+ # debug print default
28
+ # dp_line __LINE__
29
+ # # yy = call line no
30
+ # # => --------------------|filename=|line=yy|--------------------
31
+ #
32
+ # debug print with filename
33
+ # dp_line __LINE__, filename: __FILE__
34
+ # # xx = filename, yy = call line no
35
+ # # => --------------------|filename=xx|line=yy|--------------------
36
+ #
37
+ # debug print with no filename, specific char
38
+ # dp_line __LINE__, char: '@'
39
+ # # xx = filename, yy = call line no
40
+ # # => @@@@@@@@@@@@@@@@@@@@|filename=|line=yy|@@@@@@@@@@@@@@@@@@@@
41
+ def dp_line(line, options = { filename: '', char: '-' })
42
+ filename = options[:filename].nil? ? '' : options[:filename]
43
+ char = options[:char].nil? ? '-' : options[:char]
44
+ puts "#{char * 20}|filename=#{filename}|line=#{line}|#{char * 20}"
45
+ end
46
+ end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- require "spec_helper"
3
- require "attributes_initializable"
2
+ require 'spec_helper'
3
+ require 'attributes_initializable'
4
4
 
5
5
  describe AttributesInitializable do
6
6
  context :attr_accessor_init do
@@ -12,7 +12,7 @@ describe AttributesInitializable do
12
12
  cases = [
13
13
  {
14
14
  case_no: 1,
15
- case_title: "not block case",
15
+ case_title: 'not block case',
16
16
  klass: AccessorSample,
17
17
  inputs: {
18
18
  atr1: 'atr1',
@@ -26,7 +26,7 @@ describe AttributesInitializable do
26
26
  },
27
27
  {
28
28
  case_no: 2,
29
- case_title: "block case",
29
+ case_title: 'block case',
30
30
  klass: AccessorSample,
31
31
  inputs: {
32
32
  atr1: 'atr1',
@@ -56,7 +56,7 @@ describe AttributesInitializable do
56
56
  a.atr2 = c[:inputs][:atr2]
57
57
  end
58
58
  else
59
- accessor_sample = c[:klass].new :atr1 => 'atr1', :atr2 => 'atr2'
59
+ accessor_sample = c[:klass].new atr1: 'atr1', atr2: 'atr2'
60
60
  end
61
61
 
62
62
  # -- then --
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- require "spec_helper"
3
- require "ghostable"
2
+ require 'spec_helper'
3
+ require 'ghostable'
4
4
 
5
5
  describe Ghostable do
6
6
  context :ghost_method do
@@ -8,15 +8,15 @@ describe Ghostable do
8
8
  include Ghostable
9
9
  ghost_method /check_range_.*\?$/, :check_range do |method_name, *args, &block|
10
10
  method_name.to_s =~ /(check_range_)(\d+)(_to_)(\d*)/
11
- from = $2.to_i
12
- to = $4.to_i
11
+ from = Regexp.last_match[2].to_i
12
+ to = Regexp.last_match[4].to_i
13
13
  value = args.first
14
14
  (from..to).include? value
15
15
  end
16
16
 
17
17
  ghost_method /^contain_.*\?$/, :check_contain do |method_name, *args, &block|
18
18
  method_name.to_s =~ /^(contain_)(.*)(\?)/
19
- word = $2
19
+ word = Regexp.last_match[2]
20
20
  value = args.first
21
21
  value.include? word
22
22
  end
@@ -29,15 +29,15 @@ describe Ghostable do
29
29
  cases = [
30
30
  {
31
31
  case_no: 1,
32
- case_title: "valid case",
32
+ case_title: 'valid case',
33
33
  klass: SampleChecker,
34
- methods: [:check_range_3_to_5?, :check_range_3_to_5? ,:contain_hoge?, :contain_hoge?],
35
- values: [3, 6, "testhogetest", "testhigetest"],
34
+ methods: [:check_range_3_to_5?, :check_range_3_to_5? , :contain_hoge?, :contain_hoge?],
35
+ values: [3, 6, 'testhogetest', 'testhigetest'],
36
36
  expecteds: [true, false, true, false],
37
37
  },
38
38
  {
39
39
  case_no: 2,
40
- case_title: "method_missing case",
40
+ case_title: 'method_missing case',
41
41
  klass: SampleChecker,
42
42
  methods: [:not_match_method],
43
43
  values: [nil],
@@ -1,173 +1,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
- 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
+ end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- require "spec_helper"
3
- require "templatable"
2
+ require 'spec_helper'
3
+ require 'templatable'
4
4
 
5
5
  describe Templatable do
6
6
  context :result do
@@ -28,7 +28,7 @@ line2:hige-sample
28
28
  cases = [
29
29
  {
30
30
  case_no: 1,
31
- case_title: "valid case",
31
+ case_title: 'valid case',
32
32
  klass: TemplateUser,
33
33
  input: 'sample',
34
34
  expected: RESULT_CASE1,
@@ -0,0 +1,107 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'template_methodable'
4
+
5
+ describe TemplateMethodable do
6
+
7
+ context :must_impl do
8
+ class BaseDeveloper
9
+ include TemplateMethodable
10
+ must_impl :easy_coding, :difficult_coding, :normal_coding
11
+
12
+ module DIFFICILTY
13
+ EASY = 1
14
+ NORMAL = 2
15
+ DIFFICILT = 3
16
+ end
17
+
18
+ def coding(difficulty)
19
+ ret = []
20
+ ret << 'start coding'
21
+ case difficulty
22
+ when DIFFICILTY::EASY
23
+ ret << easy_coding('hoge', 'hige')
24
+ when DIFFICILTY::NORMAL
25
+ ret << normal_coding('hoge', 'hige')
26
+ when DIFFICILTY::DIFFICILT
27
+ ret << difficult_coding('hoge', 'hige')
28
+ else
29
+ fail 'error'
30
+ end
31
+ ret << 'finish coding'
32
+ ret.join("\n")
33
+ end
34
+ end
35
+
36
+ class StarDeveloper < BaseDeveloper
37
+ def easy_coding(hoge, hige)
38
+ 'complete 1 minutes'
39
+ end
40
+ def normal_coding(hoge, hige)
41
+ 'complete 10 minutes'
42
+ end
43
+ def difficult_coding(hoge, hige)
44
+ 'complete 59 minutes'
45
+ end
46
+ end
47
+
48
+ class NotImplDeveloper < BaseDeveloper
49
+ end
50
+
51
+ cases = [
52
+ {
53
+ case_no: 1,
54
+ case_title: 'all imple easy case',
55
+ klass: StarDeveloper,
56
+ method_name: :coding,
57
+ difficulty: BaseDeveloper::DIFFICILTY::EASY,
58
+ expected: <<-EOS
59
+ start coding
60
+ complete 1 minutes
61
+ finish coding
62
+ EOS
63
+ },
64
+ {
65
+ case_no: 2,
66
+ case_title: 'not imple all case',
67
+ klass: NotImplDeveloper,
68
+ method_name: :coding,
69
+ difficulty: BaseDeveloper::DIFFICILTY::NORMAL,
70
+ expect_error: true,
71
+ error_class: NotImplementedError
72
+ },
73
+ ]
74
+
75
+ cases.each do |c|
76
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
77
+ begin
78
+ case_before c
79
+
80
+ # -- given --
81
+ # nothing
82
+
83
+ # -- when --
84
+ exec = lambda { c[:klass].new.method(c[:method_name]).call c[:difficulty] }
85
+ if c[:expect_error]
86
+ exec.should raise_error(NotImplementedError)
87
+ next
88
+ end
89
+ actual = exec.call
90
+
91
+ # -- then --
92
+ expect(actual).to eq(c[:expected].chop)
93
+ ensure
94
+ case_after c
95
+ end
96
+ end
97
+
98
+ def case_before(c)
99
+ # implement each case before
100
+ end
101
+
102
+ def case_after(c)
103
+ # implement each case after
104
+ end
105
+ end
106
+ end
107
+ end
@@ -1,21 +1,21 @@
1
1
  # encoding: utf-8
2
- require "spec_helper"
3
- require "test_toolbox/kernel"
2
+ require 'spec_helper'
3
+ require 'test_toolbox/kernel'
4
4
 
5
5
  describe Kernel do
6
6
  context :capture_stdout do
7
7
  cases = [
8
8
  {
9
9
  case_no: 1,
10
- case_title: "have STDOUT case",
10
+ case_title: 'have STDOUT case',
11
11
  code: "print 'hoge'",
12
- expected: "hoge",
12
+ expected: 'hoge',
13
13
  },
14
14
  {
15
15
  case_no: 2,
16
16
  case_title: "don't have STDOUT case",
17
- code: "",
18
- expected: "",
17
+ code: '',
18
+ expected: '',
19
19
  },
20
20
  ]
21
21
 
@@ -28,7 +28,7 @@ describe Kernel do
28
28
  # nothing
29
29
 
30
30
  # -- when --
31
- actual = capture_stdout {eval c[:code]}
31
+ actual = capture_stdout { eval c[:code] }
32
32
 
33
33
  # -- then --
34
34
  expect(actual).to eq(c[:expected])
@@ -51,14 +51,14 @@ describe Kernel do
51
51
  cases = [
52
52
  {
53
53
  case_no: 1,
54
- case_title: "default case",
54
+ case_title: 'default case',
55
55
  have_filename: true,
56
56
  have_char: false,
57
57
  expected: "--------------------|filename=$filename$|line=$line$|--------------------\n",
58
58
  },
59
59
  {
60
60
  case_no: 2,
61
- case_title: "specific har case",
61
+ case_title: 'specific har case',
62
62
  have_filename: false,
63
63
  have_char: true,
64
64
  char: '@',
@@ -66,7 +66,7 @@ describe Kernel do
66
66
  },
67
67
  {
68
68
  case_no: 3,
69
- case_title: "no options case",
69
+ case_title: 'no options case',
70
70
  have_filename: false,
71
71
  have_char: false,
72
72
  expected: "--------------------|filename=$filename$|line=$line$|--------------------\n",
@@ -86,16 +86,16 @@ describe Kernel do
86
86
  # -- when --
87
87
  line = nil
88
88
  if !c[:have_filename] && !c[:have_char]
89
- actual = capture_stdout{ line = __LINE__ if c[:have_line];dp_line line }
89
+ actual = capture_stdout { line = __LINE__ if c[:have_line]; dp_line line }
90
90
  else
91
- actual = capture_stdout{ line = __LINE__ if c[:have_line];dp_line line, options }
91
+ actual = capture_stdout { line = __LINE__ if c[:have_line]; dp_line line, options }
92
92
  end
93
93
 
94
94
  # -- then --
95
95
  expected = c[:expected]
96
- file_gsub = c[:have_filename] ? __FILE__.to_s : ""
97
- expected = expected.gsub("$filename$", file_gsub)
98
- expected = expected.gsub("$line$", line.to_s)
96
+ file_gsub = c[:have_filename] ? __FILE__.to_s : ''
97
+ expected = expected.gsub('$filename$', file_gsub)
98
+ expected = expected.gsub('$line$', line.to_s)
99
99
  expect(actual).to eq(expected)
100
100
  ensure
101
101
  case_after c
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.9
4
+ version: 0.0.10
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-16 00:00:00.000000000 Z
12
+ date: 2014-01-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &27471564 !ruby/object:Gem::Requirement
16
+ requirement: &112152 !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: *27471564
24
+ version_requirements: *112152
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &27471276 !ruby/object:Gem::Requirement
27
+ requirement: &109104 !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: *27471276
35
+ version_requirements: *109104
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &27471048 !ruby/object:Gem::Requirement
38
+ requirement: &6863256 !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: *27471048
46
+ version_requirements: *6863256
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &27470724 !ruby/object:Gem::Requirement
49
+ requirement: &6865392 !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: *27470724
57
+ version_requirements: *6865392
58
58
  description: Utilities
59
59
  email:
60
60
  - tbpgr@tbpgr.jp
@@ -77,6 +77,7 @@ files:
77
77
  - lib/tbpgr_utils.rb
78
78
  - lib/tbpgr_utils/version.rb
79
79
  - lib/templatable.rb
80
+ - lib/template_methodable.rb
80
81
  - lib/test_toolbox.rb
81
82
  - lib/test_toolbox/kernel.rb
82
83
  - spec/attributes_initializable_spec.rb
@@ -87,6 +88,7 @@ files:
87
88
  - spec/open_classes/string_spec.rb
88
89
  - spec/spec_helper.rb
89
90
  - spec/templatable_spec.rb
91
+ - spec/template_methodable_spec.rb
90
92
  - spec/test_toolbox/kernel_spec.rb
91
93
  - tbpgr_utils.gemspec
92
94
  homepage: https://github.com/tbpgr/tbpgr_utils
@@ -123,5 +125,6 @@ test_files:
123
125
  - spec/open_classes/string_spec.rb
124
126
  - spec/spec_helper.rb
125
127
  - spec/templatable_spec.rb
128
+ - spec/template_methodable_spec.rb
126
129
  - spec/test_toolbox/kernel_spec.rb
127
130
  has_rdoc: