striuct 0.3.0 → 0.3.1
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/.gitignore +32 -0
- data/.travis.yml +6 -0
- data/Gemfile +12 -0
- data/History.rdoc +5 -0
- data/Manifest.txt +53 -25
- data/README.md +97 -0
- data/Rakefile +7 -21
- data/examples/README.rb +25 -0
- data/{example → examples}/example1.rb +1 -1
- data/{example → examples}/example2.rb +1 -1
- data/{example → examples}/see_trace.rb +4 -0
- data/lib/striuct/{containable/eigen → classmethods}/basic.rb +13 -5
- data/lib/striuct/classmethods/constants.rb +23 -0
- data/lib/striuct/{containable/eigen → classmethods}/constructor.rb +20 -14
- data/lib/striuct/{containable/eigen → classmethods}/handy.rb +19 -20
- data/lib/striuct/{containable/eigen → classmethods}/inner.rb +10 -32
- data/lib/striuct/{containable/eigen → classmethods}/macro.rb +37 -7
- data/lib/striuct/classmethods/requiremnets.rb +7 -0
- data/lib/striuct/{containable/eigen → classmethods}/safety.rb +6 -6
- data/lib/striuct/classmethods.rb +1 -0
- data/lib/striuct/{containable → instancemethods}/basic.rb +6 -6
- data/lib/striuct/{containable → instancemethods}/handy.rb +3 -3
- data/lib/striuct/{containable → instancemethods}/hashlike.rb +12 -6
- data/lib/striuct/{containable → instancemethods}/inner.rb +9 -8
- data/lib/striuct/instancemethods/requirements.rb +6 -0
- data/lib/striuct/{containable → instancemethods}/safety.rb +2 -2
- data/lib/striuct/instancemethods/singleton_class.rb +19 -0
- data/lib/striuct/instancemethods.rb +1 -0
- data/lib/striuct/requirements.rb +6 -0
- data/lib/striuct/singleton_class.rb +93 -0
- data/lib/striuct/specificcontainer.rb +17 -0
- data/lib/striuct/structs.rb +7 -0
- data/lib/striuct/version.rb +3 -2
- data/lib/striuct.rb +4 -9
- data/striuct.gemspec +24 -0
- data/test/{test_helper.rb → helper.rb} +3 -0
- data/test/test_striuct.rb +23 -1409
- data/test/test_striuct_define.rb +19 -0
- data/test/test_striuct_subclass_adjuster.rb +95 -0
- data/test/test_striuct_subclass_alias_member.rb +54 -0
- data/test/test_striuct_subclass_assign.rb +30 -0
- data/test/test_striuct_subclass_classlock.rb +36 -0
- data/test/test_striuct_subclass_classmethods.rb +87 -0
- data/test/test_striuct_subclass_cloning.rb +36 -0
- data/test/test_striuct_subclass_default_value.rb +129 -0
- data/test/test_striuct_subclass_for_pairs.rb +13 -0
- data/test/test_striuct_subclass_freeze.rb +19 -0
- data/test/test_striuct_subclass_functional_condition.rb +51 -0
- data/test/test_striuct_subclass_getter_validation.rb +33 -0
- data/test/test_striuct_subclass_hashlike.rb +153 -0
- data/test/test_striuct_subclass_inference.rb +51 -0
- data/test/test_striuct_subclass_inheritable.rb +58 -0
- data/test/test_striuct_subclass_instance.rb +289 -0
- data/test/test_striuct_subclass_lock.rb +40 -0
- data/test/test_striuct_subclass_safetynaming.rb +72 -0
- data/test/test_striuct_subclass_specific_conditions.rb +247 -0
- data/test/test_striuct_subclass_to_struct.rb +25 -0
- data/test/test_striuct_version.rb +9 -0
- metadata +106 -68
- data/.gemtest +0 -0
- data/README.rdoc +0 -63
- data/example/example.rb +0 -17
- data/lib/striuct/abstract.rb +0 -74
- data/lib/striuct/containable/classutil.rb +0 -22
- data/lib/striuct/containable/eigen.rb +0 -29
- data/lib/striuct/containable.rb +0 -38
- /data/{example/benchmarks.rb → benchmarks/basics.rb} +0 -0
- /data/{example → examples}/example.old.rdoc +0 -0
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
require 'keyvalidatable'
|
2
|
+
|
3
|
+
class Striuct; module ClassMethods
|
2
4
|
# @group Macro for Definition
|
3
5
|
|
4
6
|
private
|
@@ -14,6 +16,8 @@ class Striuct; module Containable; module Eigen
|
|
14
16
|
end
|
15
17
|
|
16
18
|
VALID_MEMBER_OPTIONS = [
|
19
|
+
:default,
|
20
|
+
:default_proc,
|
17
21
|
:inference,
|
18
22
|
:reader_validation,
|
19
23
|
:getter_validation,
|
@@ -28,11 +32,22 @@ class Striuct; module Containable; module Eigen
|
|
28
32
|
# @param [Symbol, String] name
|
29
33
|
# @param [#===, Proc, Method, ANYTHING] condition
|
30
34
|
# @param [Hash] options
|
35
|
+
# @option options [BasicObject] :default
|
36
|
+
# @option options [Proc] :default_proc
|
37
|
+
# @option options [Boolean] :inference
|
38
|
+
# @option options [Boolean] :reader_validation
|
39
|
+
# @option options [Boolean] :getter_validation
|
40
|
+
# @option options [Boolean] :writer_validation
|
41
|
+
# @option options [Boolean] :setter_validation
|
31
42
|
# @return [nil]
|
32
43
|
def add_member(name, condition=Validation::Condition::ANYTHING, options=DEFAULT_MEMBER_OPTIONS, &flavor)
|
33
44
|
raise "already closed to add member in #{self}" if closed?
|
34
|
-
options = DEFAULT_MEMBER_OPTIONS.merge
|
35
|
-
|
45
|
+
options = DEFAULT_MEMBER_OPTIONS.merge(options).extend(KeyValidatable)
|
46
|
+
options.validate_keys let: VALID_MEMBER_OPTIONS
|
47
|
+
if options.has_key?(:default) and options.has_key?(:default_proc)
|
48
|
+
raise ArgumentError, 'It is not able to choose "default" with "default_proc" in options'
|
49
|
+
end
|
50
|
+
|
36
51
|
name = keyable_for name
|
37
52
|
raise ArgumentError, %Q!already exist name "#{name}"! if member? name
|
38
53
|
_check_safety_naming name
|
@@ -43,6 +58,15 @@ class Striuct; module Containable; module Eigen
|
|
43
58
|
@names << name
|
44
59
|
__getter__! name
|
45
60
|
__setter__! name, condition, &flavor
|
61
|
+
|
62
|
+
if options.has_key?(:default)
|
63
|
+
set_default_value name, options.fetch(:default)
|
64
|
+
end
|
65
|
+
|
66
|
+
if options.has_key?(:default_proc)
|
67
|
+
set_default_value name, &options.fetch(:default_proc)
|
68
|
+
end
|
69
|
+
|
46
70
|
nil
|
47
71
|
end
|
48
72
|
|
@@ -79,16 +103,18 @@ class Striuct; module Containable; module Eigen
|
|
79
103
|
# @return [nil]
|
80
104
|
def set_default_value(name, value=nil, &block)
|
81
105
|
raise "already closed to modify member attributes in #{self}" if closed?
|
82
|
-
name =
|
106
|
+
name = autonym_for(name)
|
83
107
|
raise "already settled default value for #{name}" if has_default? name
|
84
108
|
|
85
109
|
value = (
|
86
110
|
if block_given?
|
87
111
|
if value.nil?
|
88
|
-
|
112
|
+
arity = block.arity
|
113
|
+
|
114
|
+
if valid_default_proc? block
|
89
115
|
SpecificContainer.new block
|
90
116
|
else
|
91
|
-
raise ArgumentError, "wrong number of block parameter #{arity} for 2"
|
117
|
+
raise ArgumentError, "wrong number of block parameter #{arity} for 0..2"
|
92
118
|
end
|
93
119
|
else
|
94
120
|
raise ArgumentError, 'can not use value and block arguments'
|
@@ -104,6 +130,10 @@ class Striuct; module Containable; module Eigen
|
|
104
130
|
|
105
131
|
alias_method :default, :set_default_value
|
106
132
|
|
133
|
+
def valid_default_proc?(_proc)
|
134
|
+
_proc.arity <= 2
|
135
|
+
end
|
136
|
+
|
107
137
|
# @return [self]
|
108
138
|
def close_member
|
109
139
|
[@names, @flavors, @defaults, @aliases].each(&:freeze)
|
@@ -114,4 +144,4 @@ class Striuct; module Containable; module Eigen
|
|
114
144
|
alias_method :close, :close_member
|
115
145
|
|
116
146
|
# @endgroup
|
117
|
-
end; end
|
147
|
+
end; end
|
@@ -1,17 +1,17 @@
|
|
1
|
-
class Striuct; module
|
1
|
+
class Striuct; module ClassMethods
|
2
2
|
# @group Struct+ Safety
|
3
3
|
|
4
4
|
# @param [Symbol, String] name
|
5
5
|
# inference checker is waiting yet
|
6
6
|
def inference?(name)
|
7
|
-
name =
|
7
|
+
name = autonym_for name
|
8
8
|
|
9
9
|
@inferences.has_key? name
|
10
10
|
end
|
11
11
|
|
12
12
|
# @param [Symbol, String] name
|
13
13
|
def has_condition?(name)
|
14
|
-
name =
|
14
|
+
name = autonym_for name
|
15
15
|
|
16
16
|
@conditions.has_key?(name)
|
17
17
|
end
|
@@ -20,7 +20,7 @@ class Striuct; module Containable; module Eigen
|
|
20
20
|
|
21
21
|
# @param [Symbol, String] name
|
22
22
|
def safety_getter?(name)
|
23
|
-
name =
|
23
|
+
name = autonym_for name
|
24
24
|
|
25
25
|
@getter_validations.has_key?(name)
|
26
26
|
end
|
@@ -29,7 +29,7 @@ class Striuct; module Containable; module Eigen
|
|
29
29
|
|
30
30
|
# @param [Symbol, String] name
|
31
31
|
def safety_setter?(name)
|
32
|
-
name =
|
32
|
+
name = autonym_for name
|
33
33
|
|
34
34
|
@setter_validations.has_key?(name)
|
35
35
|
end
|
@@ -49,4 +49,4 @@ class Striuct; module Containable; module Eigen
|
|
49
49
|
end
|
50
50
|
|
51
51
|
# @endgroup
|
52
|
-
end; end
|
52
|
+
end; end
|
@@ -0,0 +1 @@
|
|
1
|
+
require_relative 'classmethods/requiremnets'
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class Striuct; module
|
1
|
+
class Striuct; module InstanceMethods
|
2
2
|
# @group Basic
|
3
3
|
|
4
4
|
def initialize(*values)
|
@@ -8,7 +8,7 @@ class Striuct; module Containable
|
|
8
8
|
|
9
9
|
# see self.class.*args
|
10
10
|
delegate_class_methods(
|
11
|
-
:members, :keys, :names,
|
11
|
+
:members, :keys, :names, :autonyms, :all_members, :aliases,
|
12
12
|
:has_member?, :member?, :has_key?, :key?,
|
13
13
|
:length, :size
|
14
14
|
)
|
@@ -64,10 +64,10 @@ class Striuct; module Containable
|
|
64
64
|
true_name = nil
|
65
65
|
__subscript__(key){|name|true_name = name; __set__ name, value}
|
66
66
|
rescue Validation::InvalidWritingError
|
67
|
-
|
68
|
-
"#{
|
69
|
-
|
70
|
-
]
|
67
|
+
$!.set_backtrace([
|
68
|
+
"#{$!.backtrace[-1].sub(/[^:]+\z/){''}}in `[#{key.inspect}(#{true_name})]=': #{$!.message}",
|
69
|
+
$!.backtrace[-1]
|
70
|
+
])
|
71
71
|
|
72
72
|
raise
|
73
73
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class Striuct; module
|
1
|
+
class Striuct; module InstanceMethods
|
2
2
|
# @group Struct + Handy
|
3
3
|
|
4
4
|
# see self.class.*args
|
@@ -57,7 +57,7 @@ class Striuct; module Containable
|
|
57
57
|
|
58
58
|
# @param [Symbol, String] name
|
59
59
|
def assign?(name)
|
60
|
-
name =
|
60
|
+
name = autonym_for name
|
61
61
|
|
62
62
|
@db.has_key? name
|
63
63
|
end
|
@@ -72,7 +72,7 @@ class Striuct; module Containable
|
|
72
72
|
|
73
73
|
# @param [Symbol, String] name
|
74
74
|
def default?(name)
|
75
|
-
name =
|
75
|
+
name = autonym_for name
|
76
76
|
|
77
77
|
default_for(name) == self[name]
|
78
78
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class Striuct; module
|
1
|
+
class Striuct; module InstanceMethods
|
2
2
|
# @group HashLike
|
3
3
|
|
4
4
|
# @return [Hash]
|
@@ -31,8 +31,9 @@ class Striuct; module Containable
|
|
31
31
|
|
32
32
|
alias_method :value?, :has_value?
|
33
33
|
|
34
|
-
# @yield [name, value]
|
35
34
|
# keep truthy only (unassign falsy member)
|
35
|
+
# @yield [name, value]
|
36
|
+
# @yieldparam [Symbol] name
|
36
37
|
# @see #each_pair
|
37
38
|
# @return [Enumerator]
|
38
39
|
# @yieldreturn [self]
|
@@ -54,6 +55,7 @@ class Striuct; module Containable
|
|
54
55
|
|
55
56
|
# @see #select!
|
56
57
|
# @yield [name, value]
|
58
|
+
# @yieldparam [Symbol] name
|
57
59
|
# @return [Enumerator]
|
58
60
|
def keep_if(&block)
|
59
61
|
raise "can't modify frozen #{self.class}" if frozen?
|
@@ -65,6 +67,7 @@ class Striuct; module Containable
|
|
65
67
|
# @see #select!
|
66
68
|
# keep falsy only (unassign truthy member)
|
67
69
|
# @yield [name, value]
|
70
|
+
# @yieldparam [Symbol] name
|
68
71
|
# @return [Enumerator]
|
69
72
|
def reject!
|
70
73
|
raise "can't modify frozen #{self.class}" if frozen?
|
@@ -83,6 +86,7 @@ class Striuct; module Containable
|
|
83
86
|
|
84
87
|
# @see #reject!
|
85
88
|
# @yield [name, value]
|
89
|
+
# @yieldparam [Symbol] name
|
86
90
|
# @return [Enumerator]
|
87
91
|
def delete_if(&block)
|
88
92
|
raise "can't modify frozen #{self.class}" if frozen?
|
@@ -93,9 +97,9 @@ class Striuct; module Containable
|
|
93
97
|
end
|
94
98
|
|
95
99
|
# @param [Symbol, String] name
|
96
|
-
# @return [Array] [name, value]
|
100
|
+
# @return [Array] e.g [name, value]
|
97
101
|
def assoc(name)
|
98
|
-
name =
|
102
|
+
name = autonym_for name
|
99
103
|
|
100
104
|
[name, self[name]]
|
101
105
|
end
|
@@ -113,7 +117,8 @@ class Striuct; module Containable
|
|
113
117
|
|
114
118
|
# @see #select!
|
115
119
|
# @yield [name, value]
|
116
|
-
# @
|
120
|
+
# @yieldparam [Symbol] name
|
121
|
+
# @return [Striuct]
|
117
122
|
def select(&block)
|
118
123
|
return to_enum(__method__) unless block_given?
|
119
124
|
|
@@ -122,7 +127,8 @@ class Striuct; module Containable
|
|
122
127
|
|
123
128
|
# @see #reject!
|
124
129
|
# @yield [name, value]
|
125
|
-
# @
|
130
|
+
# @yieldparam [Symbol] name
|
131
|
+
# @return [Striuct]
|
126
132
|
def reject(&block)
|
127
133
|
return to_enum(__method__) unless block_given?
|
128
134
|
|
@@ -1,11 +1,12 @@
|
|
1
|
-
class Striuct; module
|
1
|
+
class Striuct; module InstanceMethods
|
2
|
+
|
2
3
|
private
|
3
4
|
|
4
5
|
# @group Use Only Inner
|
5
6
|
|
6
7
|
# see self.class.*args
|
7
8
|
delegate_class_methods(
|
8
|
-
:keyable_for, :flavor_for, :condition_for, :
|
9
|
+
:keyable_for, :flavor_for, :condition_for, :autonym_for
|
9
10
|
)
|
10
11
|
|
11
12
|
def initialize_copy(original)
|
@@ -13,7 +14,7 @@ class Striuct; module Containable
|
|
13
14
|
end
|
14
15
|
|
15
16
|
def __get__(name)
|
16
|
-
name =
|
17
|
+
name = autonym_for name
|
17
18
|
value = @db[name]
|
18
19
|
|
19
20
|
if safety_getter?(name) and !accept?(name, value)
|
@@ -26,7 +27,7 @@ class Striuct; module Containable
|
|
26
27
|
|
27
28
|
def __set__(name, value)
|
28
29
|
raise "can't modify frozen #{self.class}" if frozen?
|
29
|
-
name =
|
30
|
+
name = autonym_for name
|
30
31
|
raise "can't modify locked member #{name}" if lock? name
|
31
32
|
|
32
33
|
if has_flavor? name
|
@@ -49,9 +50,8 @@ class Striuct; module Containable
|
|
49
50
|
@db[name] = value
|
50
51
|
rescue ::Validation::InvalidError
|
51
52
|
unless /in \[\]=/ =~ caller[1].slice(/([^:]+)\z/)
|
52
|
-
|
53
|
-
|
54
|
-
$@ << $@.last
|
53
|
+
$!.backtrace.delete_if{|s|/#{Regexp.escape(File.dirname __FILE__)}/ =~ s}
|
54
|
+
$!.backtrace.first.sub!(/([^:]+)\z/){"in `#{name}='"}
|
55
55
|
end
|
56
56
|
|
57
57
|
raise
|
@@ -62,7 +62,7 @@ class Striuct; module Containable
|
|
62
62
|
when Symbol, String
|
63
63
|
name = keyable_for key
|
64
64
|
if member? name
|
65
|
-
yield
|
65
|
+
yield autonym_for(name)
|
66
66
|
else
|
67
67
|
raise NameError
|
68
68
|
end
|
@@ -117,4 +117,5 @@ class Striuct; module Containable
|
|
117
117
|
end
|
118
118
|
|
119
119
|
# @endgroup
|
120
|
+
|
120
121
|
end; end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class Striuct; module
|
1
|
+
class Striuct; module InstanceMethods
|
2
2
|
# @group Struct+ Safety
|
3
3
|
|
4
4
|
# see self.class.*args
|
@@ -9,7 +9,7 @@ class Striuct; module Containable
|
|
9
9
|
# @param [Object] value - no argument and use own
|
10
10
|
# passed under any condition
|
11
11
|
def sufficient?(name, value=self[name])
|
12
|
-
name =
|
12
|
+
name = autonym_for name
|
13
13
|
return true unless restrict? name
|
14
14
|
|
15
15
|
_valid? condition_for(name), value
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Striuct; module InstanceMethods
|
2
|
+
|
3
|
+
class << self
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def delegate_class_method(name)
|
8
|
+
define_method name do |*args, &block|
|
9
|
+
self.class.__send__ name, *args, &block
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def delegate_class_methods(name, *names)
|
14
|
+
[name, *names].each{|_name|delegate_class_method _name}
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end; end
|
@@ -0,0 +1 @@
|
|
1
|
+
require_relative 'instancemethods/requirements'
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require_relative 'instancemethods'
|
2
|
+
|
3
|
+
class Striuct
|
4
|
+
|
5
|
+
class << self
|
6
|
+
|
7
|
+
# @group Constructor
|
8
|
+
|
9
|
+
alias_method :new_instance, :new
|
10
|
+
private :new_instance
|
11
|
+
|
12
|
+
# @param [Symbol, String] *names
|
13
|
+
# @return [Class]
|
14
|
+
def new(*names, &block)
|
15
|
+
# warning for Ruby's Struct.new user
|
16
|
+
first = names.first
|
17
|
+
if first.instance_of?(String) and /\A[A-Z]/ =~ first
|
18
|
+
warn "no define constant #{first}"
|
19
|
+
end
|
20
|
+
|
21
|
+
Class.new self do
|
22
|
+
names.each do |name|
|
23
|
+
member name
|
24
|
+
end
|
25
|
+
|
26
|
+
class_eval(&block) if block_given?
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# @yieldreturn [Class] (see Striuct.new) - reject floating class
|
31
|
+
# @return [void]
|
32
|
+
def define(&block)
|
33
|
+
raise ArgumentError, 'must with block' unless block_given?
|
34
|
+
|
35
|
+
new(&block).tap do |subclass|
|
36
|
+
subclass.instance_eval do
|
37
|
+
raise 'not yet finished' if members.empty?
|
38
|
+
close
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# @groupend
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
alias_method :original_inherited, :inherited
|
48
|
+
|
49
|
+
def inherited(subclass)
|
50
|
+
attributes = (
|
51
|
+
if equal? ::Striuct
|
52
|
+
[[], {}, {}, {}, {}, {}, {}, {}, :prevent]
|
53
|
+
else
|
54
|
+
[
|
55
|
+
*[
|
56
|
+
@names, @conditions, @flavors, @defaults,
|
57
|
+
@inferences, @aliases, @setter_validations,
|
58
|
+
@getter_validations
|
59
|
+
].map(&:dup), @protect_level
|
60
|
+
]
|
61
|
+
end
|
62
|
+
)
|
63
|
+
|
64
|
+
eigen = self
|
65
|
+
|
66
|
+
subclass.class_eval do
|
67
|
+
original_inherited subclass
|
68
|
+
|
69
|
+
if ::Striuct.equal? eigen
|
70
|
+
extend ClassMethods
|
71
|
+
include Enumerable
|
72
|
+
include InstanceMethods
|
73
|
+
end
|
74
|
+
|
75
|
+
@names, @conditions, @flavors, @defaults,
|
76
|
+
@inferences, @aliases, @setter_validations,
|
77
|
+
@getter_validations, @protect_level = *attributes
|
78
|
+
|
79
|
+
singleton_class.instance_eval do
|
80
|
+
define_method :initialize_copy do |original|
|
81
|
+
@names, @flavors, @defaults, @aliases,
|
82
|
+
@setter_validations, @getter_validations =
|
83
|
+
*[@names, @flavors, @defaults, @aliases,
|
84
|
+
@setter_validations, @getter_validations].map(&:dup)
|
85
|
+
@conditions, @inferences = @conditions.dup, @inferences.dup
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
data/lib/striuct/version.rb
CHANGED
data/lib/striuct.rb
CHANGED
@@ -1,18 +1,13 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
# Provides a Struct++ class.
|
1
|
+
# striuct - Provides a Struct++ class.
|
2
|
+
# Copyright (c) 2011 Kenichi Kamiya
|
4
3
|
|
5
4
|
require 'validation'
|
6
5
|
|
7
|
-
# @author Kenichi Kamiya
|
8
6
|
# @abstract
|
9
7
|
class Striuct
|
8
|
+
|
10
9
|
include Validation
|
11
10
|
|
12
|
-
# namespace for .to_struct_class, #to_struct
|
13
|
-
module Structs
|
14
|
-
end
|
15
11
|
end
|
16
12
|
|
17
|
-
require_relative 'striuct/
|
18
|
-
require_relative 'striuct/abstract'
|
13
|
+
require_relative 'striuct/requirements'
|
data/striuct.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# I don't know why dose occur errors below.
|
2
|
+
# require_relative 'lib/striuct/version'
|
3
|
+
require File.expand_path('../lib/striuct/version', __FILE__)
|
4
|
+
|
5
|
+
Gem::Specification.new do |gem|
|
6
|
+
gem.authors = ['Kenichi Kamiya']
|
7
|
+
gem.email = ['kachick1+ruby@gmail.com']
|
8
|
+
gem.summary = %q{Struct++}
|
9
|
+
gem.description = %q{validatable, inheritable, And more Struct++ features :)}
|
10
|
+
gem.homepage = 'https://github.com/kachick/striuct'
|
11
|
+
|
12
|
+
gem.files = `git ls-files`.split($\)
|
13
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
14
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
15
|
+
gem.name = 'striuct'
|
16
|
+
gem.require_paths = ['lib']
|
17
|
+
gem.version = Striuct::VERSION.dup # dup for https://github.com/rubygems/rubygems/commit/48f1d869510dcd325d6566df7d0147a086905380#-P0
|
18
|
+
|
19
|
+
gem.required_ruby_version = '>=1.9.2'
|
20
|
+
gem.add_runtime_dependency 'validation', '~>0.0.3.1'
|
21
|
+
gem.add_runtime_dependency 'keyvalidatable', '~>0.0.2'
|
22
|
+
gem.add_development_dependency 'yard', '>=0.8.2.1'
|
23
|
+
end
|
24
|
+
|