striuct 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|