Skip to content

Commit

Permalink
Can now get and set arbitrary data in Redis.
Browse files Browse the repository at this point in the history
  • Loading branch information
T.J. VanSlyke committed May 9, 2011
1 parent 78770e8 commit bbb36a5
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 0 deletions.
1 change: 1 addition & 0 deletions Gemfile
Expand Up @@ -9,6 +9,7 @@ gem 'builder'
gem 'mime-types'
gem 'xml-simple'
gem 'thor'
gem 'json'

# Add dependencies to develop your gem here.
# Include everything needed to run rake, tests, features, etc.
Expand Down
2 changes: 2 additions & 0 deletions Gemfile.lock
Expand Up @@ -14,6 +14,7 @@ GEM
bundler (~> 1.0.0)
git (>= 1.2.5)
rake
json (1.5.1)
mime-types (1.16)
rake (0.8.7)
rcov (0.9.9)
Expand All @@ -37,6 +38,7 @@ DEPENDENCIES
builder
bundler (~> 1.0.0)
jeweler (~> 1.5.1)
json
mime-types
rcov
redis
Expand Down
18 changes: 18 additions & 0 deletions lib/juggler.rb
Expand Up @@ -3,6 +3,7 @@
require 'rubygems'
require 'bundler'
require 'digest/sha1'
require 'json'

Bundler.require

Expand Down Expand Up @@ -114,6 +115,15 @@ def progress
(Juggler.redis.hget 'juggler.progress', self.id).to_f
end

def set_data(key, value)
Juggler.redis.hset 'juggler.data', self.id, JSON.dump(data.merge(key => value))
end

def data
str = Juggler.redis.hget 'juggler.data', self.id
str ? JSON.parse(str) : {}
end

def sha1(io)
sha1 = Digest::SHA1.new
counter = 0
Expand Down Expand Up @@ -150,6 +160,14 @@ def initialize(job)
def progress(value)
job.progress = value
end

def set(key, value)
job.set_data key, value
end

def get(key)
job.data[key]
end
end

class PassthroughProcessor < Processor
Expand Down
6 changes: 6 additions & 0 deletions spec/juggler_spec.rb
Expand Up @@ -64,13 +64,19 @@ def mock_s3_object(overrides={})
class TestProcessor < Juggler::Processor
def run(io)
progress 0.5
set 'test123', { 'key' => 'value' }
return StringIO.new("FOOBAR")
end
end

Juggler.processor = TestProcessor
end

it "should have set the data object according to the #put call in the processor" do
job = Juggler::Job.run(@s3_object)
job.data['test123'].should == { 'key' => 'value' }
end

it "should reflect the appropriate progress status" do
job = Juggler::Job.run(@s3_object)
job.progress.should == 0.5
Expand Down
18 changes: 18 additions & 0 deletions spec/support/redis.rb
@@ -0,0 +1,18 @@
class Redis

def initialize(options={})
@hashes = {}
end

def hset(name, key, value)
@hashes[name] ||= {}
@hashes[name][key] = value
end

def hget(name, key)
@hashes[name] ||= {}
@hashes[name][key]
end

end

0 comments on commit bbb36a5

Please sign in to comment.