rmm5t-rwebthumb 0.2.6 → 0.2.7

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.
Files changed (3) hide show
  1. data/lib/rwebthumb/job.rb +16 -14
  2. data/test/job_test.rb +23 -10
  3. metadata +2 -2
data/lib/rwebthumb/job.rb CHANGED
@@ -1,27 +1,29 @@
1
1
  module Simplificator
2
- module Webthumb
2
+ module Webthumb
3
3
  class Job < Base
4
-
4
+
5
5
  attr_reader :duration_estimate, :submission_datetime, :cost, :job_id, :url
6
-
6
+
7
7
  # Constant for the status attribute when job is beeing processed
8
8
  STATUS_PROCESSING = 100
9
9
  # Constant for the status attribute when job is done
10
10
  STATUS_PICKUP = 200
11
-
11
+
12
12
  # Factory method to build a Job object from a REXML xml element
13
13
  def self.from_thumbnail_xml(api_key, xml)
14
14
  job_element = REXML::XPath.first(xml, '/webthumb/jobs/job')
15
+ return nil if job_element.nil?
16
+
15
17
  submission_datetime = self.parse_webthumb_datetime(job_element.attributes['time'])
16
18
  Job.new(api_key, job_element.text, job_element.attributes['url'], submission_datetime, job_element.attributes['estimate'].to_i, job_element.attributes['cost'].to_i)
17
- end
19
+ end
18
20
  # Factory method to create a Job object from a status XML.
19
21
  # this does not set all attributes of the Job (url, duration_estimate, cost) since the API of webthumb does not
20
22
  # return the same information on job creation and status requests.
21
23
  def self.from_status_xml(api_key, xml)
22
24
  status_element = REXML::XPath.first(xml, '/webthumb/jobStatus/status')
23
25
  submission_datetime = self.parse_webthumb_datetime(status_element.attributes['submissionTime'])
24
- job = Job.new(api_key, status_element.attributes['id'], nil, submission_datetime, 5, nil,
26
+ job = Job.new(api_key, status_element.attributes['id'], nil, submission_datetime, 5, nil,
25
27
  status_element.text == 'Complete' ? STATUS_PICKUP : STATUS_PROCESSING)
26
28
  end
27
29
  # Constructor.
@@ -42,7 +44,7 @@ module Simplificator
42
44
  @status = status
43
45
  @cache = {}
44
46
  end
45
-
47
+
46
48
  # Checks the status of the job on webthumb server.
47
49
  # Returns one of the STATUS_XXX constants from Base.
48
50
  # A call to this method updates the @status attribute.
@@ -54,7 +56,7 @@ module Simplificator
54
56
  end
55
57
  @status
56
58
  end
57
-
59
+
58
60
  def fetch_when_complete(size = :small)
59
61
  while not pickup?
60
62
  sleep @duration_estimate
@@ -62,7 +64,7 @@ module Simplificator
62
64
  end
63
65
  fetch(size)
64
66
  end
65
-
67
+
66
68
  # Fetch an image from the webthumb server.
67
69
  # If the job has not yet finished then the server will return an error so check status first or use fetch_when_complete()
68
70
  # Images are cached in the context of this Job so consequent calls are not requested from server again.
@@ -74,7 +76,7 @@ module Simplificator
74
76
  end
75
77
  @cache[size]
76
78
  end
77
-
79
+
78
80
  # Write the data to disk.
79
81
  # *data: the bytes of the image as returned by fetch/fetch_when_complete
80
82
  # *name: a filename
@@ -87,16 +89,16 @@ module Simplificator
87
89
  file
88
90
  end
89
91
  end
90
-
92
+
91
93
  # Is the status attribute set to STATUS_PICKUP ?
92
94
  def pickup?
93
95
  @status == STATUS_PICKUP
94
- end
96
+ end
95
97
  # Is the status attribute set to STATUS_PROCESSING ?
96
98
  def processing?
97
99
  @status == STATUS_PROCESSING
98
100
  end
99
-
101
+
100
102
  private
101
103
  def build_fetch_xml(size = :small)
102
104
  raise WebthumbException.new("size parameter must be one of #{VALID_SIZES.join(', ')} but was #{size}") unless Base::VALID_SIZES.include?(size)
@@ -118,4 +120,4 @@ module Simplificator
118
120
  end
119
121
  end
120
122
  end
121
- end
123
+ end
data/test/job_test.rb CHANGED
@@ -1,18 +1,25 @@
1
1
  require File.join(File.dirname(__FILE__), 'helper')
2
2
  class JobTest < Test::Unit::TestCase
3
- def setup()
4
- xml = <<-EOF
5
- <webthumb>
6
- <jobs>
7
- <job estimate='20' time='2008-02-27 12:49:48' url='http://blog.joshuaeichorn.com' cost='1'>wt47c5f71c37c3a</job>
8
- </jobs>
9
- </webthumb>
10
- EOF
3
+ JOB_XML = <<-EOF
4
+ <webthumb>
5
+ <jobs>
6
+ <job estimate='20' time='2008-02-27 12:49:48' url='http://blog.joshuaeichorn.com' cost='1'>wt47c5f71c37c3a</job>
7
+ </jobs>
8
+ </webthumb>
9
+ EOF
10
+
11
+ JOBLESS_XML = <<-EOF
12
+ <webthumb>
13
+ </webthumb>
14
+ EOF
15
+
16
+ def setup_job_from_xml(xml)
11
17
  job_xml = REXML::Document.new(xml)
12
18
  @job = Job.from_thumbnail_xml('1234', job_xml)
13
19
  end
14
- def test_from_thumbnail_xml
15
20
 
21
+ def test_from_thumbnail_xml
22
+ setup_job_from_xml(JOB_XML)
16
23
  assert_equal('1234', @job.api_key)
17
24
  assert_equal(20, @job.duration_estimate)
18
25
  assert_equal(Time.parse('2008-02-27 19:49:48 UTC'), @job.submission_datetime)
@@ -21,15 +28,21 @@ class JobTest < Test::Unit::TestCase
21
28
  assert_equal('wt47c5f71c37c3a', @job.job_id)
22
29
  end
23
30
 
24
-
25
31
  def test_build_fetch()
32
+ setup_job_from_xml(JOB_XML)
26
33
  xml = @job.send(:build_fetch_xml)
27
34
  assert_equal('small', REXML::XPath.first(xml, 'fetch/size').text)
28
35
  assert_equal('wt47c5f71c37c3a', REXML::XPath.first(xml, 'fetch/job').text)
29
36
  end
30
37
 
31
38
  def test_build_status_xml()
39
+ setup_job_from_xml(JOB_XML)
32
40
  xml = @job.send(:build_status_xml)
33
41
  assert_equal('wt47c5f71c37c3a', REXML::XPath.first(xml, 'status/job').text)
34
42
  end
43
+
44
+ def test_from_thumbnail_xml_without_any_jobs()
45
+ setup_job_from_xml(JOBLESS_XML)
46
+ assert_nil @job
47
+ end
35
48
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rmm5t-rwebthumb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simplificator GmbH
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-09-03 00:00:00 -07:00
12
+ date: 2008-09-10 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15