tbpgr_utils 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
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: