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
         |