striuct 0.3.0 → 0.3.1

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.
Files changed (68) hide show
  1. data/.gitignore +32 -0
  2. data/.travis.yml +6 -0
  3. data/Gemfile +12 -0
  4. data/History.rdoc +5 -0
  5. data/Manifest.txt +53 -25
  6. data/README.md +97 -0
  7. data/Rakefile +7 -21
  8. data/examples/README.rb +25 -0
  9. data/{example → examples}/example1.rb +1 -1
  10. data/{example → examples}/example2.rb +1 -1
  11. data/{example → examples}/see_trace.rb +4 -0
  12. data/lib/striuct/{containable/eigen → classmethods}/basic.rb +13 -5
  13. data/lib/striuct/classmethods/constants.rb +23 -0
  14. data/lib/striuct/{containable/eigen → classmethods}/constructor.rb +20 -14
  15. data/lib/striuct/{containable/eigen → classmethods}/handy.rb +19 -20
  16. data/lib/striuct/{containable/eigen → classmethods}/inner.rb +10 -32
  17. data/lib/striuct/{containable/eigen → classmethods}/macro.rb +37 -7
  18. data/lib/striuct/classmethods/requiremnets.rb +7 -0
  19. data/lib/striuct/{containable/eigen → classmethods}/safety.rb +6 -6
  20. data/lib/striuct/classmethods.rb +1 -0
  21. data/lib/striuct/{containable → instancemethods}/basic.rb +6 -6
  22. data/lib/striuct/{containable → instancemethods}/handy.rb +3 -3
  23. data/lib/striuct/{containable → instancemethods}/hashlike.rb +12 -6
  24. data/lib/striuct/{containable → instancemethods}/inner.rb +9 -8
  25. data/lib/striuct/instancemethods/requirements.rb +6 -0
  26. data/lib/striuct/{containable → instancemethods}/safety.rb +2 -2
  27. data/lib/striuct/instancemethods/singleton_class.rb +19 -0
  28. data/lib/striuct/instancemethods.rb +1 -0
  29. data/lib/striuct/requirements.rb +6 -0
  30. data/lib/striuct/singleton_class.rb +93 -0
  31. data/lib/striuct/specificcontainer.rb +17 -0
  32. data/lib/striuct/structs.rb +7 -0
  33. data/lib/striuct/version.rb +3 -2
  34. data/lib/striuct.rb +4 -9
  35. data/striuct.gemspec +24 -0
  36. data/test/{test_helper.rb → helper.rb} +3 -0
  37. data/test/test_striuct.rb +23 -1409
  38. data/test/test_striuct_define.rb +19 -0
  39. data/test/test_striuct_subclass_adjuster.rb +95 -0
  40. data/test/test_striuct_subclass_alias_member.rb +54 -0
  41. data/test/test_striuct_subclass_assign.rb +30 -0
  42. data/test/test_striuct_subclass_classlock.rb +36 -0
  43. data/test/test_striuct_subclass_classmethods.rb +87 -0
  44. data/test/test_striuct_subclass_cloning.rb +36 -0
  45. data/test/test_striuct_subclass_default_value.rb +129 -0
  46. data/test/test_striuct_subclass_for_pairs.rb +13 -0
  47. data/test/test_striuct_subclass_freeze.rb +19 -0
  48. data/test/test_striuct_subclass_functional_condition.rb +51 -0
  49. data/test/test_striuct_subclass_getter_validation.rb +33 -0
  50. data/test/test_striuct_subclass_hashlike.rb +153 -0
  51. data/test/test_striuct_subclass_inference.rb +51 -0
  52. data/test/test_striuct_subclass_inheritable.rb +58 -0
  53. data/test/test_striuct_subclass_instance.rb +289 -0
  54. data/test/test_striuct_subclass_lock.rb +40 -0
  55. data/test/test_striuct_subclass_safetynaming.rb +72 -0
  56. data/test/test_striuct_subclass_specific_conditions.rb +247 -0
  57. data/test/test_striuct_subclass_to_struct.rb +25 -0
  58. data/test/test_striuct_version.rb +9 -0
  59. metadata +106 -68
  60. data/.gemtest +0 -0
  61. data/README.rdoc +0 -63
  62. data/example/example.rb +0 -17
  63. data/lib/striuct/abstract.rb +0 -74
  64. data/lib/striuct/containable/classutil.rb +0 -22
  65. data/lib/striuct/containable/eigen.rb +0 -29
  66. data/lib/striuct/containable.rb +0 -38
  67. /data/{example/benchmarks.rb → benchmarks/basics.rb} +0 -0
  68. /data/{example → examples}/example.old.rdoc +0 -0
@@ -1,4 +1,6 @@
1
- class Striuct; module Containable; module Eigen
1
+ require 'keyvalidatable'
2
+
3
+ class Striuct; module ClassMethods
2
4
  # @group Macro for Definition
3
5
 
4
6
  private
@@ -14,6 +16,8 @@ class Striuct; module Containable; module Eigen
14
16
  end
15
17
 
16
18
  VALID_MEMBER_OPTIONS = [
19
+ :default,
20
+ :default_proc,
17
21
  :inference,
18
22
  :reader_validation,
19
23
  :getter_validation,
@@ -28,11 +32,22 @@ class Striuct; module Containable; module Eigen
28
32
  # @param [Symbol, String] name
29
33
  # @param [#===, Proc, Method, ANYTHING] condition
30
34
  # @param [Hash] options
35
+ # @option options [BasicObject] :default
36
+ # @option options [Proc] :default_proc
37
+ # @option options [Boolean] :inference
38
+ # @option options [Boolean] :reader_validation
39
+ # @option options [Boolean] :getter_validation
40
+ # @option options [Boolean] :writer_validation
41
+ # @option options [Boolean] :setter_validation
31
42
  # @return [nil]
32
43
  def add_member(name, condition=Validation::Condition::ANYTHING, options=DEFAULT_MEMBER_OPTIONS, &flavor)
33
44
  raise "already closed to add member in #{self}" if closed?
34
- options = DEFAULT_MEMBER_OPTIONS.merge options
35
- raise ArgumentError, 'invalid option parameter is' unless (options.keys - VALID_MEMBER_OPTIONS).empty?
45
+ options = DEFAULT_MEMBER_OPTIONS.merge(options).extend(KeyValidatable)
46
+ options.validate_keys let: VALID_MEMBER_OPTIONS
47
+ if options.has_key?(:default) and options.has_key?(:default_proc)
48
+ raise ArgumentError, 'It is not able to choose "default" with "default_proc" in options'
49
+ end
50
+
36
51
  name = keyable_for name
37
52
  raise ArgumentError, %Q!already exist name "#{name}"! if member? name
38
53
  _check_safety_naming name
@@ -43,6 +58,15 @@ class Striuct; module Containable; module Eigen
43
58
  @names << name
44
59
  __getter__! name
45
60
  __setter__! name, condition, &flavor
61
+
62
+ if options.has_key?(:default)
63
+ set_default_value name, options.fetch(:default)
64
+ end
65
+
66
+ if options.has_key?(:default_proc)
67
+ set_default_value name, &options.fetch(:default_proc)
68
+ end
69
+
46
70
  nil
47
71
  end
48
72
 
@@ -79,16 +103,18 @@ class Striuct; module Containable; module Eigen
79
103
  # @return [nil]
80
104
  def set_default_value(name, value=nil, &block)
81
105
  raise "already closed to modify member attributes in #{self}" if closed?
82
- name = originalkey_for(keyable_for name)
106
+ name = autonym_for(name)
83
107
  raise "already settled default value for #{name}" if has_default? name
84
108
 
85
109
  value = (
86
110
  if block_given?
87
111
  if value.nil?
88
- if (arity = block.arity) <= 2
112
+ arity = block.arity
113
+
114
+ if valid_default_proc? block
89
115
  SpecificContainer.new block
90
116
  else
91
- raise ArgumentError, "wrong number of block parameter #{arity} for 2"
117
+ raise ArgumentError, "wrong number of block parameter #{arity} for 0..2"
92
118
  end
93
119
  else
94
120
  raise ArgumentError, 'can not use value and block arguments'
@@ -104,6 +130,10 @@ class Striuct; module Containable; module Eigen
104
130
 
105
131
  alias_method :default, :set_default_value
106
132
 
133
+ def valid_default_proc?(_proc)
134
+ _proc.arity <= 2
135
+ end
136
+
107
137
  # @return [self]
108
138
  def close_member
109
139
  [@names, @flavors, @defaults, @aliases].each(&:freeze)
@@ -114,4 +144,4 @@ class Striuct; module Containable; module Eigen
114
144
  alias_method :close, :close_member
115
145
 
116
146
  # @endgroup
117
- end; end; end
147
+ end; end
@@ -0,0 +1,7 @@
1
+ require_relative 'constants'
2
+ require_relative 'inner'
3
+ require_relative 'basic'
4
+ require_relative 'constructor'
5
+ require_relative 'handy'
6
+ require_relative 'macro'
7
+ require_relative 'safety'
@@ -1,17 +1,17 @@
1
- class Striuct; module Containable; module Eigen
1
+ class Striuct; module ClassMethods
2
2
  # @group Struct+ Safety
3
3
 
4
4
  # @param [Symbol, String] name
5
5
  # inference checker is waiting yet
6
6
  def inference?(name)
7
- name = originalkey_for(keyable_for name)
7
+ name = autonym_for name
8
8
 
9
9
  @inferences.has_key? name
10
10
  end
11
11
 
12
12
  # @param [Symbol, String] name
13
13
  def has_condition?(name)
14
- name = originalkey_for(keyable_for name)
14
+ name = autonym_for name
15
15
 
16
16
  @conditions.has_key?(name)
17
17
  end
@@ -20,7 +20,7 @@ class Striuct; module Containable; module Eigen
20
20
 
21
21
  # @param [Symbol, String] name
22
22
  def safety_getter?(name)
23
- name = originalkey_for(keyable_for name)
23
+ name = autonym_for name
24
24
 
25
25
  @getter_validations.has_key?(name)
26
26
  end
@@ -29,7 +29,7 @@ class Striuct; module Containable; module Eigen
29
29
 
30
30
  # @param [Symbol, String] name
31
31
  def safety_setter?(name)
32
- name = originalkey_for(keyable_for name)
32
+ name = autonym_for name
33
33
 
34
34
  @setter_validations.has_key?(name)
35
35
  end
@@ -49,4 +49,4 @@ class Striuct; module Containable; module Eigen
49
49
  end
50
50
 
51
51
  # @endgroup
52
- end; end; end
52
+ end; end
@@ -0,0 +1 @@
1
+ require_relative 'classmethods/requiremnets'
@@ -1,4 +1,4 @@
1
- class Striuct; module Containable
1
+ class Striuct; module InstanceMethods
2
2
  # @group Basic
3
3
 
4
4
  def initialize(*values)
@@ -8,7 +8,7 @@ class Striuct; module Containable
8
8
 
9
9
  # see self.class.*args
10
10
  delegate_class_methods(
11
- :members, :keys, :names,
11
+ :members, :keys, :names, :autonyms, :all_members, :aliases,
12
12
  :has_member?, :member?, :has_key?, :key?,
13
13
  :length, :size
14
14
  )
@@ -64,10 +64,10 @@ class Striuct; module Containable
64
64
  true_name = nil
65
65
  __subscript__(key){|name|true_name = name; __set__ name, value}
66
66
  rescue Validation::InvalidWritingError
67
- $@ = [
68
- "#{$@[-1].sub(/[^:]+\z/){''}}in `[#{key.inspect}(#{true_name})]=': #{$!.message}",
69
- $@[-1]
70
- ]
67
+ $!.set_backtrace([
68
+ "#{$!.backtrace[-1].sub(/[^:]+\z/){''}}in `[#{key.inspect}(#{true_name})]=': #{$!.message}",
69
+ $!.backtrace[-1]
70
+ ])
71
71
 
72
72
  raise
73
73
  end
@@ -1,4 +1,4 @@
1
- class Striuct; module Containable
1
+ class Striuct; module InstanceMethods
2
2
  # @group Struct + Handy
3
3
 
4
4
  # see self.class.*args
@@ -57,7 +57,7 @@ class Striuct; module Containable
57
57
 
58
58
  # @param [Symbol, String] name
59
59
  def assign?(name)
60
- name = originalkey_for(keyable_for name)
60
+ name = autonym_for name
61
61
 
62
62
  @db.has_key? name
63
63
  end
@@ -72,7 +72,7 @@ class Striuct; module Containable
72
72
 
73
73
  # @param [Symbol, String] name
74
74
  def default?(name)
75
- name = originalkey_for(keyable_for name)
75
+ name = autonym_for name
76
76
 
77
77
  default_for(name) == self[name]
78
78
  end
@@ -1,4 +1,4 @@
1
- class Striuct; module Containable
1
+ class Striuct; module InstanceMethods
2
2
  # @group HashLike
3
3
 
4
4
  # @return [Hash]
@@ -31,8 +31,9 @@ class Striuct; module Containable
31
31
 
32
32
  alias_method :value?, :has_value?
33
33
 
34
- # @yield [name, value]
35
34
  # keep truthy only (unassign falsy member)
35
+ # @yield [name, value]
36
+ # @yieldparam [Symbol] name
36
37
  # @see #each_pair
37
38
  # @return [Enumerator]
38
39
  # @yieldreturn [self]
@@ -54,6 +55,7 @@ class Striuct; module Containable
54
55
 
55
56
  # @see #select!
56
57
  # @yield [name, value]
58
+ # @yieldparam [Symbol] name
57
59
  # @return [Enumerator]
58
60
  def keep_if(&block)
59
61
  raise "can't modify frozen #{self.class}" if frozen?
@@ -65,6 +67,7 @@ class Striuct; module Containable
65
67
  # @see #select!
66
68
  # keep falsy only (unassign truthy member)
67
69
  # @yield [name, value]
70
+ # @yieldparam [Symbol] name
68
71
  # @return [Enumerator]
69
72
  def reject!
70
73
  raise "can't modify frozen #{self.class}" if frozen?
@@ -83,6 +86,7 @@ class Striuct; module Containable
83
86
 
84
87
  # @see #reject!
85
88
  # @yield [name, value]
89
+ # @yieldparam [Symbol] name
86
90
  # @return [Enumerator]
87
91
  def delete_if(&block)
88
92
  raise "can't modify frozen #{self.class}" if frozen?
@@ -93,9 +97,9 @@ class Striuct; module Containable
93
97
  end
94
98
 
95
99
  # @param [Symbol, String] name
96
- # @return [Array] [name, value]
100
+ # @return [Array] e.g [name, value]
97
101
  def assoc(name)
98
- name = originalkey_for(keyable_for name)
102
+ name = autonym_for name
99
103
 
100
104
  [name, self[name]]
101
105
  end
@@ -113,7 +117,8 @@ class Striuct; module Containable
113
117
 
114
118
  # @see #select!
115
119
  # @yield [name, value]
116
- # @return [Subclass]
120
+ # @yieldparam [Symbol] name
121
+ # @return [Striuct]
117
122
  def select(&block)
118
123
  return to_enum(__method__) unless block_given?
119
124
 
@@ -122,7 +127,8 @@ class Striuct; module Containable
122
127
 
123
128
  # @see #reject!
124
129
  # @yield [name, value]
125
- # @return [Subclass]
130
+ # @yieldparam [Symbol] name
131
+ # @return [Striuct]
126
132
  def reject(&block)
127
133
  return to_enum(__method__) unless block_given?
128
134
 
@@ -1,11 +1,12 @@
1
- class Striuct; module Containable
1
+ class Striuct; module InstanceMethods
2
+
2
3
  private
3
4
 
4
5
  # @group Use Only Inner
5
6
 
6
7
  # see self.class.*args
7
8
  delegate_class_methods(
8
- :keyable_for, :flavor_for, :condition_for, :originalkey_for
9
+ :keyable_for, :flavor_for, :condition_for, :autonym_for
9
10
  )
10
11
 
11
12
  def initialize_copy(original)
@@ -13,7 +14,7 @@ class Striuct; module Containable
13
14
  end
14
15
 
15
16
  def __get__(name)
16
- name = originalkey_for(keyable_for name)
17
+ name = autonym_for name
17
18
  value = @db[name]
18
19
 
19
20
  if safety_getter?(name) and !accept?(name, value)
@@ -26,7 +27,7 @@ class Striuct; module Containable
26
27
 
27
28
  def __set__(name, value)
28
29
  raise "can't modify frozen #{self.class}" if frozen?
29
- name = originalkey_for(keyable_for name)
30
+ name = autonym_for name
30
31
  raise "can't modify locked member #{name}" if lock? name
31
32
 
32
33
  if has_flavor? name
@@ -49,9 +50,8 @@ class Striuct; module Containable
49
50
  @db[name] = value
50
51
  rescue ::Validation::InvalidError
51
52
  unless /in \[\]=/ =~ caller[1].slice(/([^:]+)\z/)
52
- $@.delete_if{|s|/#{Regexp.escape(File.dirname __FILE__)}/ =~ s}
53
- $@.first.sub!(/([^:]+)\z/){"in `#{name}='"}
54
- $@ << $@.last
53
+ $!.backtrace.delete_if{|s|/#{Regexp.escape(File.dirname __FILE__)}/ =~ s}
54
+ $!.backtrace.first.sub!(/([^:]+)\z/){"in `#{name}='"}
55
55
  end
56
56
 
57
57
  raise
@@ -62,7 +62,7 @@ class Striuct; module Containable
62
62
  when Symbol, String
63
63
  name = keyable_for key
64
64
  if member? name
65
- yield originalkey_for(name)
65
+ yield autonym_for(name)
66
66
  else
67
67
  raise NameError
68
68
  end
@@ -117,4 +117,5 @@ class Striuct; module Containable
117
117
  end
118
118
 
119
119
  # @endgroup
120
+
120
121
  end; end
@@ -0,0 +1,6 @@
1
+ require_relative 'singleton_class'
2
+ require_relative 'inner'
3
+ require_relative 'basic'
4
+ require_relative 'handy'
5
+ require_relative 'hashlike'
6
+ require_relative 'safety'
@@ -1,4 +1,4 @@
1
- class Striuct; module Containable
1
+ class Striuct; module InstanceMethods
2
2
  # @group Struct+ Safety
3
3
 
4
4
  # see self.class.*args
@@ -9,7 +9,7 @@ class Striuct; module Containable
9
9
  # @param [Object] value - no argument and use own
10
10
  # passed under any condition
11
11
  def sufficient?(name, value=self[name])
12
- name = originalkey_for(keyable_for name)
12
+ name = autonym_for name
13
13
  return true unless restrict? name
14
14
 
15
15
  _valid? condition_for(name), value
@@ -0,0 +1,19 @@
1
+ class Striuct; module InstanceMethods
2
+
3
+ class << self
4
+
5
+ private
6
+
7
+ def delegate_class_method(name)
8
+ define_method name do |*args, &block|
9
+ self.class.__send__ name, *args, &block
10
+ end
11
+ end
12
+
13
+ def delegate_class_methods(name, *names)
14
+ [name, *names].each{|_name|delegate_class_method _name}
15
+ end
16
+
17
+ end
18
+
19
+ end; end
@@ -0,0 +1 @@
1
+ require_relative 'instancemethods/requirements'
@@ -0,0 +1,6 @@
1
+ require_relative 'version'
2
+ require_relative 'structs'
3
+ require_relative 'specificcontainer'
4
+ require_relative 'classmethods'
5
+ require_relative 'instancemethods'
6
+ require_relative 'singleton_class'
@@ -0,0 +1,93 @@
1
+ require_relative 'instancemethods'
2
+
3
+ class Striuct
4
+
5
+ class << self
6
+
7
+ # @group Constructor
8
+
9
+ alias_method :new_instance, :new
10
+ private :new_instance
11
+
12
+ # @param [Symbol, String] *names
13
+ # @return [Class]
14
+ def new(*names, &block)
15
+ # warning for Ruby's Struct.new user
16
+ first = names.first
17
+ if first.instance_of?(String) and /\A[A-Z]/ =~ first
18
+ warn "no define constant #{first}"
19
+ end
20
+
21
+ Class.new self do
22
+ names.each do |name|
23
+ member name
24
+ end
25
+
26
+ class_eval(&block) if block_given?
27
+ end
28
+ end
29
+
30
+ # @yieldreturn [Class] (see Striuct.new) - reject floating class
31
+ # @return [void]
32
+ def define(&block)
33
+ raise ArgumentError, 'must with block' unless block_given?
34
+
35
+ new(&block).tap do |subclass|
36
+ subclass.instance_eval do
37
+ raise 'not yet finished' if members.empty?
38
+ close
39
+ end
40
+ end
41
+ end
42
+
43
+ # @groupend
44
+
45
+ private
46
+
47
+ alias_method :original_inherited, :inherited
48
+
49
+ def inherited(subclass)
50
+ attributes = (
51
+ if equal? ::Striuct
52
+ [[], {}, {}, {}, {}, {}, {}, {}, :prevent]
53
+ else
54
+ [
55
+ *[
56
+ @names, @conditions, @flavors, @defaults,
57
+ @inferences, @aliases, @setter_validations,
58
+ @getter_validations
59
+ ].map(&:dup), @protect_level
60
+ ]
61
+ end
62
+ )
63
+
64
+ eigen = self
65
+
66
+ subclass.class_eval do
67
+ original_inherited subclass
68
+
69
+ if ::Striuct.equal? eigen
70
+ extend ClassMethods
71
+ include Enumerable
72
+ include InstanceMethods
73
+ end
74
+
75
+ @names, @conditions, @flavors, @defaults,
76
+ @inferences, @aliases, @setter_validations,
77
+ @getter_validations, @protect_level = *attributes
78
+
79
+ singleton_class.instance_eval do
80
+ define_method :initialize_copy do |original|
81
+ @names, @flavors, @defaults, @aliases,
82
+ @setter_validations, @getter_validations =
83
+ *[@names, @flavors, @defaults, @aliases,
84
+ @setter_validations, @getter_validations].map(&:dup)
85
+ @conditions, @inferences = @conditions.dup, @inferences.dup
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ end
92
+
93
+ end
@@ -0,0 +1,17 @@
1
+ class Striuct
2
+
3
+ class SpecificContainer
4
+
5
+ attr_reader :value
6
+
7
+ def initialize(value)
8
+ @value = value
9
+ end
10
+
11
+ end
12
+
13
+ if respond_to? :private_constant
14
+ private_constant :SpecificContainer
15
+ end
16
+
17
+ end
@@ -0,0 +1,7 @@
1
+ class Striuct
2
+
3
+ # namespace for .to_struct_class, #to_struct
4
+ module Structs
5
+ end
6
+
7
+ end
@@ -1,4 +1,5 @@
1
1
  class Striuct
2
- VERSION = '0.3.0'.freeze
3
- Version = VERSION
2
+
3
+ VERSION = '0.3.1'.freeze
4
+
4
5
  end
data/lib/striuct.rb CHANGED
@@ -1,18 +1,13 @@
1
- # Copyright (C) 2011 Kenichi Kamiya
2
- # Striuct
3
- # Provides a Struct++ class.
1
+ # striuct - Provides a Struct++ class.
2
+ # Copyright (c) 2011 Kenichi Kamiya
4
3
 
5
4
  require 'validation'
6
5
 
7
- # @author Kenichi Kamiya
8
6
  # @abstract
9
7
  class Striuct
8
+
10
9
  include Validation
11
10
 
12
- # namespace for .to_struct_class, #to_struct
13
- module Structs
14
- end
15
11
  end
16
12
 
17
- require_relative 'striuct/version'
18
- require_relative 'striuct/abstract'
13
+ require_relative 'striuct/requirements'
data/striuct.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # I don't know why dose occur errors below.
2
+ # require_relative 'lib/striuct/version'
3
+ require File.expand_path('../lib/striuct/version', __FILE__)
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.authors = ['Kenichi Kamiya']
7
+ gem.email = ['kachick1+ruby@gmail.com']
8
+ gem.summary = %q{Struct++}
9
+ gem.description = %q{validatable, inheritable, And more Struct++ features :)}
10
+ gem.homepage = 'https://github.com/kachick/striuct'
11
+
12
+ gem.files = `git ls-files`.split($\)
13
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
14
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
15
+ gem.name = 'striuct'
16
+ gem.require_paths = ['lib']
17
+ gem.version = Striuct::VERSION.dup # dup for https://github.com/rubygems/rubygems/commit/48f1d869510dcd325d6566df7d0147a086905380#-P0
18
+
19
+ gem.required_ruby_version = '>=1.9.2'
20
+ gem.add_runtime_dependency 'validation', '~>0.0.3.1'
21
+ gem.add_runtime_dependency 'keyvalidatable', '~>0.0.2'
22
+ gem.add_development_dependency 'yard', '>=0.8.2.1'
23
+ end
24
+
@@ -1,2 +1,5 @@
1
1
  require 'test/unit'
2
+
3
+ $VERBOSE = true
4
+
2
5
  require_relative '../lib/striuct'