ungulate 0.1.3 → 0.1.4

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
data/lib/ungulate/job.rb CHANGED
@@ -10,6 +10,9 @@ module Ungulate
10
10
  class Job
11
11
  attr_accessor :bucket, :key, :notification_url, :queue, :versions
12
12
 
13
+ @@blobs_from_urls = {}
14
+ cattr_accessor :blobs_from_urls
15
+
13
16
  def self.s3
14
17
  @s3 ||=
15
18
  RightAws::S3.new(ENV['AMAZON_ACCESS_KEY_ID'],
@@ -50,12 +53,24 @@ module Ungulate
50
53
  end
51
54
  end
52
55
 
56
+ def blob_from_url(url)
57
+ Job.blobs_from_urls[url] ||=
58
+ begin
59
+ @logger.info "Grabbing blob from URL #{url}"
60
+ Curl::Easy.http_get(url).body_str
61
+ end
62
+ end
63
+
64
+ def magick_image_from_url(url)
65
+ Magick::Image.from_blob(blob_from_url(url)).first
66
+ end
67
+
53
68
  def instruction_args(args)
54
69
  args.map do |arg|
55
70
  if arg.is_a?(Symbol)
56
71
  "Magick::#{arg.to_s.classify}".constantize
57
72
  elsif arg.respond_to?(:match) && arg.match(/^http/)
58
- Magick::Image.from_blob(Curl::Easy.http_get(arg).body_str).first
73
+ magick_image_from_url(arg)
59
74
  else
60
75
  arg
61
76
  end
@@ -156,6 +156,7 @@ module Ungulate
156
156
  before do
157
157
  Curl::Easy.stub(:http_get).and_return(curl_easy)
158
158
  Magick::Image.stub(:from_blob).and_return([overlay])
159
+ source_image.stub(:composite).and_return(processed_image_1)
159
160
  end
160
161
 
161
162
  context "when an argument is a URL" do
@@ -169,6 +170,19 @@ module Ungulate
169
170
  subject.image_from_instruction(source_image, instruction).
170
171
  should == processed_image_1
171
172
  end
173
+
174
+ it "caches the image blob in a hash for later reuse" do
175
+ subject.image_from_instruction(source_image, instruction)
176
+ Ungulate::Job.blobs_from_urls[url].should == 'blob'
177
+ end
178
+
179
+ context "image is already cached" do
180
+ it "reuses the cached image" do
181
+ subject.class.blobs_from_urls[url] = 'cachedblob'
182
+ Magick::Image.should_receive(:from_blob).with('cachedblob').and_return([overlay])
183
+ subject.image_from_instruction(source_image, instruction)
184
+ end
185
+ end
172
186
  end
173
187
 
174
188
  context "when argument isn't a valid http URL" do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ungulate
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 3
10
- version: 0.1.3
9
+ - 4
10
+ version: 0.1.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Andrew Bruce
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-09-17 00:00:00 +01:00
18
+ date: 2011-09-19 00:00:00 +01:00
19
19
  default_executable: ungulate_server.rb
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency