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.
- data/.travis.yml +3 -0
- data/.yardopts +1 -1
- data/LICENSE +1 -1
- data/README.md +7 -3
- data/example/example1.rb +5 -4
- data/lib/striuct/classmethods/README.md +9 -4
- data/lib/striuct/classmethods/adjustment.rb +4 -15
- data/lib/striuct/{attributes.rb → classmethods/attributes.rb} +15 -17
- data/lib/striuct/classmethods/{prevent_conflicts.rb → conflict_management.rb} +37 -14
- data/lib/striuct/classmethods/constructor.rb +2 -4
- data/lib/striuct/classmethods/copy.rb +2 -2
- data/lib/striuct/classmethods/default.rb +9 -18
- data/lib/striuct/classmethods/enum.rb +3 -5
- data/lib/striuct/classmethods/inner.rb +6 -10
- data/lib/striuct/classmethods/macro.rb +33 -48
- data/lib/striuct/classmethods/names.rb +75 -0
- data/lib/striuct/classmethods/predicate.rb +128 -0
- data/lib/striuct/classmethods/{requiremnets.rb → requirements.rb} +6 -3
- data/lib/striuct/classmethods/validation.rb +5 -43
- data/lib/striuct/instancemethods/README.md +4 -4
- data/lib/striuct/instancemethods/assign.rb +11 -13
- data/lib/striuct/instancemethods/cast.rb +5 -8
- data/lib/striuct/instancemethods/compare.rb +6 -6
- data/lib/striuct/instancemethods/default.rb +28 -6
- data/lib/striuct/instancemethods/delegate_class_methods.rb +21 -21
- data/lib/striuct/instancemethods/enum.rb +3 -9
- data/lib/striuct/instancemethods/getter.rb +47 -0
- data/lib/striuct/instancemethods/hashy.rb +2 -6
- data/lib/striuct/instancemethods/keyvalidatable.rb +0 -5
- data/lib/striuct/instancemethods/lock.rb +35 -43
- data/lib/striuct/instancemethods/object.rb +3 -26
- data/lib/striuct/instancemethods/requirements.rb +16 -2
- data/lib/striuct/instancemethods/safety.rb +1 -1
- data/lib/striuct/instancemethods/setter.rb +58 -0
- data/lib/striuct/instancemethods/to_s.rb +2 -2
- data/lib/striuct/instancemethods/validation.rb +13 -7
- data/lib/striuct/instancemethods/values.rb +8 -7
- data/lib/striuct/requirements.rb +2 -5
- data/lib/striuct/{hashdeepdupulicatable.rb → singleton_class/hashdeepdupulicatable.rb} +2 -2
- data/lib/striuct/singleton_class.rb +3 -4
- data/striuct.gemspec +7 -4
- data/test/test_sglc-constructor.rb +36 -0
- data/test/test_subc-c-constructor.rb +88 -0
- data/test/{test_striuct-subclass-class-safety_naming.rb → test_subc-c-safety_naming.rb} +6 -5
- data/test/test_subc-f-enum.rb +139 -0
- data/test/test_subc-f-predicate.rb +647 -0
- data/test/{test_striuct-subclass-feature-validation_util.rb → test_subc-f-validation_util.rb} +10 -8
- data/test/test_subc-f_name.rb +525 -0
- data/test/{test_striuct-subclass-instance-accessor.rb → test_subc-i-accessor.rb} +3 -2
- data/test/test_subc-i-assign.rb +49 -0
- data/test/test_subc-i-cast.rb +27 -0
- data/test/{test_striuct-subclass-instance-default_value.rb → test_subc-i-default_value.rb} +2 -2
- data/test/{test_striuct-subclass-instance-hashlike.rb → test_subc-i-hashlike.rb} +0 -9
- data/test/{test_striuct-subclass-instance-lock.rb → test_subc-i-lock.rb} +8 -8
- data/test/{test_striuct-subclass-instance-to_s_family.rb → test_subc-i-to_s_family.rb} +1 -1
- data/test/{test_striuct-subclass-instance-validation_specific_conditions.rb → test_subc-i-validation_specific_conditions.rb} +50 -0
- data/test/test_version.rb +14 -0
- metadata +124 -80
- data/Manifest.txt +0 -97
- data/README.ja.old.rdoc +0 -298
- data/example/example.old.rdoc +0 -188
- data/lib/striuct/classmethods/hashy.rb +0 -22
- data/lib/striuct/classmethods/named.rb +0 -126
- data/lib/striuct/classmethods.rb +0 -1
- data/lib/striuct/instancemethods/inner_accessor.rb +0 -53
- data/lib/striuct/instancemethods/subscript.rb +0 -27
- data/lib/striuct/instancemethods.rb +0 -1
- data/lib/striuct/version.rb +0 -5
- data/test/test_striuct-singleton_class-define.rb +0 -19
- data/test/test_striuct-subclass-class-constructor.rb +0 -82
- data/test/test_striuct-subclass-class-validation.rb +0 -26
- data/test/test_striuct-subclass-instance-assign.rb +0 -30
- data/test/test_striuct-subclass-instance-enum.rb +0 -93
- data/test/test_striuct-subclass-instance-validation_functional_condition.rb +0 -51
- data/test/test_striuct-subclass-instance_names.rb +0 -18
- data/test/test_striuct-version.rb +0 -11
- /data/{History.rdoc → History.old(~0.3.n).rdoc} +0 -0
- /data/test/{test_striuct-subclass-class-macro.rb → test_subc-c-add_members.rb} +0 -0
- /data/test/{test_striuct-subclass-class-close.rb → test_subc-c-close_member.rb} +0 -0
- /data/test/{test_striuct-subclass-class-copy.rb → test_subc-c-copy.rb} +0 -0
- /data/test/{test_striuct-subclass-class-freeze.rb → test_subc-c-freeze.rb} +0 -0
- /data/test/{test_striuct-subclass-class-inheritable.rb → test_subc-c-inheritable.rb} +0 -0
- /data/test/{test_striuct-subclass-feature-alias_member.rb → test_subc-f-alias_member.rb} +0 -0
- /data/test/{test_striuct-subclass-feature-to_struct.rb → test_subc-f-to_struct.rb} +0 -0
- /data/test/{test_striuct-subclass-instance-adjuster.rb → test_subc-i-adjuster.rb} +0 -0
- /data/test/{test_striuct-subclass-instance-basic.rb → test_subc-i-basic.rb} +0 -0
- /data/test/{test_striuct-subclass-instance-compare.rb → test_subc-i-compare.rb} +0 -0
- /data/test/{test_striuct-subclass-instance-copy.rb → test_subc-i-copy.rb} +0 -0
- /data/test/{test_striuct-subclass-instance-freeze.rb → test_subc-i-freeze.rb} +0 -0
- /data/test/{test_striuct-subclass-instance-keyvalidatable.rb → test_subc-i-keyvalidatable.rb} +0 -0
- /data/test/{test_striuct-subclass-instance-validation_inference.rb → test_subc-i-validation_inference.rb} +0 -0
- /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'
|
data/lib/striuct/version.rb
DELETED
@@ -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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
/data/test/{test_striuct-subclass-instance-keyvalidatable.rb → test_subc-i-keyvalidatable.rb}
RENAMED
File without changes
|
File without changes
|
File without changes
|