striuct 0.0.11.1 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
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.0.11.1
4
+ version: 0.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,22 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-23 00:00:00.000000000 Z
12
+ date: 2012-01-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: hoe
16
- requirement: &24039228 !ruby/object:Gem::Requirement
15
+ name: yard
16
+ requirement: &25011612 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: '2.12'
21
+ version: 0.7.4
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *24039228
24
+ version_requirements: *25011612
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rdoc
27
- requirement: &20489640 !ruby/object:Gem::Requirement
27
+ requirement: &25011336 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,30 @@ dependencies:
32
32
  version: '3.10'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *20489640
36
- description: ! 'Striuct means Strict Struct.
37
-
38
- Handy and safty than Ruby''s Standard Struct.'
35
+ version_requirements: *25011336
36
+ - !ruby/object:Gem::Dependency
37
+ name: newgem
38
+ requirement: &25011072 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 1.5.3
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *25011072
47
+ - !ruby/object:Gem::Dependency
48
+ name: hoe
49
+ requirement: &25010808 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2.13'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *25010808
58
+ description: Striuct = (YetAnotherStruct << safety << useful)
39
59
  email:
40
60
  - kachick1+ruby@gmail.com
41
61
  executables: []
@@ -48,18 +68,31 @@ files:
48
68
  - README.rdoc
49
69
  - README.ja.rdoc
50
70
  - Rakefile
51
- - example.rb
52
71
  - lib/striuct.rb
53
- - lib/striuct/core.rb
72
+ - lib/striuct/frame.rb
54
73
  - lib/striuct/version.rb
55
- - lib/striuct/classutil.rb
56
- - lib/striuct/subclass.rb
57
- - lib/striuct/subclass_eigen.rb
58
- - lib/striuct/import.rb
74
+ - lib/striuct/abstract.rb
75
+ - lib/striuct/conditions.rb
76
+ - lib/striuct/subclassable/frame.rb
77
+ - lib/striuct/subclassable/classutil.rb
78
+ - lib/striuct/subclassable/basic.rb
79
+ - lib/striuct/subclassable/safety.rb
80
+ - lib/striuct/subclassable/handy.rb
81
+ - lib/striuct/subclassable/hashlike.rb
82
+ - lib/striuct/subclassable/yaml.rb
83
+ - lib/striuct/subclassable/inner.rb
84
+ - lib/striuct/subclassable/eigen/frame.rb
85
+ - lib/striuct/subclassable/eigen/basic.rb
86
+ - lib/striuct/subclassable/eigen/constructor.rb
87
+ - lib/striuct/subclassable/eigen/safety.rb
88
+ - lib/striuct/subclassable/eigen/handy.rb
89
+ - lib/striuct/subclassable/eigen/macro.rb
90
+ - lib/striuct/subclassable/eigen/inner.rb
59
91
  - test/test_helper.rb
60
92
  - test/test_striuct.rb
61
- - test/test_helper_import.rb
62
- - test/test_striuct_import.rb
93
+ - example/example.rb
94
+ - example/benchmarks.rb
95
+ - example/see_trace.rb
63
96
  - .gemtest
64
97
  homepage: http://github.com/kachick/striuct
65
98
  licenses: []
@@ -74,7 +107,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
74
107
  requirements:
75
108
  - - ! '>='
76
109
  - !ruby/object:Gem::Version
77
- version: '0'
110
+ version: 1.9.2
78
111
  required_rubygems_version: !ruby/object:Gem::Requirement
79
112
  none: false
80
113
  requirements:
@@ -83,12 +116,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
116
  version: '0'
84
117
  requirements: []
85
118
  rubyforge_project: striuct
86
- rubygems_version: 1.8.12
119
+ rubygems_version: 1.8.15
87
120
  signing_key:
88
121
  specification_version: 3
89
- summary: Striuct means Strict Struct
122
+ summary: Striuct = (YetAnotherStruct << safety << useful)
90
123
  test_files:
91
124
  - test/test_helper.rb
92
- - test/test_helper_import.rb
93
125
  - test/test_striuct.rb
94
- - test/test_striuct_import.rb
data/lib/striuct/core.rb DELETED
@@ -1,56 +0,0 @@
1
- # Copyright (C) 2011 Kenichi Kamiya
2
-
3
- require_relative 'subclass_eigen'
4
- require_relative 'subclass'
5
-
6
- # @author Kenichi Kamiya
7
- class Striuct
8
-
9
- class ConditionError < ArgumentError; end
10
-
11
- class << self
12
- alias_method :new_instance, :new
13
- private :new_instance
14
-
15
- # @param [Symbol, String] *names
16
- # @return [Class] - with Subclass, Subclass:Eigen
17
- def new(*names, &block)
18
- # warning for Ruby's Struct.new user
19
- arg1 = names.first
20
- if arg1.instance_of?(String) and /\A[A-Z]/ =~ arg1
21
- warn "no define constant #{arg1}"
22
- end
23
-
24
- Class.new self do
25
- names.each do |name|
26
- member name
27
- end
28
-
29
- class_eval(&block) if block_given?
30
- end
31
- end
32
-
33
- # @yieldreturn [Class] (see Striuct.new) - reject floating class
34
- # @return [void]
35
- def define(&block)
36
- raise ArgumentError, 'must with block' unless block_given?
37
-
38
- new(&block).tap do |subclass|
39
- subclass.instance_eval do
40
- raise 'not yet finished' if members.empty?
41
- close
42
- end
43
- end
44
- end
45
-
46
- private
47
-
48
- def inherited(subclass)
49
- subclass.class_eval do
50
- extend Subclass::Eigen
51
- include Subclass
52
- end
53
- end
54
- end
55
-
56
- end
@@ -1,95 +0,0 @@
1
- class Striuct
2
-
3
- # @author Kenichi Kamiya
4
- module StructExtension
5
-
6
- module Eigen
7
- def has_member?(name)
8
- members.include? name
9
- end
10
-
11
- alias_method :member?, :has_member?
12
- alias_method :has_key?, :has_member?
13
- alias_method :key?, :has_key?
14
-
15
- def has_condition?(name)
16
- false
17
- end
18
-
19
- alias_method :restrict?, :has_condition?
20
-
21
- def conditionable?(condition)
22
- false
23
- end
24
-
25
- def sufficent?(name, value)
26
- true
27
- end
28
-
29
- alias_method :accept?, :sufficent?
30
-
31
- def has_default?(name)
32
- false
33
- end
34
-
35
- def cname?(name)
36
- [Symbol, String].any?{|klass|name.instance_of? klass}
37
- end
38
-
39
- def has_flavor?(name)
40
- false
41
- end
42
-
43
- # @return [Struct]
44
- def load_pairs(pairs)
45
- raise TypeError, 'no pairs object' unless pairs.respond_to? :each_pair
46
-
47
- new.tap do |r|
48
- pairs.each_pair do |name, value|
49
- if member? name
50
- r[name] = value
51
- else
52
- raise ArgumentError, " #{name} is not our member"
53
- end
54
- end
55
- end
56
- end
57
-
58
- def define(lock=false)
59
- raise ArgumentError unless lock.equal?(false)
60
-
61
- new.tap{|instance|yield instance}
62
- end
63
-
64
- # @return [StrictStruct]
65
- def to_strict
66
- StrictStruct.new(*members)
67
- end
68
-
69
- def closed?
70
- true
71
- end
72
- end
73
-
74
- def assign?(name)
75
- ! self[name].nil?
76
- end
77
-
78
- def strict?
79
- false
80
- end
81
-
82
- def secure?
83
- false
84
- end
85
-
86
- end
87
-
88
-
89
- end
90
-
91
-
92
- class Struct
93
- extend Striuct::StructExtension::Eigen
94
- include Striuct::StructExtension
95
- end
@@ -1,262 +0,0 @@
1
- require_relative 'classutil'
2
-
3
- class Striuct
4
-
5
-
6
- # @author Kenichi Kamiya
7
- module Subclass
8
-
9
- extend ClassUtil
10
- include Enumerable
11
-
12
- def initialize(*values)
13
- @db = {}
14
-
15
- if values.size <= size
16
- values.each_with_index do |v, idx|
17
- self[idx] = v
18
- end
19
-
20
- excess = members.last(size - values.size)
21
-
22
- excess.each do |name|
23
- self[name] = default_for name if has_default? name
24
- end
25
- else
26
- raise ArgumentError, "struct size differs (max: #{size})"
27
- end
28
- end
29
-
30
- # @return [Boolean]
31
- def ==(other)
32
- if self.class.equal? other.class
33
- each_pair.all?{|k, v|v == other[k]}
34
- else
35
- false
36
- end
37
- end
38
-
39
- def eql?(other)
40
- if self.class.equal? other.class
41
- each_pair.all?{|k, v|v.eql? other[k]}
42
- else
43
- false
44
- end
45
- end
46
-
47
- # @return [Integer]
48
- def hash
49
- values.map(&:hash).hash
50
- end
51
-
52
- # @return [String]
53
- def inspect
54
- "#<#{self.class} (StrictStruct)".tap do |s|
55
- each_pair do |name, value|
56
- suffix = (has_default?(name) && default?(name)) ? '(default)' : nil
57
- s << " #{name}=#{value.inspect}#{suffix}"
58
- end
59
-
60
- s << ">"
61
- end
62
- end
63
-
64
- # @return [String]
65
- def to_s
66
- "#<struct #{self.class}".tap do |s|
67
- each_pair do |name, value|
68
- s << " #{name}=#{value.inspect}"
69
- end
70
-
71
- s << '>'
72
- end
73
- end
74
-
75
- delegate_class_methods(
76
- :members, :keys, :has_member?, :member?, :has_key?, :key?, :length,
77
- :size, :keyable_for, :restrict?, :has_default?, :default_for,
78
- :names, :has_flavor?, :flavor_for, :has_conditions?, :inference?
79
- )
80
-
81
- private :keyable_for, :flavor_for
82
-
83
- # @param [Symbol, String, Fixnum] key
84
- def [](key)
85
- __subscript__(key){|name|__get__ name}
86
- end
87
-
88
- # @param [Symbol, String, Fixnum] key
89
- # @param [Object] value
90
- def []=(key, value)
91
- __subscript__(key){|name|__set__ name, value}
92
- end
93
-
94
- # @yield [name]
95
- # @yieldparam [Symbol] name - sequential under defined
96
- # @yieldreturn [self]
97
- # @return [Enumerator]
98
- def each_name
99
- return to_enum(__method__) unless block_given?
100
- self.class.each_name{|name|yield name}
101
- self
102
- end
103
-
104
- alias_method :each_member, :each_name
105
- alias_method :each_key, :each_name
106
-
107
- # @yield [value]
108
- # @yieldparam [Object] value - sequential under defined (see #each_name)
109
- # @yieldreturn [self]
110
- # @return [Enumerator]
111
- def each_value
112
- return to_enum(__method__) unless block_given?
113
- each_member{|member|yield self[member]}
114
- end
115
-
116
- alias_method :each, :each_value
117
-
118
- # @yield [name, value]
119
- # @yieldparam [Symbol] name (see #each_name)
120
- # @yieldparam [Object] value (see #each_value)
121
- # @yieldreturn [self]
122
- # @return [Enumerator]
123
- def each_pair
124
- return to_enum(__method__) unless block_given?
125
- each_name{|name|yield name, self[name]}
126
- end
127
-
128
- # @return [Array]
129
- def values
130
- [].tap do |r|
131
- each_value do |v|
132
- r << v
133
- end
134
- end
135
- end
136
-
137
- alias_method :to_a, :values
138
-
139
- # @param [Fixnum, Range] *keys
140
- # @return [Array]
141
- def values_at(*keys)
142
- [].tap do |r|
143
- keys.each do |key|
144
- case key
145
- when Fixnum
146
- r << self[key]
147
- when Range
148
- key.each do |n|
149
- r << self[n]
150
- end
151
- else
152
- raise TypeError
153
- end
154
- end
155
- end
156
- end
157
-
158
- # @param [Symbol, String] name
159
- def assign?(name)
160
- name = keyable_for name
161
- raise NameError unless member? name
162
-
163
- @db.has_key? name
164
- end
165
-
166
- # @param [Symbol, String] name
167
- def unassign(name)
168
- raise "can't modify frozen #{self.class}" if frozen?
169
- name = keyable_for name
170
- raise NameError unless member? name
171
-
172
- @db.delete name
173
- end
174
-
175
- # @param [Symbol, String] name
176
- # @param [Object] *values - no argument and use own
177
- def sufficent?(name, value=self[name])
178
- self.class.__send__(__method__, name, value, self)
179
- end
180
-
181
- alias_method :accept?, :sufficent?
182
-
183
- def strict?
184
- each_pair.all?{|name, value|self.class.sufficent? name, value}
185
- end
186
-
187
- def secure?
188
- frozen? && self.class.closed? && strict?
189
- end
190
-
191
- # @return [self]
192
- def freeze
193
- @db.freeze
194
- super
195
- end
196
-
197
- # @param [Symbol, String] name
198
- def default?(name)
199
- default_for(name) == self[name]
200
- end
201
-
202
- private
203
-
204
- def initialize_copy(org)
205
- @db = @db.clone
206
- end
207
-
208
- def __get__(name)
209
- name = keyable_for name
210
- raise NameError unless member? name
211
-
212
- @db[name]
213
- end
214
-
215
- def __set__(name, value)
216
- raise "can't modify frozen #{self.class}" if frozen?
217
- name = keyable_for name
218
- raise NameError unless member? name
219
-
220
- if accept? name, value
221
- if has_flavor? name
222
- value = instance_exec value, &flavor_for(name)
223
- end
224
-
225
- if inference? name
226
- self.class.__send__ :__found_family__!, name, value
227
- end
228
-
229
- @db[name] = value
230
- else
231
- raise ConditionError, 'deficent value for all conditions'
232
- end
233
- end
234
-
235
- alias_method :assign, :__set__
236
- public :assign
237
-
238
- def __subscript__(key)
239
- case key
240
- when Symbol, String
241
- name = keyable_for key
242
- if member? name
243
- yield name
244
- else
245
- raise NameError
246
- end
247
- when Fixnum
248
- if name = members[key]
249
- yield name
250
- else
251
- raise IndexError
252
- end
253
- else
254
- raise ArgumentError
255
- end
256
- end
257
-
258
-
259
- end
260
-
261
-
262
- end