striuct 0.3.5.1 → 0.4.0

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 (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