striuct 0.3.5.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. data/.travis.yml +3 -0
  2. data/.yardopts +1 -1
  3. data/LICENSE +1 -1
  4. data/README.md +7 -3
  5. data/example/example1.rb +5 -4
  6. data/lib/striuct/classmethods/README.md +9 -4
  7. data/lib/striuct/classmethods/adjustment.rb +4 -15
  8. data/lib/striuct/{attributes.rb → classmethods/attributes.rb} +15 -17
  9. data/lib/striuct/classmethods/{prevent_conflicts.rb → conflict_management.rb} +37 -14
  10. data/lib/striuct/classmethods/constructor.rb +2 -4
  11. data/lib/striuct/classmethods/copy.rb +2 -2
  12. data/lib/striuct/classmethods/default.rb +9 -18
  13. data/lib/striuct/classmethods/enum.rb +3 -5
  14. data/lib/striuct/classmethods/inner.rb +6 -10
  15. data/lib/striuct/classmethods/macro.rb +33 -48
  16. data/lib/striuct/classmethods/names.rb +75 -0
  17. data/lib/striuct/classmethods/predicate.rb +128 -0
  18. data/lib/striuct/classmethods/{requiremnets.rb → requirements.rb} +6 -3
  19. data/lib/striuct/classmethods/validation.rb +5 -43
  20. data/lib/striuct/instancemethods/README.md +4 -4
  21. data/lib/striuct/instancemethods/assign.rb +11 -13
  22. data/lib/striuct/instancemethods/cast.rb +5 -8
  23. data/lib/striuct/instancemethods/compare.rb +6 -6
  24. data/lib/striuct/instancemethods/default.rb +28 -6
  25. data/lib/striuct/instancemethods/delegate_class_methods.rb +21 -21
  26. data/lib/striuct/instancemethods/enum.rb +3 -9
  27. data/lib/striuct/instancemethods/getter.rb +47 -0
  28. data/lib/striuct/instancemethods/hashy.rb +2 -6
  29. data/lib/striuct/instancemethods/keyvalidatable.rb +0 -5
  30. data/lib/striuct/instancemethods/lock.rb +35 -43
  31. data/lib/striuct/instancemethods/object.rb +3 -26
  32. data/lib/striuct/instancemethods/requirements.rb +16 -2
  33. data/lib/striuct/instancemethods/safety.rb +1 -1
  34. data/lib/striuct/instancemethods/setter.rb +58 -0
  35. data/lib/striuct/instancemethods/to_s.rb +2 -2
  36. data/lib/striuct/instancemethods/validation.rb +13 -7
  37. data/lib/striuct/instancemethods/values.rb +8 -7
  38. data/lib/striuct/requirements.rb +2 -5
  39. data/lib/striuct/{hashdeepdupulicatable.rb → singleton_class/hashdeepdupulicatable.rb} +2 -2
  40. data/lib/striuct/singleton_class.rb +3 -4
  41. data/striuct.gemspec +7 -4
  42. data/test/test_sglc-constructor.rb +36 -0
  43. data/test/test_subc-c-constructor.rb +88 -0
  44. data/test/{test_striuct-subclass-class-safety_naming.rb → test_subc-c-safety_naming.rb} +6 -5
  45. data/test/test_subc-f-enum.rb +139 -0
  46. data/test/test_subc-f-predicate.rb +647 -0
  47. data/test/{test_striuct-subclass-feature-validation_util.rb → test_subc-f-validation_util.rb} +10 -8
  48. data/test/test_subc-f_name.rb +525 -0
  49. data/test/{test_striuct-subclass-instance-accessor.rb → test_subc-i-accessor.rb} +3 -2
  50. data/test/test_subc-i-assign.rb +49 -0
  51. data/test/test_subc-i-cast.rb +27 -0
  52. data/test/{test_striuct-subclass-instance-default_value.rb → test_subc-i-default_value.rb} +2 -2
  53. data/test/{test_striuct-subclass-instance-hashlike.rb → test_subc-i-hashlike.rb} +0 -9
  54. data/test/{test_striuct-subclass-instance-lock.rb → test_subc-i-lock.rb} +8 -8
  55. data/test/{test_striuct-subclass-instance-to_s_family.rb → test_subc-i-to_s_family.rb} +1 -1
  56. data/test/{test_striuct-subclass-instance-validation_specific_conditions.rb → test_subc-i-validation_specific_conditions.rb} +50 -0
  57. data/test/test_version.rb +14 -0
  58. metadata +124 -80
  59. data/Manifest.txt +0 -97
  60. data/README.ja.old.rdoc +0 -298
  61. data/example/example.old.rdoc +0 -188
  62. data/lib/striuct/classmethods/hashy.rb +0 -22
  63. data/lib/striuct/classmethods/named.rb +0 -126
  64. data/lib/striuct/classmethods.rb +0 -1
  65. data/lib/striuct/instancemethods/inner_accessor.rb +0 -53
  66. data/lib/striuct/instancemethods/subscript.rb +0 -27
  67. data/lib/striuct/instancemethods.rb +0 -1
  68. data/lib/striuct/version.rb +0 -5
  69. data/test/test_striuct-singleton_class-define.rb +0 -19
  70. data/test/test_striuct-subclass-class-constructor.rb +0 -82
  71. data/test/test_striuct-subclass-class-validation.rb +0 -26
  72. data/test/test_striuct-subclass-instance-assign.rb +0 -30
  73. data/test/test_striuct-subclass-instance-enum.rb +0 -93
  74. data/test/test_striuct-subclass-instance-validation_functional_condition.rb +0 -51
  75. data/test/test_striuct-subclass-instance_names.rb +0 -18
  76. data/test/test_striuct-version.rb +0 -11
  77. /data/{History.rdoc → History.old(~0.3.n).rdoc} +0 -0
  78. /data/test/{test_striuct-subclass-class-macro.rb → test_subc-c-add_members.rb} +0 -0
  79. /data/test/{test_striuct-subclass-class-close.rb → test_subc-c-close_member.rb} +0 -0
  80. /data/test/{test_striuct-subclass-class-copy.rb → test_subc-c-copy.rb} +0 -0
  81. /data/test/{test_striuct-subclass-class-freeze.rb → test_subc-c-freeze.rb} +0 -0
  82. /data/test/{test_striuct-subclass-class-inheritable.rb → test_subc-c-inheritable.rb} +0 -0
  83. /data/test/{test_striuct-subclass-feature-alias_member.rb → test_subc-f-alias_member.rb} +0 -0
  84. /data/test/{test_striuct-subclass-feature-to_struct.rb → test_subc-f-to_struct.rb} +0 -0
  85. /data/test/{test_striuct-subclass-instance-adjuster.rb → test_subc-i-adjuster.rb} +0 -0
  86. /data/test/{test_striuct-subclass-instance-basic.rb → test_subc-i-basic.rb} +0 -0
  87. /data/test/{test_striuct-subclass-instance-compare.rb → test_subc-i-compare.rb} +0 -0
  88. /data/test/{test_striuct-subclass-instance-copy.rb → test_subc-i-copy.rb} +0 -0
  89. /data/test/{test_striuct-subclass-instance-freeze.rb → test_subc-i-freeze.rb} +0 -0
  90. /data/test/{test_striuct-subclass-instance-keyvalidatable.rb → test_subc-i-keyvalidatable.rb} +0 -0
  91. /data/test/{test_striuct-subclass-instance-validation_inference.rb → test_subc-i-validation_inference.rb} +0 -0
  92. /data/test/{test_striuct-subclass-instance-validation_with_getter.rb → test_subc-i-validation_with_getter.rb} +0 -0
@@ -1,27 +0,0 @@
1
- class Striuct; module InstanceMethods
2
-
3
- # @group Subscript
4
-
5
- # @param [Symbol, String, Fixnum] key
6
- def [](key)
7
- _get autonym_for_key(key)
8
- end
9
-
10
- # @param [Symbol, String, Fixnum] key
11
- # @param [Object] value
12
- # @return [value]
13
- def []=(key, value)
14
- autonym = autonym_for_key key
15
- _set autonym, value
16
- rescue Validation::InvalidWritingError
17
- $!.set_backtrace([
18
- "#{$!.backtrace[-1].sub(/[^:]+\z/){''}}in `[#{key.inspect}(#{autonym})]=': #{$!.message}",
19
- $!.backtrace[-1]
20
- ])
21
-
22
- raise
23
- end
24
-
25
- # @endgroup
26
-
27
- end; end
@@ -1 +0,0 @@
1
- require_relative 'instancemethods/requirements'
@@ -1,5 +0,0 @@
1
- class Striuct
2
-
3
- VERSION = '0.3.5.1'.freeze
4
-
5
- end
@@ -1,19 +0,0 @@
1
- require_relative 'helper'
2
-
3
- class Test_Striuct_Define < Test::Unit::TestCase
4
-
5
- def test_define
6
- assert_raises RuntimeError do
7
- Striuct.define do
8
- end
9
- end
10
-
11
- klass = Striuct.define do
12
- member :foo
13
- end
14
-
15
- assert_equal true, klass.closed?
16
- end
17
-
18
- end
19
-
@@ -1,82 +0,0 @@
1
- require_relative 'helper'
2
-
3
- class Test_Striuct_Subclass_Class_Constructor < 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
- User2 = Striuct.define do
14
- member :name, AND(String, NOT(''))
15
- member :age, Fixnum
16
- end
17
-
18
- def test_new
19
- klass = Striuct.new
20
- assert_kind_of Striuct, klass.new
21
-
22
- klass = Striuct.new :name, :age
23
-
24
- assert_equal klass.members, [:name, :age]
25
-
26
- klass = Striuct.new :foo do
27
- member :var
28
- end
29
-
30
- assert_equal klass.members, [:foo, :var]
31
- assert_equal User.members, [:id, :last_name, :family_name, :address, :age]
32
- end
33
-
34
- def test_define
35
- user = User2.define{|r|r.age = 1; r.name = 'a'}
36
- assert_same 1, user.age
37
-
38
- assert_raises RuntimeError do
39
- user.age = 1
40
- end
41
-
42
- user = User2.define{|r|r.age = 1; r.name = 'a'}
43
- assert_same 1, user.age
44
- assert_same true, user.lock?
45
- assert_same false, user.frozen?
46
-
47
- assert_raises RuntimeError do
48
- User2.define{|r|r.age = 1}
49
- end
50
-
51
- user = User2.define(lock: true){|r|r.age = 1; r.name = 'a'}
52
- assert_same 1, user.age
53
- assert_same true, user.lock?
54
- user = User2.define(lock: false){|r|r.age = 1; r.name = 'a'}
55
- assert_same false, user.lock?
56
- assert_equal true, user.strict?
57
-
58
- assert_raises Validation::InvalidWritingError do
59
- User2.define{|r|r.age = 1; r.name = 'a'; r.name.clear}
60
- end
61
-
62
- user = User2.define(strict: false){|r|r.age = 1; r.name = 'a'; r.name.clear}
63
- assert_equal '', user.name
64
- assert_equal false, user.strict?
65
- end
66
-
67
- Sth = Striuct.new :foo, :bar, :hoge
68
- SampleStruct = Struct.new :foo, :bar, :hoge
69
-
70
- def test_for_pairs_from_hash
71
- sth = Sth[hoge: 7, foo: 8]
72
-
73
- assert_equal [8, nil, 7], sth.values
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
-
82
- end
@@ -1,26 +0,0 @@
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,30 +0,0 @@
1
- require_relative 'helper'
2
-
3
- class Test_Striuct_Subclass_Instance_Assign < Test::Unit::TestCase
4
-
5
- Sth = Striuct.new do
6
- member :foo
7
- end
8
-
9
- def test_unassign
10
- sth = Sth.new
11
- assert_equal false, sth.assign?(:foo)
12
- sth.foo = nil
13
- assert_equal true, sth.assign?(:foo)
14
- sth.unassign :foo
15
- assert_equal false, sth.assign?(:foo)
16
- sth.foo = nil
17
- assert_equal true, sth.assign?(:foo)
18
- sth.clear_at 0
19
- assert_equal false, sth.assign?(:foo)
20
-
21
- assert_raises NameError do
22
- sth.unassign :var
23
- end
24
-
25
- assert_raises IndexError do
26
- sth.unassign 1
27
- end
28
- end
29
-
30
- end
@@ -1,93 +0,0 @@
1
- require_relative 'helper'
2
-
3
-
4
- class Test_Striuct_Subclass_Instance_Enum < Test::Unit::TestCase
5
-
6
- class User < Striuct.new
7
- member :id, Integer
8
- member :last_name, /\A\w+\z/
9
- member :family_name, /\A\w+\z/
10
- member :address, /\A((\w+) ?)+\z/
11
- member :age, ->age{(20..140).include? age}
12
- end
13
-
14
- def setup
15
- @user = User.new 9999, 'taro', 'yamada', 'Tokyo Japan', 30
16
- @user2 = User.new 9999, 'taro', 'yamada', 'Tokyo Japan', 30
17
- end
18
-
19
- def test_each
20
- assert_same @user, @user.each{}
21
- assert_kind_of Enumerator, enum = @user.each
22
- assert_equal enum.next, 9999
23
- assert_equal enum.next, 'taro'
24
- end
25
-
26
- def test_each_member
27
- assert_same @user, @user.each_member{}
28
- assert_kind_of Enumerator, enum = @user.each_member
29
- assert_equal :id, enum.next
30
- assert_equal :last_name, enum.next
31
- assert_equal :family_name, enum.next
32
- assert_equal :address, enum.next
33
- assert_equal :age, enum.next
34
- assert_raises StopIteration do
35
- enum.next
36
- end
37
- end
38
-
39
- def test_each_index
40
- assert_same @user, @user.each_index{}
41
- assert_kind_of Enumerator, enum = @user.each_index
42
- assert_equal 0, enum.next
43
- assert_equal 1, enum.next
44
- assert_equal 2, enum.next
45
- assert_equal 3, enum.next
46
- assert_equal 4, enum.next
47
- assert_raises StopIteration do
48
- enum.next
49
- end
50
- end
51
-
52
- def test_each_with_index
53
- assert_same @user, @user.each_with_index{}
54
- assert_kind_of Enumerator, @user.each_with_index
55
-
56
- r = []
57
- @user.each_with_index do |value, index|
58
- r << [value, index]
59
- end
60
-
61
- assert_equal [@user.each_value.to_a, @user.each_index.to_a].transpose, r
62
- end
63
-
64
- def test_each_member_with_index
65
- assert_same @user, @user.each_member_with_index{}
66
- assert_kind_of Enumerator, @user.each_member_with_index
67
-
68
- r = []
69
- @user.each_member_with_index do |name, index|
70
- r << [name, index]
71
- end
72
-
73
- assert_equal [@user.each_key.to_a, @user.each_index.to_a].transpose, r
74
- end
75
-
76
- Sth = Striuct.define do
77
- member :name
78
- member :age
79
- end
80
-
81
- def test_each_pair_with_index
82
- sth = Sth.new 'a', 10
83
- assert_same sth, sth.each_pair_with_index{}
84
-
85
- enum = sth.each_pair_with_index
86
- assert_equal [:name, 'a', 0], enum.next
87
- assert_equal [:age, 10, 1], enum.next
88
- assert_raises StopIteration do
89
- enum.next
90
- end
91
- end
92
-
93
- end
@@ -1,51 +0,0 @@
1
- require_relative 'helper'
2
-
3
- class TestStriuctFunctionalCondition < Test::Unit::TestCase
4
-
5
- Sthlambda = Striuct.new do
6
- member :lank, ->lank{lanks.include? lank}
7
- member :lanks
8
- default :lanks, 1..30
9
- end
10
-
11
- def test_lambda
12
- sth = Sthlambda.new
13
- sth.lank = 2
14
- assert_equal 2, sth.lank
15
-
16
- assert_raises Validation::InvalidWritingError do
17
- sth.lank = 31
18
- end
19
- end
20
-
21
- max = 9
22
-
23
- SthProc = Striuct.new do
24
- member :lank, Proc.new{|n|(3..max) === n}
25
- end
26
-
27
- def test_Proc
28
- sth = SthProc.new
29
- sth.lank = 8
30
- assert_equal 8, sth.lank
31
-
32
- assert_raises Validation::InvalidWritingError do
33
- sth.lank = 2
34
- end
35
- end
36
-
37
- SthMethod = Striuct.new do
38
- member :lank, 7.method(:<)
39
- end
40
-
41
- def test_Method
42
- sth = SthMethod.new
43
- sth.lank = 8
44
- assert_equal 8, sth.lank
45
-
46
- assert_raises Validation::InvalidWritingError do
47
- sth.lank = 6
48
- end
49
- end
50
-
51
- end
@@ -1,18 +0,0 @@
1
- require_relative 'helper'
2
-
3
- class Test_Striuct_Subclass_Instance_Names < 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_members
14
- user = User.new 9999, 'taro', 'yamada', 'Tokyo Japan', 30
15
- assert_equal user.members, [:id, :last_name, :family_name, :address, :age]
16
- end
17
-
18
- end
@@ -1,11 +0,0 @@
1
- require_relative 'helper'
2
-
3
- class Test_Striuct_Version < Test::Unit::TestCase
4
-
5
- def test_const_version
6
- assert_kind_of String, Striuct::VERSION
7
- assert(/\A\d+\.\d+\.\d+(\.\w+)?\z/ =~ Striuct::VERSION)
8
- assert_equal true, Striuct::VERSION.frozen?
9
- end
10
-
11
- end
File without changes