phocoder-rails 0.0.42 → 0.0.43

Sign up to get free protection for your applications and to get access to all the features.
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.