toystore 0.5
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/.autotest +11 -0
- data/.bundle/config +2 -0
- data/.gitignore +6 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +49 -0
- data/LICENSE +9 -0
- data/LOGGING.rdoc +16 -0
- data/README.rdoc +13 -0
- data/Rakefile +7 -0
- data/examples/memcached.rb +20 -0
- data/examples/memory.rb +20 -0
- data/examples/models.rb +51 -0
- data/examples/redis.rb +20 -0
- data/lib/toy.rb +81 -0
- data/lib/toy/attribute.rb +73 -0
- data/lib/toy/attributes.rb +137 -0
- data/lib/toy/caching.rb +20 -0
- data/lib/toy/callbacks.rb +48 -0
- data/lib/toy/collection.rb +55 -0
- data/lib/toy/connection.rb +28 -0
- data/lib/toy/dirty.rb +47 -0
- data/lib/toy/dolly.rb +30 -0
- data/lib/toy/embedded_list.rb +45 -0
- data/lib/toy/embedded_lists.rb +68 -0
- data/lib/toy/equality.rb +19 -0
- data/lib/toy/exceptions.rb +29 -0
- data/lib/toy/extensions/array.rb +22 -0
- data/lib/toy/extensions/boolean.rb +43 -0
- data/lib/toy/extensions/date.rb +24 -0
- data/lib/toy/extensions/float.rb +13 -0
- data/lib/toy/extensions/hash.rb +17 -0
- data/lib/toy/extensions/integer.rb +22 -0
- data/lib/toy/extensions/nil_class.rb +17 -0
- data/lib/toy/extensions/object.rb +26 -0
- data/lib/toy/extensions/set.rb +23 -0
- data/lib/toy/extensions/string.rb +17 -0
- data/lib/toy/extensions/time.rb +29 -0
- data/lib/toy/identity.rb +26 -0
- data/lib/toy/identity/abstract_key_factory.rb +10 -0
- data/lib/toy/identity/uuid_key_factory.rb +9 -0
- data/lib/toy/identity_map.rb +109 -0
- data/lib/toy/index.rb +74 -0
- data/lib/toy/indices.rb +56 -0
- data/lib/toy/inspect.rb +12 -0
- data/lib/toy/list.rb +46 -0
- data/lib/toy/lists.rb +37 -0
- data/lib/toy/logger.rb +26 -0
- data/lib/toy/mass_assignment_security.rb +16 -0
- data/lib/toy/persistence.rb +138 -0
- data/lib/toy/plugins.rb +23 -0
- data/lib/toy/proxies/embedded_list.rb +74 -0
- data/lib/toy/proxies/list.rb +97 -0
- data/lib/toy/proxies/proxy.rb +59 -0
- data/lib/toy/querying.rb +57 -0
- data/lib/toy/reference.rb +134 -0
- data/lib/toy/references.rb +19 -0
- data/lib/toy/serialization.rb +81 -0
- data/lib/toy/store.rb +36 -0
- data/lib/toy/timestamps.rb +22 -0
- data/lib/toy/validations.rb +45 -0
- data/lib/toy/version.rb +3 -0
- data/lib/toystore.rb +1 -0
- data/spec/helper.rb +35 -0
- data/spec/spec.opts +3 -0
- data/spec/support/constants.rb +41 -0
- data/spec/support/identity_map_matcher.rb +20 -0
- data/spec/support/name_and_number_key_factory.rb +5 -0
- data/spec/toy/attribute_spec.rb +176 -0
- data/spec/toy/attributes_spec.rb +394 -0
- data/spec/toy/caching_spec.rb +62 -0
- data/spec/toy/callbacks_spec.rb +97 -0
- data/spec/toy/connection_spec.rb +47 -0
- data/spec/toy/dirty_spec.rb +99 -0
- data/spec/toy/dolly_spec.rb +76 -0
- data/spec/toy/embedded_list_spec.rb +607 -0
- data/spec/toy/embedded_lists_spec.rb +172 -0
- data/spec/toy/equality_spec.rb +46 -0
- data/spec/toy/exceptions_spec.rb +18 -0
- data/spec/toy/extensions/array_spec.rb +25 -0
- data/spec/toy/extensions/boolean_spec.rb +41 -0
- data/spec/toy/extensions/date_spec.rb +48 -0
- data/spec/toy/extensions/float_spec.rb +14 -0
- data/spec/toy/extensions/hash_spec.rb +21 -0
- data/spec/toy/extensions/integer_spec.rb +29 -0
- data/spec/toy/extensions/nil_class_spec.rb +14 -0
- data/spec/toy/extensions/set_spec.rb +27 -0
- data/spec/toy/extensions/string_spec.rb +28 -0
- data/spec/toy/extensions/time_spec.rb +94 -0
- data/spec/toy/identity/abstract_key_factory_spec.rb +7 -0
- data/spec/toy/identity/uuid_key_factory_spec.rb +7 -0
- data/spec/toy/identity_map_spec.rb +150 -0
- data/spec/toy/identity_spec.rb +52 -0
- data/spec/toy/index_spec.rb +230 -0
- data/spec/toy/indices_spec.rb +141 -0
- data/spec/toy/inspect_spec.rb +15 -0
- data/spec/toy/list_spec.rb +576 -0
- data/spec/toy/lists_spec.rb +95 -0
- data/spec/toy/logger_spec.rb +33 -0
- data/spec/toy/mass_assignment_security_spec.rb +116 -0
- data/spec/toy/persistence_spec.rb +312 -0
- data/spec/toy/plugins_spec.rb +39 -0
- data/spec/toy/querying_spec.rb +162 -0
- data/spec/toy/reference_spec.rb +400 -0
- data/spec/toy/references_spec.rb +86 -0
- data/spec/toy/serialization_spec.rb +354 -0
- data/spec/toy/store_spec.rb +41 -0
- data/spec/toy/timestamps_spec.rb +63 -0
- data/spec/toy/validations_spec.rb +171 -0
- data/spec/toy_spec.rb +26 -0
- data/specs.watchr +52 -0
- data/test/lint_test.rb +40 -0
- data/toystore.gemspec +24 -0
- metadata +290 -0
| @@ -0,0 +1,172 @@ | |
| 1 | 
            +
            require 'helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Toy::Lists do
         | 
| 4 | 
            +
              uses_constants('Game', 'Move')
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              it "defaults lists to empty hash" do
         | 
| 7 | 
            +
                Game.embedded_lists.should == {}
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              it "does not share with regular lists" do
         | 
| 11 | 
            +
                Game.list(:moves)
         | 
| 12 | 
            +
                Game.embedded_lists.should == {}
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              describe ".embedded_list?" do
         | 
| 16 | 
            +
                before do
         | 
| 17 | 
            +
                  Game.embedded_list(:moves)
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                it "returns true if attribute (symbol)" do
         | 
| 21 | 
            +
                  Game.embedded_list?(:moves).should be_true
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                it "returns true if attribute (string)" do
         | 
| 25 | 
            +
                  Game.embedded_list?('moves').should be_true
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                it "returns false if not attribute" do
         | 
| 29 | 
            +
                  Game.embedded_list?(:foobar).should be_false
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              describe ".parent_reference" do
         | 
| 34 | 
            +
                before do
         | 
| 35 | 
            +
                  Game.embedded_list(:moves)
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                context "with single name" do
         | 
| 39 | 
            +
                  before do
         | 
| 40 | 
            +
                    Move.parent_reference(:game)
         | 
| 41 | 
            +
                    @game = Game.new
         | 
| 42 | 
            +
                    @move = Move.new
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  it "defines method that calls parent_reference" do
         | 
| 46 | 
            +
                    @move.parent_reference = @game
         | 
| 47 | 
            +
                    @move.game.should == @game
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  it "defaults boolean method that checks parent_reference existence" do
         | 
| 51 | 
            +
                    @move.game?.should be_false
         | 
| 52 | 
            +
                    @move.parent_reference = @game
         | 
| 53 | 
            +
                    @move.game?.should be_true
         | 
| 54 | 
            +
                  end
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                context "with multiple names" do
         | 
| 58 | 
            +
                  before do
         | 
| 59 | 
            +
                    Move.parent_reference(:game, :yaypants)
         | 
| 60 | 
            +
                    @game = Game.new
         | 
| 61 | 
            +
                    @move = Move.new
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                  it "defines method that calls parent_reference" do
         | 
| 65 | 
            +
                    @move.parent_reference = @game
         | 
| 66 | 
            +
                    @move.game.should == @game
         | 
| 67 | 
            +
                    @move.yaypants.should == @game
         | 
| 68 | 
            +
                  end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                  it "defaults boolean method that checks parent_reference existence" do
         | 
| 71 | 
            +
                    @move.game?.should be_false
         | 
| 72 | 
            +
                    @move.yaypants?.should be_false
         | 
| 73 | 
            +
                    @move.parent_reference = @game
         | 
| 74 | 
            +
                    @move.game?.should be_true
         | 
| 75 | 
            +
                    @move.yaypants?.should be_true
         | 
| 76 | 
            +
                  end
         | 
| 77 | 
            +
                end
         | 
| 78 | 
            +
              end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
              describe '.parent_references' do
         | 
| 81 | 
            +
                it 'keeps track of single names' do
         | 
| 82 | 
            +
                  Move.parent_reference(:game)
         | 
| 83 | 
            +
                  Move.parent_references.should == [:game]
         | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                it 'keeps track of single names' do
         | 
| 87 | 
            +
                  Move.parent_reference(:game, :yaypants)
         | 
| 88 | 
            +
                  Move.parent_references.should == [:game, :yaypants]
         | 
| 89 | 
            +
                end
         | 
| 90 | 
            +
              end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
              describe '.parent_reference?' do
         | 
| 93 | 
            +
                before do
         | 
| 94 | 
            +
                  Move.parent_reference(:game)
         | 
| 95 | 
            +
                end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                it 'returns true if attribute (symbol)' do
         | 
| 98 | 
            +
                  Move.parent_reference?(:game).should be_true
         | 
| 99 | 
            +
                end
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                it 'returns true if attribute (string)' do
         | 
| 102 | 
            +
                  Move.parent_reference?('game').should be_true
         | 
| 103 | 
            +
                end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                it 'returns false if not an attribute' do
         | 
| 106 | 
            +
                  Move.parent_reference?(:foobar).should be_false
         | 
| 107 | 
            +
                end
         | 
| 108 | 
            +
              end
         | 
| 109 | 
            +
             | 
| 110 | 
            +
              describe "declaring an embedded list" do
         | 
| 111 | 
            +
                describe "using conventions" do
         | 
| 112 | 
            +
                  before do
         | 
| 113 | 
            +
                    @list = Game.embedded_list(:moves)
         | 
| 114 | 
            +
                  end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                  it "knows about its lists" do
         | 
| 117 | 
            +
                    Game.embedded_lists[:moves].should == Toy::EmbeddedList.new(Game, :moves)
         | 
| 118 | 
            +
                  end
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                  it "returns list" do
         | 
| 121 | 
            +
                    @list.should == Toy::EmbeddedList.new(Game, :moves)
         | 
| 122 | 
            +
                  end
         | 
| 123 | 
            +
                end
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                describe "with type" do
         | 
| 126 | 
            +
                  before do
         | 
| 127 | 
            +
                    @list = Game.embedded_list(:recent_moves, Move)
         | 
| 128 | 
            +
                  end
         | 
| 129 | 
            +
                  let(:list) { @list }
         | 
| 130 | 
            +
             | 
| 131 | 
            +
                  it "sets type" do
         | 
| 132 | 
            +
                    list.type.should be(Move)
         | 
| 133 | 
            +
                  end
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                  it "sets options to hash" do
         | 
| 136 | 
            +
                    list.options.should be_instance_of(Hash)
         | 
| 137 | 
            +
                  end
         | 
| 138 | 
            +
                end
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                describe "with options" do
         | 
| 141 | 
            +
                  before do
         | 
| 142 | 
            +
                    @list = Game.embedded_list(:moves, :some_option => true)
         | 
| 143 | 
            +
                  end
         | 
| 144 | 
            +
                  let(:list) { @list }
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                  it "sets type" do
         | 
| 147 | 
            +
                    list.type.should be(Move)
         | 
| 148 | 
            +
                  end
         | 
| 149 | 
            +
             | 
| 150 | 
            +
                  it "sets options" do
         | 
| 151 | 
            +
                    list.options.should have_key(:some_option)
         | 
| 152 | 
            +
                    list.options[:some_option].should be_true
         | 
| 153 | 
            +
                  end
         | 
| 154 | 
            +
                end
         | 
| 155 | 
            +
             | 
| 156 | 
            +
                describe "with type and options" do
         | 
| 157 | 
            +
                  before do
         | 
| 158 | 
            +
                    @list = Game.embedded_list(:recent_moves, Move, :some_option => true)
         | 
| 159 | 
            +
                  end
         | 
| 160 | 
            +
                  let(:list) { @list }
         | 
| 161 | 
            +
             | 
| 162 | 
            +
                  it "sets type" do
         | 
| 163 | 
            +
                    list.type.should be(Move)
         | 
| 164 | 
            +
                  end
         | 
| 165 | 
            +
             | 
| 166 | 
            +
                  it "sets options" do
         | 
| 167 | 
            +
                    list.options.should have_key(:some_option)
         | 
| 168 | 
            +
                    list.options[:some_option].should be_true
         | 
| 169 | 
            +
                  end
         | 
| 170 | 
            +
                end
         | 
| 171 | 
            +
              end
         | 
| 172 | 
            +
            end
         | 
| @@ -0,0 +1,46 @@ | |
| 1 | 
            +
            require 'helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Toy::Equality do
         | 
| 4 | 
            +
              uses_constants('User', 'Game', 'Person')
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              describe "#eql?" do
         | 
| 7 | 
            +
                it "returns true if same class and id" do
         | 
| 8 | 
            +
                  User.new(:id => 1).should eql(User.new(:id => 1))
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                it "return false if different class" do
         | 
| 12 | 
            +
                  User.new(:id => 1).should_not eql(Person.new(:id => 1))
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                it "returns false if different id" do
         | 
| 16 | 
            +
                  User.new(:id => 1).should_not eql(User.new(:id => 2))
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                it "returns true if reference and target is same class and id" do
         | 
| 20 | 
            +
                  Game.reference(:user)
         | 
| 21 | 
            +
                  user = User.create
         | 
| 22 | 
            +
                  game = Game.create(:user => user)
         | 
| 23 | 
            +
                  user.should eql(game.user)
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              describe "equal?" do
         | 
| 28 | 
            +
                it "returns true if same object" do
         | 
| 29 | 
            +
                  user = User.create(:id => 1)
         | 
| 30 | 
            +
                  user.should equal(user)
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                it "returns true if same object through proxy" do
         | 
| 34 | 
            +
                  Game.reference(:user)
         | 
| 35 | 
            +
                  user = User.create
         | 
| 36 | 
            +
                  game = Game.create(:user => user)
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  user.should equal(game.user)
         | 
| 39 | 
            +
                  game.user.should equal(user)
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                it "returns false if not same object" do
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
            end
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            require 'helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Toy::RecordInvalidError do
         | 
| 4 | 
            +
              uses_constants('User')
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              before do
         | 
| 7 | 
            +
                User.attribute(:name, String)
         | 
| 8 | 
            +
                User.attribute(:age, Integer)
         | 
| 9 | 
            +
                User.validates_presence_of(:name)
         | 
| 10 | 
            +
                User.validates_presence_of(:age)
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
              
         | 
| 13 | 
            +
              it "should include a message of the errors" do
         | 
| 14 | 
            +
                user = User.new
         | 
| 15 | 
            +
                user.should_not be_valid
         | 
| 16 | 
            +
                Toy::RecordInvalidError.new(user).message.should == "Invalid record: Name can't be blank and Age can't be blank"
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            require 'helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe "Array.to_store" do
         | 
| 4 | 
            +
              it "should convert value to_a" do
         | 
| 5 | 
            +
                Array.to_store([1, 2, 3, 4]).should == [1, 2, 3, 4]
         | 
| 6 | 
            +
                Array.to_store('1').should == ['1']
         | 
| 7 | 
            +
                Array.to_store({'1' => '2', '3' => '4'}).should == [['1', '2'], ['3', '4']]
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
            end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            describe "Array.from_store" do
         | 
| 12 | 
            +
              it "should be array if array" do
         | 
| 13 | 
            +
                Array.from_store([1, 2]).should == [1, 2]
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              it "should be empty array if nil" do
         | 
| 17 | 
            +
                Array.from_store(nil).should == []
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            describe "Array.store_default" do
         | 
| 22 | 
            +
              it "returns emtpy array" do
         | 
| 23 | 
            +
                Array.store_default.should == []
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,41 @@ | |
| 1 | 
            +
            require 'helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe "Boolean.to_store" do
         | 
| 4 | 
            +
              it "should be true for true" do
         | 
| 5 | 
            +
                Boolean.to_store(true).should be_true
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              it "should be false for false" do
         | 
| 9 | 
            +
                Boolean.to_store(false).should be_false
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              it "should handle odd assortment of other values" do
         | 
| 13 | 
            +
                Boolean.to_store('true').should be_true
         | 
| 14 | 
            +
                Boolean.to_store('t').should be_true
         | 
| 15 | 
            +
                Boolean.to_store('1').should be_true
         | 
| 16 | 
            +
                Boolean.to_store(1).should be_true
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                Boolean.to_store('false').should be_false
         | 
| 19 | 
            +
                Boolean.to_store('f').should be_false
         | 
| 20 | 
            +
                Boolean.to_store('0').should be_false
         | 
| 21 | 
            +
                Boolean.to_store(0).should be_false
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              it "should be nil for nil" do
         | 
| 25 | 
            +
                Boolean.to_store(nil).should be_nil
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
            end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            describe "Boolean.from_store" do
         | 
| 30 | 
            +
              it "should be true for true" do
         | 
| 31 | 
            +
                Boolean.from_store(true).should be_true
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              it "should be false for false" do
         | 
| 35 | 
            +
                Boolean.from_store(false).should be_false
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              it "should be nil for nil" do
         | 
| 39 | 
            +
                Boolean.from_store(nil).should be_nil
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
            end
         | 
| @@ -0,0 +1,48 @@ | |
| 1 | 
            +
            require 'helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe "Date.to_store" do
         | 
| 4 | 
            +
              it "should be time if string" do
         | 
| 5 | 
            +
                date = Date.to_store('2009-10-01')
         | 
| 6 | 
            +
                date.should == Time.utc(2009, 10, 1)
         | 
| 7 | 
            +
                date.should == date
         | 
| 8 | 
            +
                date.month.should == 10
         | 
| 9 | 
            +
                date.day.should == 1
         | 
| 10 | 
            +
                date.year.should == 2009
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              it "should be time if date" do
         | 
| 14 | 
            +
                Date.to_store(Date.new(2009, 10, 1)).should == Time.utc(2009, 10, 1)
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              it "should be date if time" do
         | 
| 18 | 
            +
                Date.to_store(Time.parse("2009-10-1T12:30:00")).should == Time.utc(2009, 10, 1)
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              it "should be nil if bogus string" do
         | 
| 22 | 
            +
                Date.to_store('jdsafop874').should be_nil
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              it "should be nil if empty string" do
         | 
| 26 | 
            +
                Date.to_store('').should be_nil
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            describe "Date.from_store" do
         | 
| 31 | 
            +
              it "should be date if date" do
         | 
| 32 | 
            +
                date = Date.new(2009, 10, 1)
         | 
| 33 | 
            +
                from_date = Date.from_store(date)
         | 
| 34 | 
            +
                from_date.should == date
         | 
| 35 | 
            +
                from_date.month.should == 10
         | 
| 36 | 
            +
                from_date.day.should == 1
         | 
| 37 | 
            +
                from_date.year.should == 2009
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              it "should be date if time" do
         | 
| 41 | 
            +
                time = Time.now
         | 
| 42 | 
            +
                Date.from_store(time).should == time.to_date
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              it "should be nil if nil" do
         | 
| 46 | 
            +
                Date.from_store(nil).should be_nil
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
            end
         | 
| @@ -0,0 +1,14 @@ | |
| 1 | 
            +
            require 'helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe "Float.to_store" do
         | 
| 4 | 
            +
              it "should convert value to_f" do
         | 
| 5 | 
            +
                [21, 21.0, '21'].each do |value|
         | 
| 6 | 
            +
                  Float.to_store(value).should == 21.0
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              it "should leave nil values nil" do
         | 
| 11 | 
            +
                Float.to_store(nil).should == nil
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
| 14 | 
            +
             | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            require 'helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe "Hash.from_store" do
         | 
| 4 | 
            +
              it "should convert hash to hash with indifferent access" do
         | 
| 5 | 
            +
                hash = Hash.from_store(:foo => 'bar')
         | 
| 6 | 
            +
                hash[:foo].should  == 'bar'
         | 
| 7 | 
            +
                hash['foo'].should == 'bar'
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              it "should be hash if nil" do
         | 
| 11 | 
            +
                hash = Hash.from_store(nil)
         | 
| 12 | 
            +
                hash.should == {}
         | 
| 13 | 
            +
                hash.is_a?(HashWithIndifferentAccess).should be_true
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            describe "Hash.store_default" do
         | 
| 18 | 
            +
              it "returns emtpy hash with indifferent access" do
         | 
| 19 | 
            +
                Hash.store_default.should == {}.with_indifferent_access
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            require 'helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe "Integer.to_store" do
         | 
| 4 | 
            +
              it "should convert value to integer" do
         | 
| 5 | 
            +
                [21, 21.0, '21'].each do |value|
         | 
| 6 | 
            +
                  Integer.to_store(value).should == 21
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              it "should work fine with big integers" do
         | 
| 11 | 
            +
                [9223372036854775807, '9223372036854775807'].each do |value|
         | 
| 12 | 
            +
                  Integer.to_store(value).should == 9223372036854775807
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            describe "Integer.from_store" do
         | 
| 18 | 
            +
              it "should convert value to integer" do
         | 
| 19 | 
            +
                [21, 21.0, '21'].each do |value|
         | 
| 20 | 
            +
                  Integer.from_store(value).should == 21
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              it "should work fine with big integers" do
         | 
| 25 | 
            +
                [9223372036854775807, '9223372036854775807'].each do |value|
         | 
| 26 | 
            +
                  Integer.from_store(value).should == 9223372036854775807
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
            end
         | 
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            require 'helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe "Set.to_store" do
         | 
| 4 | 
            +
              it "should convert value to_a" do
         | 
| 5 | 
            +
                Set.to_store(Set.new([1,2,3])).should == [1,2,3]
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              it "should convert to empty array if nil" do
         | 
| 9 | 
            +
                Set.to_store(nil).should == []
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
            end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            describe "Set.from_store" do
         | 
| 14 | 
            +
              it "should be a set if array" do
         | 
| 15 | 
            +
                Set.from_store([1,2,3]).should == Set.new([1,2,3])
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              it "should be empty set if nil" do
         | 
| 19 | 
            +
                Set.from_store(nil).should == Set.new([])
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            describe "Set.store_default" do
         | 
| 24 | 
            +
              it "returns empty set" do
         | 
| 25 | 
            +
                Set.store_default.should == Set.new
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
            end
         |