striuct 0.4.3 → 0.4.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +11 -0
- data/example/README.rb +8 -1
- data/lib/striuct.rb +4 -0
- data/lib/striuct/classmethods/attributes.rb +4 -2
- data/lib/striuct/classmethods/constructor.rb +4 -6
- data/lib/striuct/classmethods/inner.rb +11 -0
- data/lib/striuct/classmethods/macro.rb +6 -0
- data/lib/striuct/classmethods/predicate.rb +11 -0
- data/lib/striuct/instancemethods/assign.rb +3 -0
- data/lib/striuct/instancemethods/delegate_class_methods.rb +2 -1
- data/lib/striuct/instancemethods/object.rb +40 -8
- data/lib/striuct/instancemethods/to_s.rb +13 -5
- data/striuct.gemspec +4 -2
- data/test/test_subc-f-predicate.rb +64 -0
- data/test/test_subc-f_debug.rb +39 -0
- data/test/test_subc-i-must.rb +30 -0
- data/test/test_subc-i-to_s_family.rb +12 -11
- metadata +10 -6
data/README.md
CHANGED
@@ -94,6 +94,17 @@ foo.with_adjuster = '5'
|
|
94
94
|
foo.with_adjuster #=> 5 # Casted via adjuster
|
95
95
|
```
|
96
96
|
|
97
|
+
### Overview - Case 3
|
98
|
+
|
99
|
+
```ruby
|
100
|
+
class UseMustOption < Striuct
|
101
|
+
member :foo, Integer, must: true
|
102
|
+
end
|
103
|
+
|
104
|
+
UseMustOption.new #=> InvalidOperationError "`foo` require a value under `must` option "
|
105
|
+
```
|
106
|
+
|
107
|
+
|
97
108
|
### How to build flexible conditions ?
|
98
109
|
|
99
110
|
* That from validation library.
|
data/example/README.rb
CHANGED
@@ -43,4 +43,11 @@ foo.bar = 1.2
|
|
43
43
|
#~ foo.bar = 1 #=> error
|
44
44
|
|
45
45
|
foo.with_adjuster = '5'
|
46
|
-
p foo.with_adjuster
|
46
|
+
p foo.with_adjuster
|
47
|
+
|
48
|
+
class UseMustOption < Striuct
|
49
|
+
member :foo, Integer, must: true
|
50
|
+
end
|
51
|
+
|
52
|
+
#~ p UseMustOption.new #=> InvalidOperationError
|
53
|
+
p UseMustOption.new(1)
|
data/lib/striuct.rb
CHANGED
@@ -1,17 +1,19 @@
|
|
1
1
|
class Striuct; module ClassMethods
|
2
2
|
|
3
|
-
# Attributes for each
|
3
|
+
# Attributes for autonym of each member
|
4
4
|
class Attributes
|
5
5
|
|
6
6
|
VALUES = [ :condition,
|
7
7
|
:adjuster ].freeze
|
8
8
|
|
9
9
|
BOOLEANS = [ :inference,
|
10
|
+
:must,
|
10
11
|
:safety_setter,
|
11
12
|
:safety_getter ].freeze
|
12
13
|
|
13
14
|
def initialize
|
14
15
|
@hash = { inference: false,
|
16
|
+
must: false,
|
15
17
|
safety_setter: false,
|
16
18
|
safety_getter: false }
|
17
19
|
end
|
@@ -47,7 +49,7 @@ class Striuct; module ClassMethods
|
|
47
49
|
@hash.fetch role
|
48
50
|
end
|
49
51
|
|
50
|
-
define_method "#{role}="
|
52
|
+
define_method :"#{role}=" do |arg|
|
51
53
|
raise TypeError unless arg.equal?(true) or arg.equal?(false)
|
52
54
|
|
53
55
|
@hash[role] = arg
|
@@ -17,13 +17,11 @@ class Striuct; module ClassMethods
|
|
17
17
|
def for_pairs(pairs)
|
18
18
|
raise TypeError, 'no pairs object' unless pairs.respond_to?(:each_pair)
|
19
19
|
KeyValidatable.validate_array KeyValidatable.keys_for(pairs).map(&:to_sym),
|
20
|
-
|
20
|
+
let: all_members
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
26
|
-
}
|
22
|
+
instance = allocate
|
23
|
+
instance.__send__ :initialize_for_pairs, pairs
|
24
|
+
instance
|
27
25
|
end
|
28
26
|
|
29
27
|
alias_method :[], :for_pairs
|
@@ -2,6 +2,17 @@ class Striuct; module ClassMethods
|
|
2
2
|
|
3
3
|
# @group Inner Methods
|
4
4
|
|
5
|
+
# for debug
|
6
|
+
# @return [Hash]
|
7
|
+
def attributes
|
8
|
+
{
|
9
|
+
autonyms: @autonyms.dup,
|
10
|
+
aliases: @aliases.dup,
|
11
|
+
conflict_management_level: @conflict_management_level,
|
12
|
+
attributes_each_autonym: @attributes.dup
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
5
16
|
private
|
6
17
|
|
7
18
|
def _init
|
@@ -10,6 +10,7 @@ class Striuct; module ClassMethods
|
|
10
10
|
opt :default_proc, aliases: [:lazy_default]
|
11
11
|
conflict :default_value, :default_proc
|
12
12
|
opt :inference, default: false
|
13
|
+
opt :must, default: false
|
13
14
|
opt :setter_validation, aliases: [:writer_validation], default: true
|
14
15
|
opt :getter_validation, aliases: [:reader_validation], default: false
|
15
16
|
}
|
@@ -22,6 +23,7 @@ class Striuct; module ClassMethods
|
|
22
23
|
# @option options [BasicObject] :default
|
23
24
|
# @option options [Proc] :default_proc
|
24
25
|
# @option options [Boolean] :inference
|
26
|
+
# @option options [Boolean] :must
|
25
27
|
# @option options [Boolean] :reader_validation
|
26
28
|
# @option options [Boolean] :getter_validation
|
27
29
|
# @option options [Boolean] :writer_validation
|
@@ -45,6 +47,10 @@ class Striuct; module ClassMethods
|
|
45
47
|
_attributes_for(autonym).inference = true
|
46
48
|
end
|
47
49
|
|
50
|
+
if options.must
|
51
|
+
_attributes_for(autonym).must = true
|
52
|
+
end
|
53
|
+
|
48
54
|
_def_getter autonym
|
49
55
|
_def_setter autonym, condition, &adjuster
|
50
56
|
|
@@ -92,6 +92,17 @@ class Striuct; module ClassMethods
|
|
92
92
|
_attributes_for(autonym).with_inference?
|
93
93
|
end
|
94
94
|
|
95
|
+
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
96
|
+
def with_must?(key)
|
97
|
+
autonym = autonym_for_key key
|
98
|
+
rescue Exception
|
99
|
+
false
|
100
|
+
else
|
101
|
+
_attributes_for(autonym).with_must?
|
102
|
+
end
|
103
|
+
|
104
|
+
alias_method :must?, :with_must?
|
105
|
+
|
95
106
|
# @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
|
96
107
|
def with_safety_getter?(key)
|
97
108
|
autonym = autonym_for_key key
|
@@ -8,7 +8,7 @@ class Striuct; module InstanceMethods
|
|
8
8
|
:autonym_for_member,
|
9
9
|
:autonym_for_index,
|
10
10
|
:autonym_for_key,
|
11
|
-
:autonyms, :members, :all_members, :aliases,
|
11
|
+
:autonyms, :members, :all_members, :aliases, :attributes,
|
12
12
|
:has_autonym?, :autonym?,
|
13
13
|
:has_alias?, :alias?, :aliased?,
|
14
14
|
:has_member?, :member?,
|
@@ -22,6 +22,7 @@ class Striuct; module InstanceMethods
|
|
22
22
|
:with_safety_getter?, :with_safety_reader?,
|
23
23
|
:with_safety_setter?, :with_safety_writer?,
|
24
24
|
:with_inference?,
|
25
|
+
:with_must?, :must?,
|
25
26
|
:with_default?,
|
26
27
|
:default_value_for, :default_type_for,
|
27
28
|
:with_adjuster?,
|
@@ -1,26 +1,52 @@
|
|
1
1
|
class Striuct; module InstanceMethods
|
2
2
|
|
3
3
|
# @group Basic Methods for Ruby's Object
|
4
|
-
|
5
|
-
def initialize(*values)
|
6
|
-
@db, @locks = {}, {}
|
7
|
-
replace_values(*values)
|
8
|
-
excess_autonyms = _autonyms.last(size - values.size)
|
9
|
-
_set_defaults(*excess_autonyms)
|
10
|
-
end
|
11
4
|
|
12
5
|
# @return [self]
|
13
6
|
def freeze
|
14
7
|
@db.freeze; @locks.freeze
|
15
8
|
super
|
16
9
|
end
|
17
|
-
|
10
|
+
|
18
11
|
private
|
12
|
+
|
13
|
+
def initialize(*values)
|
14
|
+
_initialize_database
|
15
|
+
|
16
|
+
replace_values(*values)
|
17
|
+
excess_autonyms = _autonyms.last(size - values.size)
|
18
|
+
_set_defaults(*excess_autonyms)
|
19
|
+
|
20
|
+
each_autonym do |autonym|
|
21
|
+
_check_must autonym
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize_for_pairs(pairs)
|
26
|
+
_initialize_database
|
27
|
+
|
28
|
+
excess_autonyms = _autonyms.dup
|
29
|
+
pairs.each_pair do |key, value|
|
30
|
+
autonym = autonym_for_key key
|
31
|
+
self[autonym] = value
|
32
|
+
excess_autonyms.delete autonym
|
33
|
+
end
|
34
|
+
|
35
|
+
_set_defaults(*excess_autonyms)
|
36
|
+
|
37
|
+
excess_autonyms.each do |autonym|
|
38
|
+
_check_must autonym
|
39
|
+
end
|
40
|
+
end
|
19
41
|
|
20
42
|
def initialize_copy(original)
|
21
43
|
@db, @locks = @db.dup, {}
|
22
44
|
end
|
23
45
|
|
46
|
+
def _initialize_database
|
47
|
+
@db, @locks = {}, {}
|
48
|
+
end
|
49
|
+
|
24
50
|
def _check_frozen
|
25
51
|
raise "can't modify frozen #{self.class}" if frozen?
|
26
52
|
end
|
@@ -29,6 +55,12 @@ class Striuct; module InstanceMethods
|
|
29
55
|
raise "can't modify locked member `#{key}`" if locked? key
|
30
56
|
end
|
31
57
|
|
58
|
+
def _check_must(key)
|
59
|
+
if must?(key) && !assigned?(key)
|
60
|
+
raise InvalidOperationError, "`#{key}` require a value under `must` option"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
32
64
|
# @endgroup
|
33
65
|
|
34
66
|
end; end
|
@@ -4,13 +4,21 @@ class Striuct; module InstanceMethods
|
|
4
4
|
|
5
5
|
# @return [String]
|
6
6
|
def inspect
|
7
|
-
"#<struct' #{self.class}
|
7
|
+
"#<struct' #{self.class}".tap {|s|
|
8
8
|
each_pair do |autonym, value|
|
9
9
|
suffix = (with_default?(autonym) && default?(autonym)) ? '/default' : nil
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
label_valid = valid?(autonym) ? nil : :invalid
|
11
|
+
label_lock = locked?(autonym) ? :locked : nil
|
12
|
+
label_must = must?(autonym) ? :must : nil
|
13
|
+
labels = [label_valid, label_lock, label_must].select{|_|_}
|
14
|
+
|
15
|
+
s << " #{autonym}=#{value.inspect}#{suffix}"
|
16
|
+
unless labels.empty?
|
17
|
+
s << '('
|
18
|
+
s << labels.join(', ')
|
19
|
+
s << ')'
|
20
|
+
end
|
21
|
+
s << ','
|
14
22
|
end
|
15
23
|
|
16
24
|
s.chop!
|
data/striuct.gemspec
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
Gem::Specification.new do |gem|
|
2
2
|
# specific
|
3
3
|
|
4
|
-
gem.description = %q{Struct++ library
|
4
|
+
gem.description = %q{Struct++ library.
|
5
|
+
|
6
|
+
---
|
5
7
|
|
6
8
|
Validatable, Inheritable, Member Aliasing,
|
7
9
|
Conflict Management, Default Value, Divide nil with unassign,
|
@@ -11,7 +13,7 @@ Gem::Specification.new do |gem|
|
|
11
13
|
gem.homepage = 'http://kachick.github.com/striuct/'
|
12
14
|
gem.license = 'MIT'
|
13
15
|
gem.name = 'striuct'
|
14
|
-
gem.version = '0.4.
|
16
|
+
gem.version = '0.4.4'
|
15
17
|
|
16
18
|
gem.required_ruby_version = '>= 1.9.2'
|
17
19
|
|
@@ -382,6 +382,70 @@ class Test_Striuct_Subclass_Predicate_InferenceValidation < Test::Unit::TestCase
|
|
382
382
|
|
383
383
|
end
|
384
384
|
|
385
|
+
class Test_Striuct_Subclass_Predicate_Must < Test::Unit::TestCase
|
386
|
+
|
387
|
+
class Subclass < Striuct
|
388
|
+
member :no_with
|
389
|
+
alias_member :als_no_with, :no_with
|
390
|
+
member :with, BasicObject, must: true
|
391
|
+
alias_member :als_with, :with
|
392
|
+
member :with_any, BasicObject, must: true
|
393
|
+
alias_member :als_with_any, :with_any
|
394
|
+
member(:adj_with, BasicObject, must: true) do |_|; end
|
395
|
+
alias_member :als_adj_with, :adj_with
|
396
|
+
|
397
|
+
close_member
|
398
|
+
end.freeze
|
399
|
+
|
400
|
+
INSTANCE = Subclass[als_with: 1, als_with_any: 1, adj_with: 1].freeze
|
401
|
+
|
402
|
+
TYPE_PAIRS = {
|
403
|
+
class: Subclass,
|
404
|
+
instance: INSTANCE
|
405
|
+
}.freeze
|
406
|
+
|
407
|
+
[:with_must?, :must?].each do |predicate|
|
408
|
+
TYPE_PAIRS.each_pair do |type, reciever|
|
409
|
+
define_method :"test_#{type}_#{predicate}" do
|
410
|
+
assert_same false, reciever.public_send(predicate, :no_with)
|
411
|
+
assert_same false, reciever.public_send(predicate, :als_no_with)
|
412
|
+
assert_same false, reciever.public_send(predicate, 'no_with')
|
413
|
+
assert_same false, reciever.public_send(predicate, 'als_no_with')
|
414
|
+
assert_same false, reciever.public_send(predicate, 0)
|
415
|
+
assert_same false, reciever.public_send(predicate, 0.9)
|
416
|
+
|
417
|
+
assert_same true, reciever.public_send(predicate, :with)
|
418
|
+
assert_same true, reciever.public_send(predicate, :als_with)
|
419
|
+
assert_same true, reciever.public_send(predicate, 'with')
|
420
|
+
assert_same true, reciever.public_send(predicate, 'als_with')
|
421
|
+
assert_same true, reciever.public_send(predicate, 1)
|
422
|
+
assert_same true, reciever.public_send(predicate, 1.9)
|
423
|
+
|
424
|
+
assert_same true, reciever.public_send(predicate, :with_any)
|
425
|
+
assert_same true, reciever.public_send(predicate, :als_with_any)
|
426
|
+
assert_same true, reciever.public_send(predicate, 'with_any')
|
427
|
+
assert_same true, reciever.public_send(predicate, 'als_with_any')
|
428
|
+
assert_same true, reciever.public_send(predicate, 2)
|
429
|
+
assert_same true, reciever.public_send(predicate, 2.9)
|
430
|
+
|
431
|
+
assert_same true, reciever.public_send(predicate, :adj_with)
|
432
|
+
assert_same true, reciever.public_send(predicate, :als_adj_with)
|
433
|
+
assert_same true, reciever.public_send(predicate, 'adj_with')
|
434
|
+
assert_same true, reciever.public_send(predicate, 'als_adj_with')
|
435
|
+
assert_same true, reciever.public_send(predicate, 3)
|
436
|
+
assert_same true, reciever.public_send(predicate, 3.9)
|
437
|
+
|
438
|
+
assert_same false, reciever.public_send(predicate, :none)
|
439
|
+
assert_same false, reciever.public_send(predicate, 'none')
|
440
|
+
assert_same false, reciever.public_send(predicate, 4)
|
441
|
+
assert_same false, reciever.public_send(predicate, 4.9)
|
442
|
+
assert_same false, reciever.public_send(predicate, BasicObject.new)
|
443
|
+
end
|
444
|
+
end
|
445
|
+
end
|
446
|
+
|
447
|
+
end
|
448
|
+
|
385
449
|
|
386
450
|
class Test_Striuct_Subclass_Predicate_HookTiming_Setter_Enable < Test::Unit::TestCase
|
387
451
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
class Test_Striuct_Subclass_Debug < Test::Unit::TestCase
|
4
|
+
|
5
|
+
Subclass = Striuct.define do
|
6
|
+
member :foo
|
7
|
+
member :bar
|
8
|
+
alias_member :als_foo, :foo
|
9
|
+
end.freeze
|
10
|
+
|
11
|
+
INSTANCE = Subclass.new.freeze
|
12
|
+
|
13
|
+
TYPE_PAIRS = {
|
14
|
+
Class: Subclass,
|
15
|
+
Instance: INSTANCE
|
16
|
+
}.freeze
|
17
|
+
|
18
|
+
[:attributes].each do |callee|
|
19
|
+
TYPE_PAIRS.each_pair do |type, reciever|
|
20
|
+
define_method :"test_#{type}_#{callee}" do
|
21
|
+
assert_same true, reciever.public_methods.include?(callee)
|
22
|
+
ret = reciever.public_send(callee)
|
23
|
+
assert_instance_of Hash, ret
|
24
|
+
assert_equal [:autonyms, :aliases, :conflict_management_level, :attributes_each_autonym], ret.keys
|
25
|
+
assert_equal Subclass.autonyms, ret.fetch(:autonyms)
|
26
|
+
assert_equal Subclass.aliases, ret.fetch(:aliases)
|
27
|
+
assert_equal Subclass.conflict_management_level, ret.fetch(:conflict_management_level)
|
28
|
+
assert_equal Subclass.instance_variable_get(:@attributes), ret.fetch(:attributes_each_autonym)
|
29
|
+
|
30
|
+
10.times do
|
31
|
+
ret2 = reciever.public_send(callee)
|
32
|
+
assert_not_same ret, ret2
|
33
|
+
assert_equal ret, ret2
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
class Test_Striuct_Subclass_Must < Test::Unit::TestCase
|
4
|
+
|
5
|
+
Sth = Striuct.define do
|
6
|
+
member :foo, ANYTHING?, must: false
|
7
|
+
member :bar, ANYTHING?, must: true
|
8
|
+
member :baz
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_must
|
12
|
+
assert_raises(Striuct::InvalidOperationError) do
|
13
|
+
Sth.new :foo
|
14
|
+
end
|
15
|
+
|
16
|
+
assert_raises(Striuct::InvalidOperationError) do
|
17
|
+
Sth.new foo: :foo, baz: :baz
|
18
|
+
end
|
19
|
+
|
20
|
+
sth = Sth.new :foo, :bar, :baz
|
21
|
+
assert_instance_of(Sth, sth)
|
22
|
+
|
23
|
+
assert_raises(Striuct::InvalidOperationError) do
|
24
|
+
sth.unassign :bar
|
25
|
+
end
|
26
|
+
|
27
|
+
assert_nil(sth.bar = nil)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -3,23 +3,24 @@ require_relative 'helper'
|
|
3
3
|
class Test_Striuct_Subclass_Instance_to_s_Family < Test::Unit::TestCase
|
4
4
|
|
5
5
|
class User < Striuct.new
|
6
|
-
member :id, Integer
|
7
|
-
member :
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
member :id, Integer, must: true
|
7
|
+
member :name, /\w+/
|
8
|
+
end
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@sth = User.new 9999, 'taro'
|
12
|
+
@sth.lock(:name)
|
13
|
+
@sth.name.clear
|
11
14
|
end
|
12
15
|
|
13
16
|
def test_to_s
|
14
|
-
|
15
|
-
|
16
|
-
user.to_s
|
17
|
+
assert_equal %q!#<struct' Test_Striuct_Subclass_Instance_to_s_Family::User id=9999, name="">!,
|
18
|
+
@sth.to_s
|
17
19
|
end
|
18
20
|
|
19
21
|
def test_inspect
|
20
|
-
|
21
|
-
|
22
|
-
user.inspect
|
22
|
+
assert_equal %q!#<struct' Test_Striuct_Subclass_Instance_to_s_Family::User id=9999(must), name=""(invalid, locked)>!,
|
23
|
+
@sth.inspect
|
23
24
|
end
|
24
25
|
|
25
26
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: striuct
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-06-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: validation
|
@@ -125,7 +125,7 @@ dependencies:
|
|
125
125
|
- - <
|
126
126
|
- !ruby/object:Gem::Version
|
127
127
|
version: '2'
|
128
|
-
description: ! "Struct++ library\n\n Validatable, Inheritable, Member Aliasing,\n
|
128
|
+
description: ! "Struct++ library.\n\n---\n\n Validatable, Inheritable, Member Aliasing,\n
|
129
129
|
\ Conflict Management, Default Value, Divide nil with unassign,\n Lock setter of
|
130
130
|
each member, Hash flendly API, ... And more Struct++ features :)"
|
131
131
|
email:
|
@@ -202,6 +202,7 @@ files:
|
|
202
202
|
- test/test_subc-f-predicate.rb
|
203
203
|
- test/test_subc-f-to_struct.rb
|
204
204
|
- test/test_subc-f-validation_util.rb
|
205
|
+
- test/test_subc-f_debug.rb
|
205
206
|
- test/test_subc-f_name.rb
|
206
207
|
- test/test_subc-i-accessor.rb
|
207
208
|
- test/test_subc-i-adjuster.rb
|
@@ -215,6 +216,7 @@ files:
|
|
215
216
|
- test/test_subc-i-hashlike.rb
|
216
217
|
- test/test_subc-i-keyvalidatable.rb
|
217
218
|
- test/test_subc-i-lock.rb
|
219
|
+
- test/test_subc-i-must.rb
|
218
220
|
- test/test_subc-i-to_s_family.rb
|
219
221
|
- test/test_subc-i-validation_inference.rb
|
220
222
|
- test/test_subc-i-validation_specific_conditions.rb
|
@@ -244,9 +246,9 @@ rubyforge_project:
|
|
244
246
|
rubygems_version: 1.8.23
|
245
247
|
signing_key:
|
246
248
|
specification_version: 3
|
247
|
-
summary: Struct++ library Validatable, Inheritable, Member Aliasing, Conflict
|
248
|
-
Default Value, Divide nil with unassign, Lock setter of each member,
|
249
|
-
API, ... And more Struct++ features :)
|
249
|
+
summary: Struct++ library. --- Validatable, Inheritable, Member Aliasing, Conflict
|
250
|
+
Management, Default Value, Divide nil with unassign, Lock setter of each member,
|
251
|
+
Hash flendly API, ... And more Struct++ features :)
|
250
252
|
test_files:
|
251
253
|
- test/helper.rb
|
252
254
|
- test/test_sglc-constructor.rb
|
@@ -262,6 +264,7 @@ test_files:
|
|
262
264
|
- test/test_subc-f-predicate.rb
|
263
265
|
- test/test_subc-f-to_struct.rb
|
264
266
|
- test/test_subc-f-validation_util.rb
|
267
|
+
- test/test_subc-f_debug.rb
|
265
268
|
- test/test_subc-f_name.rb
|
266
269
|
- test/test_subc-i-accessor.rb
|
267
270
|
- test/test_subc-i-adjuster.rb
|
@@ -275,6 +278,7 @@ test_files:
|
|
275
278
|
- test/test_subc-i-hashlike.rb
|
276
279
|
- test/test_subc-i-keyvalidatable.rb
|
277
280
|
- test/test_subc-i-lock.rb
|
281
|
+
- test/test_subc-i-must.rb
|
278
282
|
- test/test_subc-i-to_s_family.rb
|
279
283
|
- test/test_subc-i-validation_inference.rb
|
280
284
|
- test/test_subc-i-validation_specific_conditions.rb
|