ohm 0.0.14 → 0.0.15
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/lib/ohm.rb +38 -10
- data/test/connection_test.rb +41 -0
- data/test/model_test.rb +39 -0
- metadata +3 -2
    
        data/lib/ohm.rb
    CHANGED
    
    | @@ -6,7 +6,7 @@ module Ohm | |
| 6 6 |  | 
| 7 7 | 
             
              # Provides access to the Redis database. This is shared accross all models and instances.
         | 
| 8 8 | 
             
              def redis
         | 
| 9 | 
            -
                Thread.current[:redis]
         | 
| 9 | 
            +
                Thread.current[:redis] ||= Ohm::Redis.new(*options)
         | 
| 10 10 | 
             
              end
         | 
| 11 11 |  | 
| 12 12 | 
             
              def redis=(connection)
         | 
| @@ -23,7 +23,12 @@ module Ohm | |
| 23 23 | 
             
              # @example Connect to a database in port 6380.
         | 
| 24 24 | 
             
              #   Ohm.connect(:port => 6380)
         | 
| 25 25 | 
             
              def connect(*options)
         | 
| 26 | 
            -
                self.redis =  | 
| 26 | 
            +
                self.redis = nil
         | 
| 27 | 
            +
                @options = options
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              def options
         | 
| 31 | 
            +
                @options
         | 
| 27 32 | 
             
              end
         | 
| 28 33 |  | 
| 29 34 | 
             
              # Clear the database.
         | 
| @@ -36,7 +41,7 @@ module Ohm | |
| 36 41 | 
             
                args.join(":")
         | 
| 37 42 | 
             
              end
         | 
| 38 43 |  | 
| 39 | 
            -
              module_function :key, :connect, :flush, :redis, :redis | 
| 44 | 
            +
              module_function :key, :connect, :flush, :redis, :redis=, :options
         | 
| 40 45 |  | 
| 41 46 | 
             
              module Attributes
         | 
| 42 47 | 
             
                class Collection
         | 
| @@ -97,6 +102,11 @@ module Ohm | |
| 97 102 | 
             
                    to_ary == other
         | 
| 98 103 | 
             
                  end
         | 
| 99 104 |  | 
| 105 | 
            +
                  # @return [true, false] Returns whether or not the collection is empty.
         | 
| 106 | 
            +
                  def empty?
         | 
| 107 | 
            +
                    size.zero?
         | 
| 108 | 
            +
                  end
         | 
| 109 | 
            +
             | 
| 100 110 | 
             
                private
         | 
| 101 111 |  | 
| 102 112 | 
             
                  def instantiate(raw)
         | 
| @@ -119,18 +129,35 @@ module Ohm | |
| 119 129 | 
             
                #   event.participants.all #=> ["Albert", "Benoit"]
         | 
| 120 130 | 
             
                class List < Collection
         | 
| 121 131 |  | 
| 122 | 
            -
                  # @param value [#to_s] Pushes value to the list.
         | 
| 132 | 
            +
                  # @param value [#to_s] Pushes value to the tail of the list.
         | 
| 123 133 | 
             
                  def << value
         | 
| 124 134 | 
             
                    db.rpush(key, value)
         | 
| 125 135 | 
             
                  end
         | 
| 126 136 |  | 
| 127 | 
            -
                   | 
| 128 | 
            -
             | 
| 137 | 
            +
                  # @return [String] Return and remove the last element of the list.
         | 
| 138 | 
            +
                  def pop
         | 
| 139 | 
            +
                    db.rpop(key)
         | 
| 140 | 
            +
                  end
         | 
| 141 | 
            +
             | 
| 142 | 
            +
                  # @return [String] Return and remove the first element of the list.
         | 
| 143 | 
            +
                  def shift
         | 
| 144 | 
            +
                    db.lpop(key)
         | 
| 129 145 | 
             
                  end
         | 
| 130 146 |  | 
| 147 | 
            +
                  # @param value [#to_s] Pushes value to the head of the list.
         | 
| 148 | 
            +
                  def unshift(value)
         | 
| 149 | 
            +
                    db.lpush(key, value)
         | 
| 150 | 
            +
                  end
         | 
| 151 | 
            +
             | 
| 152 | 
            +
                  # @return [Array] Elements of the list.
         | 
| 131 153 | 
             
                  def raw
         | 
| 132 154 | 
             
                    db.list(key)
         | 
| 133 155 | 
             
                  end
         | 
| 156 | 
            +
             | 
| 157 | 
            +
                  # @return [Integer] Returns the number of elements in the list.
         | 
| 158 | 
            +
                  def size
         | 
| 159 | 
            +
                    db.llen(key)
         | 
| 160 | 
            +
                  end
         | 
| 134 161 | 
             
                end
         | 
| 135 162 |  | 
| 136 163 | 
             
                # Represents a Redis set.
         | 
| @@ -165,10 +192,6 @@ module Ohm | |
| 165 192 | 
             
                    db.srem(key, value)
         | 
| 166 193 | 
             
                  end
         | 
| 167 194 |  | 
| 168 | 
            -
                  def empty?
         | 
| 169 | 
            -
                    db.scard(key).zero?
         | 
| 170 | 
            -
                  end
         | 
| 171 | 
            -
             | 
| 172 195 | 
             
                  def include?(value)
         | 
| 173 196 | 
             
                    db.sismember(key, value)
         | 
| 174 197 | 
             
                  end
         | 
| @@ -176,6 +199,11 @@ module Ohm | |
| 176 199 | 
             
                  def raw
         | 
| 177 200 | 
             
                    db.smembers(key)
         | 
| 178 201 | 
             
                  end
         | 
| 202 | 
            +
             | 
| 203 | 
            +
                  # @return [Integer] Returns the number of elements in the set.
         | 
| 204 | 
            +
                  def size
         | 
| 205 | 
            +
                    db.scard(key)
         | 
| 206 | 
            +
                  end
         | 
| 179 207 | 
             
                end
         | 
| 180 208 | 
             
              end
         | 
| 181 209 |  | 
| @@ -0,0 +1,41 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), "test_helper")
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class ConnectionTest < Test::Unit::TestCase
         | 
| 4 | 
            +
              setup do
         | 
| 5 | 
            +
                @options = Ohm.options
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              test "connects lazily" do
         | 
| 9 | 
            +
                assert_nothing_raised do
         | 
| 10 | 
            +
                  Ohm.connect(:port => 1234567)
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                assert_raises(Errno::ECONNREFUSED) do
         | 
| 14 | 
            +
                  Ohm.redis.get "foo"
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              test "provides a separate connection for each thread" do
         | 
| 19 | 
            +
                assert Ohm.redis == Ohm.redis
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                conn1, conn2 = nil
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                threads = []
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                threads << Thread.new do
         | 
| 26 | 
            +
                  conn1 = Ohm.redis
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
                
         | 
| 29 | 
            +
                threads << Thread.new do
         | 
| 30 | 
            +
                  conn2 = Ohm.redis
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                threads.each { |t| t.join }
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                assert (conn1 != conn2)
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              teardown do
         | 
| 39 | 
            +
                Ohm.connect(*@options)
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
            end
         | 
    
        data/test/model_test.rb
    CHANGED
    
    | @@ -255,6 +255,14 @@ class TestRedis < Test::Unit::TestCase | |
| 255 255 |  | 
| 256 256 | 
             
                  assert_equal [@person.id.to_s], @event.attendees.raw
         | 
| 257 257 | 
             
                end
         | 
| 258 | 
            +
             | 
| 259 | 
            +
                should "return the size of the set" do
         | 
| 260 | 
            +
                  @event.create
         | 
| 261 | 
            +
                  @event.attendees << "1"
         | 
| 262 | 
            +
                  @event.attendees << "2"
         | 
| 263 | 
            +
                  @event.attendees << "3"
         | 
| 264 | 
            +
                  assert_equal 3, @event.attendees.size
         | 
| 265 | 
            +
                end
         | 
| 258 266 | 
             
              end
         | 
| 259 267 |  | 
| 260 268 | 
             
              context "Attributes of type List" do
         | 
| @@ -294,6 +302,37 @@ class TestRedis < Test::Unit::TestCase | |
| 294 302 | 
             
                    i += 1
         | 
| 295 303 | 
             
                  end
         | 
| 296 304 | 
             
                end
         | 
| 305 | 
            +
             | 
| 306 | 
            +
                should "return the size of the list" do
         | 
| 307 | 
            +
                  @post.comments << "1"
         | 
| 308 | 
            +
                  @post.comments << "2"
         | 
| 309 | 
            +
                  @post.comments << "3"
         | 
| 310 | 
            +
                  assert_equal 3, @post.comments.size
         | 
| 311 | 
            +
                end
         | 
| 312 | 
            +
             | 
| 313 | 
            +
                should "return the last element with pop" do
         | 
| 314 | 
            +
                  @post.comments << "1"
         | 
| 315 | 
            +
                  @post.comments << "2"
         | 
| 316 | 
            +
                  assert_equal "2", @post.comments.pop
         | 
| 317 | 
            +
                  assert_equal "1", @post.comments.pop
         | 
| 318 | 
            +
                  assert @post.comments.empty?
         | 
| 319 | 
            +
                end
         | 
| 320 | 
            +
             | 
| 321 | 
            +
                should "return the first element with shift" do
         | 
| 322 | 
            +
                  @post.comments << "1"
         | 
| 323 | 
            +
                  @post.comments << "2"
         | 
| 324 | 
            +
                  assert_equal "1", @post.comments.shift
         | 
| 325 | 
            +
                  assert_equal "2", @post.comments.shift
         | 
| 326 | 
            +
                  assert @post.comments.empty?
         | 
| 327 | 
            +
                end
         | 
| 328 | 
            +
             | 
| 329 | 
            +
                should "push to the head of the list with unshift" do
         | 
| 330 | 
            +
                  @post.comments.unshift "1"
         | 
| 331 | 
            +
                  @post.comments.unshift "2"
         | 
| 332 | 
            +
                  assert_equal "1", @post.comments.pop
         | 
| 333 | 
            +
                  assert_equal "2", @post.comments.pop
         | 
| 334 | 
            +
                  assert @post.comments.empty?
         | 
| 335 | 
            +
                end
         | 
| 297 336 | 
             
              end
         | 
| 298 337 |  | 
| 299 338 | 
             
              context "Applying arbitrary transformations" do
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: ohm
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.15
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors: 
         | 
| 7 7 | 
             
            - Michel Martens
         | 
| @@ -10,7 +10,7 @@ autorequire: | |
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 12 |  | 
| 13 | 
            -
            date: 2009-07- | 
| 13 | 
            +
            date: 2009-07-30 00:00:00 -03:00
         | 
| 14 14 | 
             
            default_executable: 
         | 
| 15 15 | 
             
            dependencies: []
         | 
| 16 16 |  | 
| @@ -33,6 +33,7 @@ files: | |
| 33 33 | 
             
            - Rakefile
         | 
| 34 34 | 
             
            - test/all_tests.rb
         | 
| 35 35 | 
             
            - test/benchmarks.rb
         | 
| 36 | 
            +
            - test/connection_test.rb
         | 
| 36 37 | 
             
            - test/db/dump.rdb
         | 
| 37 38 | 
             
            - test/db/redis.pid
         | 
| 38 39 | 
             
            - test/errors_test.rb
         |