striuct 0.3.2 → 0.3.3

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 (65) hide show
  1. data/History.rdoc +12 -0
  2. data/LICENSE +2 -2
  3. data/Manifest.txt +34 -24
  4. data/README.md +34 -5
  5. data/example/README.rb +20 -1
  6. data/lib/striuct/classmethods/README.md +5 -0
  7. data/lib/striuct/classmethods/adjustment.rb +5 -3
  8. data/lib/striuct/classmethods/default.rb +2 -2
  9. data/lib/striuct/classmethods/enum.rb +3 -3
  10. data/lib/striuct/classmethods/inner.rb +28 -49
  11. data/lib/striuct/classmethods/named.rb +22 -2
  12. data/lib/striuct/classmethods/object.rb +35 -5
  13. data/lib/striuct/instancemethods/README.md +5 -0
  14. data/lib/striuct/instancemethods/assign.rb +1 -1
  15. data/lib/striuct/instancemethods/cast.rb +35 -0
  16. data/lib/striuct/instancemethods/compare.rb +4 -5
  17. data/lib/striuct/instancemethods/delegate_class_methods.rb +12 -4
  18. data/lib/striuct/instancemethods/hashy.rb +0 -11
  19. data/lib/striuct/instancemethods/keyvalidatable.rb +14 -0
  20. data/lib/striuct/instancemethods/lock.rb +15 -4
  21. data/lib/striuct/instancemethods/object.rb +11 -6
  22. data/lib/striuct/instancemethods/requirements.rb +2 -2
  23. data/lib/striuct/instancemethods/subscript.rb +1 -1
  24. data/lib/striuct/instancemethods/values.rb +1 -8
  25. data/lib/striuct/singleton_class.rb +9 -36
  26. data/lib/striuct/version.rb +1 -1
  27. data/striuct.gemspec +4 -4
  28. data/test/{test_striuct_define.rb → test_striuct-singleton_class-define.rb} +1 -1
  29. data/test/test_striuct-subclass-class-cloning.rb +21 -0
  30. data/test/{test_striuct_subclass_classlock.rb → test_striuct-subclass-class-close.rb} +2 -2
  31. data/test/{test_striuct_subclass_classmethods.rb → test_striuct-subclass-class-constructor.rb} +15 -20
  32. data/test/test_striuct-subclass-class-freeze.rb +36 -0
  33. data/test/{test_striuct_subclass_inheritable.rb → test_striuct-subclass-class-inheritable.rb} +1 -1
  34. data/test/test_striuct-subclass-class-macro.rb +13 -0
  35. data/test/{test_striuct_subclass_safetynaming.rb → test_striuct-subclass-class-safety_naming.rb} +1 -1
  36. data/test/test_striuct-subclass-class-validation.rb +26 -0
  37. data/test/{test_striuct_subclass_alias_member.rb → test_striuct-subclass-feature-alias_member.rb} +1 -1
  38. data/test/{test_striuct_subclass_to_struct.rb → test_striuct-subclass-feature-to_struct.rb} +1 -1
  39. data/test/test_striuct-subclass-instance-accessor.rb +137 -0
  40. data/test/{test_striuct_subclass_adjuster.rb → test_striuct-subclass-instance-adjuster.rb} +28 -28
  41. data/test/{test_striuct_subclass_assign.rb → test_striuct-subclass-instance-assign.rb} +1 -1
  42. data/test/test_striuct-subclass-instance-basic.rb +32 -0
  43. data/test/test_striuct-subclass-instance-cloning.rb +23 -0
  44. data/test/test_striuct-subclass-instance-compare.rb +52 -0
  45. data/test/{test_striuct_subclass_default_value.rb → test_striuct-subclass-instance-default_value.rb} +2 -2
  46. data/test/test_striuct-subclass-instance-enum.rb +93 -0
  47. data/test/{test_striuct_subclass_freeze.rb → test_striuct-subclass-instance-freeze.rb} +1 -1
  48. data/test/{test_striuct_subclass_hashlike.rb → test_striuct-subclass-instance-hashlike.rb} +1 -1
  49. data/test/test_striuct-subclass-instance-keyvalidatable.rb +25 -0
  50. data/test/{test_striuct_subclass_lock.rb → test_striuct-subclass-instance-lock.rb} +1 -1
  51. data/test/test_striuct-subclass-instance-to_s_family.rb +25 -0
  52. data/test/{test_striuct_subclass_functional_condition.rb → test_striuct-subclass-instance-validation_functional_condition.rb} +0 -0
  53. data/test/{test_striuct_subclass_inference.rb → test_striuct-subclass-instance-validation_inference.rb} +1 -1
  54. data/test/{test_striuct_subclass_specific_conditions.rb → test_striuct-subclass-instance-validation_specific_conditions.rb} +1 -1
  55. data/test/{test_striuct_subclass_getter_validation.rb → test_striuct-subclass-instance-validation_with_getter.rb} +1 -1
  56. data/test/test_striuct-subclass-instance_names.rb +18 -0
  57. data/test/test_striuct-version.rb +11 -0
  58. metadata +68 -50
  59. data/lib/striuct/instancemethods/singleton_class.rb +0 -22
  60. data/lib/striuct/instancemethods/to_struct.rb +0 -12
  61. data/test/test_striuct.rb +0 -24
  62. data/test/test_striuct_subclass_cloning.rb +0 -36
  63. data/test/test_striuct_subclass_for_pairs.rb +0 -20
  64. data/test/test_striuct_subclass_instance.rb +0 -289
  65. data/test/test_striuct_version.rb +0 -9
@@ -13,7 +13,7 @@ class Striuct; module InstanceMethods
13
13
  raise "can't modify frozen #{self.class}" if frozen?
14
14
 
15
15
  if key.equal? true
16
- autonyms.each do |autonym|
16
+ _autonyms.each do |autonym|
17
17
  @locks[autonym] = true
18
18
  end
19
19
  else
@@ -22,11 +22,16 @@ class Striuct; module InstanceMethods
22
22
 
23
23
  self
24
24
  end
25
-
26
- # @see #lock
25
+
26
+ # @overload lock?(key)
27
+ # predicate locking a setter for key
28
+ # @param [Symbol, String, Fixnum] key
29
+ # @overload lock?(true)
30
+ # predicate locking for all members
31
+ # @param [true] true
27
32
  def lock?(key=true)
28
33
  if key.equal? true
29
- autonyms.all?{|autonym|@locks[autonym]}
34
+ _autonyms.all?{|autonym|@locks[autonym]}
30
35
  else
31
36
  __subscript__(key){|autonym|@locks[autonym]} || false
32
37
  end
@@ -34,6 +39,12 @@ class Striuct; module InstanceMethods
34
39
 
35
40
  private
36
41
 
42
+ # @overload unlock(key)
43
+ # unlock a setter for key
44
+ # @param [Symbol, String, Fixnum] key
45
+ # @overload unlock(true)
46
+ # unlock setters for all members
47
+ # @param [true] true
37
48
  def unlock(key=true)
38
49
  raise "can't modify frozen #{self.class}" if frozen?
39
50
 
@@ -9,23 +9,28 @@ class Striuct; module InstanceMethods
9
9
 
10
10
  # @return [String]
11
11
  def inspect
12
- "#<#{self.class} (Striuct)".tap {|s|
12
+ "#<struct' #{self.class} strict?:#{strict?}".tap {|s|
13
13
  each_pair do |autonym, value|
14
- suffix = (has_default?(autonym) && default?(autonym)) ? '(default)' : nil
15
- s << " #{autonym}=#{value.inspect}#{suffix}"
14
+ suffix = (has_default?(autonym) && default?(autonym)) ? '/default' : nil
15
+ s << " #{autonym}=#{value.inspect}#{suffix}("
16
+ s << "valid?:#{valid? autonym}, "
17
+ s << "lock?:#{lock? autonym}"
18
+ s << '),'
16
19
  end
17
20
 
18
- s << ">"
21
+ s.chop!
22
+ s << '>'
19
23
  }
20
24
  end
21
25
 
22
26
  # @return [String]
23
27
  def to_s
24
- "#<struct #{self.class}".tap {|s|
28
+ "#<struct' #{self.class}".tap {|s|
25
29
  each_pair do |autonym, value|
26
- s << " #{autonym}=#{value.inspect}"
30
+ s << " #{autonym}=#{value.inspect},"
27
31
  end
28
32
 
33
+ s.chop!
29
34
  s << '>'
30
35
  }
31
36
  end
@@ -1,10 +1,10 @@
1
- require_relative 'singleton_class'
2
1
  require_relative 'delegate_class_methods'
2
+ require_relative 'keyvalidatable'
3
3
  require_relative 'inner'
4
4
  require_relative 'object'
5
5
  require_relative 'compare'
6
6
  require_relative 'values'
7
- require_relative 'to_struct'
7
+ require_relative 'cast'
8
8
  require_relative 'default'
9
9
  require_relative 'enum'
10
10
  require_relative 'hashy'
@@ -40,7 +40,7 @@ class Striuct; module InstanceMethods
40
40
  raise NameError
41
41
  end
42
42
  when Fixnum
43
- if autonym = autonyms[key]
43
+ if autonym = _autonyms[key]
44
44
  yield autonym
45
45
  else
46
46
  raise IndexError
@@ -2,13 +2,6 @@ class Striuct; module InstanceMethods
2
2
 
3
3
  # @group Behavior under Values
4
4
 
5
- # @return [Array]
6
- def values
7
- each_value.to_a
8
- end
9
-
10
- alias_method :to_a, :values
11
-
12
5
  # @param [Fixnum, Range] _keys
13
6
  # @return [Array]
14
7
  def values_at(*_keys)
@@ -39,7 +32,7 @@ class Striuct; module InstanceMethods
39
32
  self[index] = value
40
33
  end
41
34
 
42
- excess = autonyms.last(size - values.size)
35
+ excess = _autonyms.last(size - values.size)
43
36
 
44
37
  excess.each do |autonym|
45
38
  if has_default? autonym
@@ -1,7 +1,7 @@
1
1
  require_relative 'instancemethods'
2
2
 
3
3
  class Striuct
4
-
4
+
5
5
  class << self
6
6
 
7
7
  # @group Constructor
@@ -45,46 +45,19 @@ class Striuct
45
45
  private
46
46
 
47
47
  alias_method :original_inherited, :inherited
48
-
49
- def inherited(subclass)
50
- attributes = (
51
- if equal? ::Striuct
52
- [[], {}, {}, {}, {}, {}, {}, {}, :prevent]
53
- else
54
- [
55
- *[
56
- @autonyms, @conditions, @adjusters, @defaults,
57
- @inferences, @aliases, @setter_validations,
58
- @getter_validations
59
- ].map(&:dup), @protect_level
60
- ]
61
- end
62
- )
63
-
64
- eigen = self
65
48
 
49
+ def inherited(subclass)
66
50
  subclass.class_eval do
67
51
  original_inherited subclass
68
52
 
69
- if ::Striuct.equal? eigen
70
- extend ClassMethods
71
- include Enumerable
72
- include InstanceMethods
73
- end
53
+ extend ClassMethods
54
+ include Enumerable
55
+ include InstanceMethods
74
56
 
75
- @autonyms, @conditions, @adjusters, @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
- @autonyms, @adjusters, @defaults, @aliases,
82
- @setter_validations, @getter_validations =
83
- *[@autonyms, @adjusters, @defaults, @aliases,
84
- @setter_validations, @getter_validations].map(&:dup)
85
- @conditions, @inferences = @conditions.dup, @inferences.dup
86
- end
87
- end
57
+ @autonyms = []
58
+ @conditions, @adjusters, @defaults, @inferences, @aliases, @setter_validations, @getter_validations = \
59
+ {}, {}, {}, {}, {}, {}, {}
60
+ @protect_level = :prevent
88
61
  end
89
62
  end
90
63
 
@@ -1,5 +1,5 @@
1
1
  class Striuct
2
2
 
3
- VERSION = '0.3.2'.freeze
3
+ VERSION = '0.3.3'.freeze
4
4
 
5
5
  end
data/striuct.gemspec CHANGED
@@ -16,9 +16,9 @@ Gem::Specification.new do |gem|
16
16
  gem.require_paths = ['lib']
17
17
  gem.version = Striuct::VERSION.dup # dup for https://github.com/rubygems/rubygems/commit/48f1d869510dcd325d6566df7d0147a086905380#-P0
18
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.3'
22
- gem.add_development_dependency 'yard', '>=0.8.2.1'
19
+ gem.required_ruby_version = '>= 1.9.2'
20
+ gem.add_runtime_dependency 'validation', '~> 0.0.3'
21
+ gem.add_runtime_dependency 'keyvalidatable', '~> 0.0.3'
22
+ gem.add_development_dependency 'yard', '>= 0.8.2.1'
23
23
  end
24
24
 
@@ -1,6 +1,6 @@
1
1
  require_relative 'helper'
2
2
 
3
- class TestStriuctDefine < Test::Unit::TestCase
3
+ class Test_Striuct_Define < Test::Unit::TestCase
4
4
 
5
5
  def test_define
6
6
  assert_raises RuntimeError do
@@ -0,0 +1,21 @@
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Class_Cloning < Test::Unit::TestCase
4
+
5
+ class Sth < Striuct.new
6
+ member :sth
7
+ end
8
+
9
+ def test_dup
10
+ klass = Sth.dup
11
+ Sth.__send__ :member, :dummy1
12
+ assert_equal false, klass.member?(:dummy1)
13
+ end
14
+
15
+ def test_clone
16
+ klass = Sth.clone
17
+ Sth.__send__ :member, :dummy2
18
+ assert_equal false, klass.member?(:dummy2)
19
+ end
20
+
21
+ end
@@ -1,12 +1,12 @@
1
1
  require_relative 'helper'
2
2
 
3
- class TestStriuctClassLock < Test::Unit::TestCase
3
+ class Test_Striuct_Subclass_Class_Close < Test::Unit::TestCase
4
4
 
5
5
  Sth = Striuct.new do
6
6
  member :foo
7
7
  end
8
8
 
9
- def test_class_lock
9
+ def test_class_close
10
10
  sth = Sth.new
11
11
 
12
12
  assert_equal true, sth.member?(:foo)
@@ -1,6 +1,6 @@
1
1
  require_relative 'helper'
2
2
 
3
- class TestStriuctSubclassClassMethods < Test::Unit::TestCase
3
+ class Test_Striuct_Subclass_Class_Constructor < Test::Unit::TestCase
4
4
 
5
5
  class User < Striuct.new
6
6
  member :id, Integer
@@ -15,7 +15,7 @@ class TestStriuctSubclassClassMethods < Test::Unit::TestCase
15
15
  member :age, Fixnum
16
16
  end
17
17
 
18
- def test_builder
18
+ def test_new
19
19
  klass = Striuct.new
20
20
  assert_kind_of Striuct, klass.new
21
21
 
@@ -64,24 +64,19 @@ class TestStriuctSubclassClassMethods < Test::Unit::TestCase
64
64
  assert_equal false, user.strict?
65
65
  end
66
66
 
67
- def test_restrict?
68
- klass = Striuct.new :foo do
69
- member :var, //
70
- member :hoge
71
- member :moge, nil
72
- end
73
-
74
- assert_equal false, klass.restrict?(:foo)
75
- assert_equal true, klass.restrict?(:var)
76
- assert_equal false, klass.restrict?(:hoge)
77
- assert_equal true, klass.restrict?(:moge)
78
- end
67
+ Sth = Striuct.new :foo, :bar, :hoge
68
+ SampleStruct = Struct.new :foo, :bar, :hoge
79
69
 
80
- def test_add_members
81
- klass = Striuct.new :foo do
82
- add_members :aaa, 'bbb', :ccc
83
- end
84
-
85
- assert_equal [:foo, :aaa, :bbb, :ccc], klass.members
70
+ def test_for_pairs_from_hash
71
+ sth = Sth[hoge: 7, foo: 8]
72
+
73
+ assert_equal [8, nil, 7], sth.values
86
74
  end
75
+
76
+ def test_for_pairs_from_struct
77
+ sth = Sth[SampleStruct.new 8, nil, 7]
78
+
79
+ assert_equal [8, nil, 7], sth.values
80
+ end
81
+
87
82
  end
@@ -0,0 +1,36 @@
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Class_Freeze < Test::Unit::TestCase
4
+
5
+ Sth = Striuct.new do
6
+ member :foo
7
+ end
8
+
9
+ def test_class_freeze
10
+ sth = Sth.new
11
+
12
+ assert_same true, sth.member?(:foo)
13
+
14
+ Sth.class_eval do
15
+ member :bar
16
+ end
17
+
18
+ assert_same true, sth.member?(:bar)
19
+ assert_equal [:foo, :bar], sth.members
20
+
21
+ assert_same false, Sth.frozen?
22
+
23
+ Sth.freeze
24
+
25
+ assert_same true, Sth.frozen?
26
+
27
+ assert_raises RuntimeError do
28
+ Sth.class_eval do
29
+ member :var2
30
+ end
31
+ end
32
+
33
+ assert_same false, sth.member?(:var2)
34
+ end
35
+
36
+ end
@@ -1,6 +1,6 @@
1
1
  require_relative 'helper'
2
2
 
3
- class TestStriuctInheritable < Test::Unit::TestCase
3
+ class Test_Striuct_Subclass_Class_Inheritable < Test::Unit::TestCase
4
4
 
5
5
  Sth = Striuct.define do
6
6
  member :foo, String
@@ -0,0 +1,13 @@
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Class_Macro < Test::Unit::TestCase
4
+
5
+ def test_add_members
6
+ klass = Striuct.new :foo do
7
+ add_members :aaa, 'bbb', :ccc
8
+ end
9
+
10
+ assert_equal [:foo, :aaa, :bbb, :ccc], klass.members
11
+ end
12
+
13
+ end
@@ -1,6 +1,6 @@
1
1
  require_relative 'helper'
2
2
 
3
- class TestStriuctSafetyNaming < Test::Unit::TestCase
3
+ class Test_Striuct_Subclass_Class_SafetyNaming < Test::Unit::TestCase
4
4
 
5
5
  def test_cname?
6
6
  klass = Striuct.new
@@ -0,0 +1,26 @@
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Class_Validation < Test::Unit::TestCase
4
+
5
+ class User < Striuct.new
6
+ member :id, Integer
7
+ member :last_name, /\A\w+\z/
8
+ member :family_name, /\A\w+\z/
9
+ member :address, /\A((\w+) ?)+\z/
10
+ member :age, ->age{(20..140).include? age}
11
+ end
12
+
13
+ def test_restrict?
14
+ klass = Striuct.new :foo do
15
+ member :var, //
16
+ member :hoge
17
+ member :moge, nil
18
+ end
19
+
20
+ assert_equal false, klass.restrict?(:foo)
21
+ assert_equal true, klass.restrict?(:var)
22
+ assert_equal false, klass.restrict?(:hoge)
23
+ assert_equal true, klass.restrict?(:moge)
24
+ end
25
+
26
+ end
@@ -1,6 +1,6 @@
1
1
  require_relative 'helper'
2
2
 
3
- class TestStriuctAliasMember < Test::Unit::TestCase
3
+ class Test_Striuct_Subclass_AliasMember < Test::Unit::TestCase
4
4
 
5
5
  class Sth < Striuct.new
6
6
  member :foo, String
@@ -1,6 +1,6 @@
1
1
  require_relative 'helper'
2
2
 
3
- class TestStriuct_to_Struct < Test::Unit::TestCase
3
+ class Test_Striuct_Subclass_to_Struct < Test::Unit::TestCase
4
4
 
5
5
  Sth = Striuct.define do
6
6
  member :name, String
@@ -0,0 +1,137 @@
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Instance_Setter < Test::Unit::TestCase
4
+
5
+ class User < Striuct.new
6
+ member :id, Integer
7
+ member :last_name, /\A\w+\z/
8
+ member :family_name, /\A\w+\z/
9
+ member :address, /\A((\w+) ?)+\z/
10
+ member :age, ->age{(20..140).include? age}
11
+ end
12
+
13
+ def test_setter
14
+ user = User.new
15
+ user[:last_name] = 'foo'
16
+ assert_equal user.last_name, 'foo'
17
+ user.last_name = 'bar'
18
+ assert_equal user[:last_name], 'bar'
19
+
20
+ assert_raises Validation::InvalidWritingError do
21
+ user[:last_name] = 'foo s'
22
+ end
23
+
24
+ assert_raises Validation::InvalidWritingError do
25
+ User.new 'asda'
26
+ end
27
+
28
+ assert_raises Validation::InvalidWritingError do
29
+ user.age = 19
30
+ end
31
+ end
32
+
33
+ end
34
+
35
+ class Test_Striuct_Subclass_Instance_Accessor_With_Validation < Test::Unit::TestCase
36
+
37
+ class User < Striuct.new
38
+ member :id, Integer
39
+ member :last_name, /\A\w+\z/
40
+ member :family_name, /\A\w+\z/
41
+ member :address, /\A((\w+) ?)+\z/
42
+ member :age, ->age{(20..140).include? age}
43
+ end
44
+
45
+ def setup
46
+ @user = User.new 9999, 'taro', 'yamada', 'Tokyo Japan', 30
47
+ end
48
+
49
+ def test_reader
50
+ assert_equal @user[1], 'taro'
51
+ assert_equal @user[:last_name], 'taro'
52
+ assert_equal @user.last_name, 'taro'
53
+ end
54
+
55
+ def test_setter_pass
56
+ assert_equal((@user.id = 2139203509295), 2139203509295)
57
+ assert_equal @user.id, 2139203509295
58
+ assert_equal((@user.last_name = 'jiro'), 'jiro')
59
+ assert_equal @user.last_name, 'jiro'
60
+ assert_equal((@user.age = 40), 40)
61
+ assert_equal @user.age, 40
62
+ end
63
+
64
+ def test_setter_fail
65
+ assert_raises Validation::InvalidWritingError do
66
+ @user.id = 2139203509295.0
67
+ end
68
+
69
+ assert_raises Validation::InvalidWritingError do
70
+ @user.last_name = 'ignore name'
71
+ end
72
+
73
+ assert_raises Validation::InvalidWritingError do
74
+ @user.age = 19
75
+ end
76
+ end
77
+
78
+ def test_strict?
79
+ assert_same @user.sufficient?(:last_name), true
80
+ assert_same @user.strict?, true
81
+ assert_same @user.sufficient?(:last_name), true
82
+ @user.last_name.clear
83
+ assert_same @user.sufficient?(:last_name), false
84
+ assert_same @user.strict?, false
85
+ end
86
+
87
+ end
88
+
89
+
90
+ class Test_Striuct_Subclass_Instance_Accsessor < Test::Unit::TestCase
91
+
92
+ class Sth < Striuct.new
93
+ member :bool, OR(true, false)
94
+ member :sth
95
+ protect_level :struct
96
+ member :lambda, OR(->v{v % 3 == 2}, ->v{v.kind_of? Float})
97
+ end
98
+
99
+ def setup
100
+ @sth = Sth.new
101
+ end
102
+
103
+ def test_accessor
104
+ @sth.bool = true
105
+ assert_same true, @sth.bool
106
+ @sth.bool = false
107
+ assert_same false, @sth.bool
108
+
109
+ assert_raises Validation::InvalidWritingError do
110
+ @sth.bool = nil
111
+ end
112
+
113
+ @sth.sth = 1
114
+ assert_same 1, @sth.sth
115
+
116
+ @sth.sth = 'String'
117
+ assert_equal 'String', @sth.sth
118
+
119
+ @sth.sth = Class.class
120
+ assert_same Class.class, @sth.sth
121
+
122
+ assert_raises Validation::InvalidWritingError do
123
+ @sth.lambda = 9
124
+ end
125
+
126
+ assert_raises Validation::InvalidWritingError do
127
+ @sth.lambda = 7
128
+ end
129
+
130
+ @sth.lambda = 8
131
+ assert_same 8, @sth.lambda
132
+
133
+ @sth.lambda = 9.0
134
+ assert_equal 9.0, @sth.lambda
135
+ end
136
+
137
+ end
@@ -1,34 +1,7 @@
1
1
  require_relative 'helper'
2
2
 
3
- class TestStriuctAdjusterOld < Test::Unit::TestCase
4
3
 
5
- Sth = Striuct.new do
6
- member :age, Numeric, &->arg{Integer arg}
7
- end
8
-
9
- def setup
10
- @sth = Sth.new
11
- assert_same nil, @sth.age
12
- end
13
-
14
- def test_procedure
15
- @sth.age = 10
16
- assert_same 10, @sth.age
17
- @sth.age = 10.0
18
- assert_same 10, @sth.age
19
-
20
- assert_raises Validation::UnmanagebleError do
21
- @sth.age = '10.0'
22
- end
23
-
24
- @sth.age = '10'
25
- assert_same 10, @sth.age
26
- end
27
-
28
- end
29
-
30
-
31
- class TestStriuctAdjuster < Test::Unit::TestCase
4
+ class Test_Striuct_Subclass_Instance_Adjuster < Test::Unit::TestCase
32
5
 
33
6
  class MyClass
34
7
  def self.parse(v)
@@ -92,4 +65,31 @@ class TestStriuctAdjuster < Test::Unit::TestCase
92
65
  assert_kind_of MyClass, sth.myobj
93
66
  end
94
67
 
68
+ end
69
+
70
+ class Test_Striuct_Subclass_Instance_AdjusterOld < Test::Unit::TestCase
71
+
72
+ Sth = Striuct.new do
73
+ member :age, Numeric, &->arg{Integer arg}
74
+ end
75
+
76
+ def setup
77
+ @sth = Sth.new
78
+ assert_same nil, @sth.age
79
+ end
80
+
81
+ def test_procedure
82
+ @sth.age = 10
83
+ assert_same 10, @sth.age
84
+ @sth.age = 10.0
85
+ assert_same 10, @sth.age
86
+
87
+ assert_raises Validation::UnmanagebleError do
88
+ @sth.age = '10.0'
89
+ end
90
+
91
+ @sth.age = '10'
92
+ assert_same 10, @sth.age
93
+ end
94
+
95
95
  end
@@ -1,6 +1,6 @@
1
1
  require_relative 'helper'
2
2
 
3
- class TestStriuctAssign < Test::Unit::TestCase
3
+ class Test_Striuct_Subclass_Instance_Assign < Test::Unit::TestCase
4
4
 
5
5
  Sth = Striuct.new do
6
6
  member :foo
@@ -0,0 +1,32 @@
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Instance_Basic < Test::Unit::TestCase
4
+
5
+ class User < Striuct.new
6
+ member :id, Integer
7
+ member :last_name, /\A\w+\z/
8
+ member :family_name, /\A\w+\z/
9
+ member :address, /\A((\w+) ?)+\z/
10
+ member :age, ->age{(20..140).include? age}
11
+ end
12
+
13
+ def setup
14
+ @user = User.new 9999, 'taro', 'yamada', 'Tokyo Japan', 30
15
+ @user2 = User.new 9999, 'taro', 'yamada', 'Tokyo Japan', 30
16
+ end
17
+
18
+ def test_delegate_class_method
19
+ assert_equal @user.members, User.members
20
+ assert_equal @user.size, User.size
21
+ assert_equal @user.member?(:age), User.member?(:age)
22
+ end
23
+
24
+ def test_values
25
+ assert_equal @user.values, [9999, 'taro', 'yamada', 'Tokyo Japan', 30]
26
+ end
27
+
28
+ def test_values_at
29
+ assert_equal(@user.values_at(4, 0, (2..4)), [30, 9999, 'yamada', 'Tokyo Japan', 30])
30
+ end
31
+
32
+ end