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