striuct 0.1.7 → 0.2.3
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/History.rdoc +43 -1
- data/LICENSE +22 -0
- data/Manifest.txt +21 -17
- data/{README.ja.rdoc → README.ja.old.rdoc} +11 -16
- data/README.rdoc +36 -250
- data/Rakefile +2 -2
- data/example/example.old.rdoc +188 -0
- data/example/example.rb +11 -219
- data/example/example1.rb +234 -0
- data/example/example2.rb +22 -0
- data/lib/striuct/abstract.rb +7 -7
- data/lib/striuct/conditions.rb +110 -69
- data/lib/striuct/{subclassable → containable}/basic.rb +9 -9
- data/lib/striuct/containable/classutil.rb +22 -0
- data/lib/striuct/{subclassable → containable}/eigen/basic.rb +9 -1
- data/lib/striuct/{subclassable → containable}/eigen/constructor.rb +1 -1
- data/lib/striuct/{subclassable → containable}/eigen/handy.rb +38 -5
- data/lib/striuct/{subclassable → containable}/eigen/inner.rb +22 -28
- data/lib/striuct/{subclassable → containable}/eigen/macro.rb +34 -25
- data/lib/striuct/{subclassable → containable}/eigen/safety.rb +15 -19
- data/lib/striuct/{subclassable/eigen/frame.rb → containable/eigen.rb} +10 -14
- data/lib/striuct/containable/handy.rb +91 -0
- data/lib/striuct/{subclassable → containable}/hashlike.rb +1 -1
- data/lib/striuct/{subclassable → containable}/inner.rb +23 -11
- data/lib/striuct/{subclassable → containable}/safety.rb +24 -5
- data/lib/striuct/{subclassable → containable}/yaml.rb +1 -1
- data/lib/striuct/containable.rb +39 -0
- data/lib/striuct/flavors.rb +83 -0
- data/lib/striuct/version.rb +2 -2
- data/lib/striuct.rb +13 -2
- data/test/test_striuct.rb +194 -17
- metadata +43 -35
- data/lib/striuct/frame.rb +0 -8
- data/lib/striuct/subclassable/classutil.rb +0 -26
- data/lib/striuct/subclassable/frame.rb +0 -33
- data/lib/striuct/subclassable/handy.rb +0 -57
data/test/test_striuct.rb
CHANGED
@@ -64,11 +64,6 @@ class TestStriuctSubclassEigen < Test::Unit::TestCase
|
|
64
64
|
assert_equal false, user.strict?
|
65
65
|
end
|
66
66
|
|
67
|
-
def test_sufficient?
|
68
|
-
assert_equal false, User.sufficient?(:age, 19)
|
69
|
-
assert_equal true, User.sufficient?(:age, 20)
|
70
|
-
end
|
71
|
-
|
72
67
|
def test_restrict?
|
73
68
|
klass = Striuct.new :foo do
|
74
69
|
member :var, //
|
@@ -81,6 +76,14 @@ class TestStriuctSubclassEigen < Test::Unit::TestCase
|
|
81
76
|
assert_equal false, klass.restrict?(:hoge)
|
82
77
|
assert_equal true, klass.restrict?(:moge)
|
83
78
|
end
|
79
|
+
|
80
|
+
def test_add_members
|
81
|
+
klass = Striuct.new :foo do
|
82
|
+
add_members :aaa, 'bbb', :ccc
|
83
|
+
end
|
84
|
+
|
85
|
+
assert_equal [:foo, :aaa, :bbb, :ccc], klass.members
|
86
|
+
end
|
84
87
|
end
|
85
88
|
|
86
89
|
class TestStriuctSubclassInstance1 < Test::Unit::TestCase
|
@@ -227,7 +230,19 @@ class TestStriuctSubclassInstance3 < Test::Unit::TestCase
|
|
227
230
|
|
228
231
|
assert_equal [@user.each_value.to_a, @user.each_index.to_a].transpose, r
|
229
232
|
end
|
230
|
-
|
233
|
+
|
234
|
+
def test_each_member_with_index
|
235
|
+
assert_same @user, @user.each_member_with_index{}
|
236
|
+
assert_kind_of Enumerator, enum = @user.each_member_with_index
|
237
|
+
|
238
|
+
r = []
|
239
|
+
@user.each_member_with_index do |name, index|
|
240
|
+
r << [name, index]
|
241
|
+
end
|
242
|
+
|
243
|
+
assert_equal [@user.each_key.to_a, @user.each_index.to_a].transpose, r
|
244
|
+
end
|
245
|
+
|
231
246
|
def test_values
|
232
247
|
assert_equal @user.values, [9999, 'taro', 'yamada', 'Tokyo Japan', 30]
|
233
248
|
end
|
@@ -251,10 +266,10 @@ end
|
|
251
266
|
|
252
267
|
class TestStriuctSubclassInstance4 < Test::Unit::TestCase
|
253
268
|
class Sth < Striuct.new
|
254
|
-
member :bool, true, false
|
269
|
+
member :bool, OR(true, false)
|
255
270
|
member :sth
|
256
271
|
protect_level :struct
|
257
|
-
member :lambda, ->v{v % 3 == 2}, ->v{v.kind_of? Float}
|
272
|
+
member :lambda, OR(->v{v % 3 == 2}, ->v{v.kind_of? Float})
|
258
273
|
end
|
259
274
|
|
260
275
|
def setup
|
@@ -330,9 +345,7 @@ end
|
|
330
345
|
|
331
346
|
class TestStriuctProcedure < Test::Unit::TestCase
|
332
347
|
Sth = Striuct.new do
|
333
|
-
member :age,
|
334
|
-
Integer arg
|
335
|
-
end
|
348
|
+
member :age, Numeric, &->arg{Integer arg}
|
336
349
|
end
|
337
350
|
|
338
351
|
def setup
|
@@ -631,8 +644,8 @@ end
|
|
631
644
|
class TestStriuctInference < Test::Unit::TestCase
|
632
645
|
def test_inference
|
633
646
|
klass = Striuct.define do
|
634
|
-
member :n, Numeric, inference
|
635
|
-
member :m, inference
|
647
|
+
member :n, Numeric, inference: true
|
648
|
+
member :m, anything, inference: true
|
636
649
|
end
|
637
650
|
|
638
651
|
sth, sth2 = klass.new, klass.new
|
@@ -903,13 +916,14 @@ end
|
|
903
916
|
|
904
917
|
class TestStriuctSpecificConditions < Test::Unit::TestCase
|
905
918
|
Sth = Striuct.define do
|
906
|
-
member :list_only_int,
|
919
|
+
member :list_only_int, GENERICS(Integer)
|
907
920
|
member :true_or_false, boolean
|
908
921
|
member :like_str, stringable
|
909
922
|
member :has_x, CAN(:x)
|
910
923
|
member :has_x_and_y, CAN(:x, :y)
|
911
|
-
member :one_of_member,
|
924
|
+
member :one_of_member, MEMBER_OF([1, 3])
|
912
925
|
member :has_ignore, AND(1..5, 3..10)
|
926
|
+
member :nand, NAND(1..5, 3..10)
|
913
927
|
member :all_pass, OR(1..5, 3..10)
|
914
928
|
member :catch_name_error, CATCH(NameError){|v|v.no_name!}
|
915
929
|
member :no_exception, STILL(->v{v.class})
|
@@ -989,7 +1003,7 @@ class TestStriuctSpecificConditions < Test::Unit::TestCase
|
|
989
1003
|
end
|
990
1004
|
|
991
1005
|
assert_raises Striuct::ConditionError do
|
992
|
-
sth.has_ignore
|
1006
|
+
sth.has_ignore= 2
|
993
1007
|
end
|
994
1008
|
|
995
1009
|
sth.has_ignore = 3
|
@@ -1000,7 +1014,27 @@ class TestStriuctSpecificConditions < Test::Unit::TestCase
|
|
1000
1014
|
sth.has_ignore = []
|
1001
1015
|
end
|
1002
1016
|
end
|
1017
|
+
|
1018
|
+
def test_nand
|
1019
|
+
sth = Sth.new
|
1020
|
+
|
1021
|
+
assert_raises Striuct::ConditionError do
|
1022
|
+
sth.nand = 4
|
1023
|
+
end
|
1024
|
+
|
1025
|
+
assert_raises Striuct::ConditionError do
|
1026
|
+
sth.nand = 4.5
|
1027
|
+
end
|
1003
1028
|
|
1029
|
+
sth.nand = 2
|
1030
|
+
assert_equal 2, sth.nand
|
1031
|
+
assert_equal true, sth.valid?(:nand)
|
1032
|
+
sth.nand = []
|
1033
|
+
assert_equal [], sth.nand
|
1034
|
+
end
|
1035
|
+
|
1036
|
+
|
1037
|
+
|
1004
1038
|
def test_member_of
|
1005
1039
|
sth = Sth.new
|
1006
1040
|
|
@@ -1206,4 +1240,147 @@ class TestStriuctInherit < Test::Unit::TestCase
|
|
1206
1240
|
SubSubSth.__send__(:close)
|
1207
1241
|
assert_equal true, SubSubSth.__send__(:closed?)
|
1208
1242
|
end
|
1209
|
-
end
|
1243
|
+
end
|
1244
|
+
|
1245
|
+
class TestStriuctConstants < Test::Unit::TestCase
|
1246
|
+
def test_const_version
|
1247
|
+
assert_equal '0.2.3', Striuct::VERSION
|
1248
|
+
assert_equal true, Striuct::VERSION.frozen?
|
1249
|
+
assert_same Striuct::VERSION, Striuct::Version
|
1250
|
+
end
|
1251
|
+
end
|
1252
|
+
|
1253
|
+
class TestStriuctConstants < Test::Unit::TestCase
|
1254
|
+
Sth = Striuct.define do
|
1255
|
+
member :name
|
1256
|
+
member :age
|
1257
|
+
end
|
1258
|
+
|
1259
|
+
def test_each_pair_with_index
|
1260
|
+
sth = Sth.new 'a', 10
|
1261
|
+
assert_same sth, sth.each_pair_with_index{}
|
1262
|
+
|
1263
|
+
enum = sth.each_pair_with_index
|
1264
|
+
assert_equal [:name, 'a', 0], enum.next
|
1265
|
+
assert_equal [:age, 10, 1], enum.next
|
1266
|
+
assert_raises StopIteration do
|
1267
|
+
enum.next
|
1268
|
+
end
|
1269
|
+
end
|
1270
|
+
end
|
1271
|
+
|
1272
|
+
class TestStriuct_to_Struct < Test::Unit::TestCase
|
1273
|
+
Sth = Striuct.define do
|
1274
|
+
member :name, String
|
1275
|
+
member :age, Integer
|
1276
|
+
end
|
1277
|
+
|
1278
|
+
def test_to_struct_class
|
1279
|
+
klass = Sth.to_struct_class
|
1280
|
+
assert_equal 'Striuct::Structs::Sth', klass.to_s
|
1281
|
+
assert_same klass, Sth.to_struct_class
|
1282
|
+
assert_kind_of Struct, Sth.new.to_struct
|
1283
|
+
assert_kind_of Striuct::Structs::Sth, Sth.new.to_struct
|
1284
|
+
|
1285
|
+
assert_raises RuntimeError do
|
1286
|
+
Striuct.new.new.to_struct
|
1287
|
+
end
|
1288
|
+
|
1289
|
+
Striuct.new(:a, :b, :c).new.to_struct
|
1290
|
+
assert_equal 1, Striuct::Structs.constants.length
|
1291
|
+
end
|
1292
|
+
end
|
1293
|
+
|
1294
|
+
class TestStriuctFlavors < Test::Unit::TestCase
|
1295
|
+
class MyClass
|
1296
|
+
def self.parse(v)
|
1297
|
+
raise unless /\A[a-z]+\z/ =~ v
|
1298
|
+
new
|
1299
|
+
end
|
1300
|
+
end
|
1301
|
+
|
1302
|
+
Sth = Striuct.define do
|
1303
|
+
member :chomped, AND(Symbol, /[^\n]\z/), &WHEN(String, ->v{v.chomp.to_sym})
|
1304
|
+
member :no_reduced, Symbol, &->v{v.to_sym}
|
1305
|
+
member :reduced, Symbol, &FLAVORS(->v{v.to_s}, ->v{v.to_sym})
|
1306
|
+
member :integer, Integer, &PARSE(Integer)
|
1307
|
+
member :myobj, ->v{v.instance_of? MyClass}, &PARSE(MyClass)
|
1308
|
+
end
|
1309
|
+
|
1310
|
+
def test_WHEN
|
1311
|
+
sth = Sth.new
|
1312
|
+
|
1313
|
+
assert_raises Striuct::ConditionError do
|
1314
|
+
sth.chomped = :"a\n"
|
1315
|
+
end
|
1316
|
+
|
1317
|
+
sth.chomped = "a\n"
|
1318
|
+
|
1319
|
+
assert_equal :a, sth.chomped
|
1320
|
+
|
1321
|
+
sth.chomped = :b
|
1322
|
+
assert_equal :b, sth.chomped
|
1323
|
+
end
|
1324
|
+
|
1325
|
+
def test_REDUCE
|
1326
|
+
sth = Sth.new
|
1327
|
+
|
1328
|
+
assert_raises Striuct::ConditionError do
|
1329
|
+
sth.no_reduced = 1
|
1330
|
+
end
|
1331
|
+
|
1332
|
+
sth.reduced = 1
|
1333
|
+
|
1334
|
+
assert_equal :'1', sth.reduced
|
1335
|
+
end
|
1336
|
+
|
1337
|
+
def test_PARSE
|
1338
|
+
sth = Sth.new
|
1339
|
+
|
1340
|
+
assert_raises Striuct::ConditionError do
|
1341
|
+
sth.integer = '1.0'
|
1342
|
+
end
|
1343
|
+
|
1344
|
+
sth.integer = '1'
|
1345
|
+
|
1346
|
+
assert_equal 1, sth.integer
|
1347
|
+
|
1348
|
+
assert_raises Striuct::ConditionError do
|
1349
|
+
sth.myobj = '1'
|
1350
|
+
end
|
1351
|
+
|
1352
|
+
sth.myobj = 'a'
|
1353
|
+
|
1354
|
+
assert_kind_of MyClass, sth.myobj
|
1355
|
+
end
|
1356
|
+
end
|
1357
|
+
|
1358
|
+
class TestGetterValidation < Test::Unit::TestCase
|
1359
|
+
Sth = Striuct.define do
|
1360
|
+
member :plus_getter, /./, getter_validation: true
|
1361
|
+
member :only_getter, /./, getter_validation: true,
|
1362
|
+
setter_validation: false
|
1363
|
+
end
|
1364
|
+
|
1365
|
+
def test_getter_validation
|
1366
|
+
sth = Sth.new
|
1367
|
+
|
1368
|
+
assert_raises Striuct::ConditionError do
|
1369
|
+
sth.plus_getter = ''
|
1370
|
+
end
|
1371
|
+
|
1372
|
+
sth.plus_getter = 'abc'
|
1373
|
+
assert_equal 'abc', sth.plus_getter
|
1374
|
+
sth.plus_getter.clear
|
1375
|
+
|
1376
|
+
assert_raises Striuct::ConditionError do
|
1377
|
+
sth.plus_getter
|
1378
|
+
end
|
1379
|
+
|
1380
|
+
sth.only_getter = ''
|
1381
|
+
|
1382
|
+
assert_raises Striuct::ConditionError do
|
1383
|
+
sth.only_getter
|
1384
|
+
end
|
1385
|
+
end
|
1386
|
+
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
|
+
version: 0.2.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,33 +9,33 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01
|
12
|
+
date: 2012-04-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement: &
|
15
|
+
name: rdoc
|
16
|
+
requirement: &23052000 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: '3.10'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *23052000
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
27
|
-
requirement: &
|
26
|
+
name: yard
|
27
|
+
requirement: &23051652 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
version: 0.7.5
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *23051652
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: newgem
|
38
|
-
requirement: &
|
38
|
+
requirement: &23051292 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,54 +43,62 @@ dependencies:
|
|
43
43
|
version: 1.5.3
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *23051292
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: hoe
|
49
|
-
requirement: &
|
49
|
+
requirement: &23050932 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '3.0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
58
|
-
description:
|
57
|
+
version_requirements: *23050932
|
58
|
+
description: Struct++
|
59
59
|
email:
|
60
60
|
- kachick1+ruby@gmail.com
|
61
61
|
executables: []
|
62
62
|
extensions: []
|
63
63
|
extra_rdoc_files:
|
64
|
+
- History.rdoc
|
64
65
|
- Manifest.txt
|
66
|
+
- README.rdoc
|
67
|
+
- README.ja.old.rdoc
|
68
|
+
- example/example.old.rdoc
|
65
69
|
files:
|
66
70
|
- History.rdoc
|
67
71
|
- Manifest.txt
|
68
72
|
- README.rdoc
|
69
|
-
- README.ja.rdoc
|
73
|
+
- README.ja.old.rdoc
|
70
74
|
- Rakefile
|
75
|
+
- LICENSE
|
71
76
|
- lib/striuct.rb
|
72
|
-
- lib/striuct/frame.rb
|
73
77
|
- lib/striuct/version.rb
|
74
78
|
- lib/striuct/abstract.rb
|
75
79
|
- lib/striuct/conditions.rb
|
76
|
-
- lib/striuct/
|
77
|
-
- lib/striuct/
|
78
|
-
- lib/striuct/
|
79
|
-
- lib/striuct/
|
80
|
-
- lib/striuct/
|
81
|
-
- lib/striuct/
|
82
|
-
- lib/striuct/
|
83
|
-
- lib/striuct/
|
84
|
-
- lib/striuct/
|
85
|
-
- lib/striuct/
|
86
|
-
- lib/striuct/
|
87
|
-
- lib/striuct/
|
88
|
-
- lib/striuct/
|
89
|
-
- lib/striuct/
|
90
|
-
- lib/striuct/
|
80
|
+
- lib/striuct/flavors.rb
|
81
|
+
- lib/striuct/containable.rb
|
82
|
+
- lib/striuct/containable/classutil.rb
|
83
|
+
- lib/striuct/containable/basic.rb
|
84
|
+
- lib/striuct/containable/safety.rb
|
85
|
+
- lib/striuct/containable/handy.rb
|
86
|
+
- lib/striuct/containable/hashlike.rb
|
87
|
+
- lib/striuct/containable/yaml.rb
|
88
|
+
- lib/striuct/containable/inner.rb
|
89
|
+
- lib/striuct/containable/eigen.rb
|
90
|
+
- lib/striuct/containable/eigen/basic.rb
|
91
|
+
- lib/striuct/containable/eigen/constructor.rb
|
92
|
+
- lib/striuct/containable/eigen/safety.rb
|
93
|
+
- lib/striuct/containable/eigen/handy.rb
|
94
|
+
- lib/striuct/containable/eigen/macro.rb
|
95
|
+
- lib/striuct/containable/eigen/inner.rb
|
91
96
|
- test/test_helper.rb
|
92
97
|
- test/test_striuct.rb
|
93
98
|
- example/example.rb
|
99
|
+
- example/example1.rb
|
100
|
+
- example/example2.rb
|
101
|
+
- example/example.old.rdoc
|
94
102
|
- example/benchmarks.rb
|
95
103
|
- example/see_trace.rb
|
96
104
|
- .gemtest
|
@@ -116,10 +124,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
124
|
version: '0'
|
117
125
|
requirements: []
|
118
126
|
rubyforge_project: striuct
|
119
|
-
rubygems_version: 1.8.
|
127
|
+
rubygems_version: 1.8.16
|
120
128
|
signing_key:
|
121
129
|
specification_version: 3
|
122
|
-
summary:
|
130
|
+
summary: Struct++
|
123
131
|
test_files:
|
124
132
|
- test/test_helper.rb
|
125
133
|
- test/test_striuct.rb
|
data/lib/striuct/frame.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
class Striuct; module Subclassable
|
2
|
-
|
3
|
-
|
4
|
-
# @author Kenichi Kamiya
|
5
|
-
module ClassUtil
|
6
|
-
|
7
|
-
private
|
8
|
-
|
9
|
-
def delegate_class_method(name)
|
10
|
-
define_method name do |*args, &block|
|
11
|
-
self.class.__send__ name, *args, &block
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def delegate_class_methods(*names)
|
16
|
-
unless names.length >= 1
|
17
|
-
raise ArgumentError, 'wrong number of argument 0 for 1+'
|
18
|
-
end
|
19
|
-
|
20
|
-
names.each{|name|delegate_class_method name}
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
|
26
|
-
end; end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require_relative 'classutil'
|
2
|
-
require_relative 'eigen/frame'
|
3
|
-
|
4
|
-
class Striuct
|
5
|
-
|
6
|
-
# @author Kenichi Kamiya
|
7
|
-
module Subclassable
|
8
|
-
extend ClassUtil
|
9
|
-
include Enumerable
|
10
|
-
|
11
|
-
SpecificContainer = Struct.new :value
|
12
|
-
|
13
|
-
if respond_to? :private_constant
|
14
|
-
private_constant :SpecificContainer
|
15
|
-
end
|
16
|
-
|
17
|
-
class << self
|
18
|
-
private
|
19
|
-
|
20
|
-
def included(klass)
|
21
|
-
klass.extend Eigen
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
require_relative 'basic'
|
29
|
-
require_relative 'safety'
|
30
|
-
require_relative 'handy'
|
31
|
-
require_relative 'hashlike'
|
32
|
-
require_relative 'yaml'
|
33
|
-
require_relative 'inner'
|
@@ -1,57 +0,0 @@
|
|
1
|
-
class Striuct; module Subclassable
|
2
|
-
# @group Struct + Handy
|
3
|
-
|
4
|
-
# see self.class.*args
|
5
|
-
delegate_class_methods :has_default?, :default_for, :has_flavor?
|
6
|
-
|
7
|
-
# @yield [index]
|
8
|
-
# @yieldparam [Integer] index
|
9
|
-
# @yieldreturn [self]
|
10
|
-
# @return [Enumerator]
|
11
|
-
def each_index(&block)
|
12
|
-
return to_enum(__method__) unless block_given?
|
13
|
-
self.class.each_index(&block)
|
14
|
-
self
|
15
|
-
end
|
16
|
-
|
17
|
-
# @yield [value, index]
|
18
|
-
# @yieldparam [Integer] index
|
19
|
-
# @yieldreturn [self]
|
20
|
-
# @return [Enumerator]
|
21
|
-
def each_value_with_index(&block)
|
22
|
-
return to_enum(__method__) unless block_given?
|
23
|
-
each_value.with_index(&block)
|
24
|
-
self
|
25
|
-
end
|
26
|
-
|
27
|
-
alias_method :each_with_index, :each_value_with_index
|
28
|
-
|
29
|
-
# @param [Symbol, String] name
|
30
|
-
def assign?(name)
|
31
|
-
name = originalkey_for(keyable_for name)
|
32
|
-
|
33
|
-
@db.has_key? name
|
34
|
-
end
|
35
|
-
|
36
|
-
# @param [Symbol, String, Fixnum] key
|
37
|
-
def clear_at(key)
|
38
|
-
__subscript__(key){|name|__clear__ name}
|
39
|
-
end
|
40
|
-
|
41
|
-
alias_method :unassign, :clear_at
|
42
|
-
alias_method :reset_at, :clear_at
|
43
|
-
|
44
|
-
# @param [Symbol, String] name
|
45
|
-
def default?(name)
|
46
|
-
name = originalkey_for(keyable_for name)
|
47
|
-
|
48
|
-
default_for(name) == self[name]
|
49
|
-
end
|
50
|
-
|
51
|
-
# all members aren't assigned
|
52
|
-
def empty?
|
53
|
-
each_name.none?{|name|assign? name}
|
54
|
-
end
|
55
|
-
|
56
|
-
# @endgroup
|
57
|
-
end; end
|