phocoder-rails 0.0.42 → 0.0.43

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/Gemfile CHANGED
@@ -14,6 +14,7 @@ gem "rails", ">=3.0.0"
14
14
 
15
15
  gem 'phocoder-rb'
16
16
  gem 'zencoder'
17
+ gem "mimetype-fu", "~> 0.1.2"
17
18
  gem 'aws-s3', :require => 'aws/s3'
18
19
  #gem "spawn", :git => "git://github.com/jagthedrummer/spawn.git"
19
20
  gem "spawn", :git => 'git://github.com/tra/spawn', :branch => "edge"
@@ -26,9 +27,9 @@ gem "spawn", :git => 'git://github.com/tra/spawn', :branch => "edge"
26
27
 
27
28
  group :development do
28
29
  gem 'rspec-rails', '2.4.1'
29
- gem "bundler", "~> 1.0.0"
30
- gem "jeweler", "~> 1.5.1"
31
- gem "rcov", ">= 0"
30
+ gem "bundler"
31
+ gem "jeweler"
32
+ #gem "rcov", ">= 0"
32
33
  end
33
34
 
34
35
  group :test do
@@ -37,9 +38,9 @@ group :test do
37
38
  gem "sqlite3-ruby", :require => "sqlite3"
38
39
  gem 'rspec', '2.4.0'
39
40
  gem 'rspec-rails', '2.4.1'
40
- gem "bundler", "~> 1.0.0"
41
- gem "jeweler", "~> 1.5.1"
42
- gem "rcov", ">= 0"
41
+ gem "bundler"
42
+ gem "jeweler"
43
+ #gem "rcov", ">= 0"
43
44
  gem 'autotest', '4.4.4'
44
45
  gem 'redgreen', '1.2.2'
45
46
  gem "webmock"
data/README.md ADDED
@@ -0,0 +1,108 @@
1
+ PhocoderRails
2
+ ================================
3
+
4
+ PhocoderRails is a rails engine that makes it incredibly easy to integrate your rails app
5
+ with the [Phocoder](http://www.phocoder.com/) image processing service.
6
+
7
+ ## Installing
8
+
9
+ Add this to your Gemfile:
10
+
11
+ ```ruby
12
+ gem "phocoder-rails"
13
+ ```
14
+
15
+ And then run:
16
+
17
+ ```term
18
+ bundle install
19
+ ```
20
+
21
+ Then you need to generate a config file and a migration for tracking job status.
22
+
23
+ ```term
24
+ rails g phocoder_rails:setup
25
+ create db/migrate/xxxxxxxx_create_encodable_jobs.rb
26
+ create config/phocodable.yml
27
+ ```
28
+
29
+ ## Base Configuration
30
+
31
+ TBD
32
+
33
+ * Setting storage mode
34
+ * Setting processing mode (foreground / background processing)
35
+ * Other?
36
+
37
+ ## Generating a new model & scaffolding
38
+
39
+ Letting PhocoderRails generate a new model and scaffold for you is probably the easiest way to get started
40
+ and to get a feel for how Phocoder works.
41
+
42
+ ```term
43
+ rails g phocoder_rails:scaffold image_upload
44
+ create db/migrate/20120731022844_create_image_uploads.rb
45
+ create app/models/image_upload.rb
46
+ create app/models/image_upload_thumbnail.rb
47
+ create app/helpers/image_uploads_helper.rb
48
+ create app/controllers/image_uploads_controller.rb
49
+ create app/views/image_uploads
50
+ create app/views/image_uploads/_form.html.erb
51
+ create app/views/image_uploads/index.html.erb
52
+ create app/views/image_uploads/new.html.erb
53
+ create app/views/image_uploads/show.html.erb
54
+ route resources :image_uploads, :except=>[:edit,:update]
55
+ ```
56
+
57
+ ## Updating an existing model
58
+
59
+ First generate a migration that will add some extra columns to your table. You should red the migration
60
+ after it is generated to make sure that it makes sense within the context of your model.
61
+
62
+ ```term
63
+ rails g phocoder_rails:model_update my_model
64
+ ```
65
+
66
+ Then you should make sure that your form is set up for multi part encoding, and that you have a `file_field`
67
+ in your form named `file`.
68
+
69
+ ```erb
70
+ <%= f.file_field :file %>
71
+ ```
72
+
73
+ ## Model Configuration
74
+
75
+ PhocoderRails allows you to easily set up your image processing in a simple declarative style. The
76
+ `acts_as_phocodable` method hooks phocoder-rails into your model and allows you to easily decalre multiple
77
+ thumbnails that will be generated any time a new model record is created. Thumbnails can include cropping,
78
+ framing, and annotations.
79
+
80
+ Here's an ImageUpload class that shows and example of how to use `acts_as_phocodable` :
81
+
82
+ ```ruby
83
+ class ImageUpload < ActiveRecord::Base
84
+
85
+ acts_as_phocodable :thumbnail_class => "ImageUploadThumbnail",
86
+ :thumbnails => [
87
+ {:label=>"small", :width=>100, :height=>100, :aspect_mode => 'crop'},
88
+ {:label=>"medium", :width=>400, :height=>400, :aspect_mode => 'preserve',
89
+ :frame=>{ :width=>20, :bottom=>50, :color=>'003' },
90
+ :annotations=>[
91
+ {:text=>"Annotation Testing",:pointsize=>30,:fill_color=>'fff',:gravity=>"South",:y=>10},
92
+ {:text=>"Howdy!",:pointsize=>10,:fill_color=>'ccc',:gravity=>"North",:y=>5}
93
+ ]
94
+ }
95
+ ]
96
+
97
+ end
98
+ ```
99
+
100
+ This will result in two 'thumbnail' images being created every time a new image is uploaded. One will be
101
+ exactly 100x100 square, and the other one will be scaled proportionally to fit inside 400x400, with a 20
102
+ pixel border on top, left, and right, and a 50 pixel border on bottom, with text annotations added on top
103
+ and on the bottom of the image.
104
+
105
+ [Add images]
106
+
107
+
108
+ ## Storage and Processing Modes
data/VERSION CHANGED
@@ -1,4 +1,4 @@
1
- 0.0.42
1
+ 0.0.43
2
2
 
3
3
 
4
4
 
@@ -2,6 +2,65 @@ class EncodableJob < ActiveRecord::Base
2
2
 
3
3
  belongs_to :encodable, :polymorphic=>true
4
4
 
5
+ scope :pending, :conditions => "phocoder_status != 'ready'"
6
+
7
+ def update_status
8
+ job_data = Phocoder::Job.details(phocoder_job_id).body
9
+ #puts job_data.to_json
10
+ puts " EncodableJob #{id} = #{job_data["aasm_state"]}"
11
+ if phocoder_input_id
12
+ job_data["inputs"].each do |input|
13
+ #puts "input = #{input.to_json}"
14
+ #puts "input id = #{input["id"]} my phocoder_input_id = #{phocoder_input_id}"
15
+ if input["id"] == phocoder_input_id
16
+ input.symbolize_keys!
17
+ params = {
18
+ :class => encodable_type,
19
+ :id => encodable_id,
20
+ :job => { :id => job_data["id"] },
21
+ :input => input
22
+ }
23
+ EncodableJob.update_from_phocoder(params)
24
+ end
25
+ end
26
+ elsif phocoder_output_id
27
+ outputs = (job_data["thumbnails"] || []) +
28
+ (job_data["hdrs"] || []) +
29
+ (job_data["tone_mappings"] || []) +
30
+ (job_data["composites"] || []) +
31
+ (job_data["hdr_htmls"] || [])
32
+ outputs.each do |output|
33
+ if output["id"] == phocoder_output_id
34
+ output.symbolize_keys!
35
+ output[:url] = output[:base_url] + output[:filename]
36
+ params = {
37
+ :class => encodable_type,
38
+ :id => encodable_id,
39
+ :job => { :id => job_data["id"] },
40
+ :output => output
41
+ }
42
+ EncodableJob.update_from_phocoder(params)
43
+ end
44
+ end
45
+ end
46
+ puts "+++++++++++++++"
47
+ # if job_data["aasm_state"] == "complete"
48
+ # self.phocoder_status = "ready"
49
+ # self.encodable.encodable_status = "ready"
50
+ # self.encodable.thumbnails.each do |t|
51
+ # t.encodable_status = "ready"
52
+ # end
53
+ # self.save
54
+ # self.encodable.save
55
+ # end
56
+ end
57
+
58
+ def self.update_pending_jobs
59
+ EncodableJob.pending.find_each do |e|
60
+ e.update_status
61
+ end
62
+ end
63
+
5
64
  def self.update_from_phocoder(params)
6
65
  Rails.logger.debug "tying to call update from phocoder for params = #{params.to_json}"
7
66
  puts "tying to call update from phocoder for params = #{params.to_json}"
@@ -10,15 +69,17 @@ class EncodableJob < ActiveRecord::Base
10
69
  puts "find_by_phocoder_job_id_and_phocoder_output_id_and_encodable_type #{params[:job][:id]} - #{params[:output][:id]} ,#{params[:class]}"
11
70
  job = self.find_by_phocoder_job_id_and_phocoder_output_id_and_encodable_type params[:job][:id],params[:output][:id],params[:class]
12
71
 
13
-
14
- Rails.logger.debug "the job = #{job}"
72
+ puts "the job = #{job.to_json}"
73
+ Rails.logger.debug "the job = #{job.to_json}"
15
74
  img_params = params[:output]
16
75
  begin
17
76
  encodable = job.encodable
18
77
  rescue NoMethodError => ex
78
+ puts "something went wrong..."
19
79
  # here we try to fall back if we can't find an Encodable
20
80
  encodable = params[:class].constantize.find params[:id]
21
81
  end
82
+ puts "encodable = #{encodable.to_json}"
22
83
  encodable.filename = File.basename(params[:output][:url]) if encodable.filename.blank?
23
84
  if ActsAsPhocodable.storeage_mode == "local"
24
85
  encodable.save_url(params[:output][:url])
@@ -921,10 +921,11 @@ module ActsAsPhocodable
921
921
  cleanup
922
922
  if new_file.is_a? File
923
923
  self.filename = File.basename new_file.path
924
- self.content_type = MIME::Types.type_for(self.filename).first.content_type
924
+ self.content_type = MIME::Types.type_for(self.filename).first.content_type || File.mime_type?(self.filename)
925
925
  self.file_size = new_file.size
926
926
  else
927
- self.filename = new_file.original_filename
927
+ self.filename = new_file.original_filename || File.mime_type?(self.filename)
928
+
928
929
  self.content_type = new_file.content_type
929
930
  self.file_size = new_file.size
930
931
  end
@@ -0,0 +1,12 @@
1
+ namespace :phocoder_rails do
2
+ desc "Update pending EncodableJobs"
3
+ task :update_pending_jobs => :environment do
4
+ e = EncodableJob.first
5
+ e.encodable # try to load phocoder config
6
+ e.encodable.class.read_phocodable_configuration
7
+ #puts "api key = #{Phocoder.api_key}"
8
+ #puts "Rails.env = #{Rails.env}"
9
+ puts "Updating #{EncodableJob.pending.count} EncodableJobs"
10
+ EncodableJob.update_pending_jobs
11
+ end
12
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{phocoder-rails}
8
- s.version = "0.0.41"
8
+ s.version = "0.0.42"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{Jeremy Green}]
12
- s.date = %q{2012-03-24}
12
+ s.date = %q{2012-04-23}
13
13
  s.description = %q{Rails engine for easy integration with phocoder.com}
14
14
  s.email = %q{jagthedrummer@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -105,6 +105,7 @@ Gem::Specification.new do |s|
105
105
  "spec/dummy/db/migrate/20110523165213_add_parent_type_to_image_uploads.rb",
106
106
  "spec/dummy/db/migrate/20110523165522_create_encodable_jobs.rb",
107
107
  "spec/dummy/db/migrate/20111101024507_create_images.rb",
108
+ "spec/dummy/db/migrate/20120423030345_add_exif_data_to_image_uploads.rb",
108
109
  "spec/dummy/db/schema.rb",
109
110
  "spec/dummy/public/404.html",
110
111
  "spec/dummy/public/422.html",
@@ -163,6 +164,7 @@ Gem::Specification.new do |s|
163
164
  "spec/dummy/db/migrate/20110523165213_add_parent_type_to_image_uploads.rb",
164
165
  "spec/dummy/db/migrate/20110523165522_create_encodable_jobs.rb",
165
166
  "spec/dummy/db/migrate/20111101024507_create_images.rb",
167
+ "spec/dummy/db/migrate/20120423030345_add_exif_data_to_image_uploads.rb",
166
168
  "spec/dummy/db/schema.rb",
167
169
  "spec/engine_spec.rb",
168
170
  "spec/helpers/phocoder_helper_spec.rb",
@@ -408,14 +408,14 @@ describe PhocoderHelper do #, :debug=>true
408
408
 
409
409
  end # describe "video preview functions" do
410
410
 
411
- describe "offline_phocoder_video_embed" do
412
- it "should render a video tag" do
413
- vid = ImageUpload.new(:content_type=>'video/quicktime',:zencoder_status=>'ready',:id=>1,:filename=>"test.mov",:encodable_status=>"ready")
414
- vid.stub!(:thumbnail_for).and_return(vid)
415
- vid.video?.should be_true
416
- offline_phocoder_video_embed(vid,"small",{}).should match("video-js")
417
- end
418
-
419
- end
411
+ # describe "offline_phocoder_video_embed" do
412
+ # it "should render a video tag" do
413
+ # vid = ImageUpload.new(:content_type=>'video/quicktime',:zencoder_status=>'ready',:id=>1,:filename=>"test.mov",:encodable_status=>"ready")
414
+ # vid.stub!(:thumbnail_for).and_return(vid)
415
+ # vid.video?.should be_true
416
+ # offline_phocoder_video_embed(vid,"small",{}).should match("video-js")
417
+ # end
418
+ #
419
+ # end
420
420
 
421
421
  end
@@ -1,10 +1,10 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
 
4
- describe "Navigation" do
5
- include Capybara
4
+ #describe "Navigation" do
5
+ #include Capybara
6
6
 
7
- it "should be a valid app" do
8
- ::Rails.application.should be_a(Dummy::Application)
9
- end
10
- end
7
+ #it "should be a valid app" do
8
+ #::Rails.application.should be_a(Dummy::Application)
9
+ #end
10
+ #end
@@ -47,7 +47,7 @@ describe ActsAsPhocodable do
47
47
  before(:each) do
48
48
  # @attr = {
49
49
  # :file => ActionDispatch::Http::UploadedFile.new(
50
- # :tempfile=> Rack::Test::UploadedFile.new(fixture_path + '/big_eye_tiny.jpg', 'image/jpeg'),
50
+ # :tempfile=> Rack::Test::UploadedFile.new('/big_eye_tiny.jpg', 'image/jpeg'),
51
51
  # :filename=>"big_eye_tiny.jpg"
52
52
  # )
53
53
  # }
@@ -599,6 +599,8 @@ describe ActsAsPhocodable do
599
599
 
600
600
  iu.save_s3_file
601
601
  # Now we should have a thumb
602
+ puts "@@@@@@@@@@@@@@@@@@@@@@@@@@@"
603
+ puts iu.thumbnails.map{|t| t.thumbnail }.to_json
602
604
  iu.thumbnails.size.should == 1
603
605
  # Mock the AWS reqeust for deleting the file and it's thumbnail
604
606
  AWS::S3::S3Object.should_receive(:delete).twice.and_return(nil)
@@ -5,22 +5,61 @@ include ActionDispatch::TestProcess
5
5
 
6
6
  describe EncodableJob do
7
7
 
8
- describe "update_from_phocoder" do
9
-
10
- before(:each) do
11
- @image_upload = ImageUpload.create(:phocoder_job_id=>1,:phocoder_input_id=>1,:phocoder_output_id=>1,
12
- :zencoder_job_id=>1,:zencoder_input_id=>1,:zencoder_output_id=>1,
13
- :file_size=>1,:width=>1,:height=>1,:filename=>"test.png",:content_type=>"image/png")
14
- @encodable_job = EncodableJob.create(:phocoder_job_id=>1,:phocoder_input_id=>1,:phocoder_output_id=>1,
15
- :zencoder_job_id=>1,:zencoder_input_id=>1,:zencoder_output_id=>1,
16
- :encodable=>@image_upload)
8
+ before(:each) do
9
+ ImageUpload.destroy_all
10
+ EncodableJob.destroy_all
11
+ @image_upload = ImageUpload.create(:phocoder_job_id=>1,:phocoder_input_id=>1,:phocoder_output_id=>1,
12
+ :zencoder_job_id=>1,:zencoder_input_id=>1,:zencoder_output_id=>1,
13
+ :file_size=>1,:width=>1,:height=>1,:filename=>"test.png",:content_type=>"image/png")
14
+ @image_upload2 = ImageUpload.create(:phocoder_job_id=>2,:phocoder_input_id=>2,:phocoder_output_id=>2,
15
+ :zencoder_job_id=>1,:zencoder_input_id=>1,:zencoder_output_id=>1,
16
+ :file_size=>1,:width=>1,:height=>1,:filename=>"test.png",:content_type=>"image/png")
17
+ @encodable_job = EncodableJob.create(:phocoder_job_id=>1,:phocoder_input_id=>1,:phocoder_output_id=>nil,
18
+ :zencoder_job_id=>nil,:zencoder_input_id=>nil,:zencoder_output_id=>nil,
19
+ :encodable=>@image_upload)
20
+ @encodable_job2 = EncodableJob.create(:phocoder_job_id=>2,:phocoder_input_id=>nil,:phocoder_output_id=>2,
21
+ :zencoder_job_id=>nil,:zencoder_input_id=>nil,:zencoder_output_id=>nil,
22
+ :encodable=>@image_upload2)
23
+ @job_params_json = %[{"aasm_state":"complete","api_key":"idYSHSxL98zxPab21q8y8VtL3Wti1lIR","created_at":"2012-08-07T04:41:09Z","end_load_1":0.0,"end_load_15":0.05,"end_load_5":0.01,"error_msg":null,"id":1,"lock_version":3,"pixels":276400,"processing_cores":2,"processing_ended_at":"2012-08-07T04:43:24Z","processing_host":"domU-12-31-39-18-21-1E","processing_started_at":"2012-08-07T04:43:23Z","queue_name":null,"start_load_1":0.0,"start_load_15":0.05,"start_load_5":0.01,"updated_at":"2012-08-07T04:43:24Z","user_id":1,"thumbnails":[{"aasm_state":"complete","analyze_ended_at":"2012-08-07T04:43:23Z","analyze_started_at":"2012-08-07T04:43:23Z","aspect_mode":"preserve","base_url":"s3://development.phocoder.com/image_thumbnails/6/","created_at":"2012-08-07T04:41:09Z","error_msg":null,"filename":"small_super_small_dsc_7428.jpg","format":"jpg","height":100,"id":349266,"job_id":1,"label":"small","lock_version":7,"output_content_type":"image/jpeg","output_file_size":19379,"output_height":67,"output_width":100,"quality":95,"resize_ended_at":"2012-08-07T04:43:23Z","resize_started_at":"2012-08-07T04:43:23Z","updated_at":"2012-08-07T04:43:23Z","upload_ended_at":"2012-08-07T04:43:23Z","upload_started_at":"2012-08-07T04:43:23Z","upscale":null,"user_id":null,"width":100},{"aasm_state":"complete","analyze_ended_at":"2012-08-07T04:43:24Z","analyze_started_at":"2012-08-07T04:43:24Z","aspect_mode":"preserve","base_url":"s3://development.phocoder.com/image_thumbnails/6/","created_at":"2012-08-07T04:41:09Z","error_msg":null,"filename":"medium_super_small_dsc_7428.jpg","format":"jpg","height":400,"id":349267,"job_id":1,"label":"medium","lock_version":7,"output_content_type":"image/jpeg","output_file_size":54356,"output_height":309,"output_width":400,"quality":95,"resize_ended_at":"2012-08-07T04:43:24Z","resize_started_at":"2012-08-07T04:43:23Z","updated_at":"2012-08-07T04:43:24Z","upload_ended_at":"2012-08-07T04:43:24Z","upload_started_at":"2012-08-07T04:43:24Z","upscale":null,"user_id":null,"width":400}],"inputs":[{"aasm_state":"complete","analyze_ended_at":"2012-08-07T04:43:23Z","analyze_started_at":"2012-08-07T04:43:23Z","bits_per_pixel":8,"camera_make":"NIKON CORPORATION","camera_model":"NIKON D300","content_type":"image/jpeg","created_at":"2012-08-07T04:41:09Z","download_ended_at":"2012-08-07T04:43:23Z","download_started_at":"2012-08-07T04:43:23Z","error_msg":null,"exposure_bias_value":"0","exposure_time":"0.016666666","f_number":"16.000000000","file_size":93974,"focal_length":"200.000000000","focal_length_in_35mm_film":"300","height":266,"id":1,"iso_speed_rating":"400","job_id":1,"lat":null,"lng":null,"lock_version":6,"orientation":1,"subsec_time":42,"taken_at":"2009-10-12T15:17:42Z","updated_at":"2012-08-07T04:43:23Z","url":"http://development.phocoder.com.s3.amazonaws.com/images/6/super_small_dsc_7428.jpg","user_id":1,"width":400}],"hdr_thumbnails":[]}]
24
+ @job_params_json2 = %[{"aasm_state":"complete","api_key":"idYSHSxL98zxPab21q8y8VtL3Wti1lIR","created_at":"2012-08-07T04:41:09Z","end_load_1":0.0,"end_load_15":0.05,"end_load_5":0.01,"error_msg":null,"id":2,"lock_version":3,"pixels":276400,"processing_cores":2,"processing_ended_at":"2012-08-07T04:43:24Z","processing_host":"domU-12-31-39-18-21-1E","processing_started_at":"2012-08-07T04:43:23Z","queue_name":null,"start_load_1":0.0,"start_load_15":0.05,"start_load_5":0.01,"updated_at":"2012-08-07T04:43:24Z","user_id":1,"thumbnails":[{"aasm_state":"complete","analyze_ended_at":"2012-08-07T04:43:23Z","analyze_started_at":"2012-08-07T04:43:23Z","aspect_mode":"preserve","base_url":"s3://development.phocoder.com/image_thumbnails/6/","created_at":"2012-08-07T04:41:09Z","error_msg":null,"filename":"small_super_small_dsc_7428.jpg","format":"jpg","height":100,"id":2,"job_id":1,"label":"small","lock_version":7,"output_content_type":"image/jpeg","output_file_size":19379,"output_height":67,"output_width":100,"quality":95,"resize_ended_at":"2012-08-07T04:43:23Z","resize_started_at":"2012-08-07T04:43:23Z","updated_at":"2012-08-07T04:43:23Z","upload_ended_at":"2012-08-07T04:43:23Z","upload_started_at":"2012-08-07T04:43:23Z","upscale":null,"user_id":null,"width":100},{"aasm_state":"complete","analyze_ended_at":"2012-08-07T04:43:24Z","analyze_started_at":"2012-08-07T04:43:24Z","aspect_mode":"preserve","base_url":"s3://development.phocoder.com/image_thumbnails/6/","created_at":"2012-08-07T04:41:09Z","error_msg":null,"filename":"medium_super_small_dsc_7428.jpg","format":"jpg","height":400,"id":349267,"job_id":1,"label":"medium","lock_version":7,"output_content_type":"image/jpeg","output_file_size":54356,"output_height":309,"output_width":400,"quality":95,"resize_ended_at":"2012-08-07T04:43:24Z","resize_started_at":"2012-08-07T04:43:23Z","updated_at":"2012-08-07T04:43:24Z","upload_ended_at":"2012-08-07T04:43:24Z","upload_started_at":"2012-08-07T04:43:24Z","upscale":null,"user_id":null,"width":400}],"inputs":[{"aasm_state":"complete","analyze_ended_at":"2012-08-07T04:43:23Z","analyze_started_at":"2012-08-07T04:43:23Z","bits_per_pixel":8,"camera_make":"NIKON CORPORATION","camera_model":"NIKON D300","content_type":"image/jpeg","created_at":"2012-08-07T04:41:09Z","download_ended_at":"2012-08-07T04:43:23Z","download_started_at":"2012-08-07T04:43:23Z","error_msg":null,"exposure_bias_value":"0","exposure_time":"0.016666666","f_number":"16.000000000","file_size":93974,"focal_length":"200.000000000","focal_length_in_35mm_film":"300","height":266,"id":2,"iso_speed_rating":"400","job_id":1,"lat":null,"lng":null,"lock_version":6,"orientation":1,"subsec_time":42,"taken_at":"2009-10-12T15:17:42Z","updated_at":"2012-08-07T04:43:23Z","url":"http://development.phocoder.com.s3.amazonaws.com/images/6/super_small_dsc_7428.jpg","user_id":1,"width":400}],"hdr_thumbnails":[]}]
25
+ end
26
+
27
+ after(:each) do
28
+ @image_upload.destroy
29
+ @encodable_job.destroy
30
+ end
31
+
32
+
33
+ describe "update_status" do
34
+ it "should update inputs" do
35
+ Phocoder::Job.should_receive(:details).and_return(double :body => JSON(@job_params_json) )
36
+ @encodable_job.update_status
37
+ @encodable_job.reload
38
+ @image_upload.reload
39
+ #@encodable_job.phocoder_status.should == "ready"
40
+ @image_upload.encodable_status.should == "ready"
17
41
  end
18
42
 
19
- after(:each) do
20
- @image_upload.destroy
21
- @encodable_job.destroy
43
+ it "should update outputs" do
44
+ puts "//////////////////////"
45
+ stub_request(:get, "http://production.webapeel.com/octolabs/themes/octolabs/images/octologo.png").
46
+ with(:headers => {'Accept'=>'*/*'}).
47
+ to_return(:status => 200, :body => webmock_file("octologo.png"), :headers => {})
48
+ Phocoder::Job.should_receive(:details).and_return(double :body => JSON(@job_params_json2) )
49
+ @encodable_job2.update_status
50
+ @encodable_job2.reload
51
+ @image_upload2.reload
52
+ #@encodable_job.phocoder_status.should == "ready"
53
+ @image_upload2.encodable_status.should == "ready"
22
54
  end
23
55
 
56
+ end
57
+
58
+
59
+
60
+
61
+ describe "update_from_phocoder" do
62
+
24
63
  it "should fupdate inputs" do
25
64
  params = { :class=>"ImageUpload",
26
65
  :id=>1,
@@ -64,20 +103,26 @@ describe EncodableJob do
64
103
  end
65
104
 
66
105
 
67
-
68
- it "should update outpus" do
106
+
107
+ it "should update outputs" do
69
108
  stub_request(:get, "http://production.webapeel.com/octolabs/themes/octolabs/images/octologo.png").
70
109
  with(:headers => {'Accept'=>'*/*'}).
71
110
  to_return(:status => 200, :body => webmock_file("octologo.png"), :headers => {})
72
- params = {:class=>"ImageUpload",:id=>1, :job=>{:id => 1}, :output=>{:id=>1,:file_size=>2,:width=>2,:height=>2,:url=>"http://production.webapeel.com/octolabs/themes/octolabs/images/octologo.png"},:format=>"json" }
111
+ params = {:class=>"ImageUpload",
112
+ :id=>2,
113
+ :job=>{:id => 2},
114
+ :output=>{:id=>2,:file_size=>2,:width=>2,:height=>2,:url=>"http://production.webapeel.com/octolabs/themes/octolabs/images/octologo.png"},
115
+ :format=>"json"
116
+ }
73
117
  EncodableJob.update_from_phocoder(params);
74
118
 
75
- @image_upload.reload
76
- @image_upload.encodable_status.should == "ready"
77
- @image_upload.file_size.should == 2
119
+ @image_upload2.reload
120
+ @image_upload2.encodable_status.should == "ready"
121
+ @image_upload2.file_size.should == 2
78
122
  end
79
123
 
124
+
80
125
  end
81
-
126
+
82
127
 
83
128
  end
data/spec/spec_helper.rb CHANGED
@@ -41,6 +41,7 @@ RSpec.configure do |config|
41
41
 
42
42
  config.fixture_path = "#{File.dirname(__FILE__)}/fixtures"
43
43
 
44
+
44
45
  config.before(:all){
45
46
 
46
47
  #change this if sqlite is unavailable
@@ -72,4 +73,4 @@ end
72
73
  def webmock_file(f = nil)
73
74
  f ||= "%s.xml" % @site.anchor
74
75
  File.new webmock_filename(f)
75
- end
76
+ end
metadata CHANGED
@@ -1,173 +1,130 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: phocoder-rails
3
- version: !ruby/object:Gem::Version
4
- hash: 75
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.43
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 42
10
- version: 0.0.42
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Jeremy Green
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-04-23 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-09-26 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: rails
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &72774960 !ruby/object:Gem::Requirement
23
17
  none: false
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- hash: 7
28
- segments:
29
- - 3
30
- - 0
31
- - 0
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
32
21
  version: 3.0.0
33
- prerelease: false
34
- requirement: *id001
35
22
  type: :runtime
36
- - !ruby/object:Gem::Dependency
23
+ prerelease: false
24
+ version_requirements: *72774960
25
+ - !ruby/object:Gem::Dependency
37
26
  name: phocoder-rb
38
- version_requirements: &id002 !ruby/object:Gem::Requirement
27
+ requirement: &72774570 !ruby/object:Gem::Requirement
39
28
  none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
47
- prerelease: false
48
- requirement: *id002
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
49
33
  type: :runtime
50
- - !ruby/object:Gem::Dependency
34
+ prerelease: false
35
+ version_requirements: *72774570
36
+ - !ruby/object:Gem::Dependency
51
37
  name: zencoder
52
- version_requirements: &id003 !ruby/object:Gem::Requirement
38
+ requirement: &72774250 !ruby/object:Gem::Requirement
53
39
  none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 0
60
- version: "0"
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
61
45
  prerelease: false
62
- requirement: *id003
46
+ version_requirements: *72774250
47
+ - !ruby/object:Gem::Dependency
48
+ name: mimetype-fu
49
+ requirement: &72752830 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.1.2
63
55
  type: :runtime
64
- - !ruby/object:Gem::Dependency
56
+ prerelease: false
57
+ version_requirements: *72752830
58
+ - !ruby/object:Gem::Dependency
65
59
  name: aws-s3
66
- version_requirements: &id004 !ruby/object:Gem::Requirement
60
+ requirement: &72752530 !ruby/object:Gem::Requirement
67
61
  none: false
68
- requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- hash: 3
72
- segments:
73
- - 0
74
- version: "0"
75
- prerelease: false
76
- requirement: *id004
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
77
66
  type: :runtime
78
- - !ruby/object:Gem::Dependency
67
+ prerelease: false
68
+ version_requirements: *72752530
69
+ - !ruby/object:Gem::Dependency
79
70
  name: spawn
80
- version_requirements: &id005 !ruby/object:Gem::Requirement
71
+ requirement: &72752230 !ruby/object:Gem::Requirement
81
72
  none: false
82
- requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- hash: 3
86
- segments:
87
- - 0
88
- version: "0"
89
- prerelease: false
90
- requirement: *id005
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
91
77
  type: :runtime
92
- - !ruby/object:Gem::Dependency
78
+ prerelease: false
79
+ version_requirements: *72752230
80
+ - !ruby/object:Gem::Dependency
93
81
  name: rspec-rails
94
- version_requirements: &id006 !ruby/object:Gem::Requirement
82
+ requirement: &72751980 !ruby/object:Gem::Requirement
95
83
  none: false
96
- requirements:
97
- - - "="
98
- - !ruby/object:Gem::Version
99
- hash: 29
100
- segments:
101
- - 2
102
- - 4
103
- - 1
84
+ requirements:
85
+ - - =
86
+ - !ruby/object:Gem::Version
104
87
  version: 2.4.1
105
- prerelease: false
106
- requirement: *id006
107
88
  type: :development
108
- - !ruby/object:Gem::Dependency
89
+ prerelease: false
90
+ version_requirements: *72751980
91
+ - !ruby/object:Gem::Dependency
109
92
  name: bundler
110
- version_requirements: &id007 !ruby/object:Gem::Requirement
93
+ requirement: &72751710 !ruby/object:Gem::Requirement
111
94
  none: false
112
- requirements:
113
- - - ~>
114
- - !ruby/object:Gem::Version
115
- hash: 23
116
- segments:
117
- - 1
118
- - 0
119
- - 0
120
- version: 1.0.0
121
- prerelease: false
122
- requirement: *id007
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
123
99
  type: :development
124
- - !ruby/object:Gem::Dependency
100
+ prerelease: false
101
+ version_requirements: *72751710
102
+ - !ruby/object:Gem::Dependency
125
103
  name: jeweler
126
- version_requirements: &id008 !ruby/object:Gem::Requirement
104
+ requirement: &72751400 !ruby/object:Gem::Requirement
127
105
  none: false
128
- requirements:
129
- - - ~>
130
- - !ruby/object:Gem::Version
131
- hash: 1
132
- segments:
133
- - 1
134
- - 5
135
- - 1
136
- version: 1.5.1
137
- prerelease: false
138
- requirement: *id008
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
139
110
  type: :development
140
- - !ruby/object:Gem::Dependency
141
- name: rcov
142
- version_requirements: &id009 !ruby/object:Gem::Requirement
143
- none: false
144
- requirements:
145
- - - ">="
146
- - !ruby/object:Gem::Version
147
- hash: 3
148
- segments:
149
- - 0
150
- version: "0"
151
111
  prerelease: false
152
- requirement: *id009
153
- type: :development
112
+ version_requirements: *72751400
154
113
  description: Rails engine for easy integration with phocoder.com
155
114
  email: jagthedrummer@gmail.com
156
115
  executables: []
157
-
158
116
  extensions: []
159
-
160
- extra_rdoc_files:
117
+ extra_rdoc_files:
161
118
  - LICENSE.txt
162
- - README.rdoc
163
- files:
119
+ - README.md
120
+ files:
164
121
  - .autotest
165
122
  - .document
166
123
  - .rspec
167
124
  - Gemfile
168
125
  - LICENSE.txt
169
126
  - MIT-LICENSE
170
- - README.rdoc
127
+ - README.md
171
128
  - Rakefile
172
129
  - VERSION
173
130
  - app/controllers/phocoder_controller.rb
@@ -198,6 +155,7 @@ files:
198
155
  - lib/phocoder_rails/acts_as_phocodable.rb
199
156
  - lib/phocoder_rails/engine.rb
200
157
  - lib/phocoder_rails/errors.rb
158
+ - lib/tasks/phocoder_rails/phocoder_rails.rake
201
159
  - phocoder-rails.gemspec
202
160
  - public/images/building.gif
203
161
  - public/images/error.png
@@ -278,39 +236,34 @@ files:
278
236
  - spec/routing/phocoder_routing_spec.rb
279
237
  - spec/spec_helper.rb
280
238
  homepage: http://github.com/jagthedrummer/phocoder-rails
281
- licenses:
239
+ licenses:
282
240
  - MIT
283
241
  post_install_message:
284
242
  rdoc_options: []
285
-
286
- require_paths:
243
+ require_paths:
287
244
  - lib
288
- required_ruby_version: !ruby/object:Gem::Requirement
245
+ required_ruby_version: !ruby/object:Gem::Requirement
289
246
  none: false
290
- requirements:
291
- - - ">="
292
- - !ruby/object:Gem::Version
293
- hash: 3
294
- segments:
247
+ requirements:
248
+ - - ! '>='
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ segments:
295
252
  - 0
296
- version: "0"
297
- required_rubygems_version: !ruby/object:Gem::Requirement
253
+ hash: -916334765
254
+ required_rubygems_version: !ruby/object:Gem::Requirement
298
255
  none: false
299
- requirements:
300
- - - ">="
301
- - !ruby/object:Gem::Version
302
- hash: 3
303
- segments:
304
- - 0
305
- version: "0"
256
+ requirements:
257
+ - - ! '>='
258
+ - !ruby/object:Gem::Version
259
+ version: '0'
306
260
  requirements: []
307
-
308
261
  rubyforge_project:
309
- rubygems_version: 1.8.5
262
+ rubygems_version: 1.8.7
310
263
  signing_key:
311
264
  specification_version: 3
312
265
  summary: Rails engine for easy integration with phocoder.com
313
- test_files:
266
+ test_files:
314
267
  - spec/controllers/phocoder_controller_spec.rb
315
268
  - spec/dummy/app/controllers/application_controller.rb
316
269
  - spec/dummy/app/controllers/images_controller.rb
data/README.rdoc DELETED
@@ -1,3 +0,0 @@
1
- = PhocoderRails
2
-
3
- This project rocks and uses MIT-LICENSE.