simplificator-rwebthumb 0.0.6 → 0.1.0

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/README CHANGED
@@ -4,12 +4,12 @@
4
4
  A Ruby wrapper for the webthumb API from http://webthumb.bluga.net
5
5
 
6
6
  = dependencies
7
- - tzinfo:http://tzinfo.rubyforge.org (install: sudo gem install tzinfo)
7
+ * tzinfo:http://tzinfo.rubyforge.org (install: sudo gem install tzinfo)
8
8
 
9
9
  = Installation
10
10
  sudo gem update --system (in case you are not yet on version 1.2.0 or higher)
11
11
  sudo gem sources -a http://gems.github.com (only once)
12
- sudo gem install rwebthumb
12
+ sudo gem install simplificator-rwebthumb
13
13
 
14
14
 
15
15
  = Usage
@@ -37,7 +37,7 @@ job.fetch_when_complete(:large)
37
37
  # once thumbnails are fetched they are cached within the job. so a new fetch will not go to the server again
38
38
 
39
39
  # there is a helper method to write the images to disk
40
- job.write_file(, '/tmp/test.jpg')
40
+ job.write_file(job.fetch(:custom), '/tmp/test.jpg')
41
41
 
42
42
  # if you have a job ID then you can use this to get a Job object and then use the fetch_xyz methods
43
43
  wt.job_status(JOB_ID)
data/lib/rwebthumb/job.rb CHANGED
@@ -15,14 +15,23 @@ module Simplificator
15
15
  submission_datetime = self.parse_webthumb_datetime(job_element.attributes['time'])
16
16
  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
17
  end
18
-
18
+ # Factory method to create a Job object from a status XML.
19
+ # this does not set all attributes of the Job (url, duration_estimate, cost) since the API of webthumb does not
20
+ # return the same information on job creation and status requests.
19
21
  def self.from_status_xml(api_key, xml)
20
22
  status_element = REXML::XPath.first(xml, '/webthumb/jobStatus/status')
21
23
  submission_datetime = self.parse_webthumb_datetime(status_element.attributes['submissionTime'])
22
24
  job = Job.new(api_key, status_element.attributes['id'], nil, submission_datetime, 5, nil,
23
25
  status_element.text == 'Complete' ? STATUS_PICKUP : STATUS_PROCESSING)
24
26
  end
25
-
27
+ # Constructor.
28
+ # *api_key: webthumb API key. Required by all the operations which query the server
29
+ # *job_id: id of the job. Required.
30
+ # *url: the url of the site to snapshot. Optional
31
+ # *submission_datetime: UTC Datetime of job submission
32
+ # *duration_estimate: integer value indicating estimated job duration in seconds
33
+ # *cost: integer value indicating how many credit this request costet. Optional
34
+ # *status: one of the STATUS_XXX constants defined in Base. Defaults to STATUS_PROCESSING
26
35
  def initialize(api_key, job_id, url, submission_datetime, duration_estimate, cost, status = STATUS_PROCESSING)
27
36
  super(api_key)
28
37
  @job_id = job_id
@@ -34,12 +43,14 @@ module Simplificator
34
43
  @cache = {}
35
44
  end
36
45
 
46
+ # Checks the status of the job on webthumb server.
47
+ # Returns one of the STATUS_XXX constants from Base.
48
+ # A call to this method updates the @status attribute.
37
49
  def check_status
38
50
  response = do_request(build_status_xml())
39
51
  @status = REXML::XPath.first(response, '/webthumb/jobStatus/status').text == 'Complete' ? STATUS_PICKUP : STATUS_PROCESSING
40
52
  if pickup?
41
53
  @completion_time = response.attributes['completionTime']
42
- @duration = 'not yet... need to convert times first'
43
54
  end
44
55
  @status
45
56
  end
@@ -52,6 +63,10 @@ module Simplificator
52
63
  fetch(size)
53
64
  end
54
65
 
66
+ # Fetch an image from the webthumb server.
67
+ # If the job has not yet finished then the server will return an error so check status first or use fetch_when_complete()
68
+ # Images are cached in the context of this Job so consequent calls are not requested from server again.
69
+ # Cache is experimental, dont know if it is a good idea.
55
70
  def fetch(size = :small)
56
71
  unless @cache.has_key?(size)
57
72
  response = do_request(build_fetch_xml(size))
@@ -60,6 +75,10 @@ module Simplificator
60
75
  @cache[size]
61
76
  end
62
77
 
78
+ # Write the data to disk.
79
+ # *data: the bytes of the image as returned by fetch/fetch_when_complete
80
+ # *name: a filename
81
+ # Will return a File object
63
82
  def write_file(data, name)
64
83
  raise WebthumbException.new('NO data given') if data == nil || data.size == 0
65
84
  File.open(name, 'wb+') do |file|
@@ -69,9 +88,11 @@ module Simplificator
69
88
  end
70
89
  end
71
90
 
91
+ # Is the status attribute set to STATUS_PICKUP ?
72
92
  def pickup?
73
93
  @status == STATUS_PICKUP
74
94
  end
95
+ # Is the status attribute set to STATUS_PROCESSING ?
75
96
  def processing?
76
97
  @status == STATUS_PROCESSING
77
98
  end
@@ -4,21 +4,54 @@ require 'date'
4
4
  module Simplificator
5
5
  module Webthumb
6
6
 
7
-
7
+ #
8
+ # Main access point for the webthumb API.
9
+ # All methods calling the Server need the api key beeing set.
10
+ #
8
11
  class Webthumb < Base
12
+ # Request thumbnail creation from webthumb server. A Job object holding
13
+ # request information is returned (most important the job_id)
14
+ # Some keys have been ruby-ized (i.e. outputType -> :output_type). All keys are
15
+ # Symbols. Check out the webthumb API description for detailed explanation of the options
16
+ # http://webthumb.bluga.net/apidoc
17
+ # Options:
18
+ # * url: the url to take the snapshot from
19
+ # * output_type: chose output format (jpg or png)
20
+ # * width: width of the browser
21
+ # * height: height of the browser
22
+ # * fullthumb: full sized snapshot (true or false)
23
+ # * custom_thumbnail: create a custom sized thumbnail. A hash with width and height entries
24
+ # * effect: specify a visual effect (mirror, dropshadow or border)
25
+ # * delay: wait until the snapshot is taken
26
+ # * notify: callback url which is called after snapshot is taken
27
+ # * excerpt: taking an excerpt snapshot. A hash with for entries. width, height, x, y
28
+ # * videothumb: experimental option, check Joshs blog (http://blog.joshuaeichorn.com/archives/2008/07/08/videothumb-addon-to-webthumb-is-alpha/)
29
+ # (true or false)
30
+ # Only the url option is required. Check webthumb API for default values. Check also the different constants
31
+ # defined in Base.rb for valid values
32
+ #
9
33
  def thumbnail(options = {})
10
34
  Job.from_thumbnail_xml(@api_key, do_request(build_thumbnail_xml(options)))
11
35
  end
12
-
36
+
37
+ # Request the job status from server.
38
+ # This can be used to look up job status from server when you just have the job ID, e.g. when you want to retrieve
39
+ # the thumbs later or when you use callbacks.
40
+ # The Job object returned from this method does not have all attributes set since. Webthumbs API does not return
41
+ # the requested URL, the duration estimation and the cost values when checking the status. I hope this will change someday.
13
42
  def job_status(job_id)
43
+ raise WebthumbException.new('Job id is required') if job_id == nil || job_id == ''
14
44
  Job.from_status_xml(@api_key, do_request(build_job_status_xml(job_id)))
15
45
  end
16
46
 
47
+ # Check your credit status on the webthumbs server
48
+ # Returns a hash with two keys. See webthumb API for detailed information.
49
+ # * reserve: an integer
50
+ # * subscription: an integer
17
51
  def credits()
18
- root = build_root_node()
19
- root.add_element('credits')
20
- elements = do_request(root).elements['webthumb'].elements['credits'].elements
21
- {:reserve => elements['reserve'].text.to_i, :subscription => elements['subscription'].text.to_i}
52
+ response = do_request(build_credits_xml())
53
+ credit_element = REXML::XPath.first(response, '/webthumb/credits')
54
+ {:reserve => credit_element['reserve'].text.to_i, :subscription => credit_element['subscription'].text.to_i}
22
55
  end
23
56
 
24
57
  private
@@ -30,11 +63,15 @@ module Simplificator
30
63
  request = root.add_element('request')
31
64
  request.add_element('url').add_text(options[:url])
32
65
  add_element(request, options, :output_type, 'outputType')
33
- [:width, :height, :effect, :delay, :notofy].each {|item| add_element(request, options, item)}
34
-
66
+ # these elements have the same name as the key in options hash
67
+ [:width, :height, :effect, :delay, :notify].each {|item| add_element(request, options, item)}
68
+ # these options need conversion from true/false to 0/1
35
69
  if options[:fullthumb] == true
36
70
  request.add_element('fullthumb').add_text('1')
37
71
  end
72
+ if options[:videothumb] == true
73
+ request.add_element('videothumb').add_text('1')
74
+ end
38
75
  if options.has_key?(:custom_thumbnail)
39
76
  request.add_element('customThumbnail',
40
77
  'width' => options[:custom_thumbnail][:width].to_s,
@@ -54,10 +91,15 @@ module Simplificator
54
91
  root
55
92
  end
56
93
 
94
+ def build_credits_xml()
95
+ root = build_root_node()
96
+ root.add_element('credits')
97
+ root
98
+ end
99
+
57
100
  def validate_thumbnail_options(options)
58
101
  raise WebthumbException.new('Need an URL') if options[:url] == nil || options[:url] == ''
59
- raise WebthumbException.new("output_type is invalid: #{options[:output_type]}") if options.has_key?(:output_type) and (not Base::VALID_OUTPUT_TYPES.include?(options[:output_type]))
60
-
102
+ #raise WebthumbException.new("output_type is invalid: #{options[:output_type]}") if options.has_key?(:output_type) and (not Base::VALID_OUTPUT_TYPES.include?(options[:output_type]))
61
103
  end
62
104
  end
63
105
 
@@ -4,8 +4,28 @@ class WebthumbTest < Test::Unit::TestCase
4
4
 
5
5
 
6
6
  def test_build_fetch()
7
- xml = Webthumb.new('1234').send(:build_thumbnail_xml, :url => 'http://simplificator.com')
7
+ xml = Webthumb.new('1234').send(:build_thumbnail_xml,
8
+ :url => 'http://simplificator.com',
9
+ :videothumb => true, :fullthumb => true, :effect => 'dropshadow', :output_type => :jpg,
10
+ :width => 1024, :height => 2048, :custom_thumbnail => {:width => 300, :height => 400},
11
+ :excerpt => {:x => 30, :y => 40, :width => 600, :height => 345}, :delay => 20, :notify => 'http://foo.bar.com')
8
12
  assert_equal('http://simplificator.com', REXML::XPath.first(xml, 'request/url').text)
13
+ assert_equal('1', REXML::XPath.first(xml, 'request/videothumb').text)
14
+ assert_equal('1', REXML::XPath.first(xml, 'request/fullthumb').text)
15
+ assert_equal('dropshadow', REXML::XPath.first(xml, 'request/effect').text)
16
+ assert_equal('jpg', REXML::XPath.first(xml, 'request/outputType').text)
17
+ assert_equal('1024', REXML::XPath.first(xml, 'request/width').text)
18
+ assert_equal('2048', REXML::XPath.first(xml, 'request/height').text)
19
+ assert_equal('300', REXML::XPath.first(xml, 'request/customThumbnail').attributes['width'])
20
+ assert_equal('400', REXML::XPath.first(xml, 'request/customThumbnail').attributes['height'])
21
+ assert_equal('30', REXML::XPath.first(xml, 'request/excerpt/x').text)
22
+ assert_equal('40', REXML::XPath.first(xml, 'request/excerpt/y').text)
23
+ assert_equal('600', REXML::XPath.first(xml, 'request/excerpt/width').text)
24
+ assert_equal('345', REXML::XPath.first(xml, 'request/excerpt/height').text)
25
+ assert_equal('20', REXML::XPath.first(xml, 'request/delay').text)
26
+ assert_equal('http://foo.bar.com', REXML::XPath.first(xml, 'request/notify').text)
27
+
28
+
9
29
  end
10
30
 
11
31
  def test_build_job_status_xml()
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simplificator-rwebthumb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.1.0
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-07-10 00:00:00 -07:00
12
+ date: 2008-07-11 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -29,7 +29,6 @@ files:
29
29
  - test/base_test.rb
30
30
  - test/helper.rb
31
31
  - test/job_test.rb
32
- - test/run_test.rb
33
32
  - test/webthumb_test.rb
34
33
  - README
35
34
  - init.rb