striuct 0.6.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE.txt +21 -0
  3. data/README.md +44 -60
  4. data/lib/striuct/{requirements.rb → bootstrap.rb} +6 -2
  5. data/lib/striuct/classmethods/README.md +2 -2
  6. data/lib/striuct/classmethods/adjustment.rb +77 -13
  7. data/lib/striuct/classmethods/attributes.rb +94 -92
  8. data/lib/striuct/classmethods/conflict_management.rb +109 -106
  9. data/lib/striuct/classmethods/constructor.rb +55 -65
  10. data/lib/striuct/classmethods/copy.rb +45 -43
  11. data/lib/striuct/classmethods/default.rb +23 -21
  12. data/lib/striuct/classmethods/enum.rb +46 -44
  13. data/lib/striuct/classmethods/fix.rb +23 -21
  14. data/lib/striuct/classmethods/hashdeepdupulicatable.rb +15 -15
  15. data/lib/striuct/classmethods/inner.rb +57 -55
  16. data/lib/striuct/classmethods/length.rb +12 -10
  17. data/lib/striuct/classmethods/macro.rb +99 -106
  18. data/lib/striuct/classmethods/names.rb +69 -65
  19. data/lib/striuct/classmethods/predicate.rb +131 -129
  20. data/lib/striuct/classmethods/requirements.rb +2 -2
  21. data/lib/striuct/classmethods/to_struct.rb +21 -18
  22. data/lib/striuct/classmethods/validation.rb +15 -13
  23. data/lib/striuct/instancemethods/README.md +2 -2
  24. data/lib/striuct/instancemethods/assign.rb +29 -27
  25. data/lib/striuct/instancemethods/cast.rb +28 -26
  26. data/lib/striuct/instancemethods/compare.rb +26 -24
  27. data/lib/striuct/instancemethods/default.rb +31 -29
  28. data/lib/striuct/instancemethods/delegate_class_methods.rb +35 -33
  29. data/lib/striuct/instancemethods/enum.rb +86 -84
  30. data/lib/striuct/instancemethods/getter.rb +39 -37
  31. data/lib/striuct/instancemethods/hashy.rb +99 -97
  32. data/lib/striuct/instancemethods/lock.rb +46 -44
  33. data/lib/striuct/instancemethods/object.rb +50 -48
  34. data/lib/striuct/instancemethods/requirements.rb +9 -13
  35. data/lib/striuct/instancemethods/safety.rb +11 -9
  36. data/lib/striuct/instancemethods/setter.rb +46 -45
  37. data/lib/striuct/instancemethods/to_s.rb +39 -37
  38. data/lib/striuct/instancemethods/validation.rb +46 -29
  39. data/lib/striuct/instancemethods/values.rb +50 -48
  40. data/lib/striuct/singleton_class.rb +25 -18
  41. data/lib/striuct/structs.rb +3 -3
  42. data/lib/striuct.rb +7 -3
  43. metadata +18 -209
  44. data/.gitignore +0 -35
  45. data/.travis.yml +0 -17
  46. data/.yardopts +0 -1
  47. data/Gemfile +0 -11
  48. data/MIT-LICENSE +0 -22
  49. data/Rakefile +0 -11
  50. data/benchmark/basics.rb +0 -56
  51. data/example/README.rb +0 -50
  52. data/example/example1.rb +0 -195
  53. data/example/example2.rb +0 -20
  54. data/example/see_trace.rb +0 -32
  55. data/lib/striuct/instancemethods/keyvalidatable.rb +0 -9
  56. data/striuct.gemspec +0 -45
  57. data/test/helper.rb +0 -3
  58. data/test/test_sglc-constructor.rb +0 -36
  59. data/test/test_subc-c-add_members.rb +0 -13
  60. data/test/test_subc-c-close_member.rb +0 -36
  61. data/test/test_subc-c-constructor.rb +0 -92
  62. data/test/test_subc-c-copy.rb +0 -71
  63. data/test/test_subc-c-freeze.rb +0 -36
  64. data/test/test_subc-c-inheritable.rb +0 -58
  65. data/test/test_subc-c-safety_naming.rb +0 -73
  66. data/test/test_subc-f-alias_member.rb +0 -54
  67. data/test/test_subc-f-enum.rb +0 -159
  68. data/test/test_subc-f-predicate.rb +0 -647
  69. data/test/test_subc-f-to_struct.rb +0 -61
  70. data/test/test_subc-f-validation_util.rb +0 -59
  71. data/test/test_subc-f_debug.rb +0 -39
  72. data/test/test_subc-f_name.rb +0 -525
  73. data/test/test_subc-i-accessor.rb +0 -138
  74. data/test/test_subc-i-adjuster.rb +0 -95
  75. data/test/test_subc-i-assign.rb +0 -53
  76. data/test/test_subc-i-basic.rb +0 -43
  77. data/test/test_subc-i-cast.rb +0 -27
  78. data/test/test_subc-i-compare.rb +0 -52
  79. data/test/test_subc-i-copy.rb +0 -23
  80. data/test/test_subc-i-default_value.rb +0 -129
  81. data/test/test_subc-i-freeze.rb +0 -19
  82. data/test/test_subc-i-hashlike.rb +0 -144
  83. data/test/test_subc-i-keyvalidatable.rb +0 -25
  84. data/test/test_subc-i-lock.rb +0 -40
  85. data/test/test_subc-i-must.rb +0 -30
  86. data/test/test_subc-i-to_s_family.rb +0 -26
  87. data/test/test_subc-i-validation_specific_conditions.rb +0 -297
  88. data/test/test_subc-i-validation_with_getter.rb +0 -33
  89. data/test/test_version.rb +0 -13
@@ -1,66 +1,68 @@
1
- class Striuct; module InstanceMethods
1
+ # frozen_string_literal: true
2
2
 
3
- # @group Basic Methods for Ruby's Object
3
+ class Striuct
4
+ module InstanceMethods
5
+ # @group Basic Methods for Ruby's Object
4
6
 
5
- # @return [self]
6
- def freeze
7
- @db.freeze; @locks.freeze
8
- super
9
- end
7
+ # @return [self]
8
+ def freeze
9
+ @db.freeze; @locks.freeze
10
+ super
11
+ end
10
12
 
11
- private
13
+ private
12
14
 
13
- def initialize(*values)
14
- _initialize_database
15
+ def initialize(*values)
16
+ _initialize_database
15
17
 
16
- replace_values(*values)
17
- excess_autonyms = _autonyms.last(size - values.size)
18
- _set_defaults(*excess_autonyms)
18
+ replace_values(*values)
19
+ excess_autonyms = _autonyms.last(size - values.size)
20
+ _set_defaults(*excess_autonyms)
19
21
 
20
- each_autonym do |autonym|
21
- _check_must autonym
22
+ each_autonym do |autonym|
23
+ _check_must(autonym)
24
+ end
22
25
  end
23
- end
24
26
 
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
27
+ def initialize_for_pairs(pairs)
28
+ _initialize_database
34
29
 
35
- _set_defaults(*excess_autonyms)
30
+ excess_autonyms = _autonyms.dup
31
+ pairs.each_pair do |key, value|
32
+ autonym = autonym_for_key(key)
33
+ self[autonym] = value
34
+ excess_autonyms.delete(autonym)
35
+ end
36
36
 
37
- excess_autonyms.each do |autonym|
38
- _check_must autonym
37
+ _set_defaults(*excess_autonyms)
38
+
39
+ excess_autonyms.each do |autonym|
40
+ _check_must(autonym)
41
+ end
39
42
  end
40
- end
41
-
42
- def initialize_copy(original)
43
- @db, @locks = @db.dup, {}
44
- end
45
43
 
46
- def _initialize_database
47
- @db, @locks = {}, {}
48
- end
44
+ def initialize_copy(original)
45
+ @db, @locks = @db.dup, {}
46
+ end
49
47
 
50
- def _check_frozen
51
- raise "can't modify frozen #{self.class}" if frozen?
52
- end
48
+ def _initialize_database
49
+ @db, @locks = {}, {}
50
+ end
53
51
 
54
- def _check_locked(key)
55
- raise "can't modify locked member `#{key}`" if locked? key
56
- end
52
+ def _check_frozen
53
+ raise "can't modify frozen #{self.class}" if frozen?
54
+ end
57
55
 
58
- def _check_must(key)
59
- if must?(key) && !assigned?(key)
60
- raise InvalidOperationError, "`#{key}` require a value under `must` option"
56
+ def _check_locked(key)
57
+ raise "can't modify locked member `#{key}`" if locked?(key)
61
58
  end
62
- end
63
59
 
64
- # @endgroup
60
+ def _check_must(key)
61
+ if must?(key) && !assigned?(key)
62
+ raise InvalidOperationError, "`#{key}` require a value under `must` option"
63
+ end
64
+ end
65
65
 
66
- end; end
66
+ # @endgroup
67
+ end
68
+ end
@@ -1,19 +1,15 @@
1
- require 'forwardable'
2
- require 'keyvalidatable'
1
+ # frozen_string_literal: true
3
2
 
4
- class Striuct; module InstanceMethods
3
+ class Striuct
4
+ module InstanceMethods
5
+ extend Forwardable
5
6
 
6
- extend Forwardable
7
-
8
- # hide Forwardable's public/protected class_macro
9
- private_class_method(*Forwardable.instance_methods)
10
-
11
- include KeyValidatable
12
-
13
- end; end
7
+ # hide Forwardable's public/protected class_macro
8
+ private_class_method(*Forwardable.instance_methods)
9
+ end
10
+ end
14
11
 
15
12
  require_relative 'delegate_class_methods'
16
- require_relative 'keyvalidatable'
17
13
  require_relative 'object'
18
14
  require_relative 'compare'
19
15
  require_relative 'to_s'
@@ -27,4 +23,4 @@ require_relative 'setter'
27
23
  require_relative 'assign'
28
24
  require_relative 'lock'
29
25
  require_relative 'validation'
30
- require_relative 'safety'
26
+ require_relative 'safety'
@@ -1,12 +1,14 @@
1
- class Striuct; module InstanceMethods
1
+ # frozen_string_literal: true
2
2
 
3
- # @group Safety
4
-
5
- # freezed, fixed familar members, all members passed any condition
6
- def secure?
7
- (frozen? || all_locked?) && self.class.closed? && strict?
8
- end
3
+ class Striuct
4
+ module InstanceMethods
5
+ # @group Safety
9
6
 
10
- # @endgroup
7
+ # freezed, fixed familiar members, all members passed any condition
8
+ def secure?
9
+ (frozen? || all_locked?) && self.class.closed? && strict?
10
+ end
11
11
 
12
- end; end
12
+ # @endgroup
13
+ end
14
+ end
@@ -1,54 +1,55 @@
1
- class Striuct; module InstanceMethods
2
-
3
- # @group Setter
4
-
5
- # @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
6
- # @return value
7
- def []=(key, value)
8
- autonym = autonym_for_key key
9
- _set autonym, value
10
- rescue Validation::InvalidWritingError
11
- $!.set_backtrace([
12
- "#{$!.backtrace[-1].sub(/[^:]+\z/){''}}in `[#{key.inspect}(#{autonym})]=': #{$!.message}",
13
- $!.backtrace[-1]
14
- ])
15
-
16
- raise
17
- end
1
+ # frozen_string_literal: true
2
+
3
+ class Striuct
4
+ module InstanceMethods
5
+ # @group Setter
6
+
7
+ # @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
8
+ # @return value
9
+ def []=(key, value)
10
+ autonym = autonym_for_key(key)
11
+ _set(autonym, value)
12
+ rescue InvalidWritingError
13
+ $!.set_backtrace(
14
+ ["#{$!.backtrace[-1].sub(/[^:]+\z/) { '' }}in `[#{key.inspect}(#{autonym})]=': #{$!.message}", $!.backtrace[-1]]
15
+ )
16
+
17
+ raise
18
+ end
18
19
 
19
- alias_method :assign, :[]=
20
+ alias_method :assign, :[]=
20
21
 
21
- private
22
+ private
22
23
 
23
- # @param [Symbol] autonym - MUST already converted to native autonym
24
- # @return value
25
- def _set(autonym, value)
26
- _check_frozen
27
- _check_locked autonym
24
+ # @param [Symbol] autonym - MUST already converted to native autonym
25
+ # @return value
26
+ def _set(autonym, value)
27
+ _check_frozen
28
+ _check_locked(autonym)
28
29
 
29
- if with_adjuster? autonym
30
- begin
31
- value = instance_exec value, &adjuster_for(autonym)
32
- rescue Exception
33
- raise ::Validation::UnmanagebleError
30
+ if with_adjuster?(autonym)
31
+ begin
32
+ value = instance_exec(value, &adjuster_for(autonym))
33
+ rescue Exception
34
+ raise InvalidAdjustingError
35
+ end
34
36
  end
35
- end
36
37
 
37
- if with_safety_setter?(autonym) and !accept?(autonym, value)
38
- raise ::Validation::InvalidWritingError,
39
- "#{value.inspect} is deficient for #{autonym} in #{self.class}"
40
- end
38
+ if with_safety_setter?(autonym) && !accept?(autonym, value)
39
+ raise InvalidWritingError,
40
+ "#{value.inspect} is deficient for #{autonym} in #{self.class}"
41
+ end
41
42
 
42
- @db[autonym] = value
43
- rescue ::Validation::InvalidError
44
- unless /in \[\]=/ =~ caller[1].slice(/([^:]+)\z/)
45
- $!.backtrace.delete_if{|s|/#{Regexp.escape(File.dirname __FILE__)}/ =~ s}
46
- $!.backtrace.first.sub!(/([^:]+)\z/){"in `#{autonym}='"}
47
- end
48
-
49
- raise
50
- end
43
+ @db[autonym] = value
44
+ rescue InvalidValueError
45
+ unless /in \[\]=/.match?(caller(2..2).first.slice(/([^:]+)\z/))
46
+ $!.backtrace.delete_if { |s| /#{Regexp.escape(File.dirname(__FILE__))}/ =~ s }
47
+ $!.backtrace.first.sub!(/([^:]+)\z/) { "in `#{autonym}='" }
48
+ end
51
49
 
52
- # @endgroup
50
+ raise
51
+ end
53
52
 
54
- end; end
53
+ # @endgroup
54
+ end
55
+ end
@@ -1,43 +1,45 @@
1
- class Striuct; module InstanceMethods
1
+ # frozen_string_literal: true
2
2
 
3
- # @group To Strings
4
-
5
- # @return [String]
6
- def inspect
7
- "#<struct' #{self.class}".tap {|s|
8
- each_pair do |autonym, value|
9
- suffix = (with_default?(autonym) && default?(autonym)) ? '/default' : nil
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{|_|_}
3
+ class Striuct
4
+ module InstanceMethods
5
+ # @group To Strings
14
6
 
15
- s << " #{autonym}=#{value.inspect}#{suffix}"
16
- unless labels.empty?
17
- s << '('
18
- s << labels.join(', ')
19
- s << ')'
7
+ # @return [String]
8
+ def inspect
9
+ (+"#<struct' #{self.class}").tap { |s|
10
+ each_pair do |autonym, value|
11
+ suffix = (with_default?(autonym) && default?(autonym)) ? '/default' : nil
12
+ label_valid = valid?(autonym) ? nil : :invalid
13
+ label_lock = locked?(autonym) ? :locked : nil
14
+ label_must = must?(autonym) ? :must : nil
15
+ labels = [label_valid, label_lock, label_must].select { |elm| elm }
16
+
17
+ s << " #{autonym}=#{value.inspect}#{suffix}"
18
+ unless labels.empty?
19
+ s << '('
20
+ s << labels.join(', ')
21
+ s << ')'
22
+ end
23
+ s << ','
20
24
  end
21
- s << ','
22
- end
23
-
24
- s.chop!
25
- s << '>'
26
- }
27
- end
28
25
 
29
- # @return [String]
30
- def to_s
31
- "#<struct' #{self.class}".tap {|s|
32
- each_pair do |autonym, value|
33
- s << " #{autonym}=#{value.inspect},"
34
- end
35
-
36
- s.chop!
37
- s << '>'
38
- }
39
- end
26
+ s.chop!
27
+ s << '>'
28
+ }
29
+ end
40
30
 
41
- # @endgroup
31
+ # @return [String]
32
+ def to_s
33
+ (+"#<struct' #{self.class}").tap { |s|
34
+ each_pair do |autonym, value|
35
+ s << " #{autonym}=#{value.inspect},"
36
+ end
37
+
38
+ s.chop!
39
+ s << '>'
40
+ }
41
+ end
42
42
 
43
- end; end
43
+ # @endgroup
44
+ end
45
+ end
@@ -1,35 +1,52 @@
1
- class Striuct; module InstanceMethods
2
-
3
- # @group Validation
4
-
5
- # @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
6
- # @param value
7
- # true if passed under any condition
8
- def accept?(key, value)
9
- autonym = autonym_for_key key
10
- return true unless restrict? autonym
11
-
12
- begin
13
- _valid? condition_for(autonym), value
14
- rescue Exception
15
- false
1
+ # frozen_string_literal: true
2
+
3
+ class Striuct
4
+ module InstanceMethods
5
+ # @group Validation
6
+
7
+ # @param [Proc, Method, #===] pattern
8
+ # @param [Object] value
9
+ def _valid?(pattern, value)
10
+ !!(
11
+ case pattern
12
+ when Proc
13
+ instance_exec(value, &pattern)
14
+ when Method
15
+ pattern.call(value)
16
+ else
17
+ pattern === value
18
+ end
19
+ )
16
20
  end
17
- end
18
21
 
19
- # @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
20
- # @param value - if no argument and use current assigned value
21
- # true if passed under any condition
22
- def sufficient?(key, value=self[key])
23
- accept? key, value
24
- end
22
+ # @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
23
+ # @param value
24
+ # true if passed under any condition
25
+ def accept?(key, value)
26
+ autonym = autonym_for_key(key)
27
+ return true unless restrict?(autonym)
28
+
29
+ begin
30
+ _valid?(condition_for(autonym), value)
31
+ rescue Exception
32
+ false
33
+ end
34
+ end
25
35
 
26
- alias_method :valid?, :sufficient?
36
+ # @param [Symbol, String, #to_sym, Integer, #to_int] key - name / index
37
+ # @param value - if no argument and use current assigned value
38
+ # true if passed under any condition
39
+ def sufficient?(key, value=self[key])
40
+ accept?(key, value)
41
+ end
27
42
 
28
- # all members passed under any condition
29
- def strict?
30
- each_pair.all?{|autonym, value|sufficient? autonym, value}
31
- end
43
+ alias_method :valid?, :sufficient?
32
44
 
33
- # @endgroup
45
+ # all members passed under any condition
46
+ def strict?
47
+ each_pair.all? { |autonym, value| sufficient?(autonym, value) }
48
+ end
34
49
 
35
- end; end
50
+ # @endgroup
51
+ end
52
+ end
@@ -1,58 +1,60 @@
1
- class Striuct; module InstanceMethods
2
-
3
- # @group Behavior under Values
4
-
5
- # @param [Integer, #to_int, Range] _keys
6
- # @return [Array]
7
- def values_at(*_keys)
8
- [].tap {|r|
9
- _keys.each do |key|
10
- case key
11
- when ->v{v.respond_to? :to_int}
12
- r << fetch_by_index(key)
13
- when Range
14
- key.each do |idx|
15
- raise TypeError unless idx.respond_to? :to_int
16
-
17
- r << fetch_by_index(idx)
1
+ # frozen_string_literal: true
2
+
3
+ class Striuct
4
+ module InstanceMethods
5
+ # @group Behavior under Values
6
+
7
+ # @param [Integer, #to_int, Range] keys
8
+ # @return [Array]
9
+ def values_at(*keys)
10
+ [].tap { |r|
11
+ keys.each do |key|
12
+ case key
13
+ when ->v { v.respond_to?(:to_int) }
14
+ r << fetch_by_index(key)
15
+ when Range
16
+ key.each do |idx|
17
+ raise TypeError unless idx.respond_to?(:to_int)
18
+
19
+ r << fetch_by_index(idx)
20
+ end
21
+ else
22
+ raise TypeError
18
23
  end
19
- else
20
- raise TypeError
21
24
  end
22
- end
23
- }
24
- end
25
+ }
26
+ end
25
27
 
26
- # @return [Array]
27
- # @raise [ArgumentError] if the keys contains an unmacthed
28
- # key and no block is given
29
- def fetch_values(*_keys, &block)
30
- _keys.map {|key|
31
- if has_key? key
32
- fetch_by_key(key)
33
- else
34
- if block_given?
35
- block.call
28
+ # @return [Array]
29
+ # @raise [ArgumentError] if the keys contains an unmatched
30
+ # key and no block is given
31
+ def fetch_values(*keys, &block)
32
+ keys.map { |key|
33
+ if key?(key)
34
+ fetch_by_key(key)
36
35
  else
37
- raise ArgumentError, "`#{key}' is not matched"
36
+ if block
37
+ yield
38
+ else
39
+ raise ArgumentError, "`#{key}' is not matched"
40
+ end
38
41
  end
42
+ }
43
+ end
44
+
45
+ # @return [self]
46
+ def replace_values(*values)
47
+ unless values.size <= size
48
+ raise ArgumentError, "struct size differs (max: #{size})"
39
49
  end
40
- }
41
- end
42
50
 
43
- # @return [self]
44
- def replace_values(*values)
45
- unless values.size <= size
46
- raise ArgumentError, "struct size differs (max: #{size})"
47
- end
51
+ values.each_with_index do |value, index|
52
+ _set(autonym_for_index(index), value)
53
+ end
48
54
 
49
- values.each_with_index do |value, index|
50
- _set autonym_for_index(index), value
55
+ self
51
56
  end
52
-
53
- self
54
- end
55
-
56
- # @endgroup
57
57
 
58
- end; end
58
+ # @endgroup
59
+ end
60
+ end
@@ -1,13 +1,9 @@
1
- require 'validation'
1
+ # frozen_string_literal: true
2
2
 
3
3
  class Striuct
4
-
5
4
  class << self
6
-
7
5
  alias_method :new_instance, :new
8
6
  private :new_instance
9
-
10
- # @group Constructors for Subclassies
11
7
 
12
8
  # @param [Symbol, String] autonyms
13
9
  # @yieldreturn [Class]
@@ -15,8 +11,8 @@ class Striuct
15
11
  def new(*autonyms, &block)
16
12
  # warning for Ruby's Struct.new user
17
13
  first = autonyms.first
18
- if first.instance_of?(String) and /\A[A-Z]/ =~ first
19
- warn "no define constant first-arg(#{first}), the Struct behavior is not supported in Striuct"
14
+ if first.instance_of?(String) && /\A[A-Z]/ =~ first
15
+ warn("no define constant first-arg(#{first}), the Struct behavior is not supported in Striuct")
20
16
  end
21
17
 
22
18
  Class.new(self) {
@@ -24,42 +20,53 @@ class Striuct
24
20
  add_member autonym
25
21
  end
26
22
 
27
- class_eval(&block) if block_given?
23
+ class_eval(&block) if block
28
24
  }
29
25
  end
30
26
 
31
27
  # @yieldreturn [Class] (see Striuct.new) - reject floating class
32
28
  # @return [void]
33
29
  def define(&block)
34
- raise ArgumentError, 'block not supplied' unless block_given?
30
+ raise ArgumentError, 'block not supplied' unless block
35
31
 
36
- new(&block).tap {|subclass|
32
+ new(&block).tap { |subclass|
37
33
  subclass.class_eval {
38
34
  raise 'not yet finished' if @autonyms.empty?
35
+
39
36
  close
40
37
  }
41
38
  }
42
39
  end
43
40
 
44
- # @groupend
41
+ # Return `true` if given object is sufficient as an adjuster role
42
+ def adjustable?(object)
43
+ case object
44
+ when Proc
45
+ object.arity == 1
46
+ else
47
+ if object.respond_to?(:to_proc)
48
+ object.to_proc.arity == 1
49
+ else
50
+ false
51
+ end
52
+ end
53
+ end
45
54
 
46
55
  private
47
-
56
+
48
57
  def inherited(subclass)
49
- ret = super subclass
58
+ ret = super(subclass)
50
59
 
51
60
  subclass.class_eval {
52
61
  extend ClassMethods
53
62
  include Enumerable
54
- include Validation
63
+ extend Eqq::Buildable
55
64
  include InstanceMethods
56
-
65
+
57
66
  _init
58
67
  }
59
68
 
60
69
  ret
61
70
  end
62
-
63
71
  end
64
-
65
- end
72
+ end
@@ -1,7 +1,7 @@
1
- class Striuct
1
+ # frozen_string_literal: true
2
2
 
3
+ class Striuct
3
4
  # namespace for .to_struct_class, #to_struct
4
5
  module Structs
5
6
  end
6
-
7
- end
7
+ end
data/lib/striuct.rb CHANGED
@@ -1,12 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # striuct - Struct++
2
4
  # Copyright (c) 2011-2012 Kenichi Kamiya
3
5
 
4
6
  # @abstract
5
7
  class Striuct
6
-
7
8
  class Error < StandardError; end
8
9
  class InvalidOperationError < Error; end
9
-
10
+ class InvalidValueError < Error; end
11
+ class InvalidWritingError < InvalidValueError; end
12
+ class InvalidReadingError < InvalidValueError; end
13
+ class InvalidAdjustingError < InvalidValueError; end
10
14
  end
11
15
 
12
- require_relative 'striuct/requirements'
16
+ require_relative 'striuct/bootstrap'