phocoder-rails 0.0.48 → 0.0.49

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -24,6 +24,8 @@ gem "spawn", :git => 'git://github.com/tra/spawn', :branch => "edge"
24
24
 
25
25
  #gem "rspec", "~> 2.1.0"
26
26
  #gem "rspec-rails", ">= 2.0.0.beta"
27
+
28
+ gem 'simplecov', :require => false, :group => :test
27
29
 
28
30
  group :development do
29
31
  gem 'rspec-rails', '2.4.1'
data/VERSION CHANGED
@@ -1,4 +1,4 @@
1
- 0.0.48
1
+ 0.0.49
2
2
 
3
3
 
4
4
 
@@ -3,6 +3,13 @@ class EncodableJob < ActiveRecord::Base
3
3
  belongs_to :encodable, :polymorphic=>true
4
4
 
5
5
  scope :pending, :conditions => "phocoder_status != 'ready'"
6
+ scope :for_components, :conditions => "tracking_mode = 'component'"
7
+ scope :for_jobs, :conditions => "tracking_mode = 'job'"
8
+
9
+ def initialize(params = {}, options={})
10
+ super
11
+ self.tracking_mode = "component" unless self.tracking_mode
12
+ end
6
13
 
7
14
  def update_status
8
15
  job_data = Phocoder::Job.details(phocoder_job_id).body
@@ -61,7 +68,101 @@ class EncodableJob < ActiveRecord::Base
61
68
  end
62
69
  end
63
70
 
71
+
64
72
  def self.update_from_phocoder(params)
73
+ if params[:outputs] && params[:inputs]
74
+ update_from_phocoder_job_style(params)
75
+ else
76
+ update_from_phocoder_component_style(params)
77
+ end
78
+ end
79
+
80
+ def self.update_from_phocoder_job_style(params)
81
+ if params[:job][:type] == 'ThumbnailJob'
82
+ update_from_phocoder_thumbnail_job(params)
83
+ elsif params[:job][:type] == 'CompositeJob' || params[:job][:type] == 'ToneMappingJob'
84
+ update_from_phocoder_generic_job_with_thumbnails(params)
85
+ else
86
+ update_from_phocoder_generic_job(params)
87
+ end
88
+ end
89
+
90
+ def self.update_from_phocoder_thumbnail_job(params)
91
+ #debugger
92
+ job = self.for_jobs.find_by_phocoder_job_id params[:job][:id]
93
+ encodable = job.encodable
94
+
95
+ img_params = params[:inputs].first
96
+ update_encodable_and_job_from_img_params(encodable,job,img_params)
97
+
98
+ params[:outputs].each do |thumb_params|
99
+ thumbnail = encodable.thumbnail_for(thumb_params[:label])
100
+ update_encodable_and_job_from_img_params(thumbnail,job,thumb_params)
101
+ thumbnail.encodable_status = "ready" if thumbnail.respond_to?(:encodable_status=)
102
+ thumbnail.phocoder_status = "ready" if thumbnail.respond_to?(:phocoder_status=)
103
+ thumbnail.save!
104
+ end
105
+
106
+ encodable.encodable_status = "ready" if encodable.respond_to?(:encodable_status=)
107
+ encodable.phocoder_status = "ready" if encodable.respond_to?(:phocoder_status=)
108
+ encodable.save!
109
+ encodable.fire_ready_callback
110
+
111
+ job.phocoder_status = "ready"
112
+ job.save
113
+ job
114
+ end
115
+
116
+ def self.update_from_phocoder_generic_job(params)
117
+ #debugger
118
+ job = self.for_jobs.find_by_phocoder_job_id params[:job][:id]
119
+ encodable = job.encodable
120
+
121
+ img_params = params[:outputs].first
122
+ update_encodable_and_job_from_img_params(encodable,job,img_params)
123
+
124
+ encodable.encodable_status = "ready" if encodable.respond_to?(:encodable_status=)
125
+ encodable.phocoder_status = "ready" if encodable.respond_to?(:phocoder_status=)
126
+ encodable.save!
127
+ encodable.fire_ready_callback
128
+
129
+ job.phocoder_status = "ready"
130
+ job.save
131
+ job
132
+ end
133
+
134
+ def self.update_from_phocoder_generic_job_with_thumbnails(params)
135
+ #debugger
136
+ job = self.for_jobs.find_by_phocoder_job_id params[:job][:id]
137
+ encodable = job.encodable
138
+
139
+ img_params = {}
140
+
141
+
142
+ params[:outputs].each do |thumb_params|
143
+ if thumb_params[:label].blank?
144
+ img_params = thumb_params
145
+ next
146
+ end
147
+ thumbnail = encodable.thumbnail_for(thumb_params[:label])
148
+ update_encodable_and_job_from_img_params(thumbnail,job,thumb_params)
149
+ thumbnail.encodable_status = "ready" if thumbnail.respond_to?(:encodable_status=)
150
+ thumbnail.phocoder_status = "ready" if thumbnail.respond_to?(:phocoder_status=)
151
+ thumbnail.save!
152
+ end
153
+
154
+ update_encodable_and_job_from_img_params(encodable,job,img_params)
155
+ encodable.encodable_status = "ready" if encodable.respond_to?(:encodable_status=)
156
+ encodable.phocoder_status = "ready" if encodable.respond_to?(:phocoder_status=)
157
+ encodable.save!
158
+ encodable.fire_ready_callback
159
+
160
+ job.phocoder_status = "ready"
161
+ job.save
162
+ job
163
+ end
164
+
165
+ def self.update_from_phocoder_component_style(params)
65
166
  Rails.logger.debug "tying to call update from phocoder for params = #{params.to_json}"
66
167
  puts "tying to call update from phocoder for params = #{params.to_json}"
67
168
  if !params[:output].blank?
@@ -92,24 +193,21 @@ class EncodableJob < ActiveRecord::Base
92
193
  img_params = params[:input]
93
194
  encodable = job.encodable
94
195
  end
95
- [:file_size,:width,:height,:taken_at,:lat,:lng,:saturated_pixels,:gauss,:bits_per_pixel,:camera_make,
96
- :camera_model, :orientation, :exposure_time, :f_number, :iso_speed_rating, :exposure_bias_value,
97
- :focal_length, :focal_length_in_35mm_film, :subsec_time, :pixels, :processing_time].each do |att|
98
- setter = att.to_s + "="
99
- if encodable.respond_to? setter and !img_params[att].blank?
100
- encodable.send setter, img_params[att]
101
- end
102
- if job.respond_to? setter and !img_params[att].blank?
103
- job.send setter, img_params[att]
104
- end
105
- end
106
-
196
+
197
+ update_encodable_and_job_from_img_params(encodable,job,img_params)
107
198
  #job.file_size = img_params[:file_size]
108
199
  #job.width = img_params[:width]
109
200
  #job.height = img_params[:height]
110
201
  encodable.encodable_status = "ready"
202
+
111
203
  encodable.save
112
- encodable.fire_ready_callback
204
+
205
+ if params[:output].blank? && params[:input].blank?
206
+ # Do nothing? Only for tracking job status, not components...
207
+ else
208
+ encodable.fire_ready_callback
209
+ end
210
+
113
211
  # may not have a job if the EncodableJob didn't get created for some reason
114
212
  if job
115
213
  job.phocoder_status = "ready"
@@ -118,6 +216,20 @@ class EncodableJob < ActiveRecord::Base
118
216
  end
119
217
  end
120
218
 
219
+
220
+ def self.update_encodable_and_job_from_img_params(encodable,job,img_params)
221
+ [ :file_size,:width,:height,:taken_at,:lat,:lng,:saturated_pixels,:gauss,:bits_per_pixel,:camera_make,
222
+ :camera_model, :orientation, :exposure_time, :f_number, :iso_speed_rating, :exposure_bias_value,
223
+ :focal_length, :focal_length_in_35mm_film, :subsec_time, :pixels, :processing_time].each do |att|
224
+ setter = att.to_s + "="
225
+ if encodable.respond_to? setter and !img_params[att].blank?
226
+ encodable.send setter, img_params[att]
227
+ end
228
+ if job.respond_to? setter and !img_params[att].blank?
229
+ job.send setter, img_params[att]
230
+ end
231
+ end
232
+ end
121
233
 
122
234
 
123
235
  # Updating from zencoder is a two pass operation.
@@ -12,6 +12,8 @@ class CreateEncodableJobs < ActiveRecord::Migration
12
12
  t.integer "zencoder_output_id"
13
13
  t.string "zencoder_status"
14
14
  t.string "zencoder_url"
15
+ t.string "tracking_mode"
16
+ t.integer "user_id"
15
17
  t.timestamps
16
18
  end
17
19
  add_index :encodable_jobs, [:encodable_type, :encodable_id]
@@ -21,4 +23,4 @@ class CreateEncodableJobs < ActiveRecord::Migration
21
23
  def self.down
22
24
  drop_table :encodable_jobs
23
25
  end
24
- end
26
+ end
@@ -58,6 +58,14 @@ module ActsAsPhocodable
58
58
  mattr_accessor :local_base_dir
59
59
  self.local_base_dir = '/tmp'
60
60
 
61
+ # Whether to track progress at the job level
62
+ mattr_accessor :track_jobs
63
+ self.track_jobs = true
64
+
65
+ # Whether to track progress at the component level
66
+ mattr_accessor :track_components
67
+ self.track_components = false
68
+
61
69
  # The config file that tells phocoder where to find
62
70
  # config options.
63
71
  mattr_accessor :config_file
@@ -376,6 +384,12 @@ module ActsAsPhocodable
376
384
  if self.phocodable_configuration[:local_base_dir]
377
385
  ActsAsPhocodable.local_base_dir = phocodable_configuration[:local_base_dir]
378
386
  end
387
+ if self.phocodable_configuration[:track_jobs]
388
+ ActsAsPhocodable.track_jobs = phocodable_configuration[:track_jobs]
389
+ end
390
+ if self.phocodable_configuration[:track_components]
391
+ ActsAsPhocodable.track_components = phocodable_configuration[:track_components]
392
+ end
379
393
 
380
394
 
381
395
  if self.phocodable_configuration[:phocoder_url]
@@ -387,6 +401,8 @@ module ActsAsPhocodable
387
401
  if self.phocodable_configuration[:zencoder_api_key]
388
402
  ::Zencoder.api_key = phocodable_configuration[:zencoder_api_key]
389
403
  end
404
+
405
+
390
406
  if ActsAsPhocodable.storeage_mode == "s3"
391
407
  self.establish_aws_connection
392
408
  end
@@ -485,13 +501,14 @@ module ActsAsPhocodable
485
501
  thumb.filename = thumb_params["filename"]
486
502
  thumb.width = thumb_params["width"]
487
503
  thumb.height = thumb_params["height"]
488
- tjob = thumb.encodable_jobs.new
489
-
490
- tjob.phocoder_output_id = thumb_params["id"]
491
- tjob.phocoder_job_id = job_id
492
- #thumb.parent_id = self.id
493
- tjob.phocoder_status = "phocoding"
494
- thumb.encodable_jobs << tjob
504
+ if ActsAsPhocodable.track_components
505
+ tjob = thumb.encodable_jobs.new
506
+ tjob.phocoder_output_id = thumb_params["id"]
507
+ tjob.phocoder_job_id = job_id
508
+ #thumb.parent_id = self.id
509
+ tjob.phocoder_status = "phocoding"
510
+ thumb.encodable_jobs << tjob
511
+ end
495
512
  thumb.encodable_status = "phocoding"
496
513
  thumb.save
497
514
  new_thumbs << thumb
@@ -536,11 +553,24 @@ module ActsAsPhocodable
536
553
  response = Phocoder::Job.create(phocoder_params(input_thumbs))
537
554
  Rails.logger.debug "the phocode response = #{response.to_json}" if Rails.env != "test"
538
555
  #puts "the phocode response = #{response.to_json}" if Rails.env != "test"
539
- job = self.encodable_jobs.new
540
- job.phocoder_input_id = response.body["job"]["inputs"].first["id"]
541
- job.phocoder_job_id = response.body["job"]["id"]
542
- job.phocoder_status = "phocoding"
543
- self.encodable_jobs << job
556
+ if ActsAsPhocodable.track_components
557
+ job = self.encodable_jobs.new
558
+ job.phocoder_input_id = response.body["job"]["inputs"].first["id"]
559
+ job.phocoder_job_id = response.body["job"]["id"]
560
+ job.phocoder_status = "phocoding"
561
+ job.user_id = self.user_id if (self.respond_to?(:user_id) && self.user_id)
562
+ self.encodable_jobs << job
563
+ end
564
+ if ActsAsPhocodable.track_jobs
565
+ job = self.encodable_jobs.new
566
+ job.tracking_mode = 'job'
567
+ job.phocoder_input_id = response.body["job"]["inputs"].first["id"]
568
+ job.phocoder_job_id = response.body["job"]["id"]
569
+ job.phocoder_status = "phocoding"
570
+ job.user_id = self.user_id if (self.respond_to?(:user_id) && self.user_id)
571
+ self.encodable_jobs << job
572
+ end
573
+
544
574
  self.encodable_status = "phocoding" unless self.encodable_status == "ready" # the unless clause allows new thumbs to be created on the fly without jacking with the status
545
575
  self.save #false need to do save(false) here if we're calling phocode on after_save
546
576
  response_thumbs = response.body["job"]["thumbnails"]
@@ -564,11 +594,23 @@ module ActsAsPhocodable
564
594
  Rails.logger.debug "callback url = #{callback_url}"
565
595
  response = Phocoder::Job.create(phocoder_hdr_params)
566
596
  Rails.logger.debug "the response from phocode_hdr = #{response.body.to_json}"
567
- job = self.encodable_jobs.new
568
- job.phocoder_output_id = response.body["job"]["hdr"]["id"]
569
- job.phocoder_job_id = response.body["job"]["id"]
570
- job.phocoder_status = "phocoding"
571
- self.encodable_jobs << job
597
+ if ActsAsPhocodable.track_components
598
+ job = self.encodable_jobs.new
599
+ job.phocoder_output_id = response.body["job"]["hdr"]["id"]
600
+ job.phocoder_job_id = response.body["job"]["id"]
601
+ job.phocoder_status = "phocoding"
602
+ job.user_id = self.user_id if (self.respond_to?(:user_id) && self.user_id)
603
+ self.encodable_jobs << job
604
+ end
605
+ if ActsAsPhocodable.track_jobs
606
+ job = self.encodable_jobs.new
607
+ job.tracking_mode = 'job'
608
+ job.phocoder_output_id = response.body["job"]["hdr"]["id"]
609
+ job.phocoder_job_id = response.body["job"]["id"]
610
+ job.phocoder_status = "phocoding"
611
+ job.user_id = self.user_id if (self.respond_to?(:user_id) && self.user_id)
612
+ self.encodable_jobs << job
613
+ end
572
614
  self.encodable_status = "phocoding"
573
615
  self.save #false need to do save(false) here if we're calling phocode on after_save
574
616
  end
@@ -591,11 +633,23 @@ module ActsAsPhocodable
591
633
  Rails.logger.debug "callback url = #{callback_url}"
592
634
  response = Phocoder::Job.create(phocoder_hdrhtml_params)
593
635
  Rails.logger.debug "the response from phocode_hdrhtml = #{response.body.to_json}"
594
- job = self.encodable_jobs.new
595
- job.phocoder_output_id = response.body["job"]["hdrhtml"]["id"]
596
- job.phocoder_job_id = response.body["job"]["id"]
597
- job.phocoder_status = "phocoding"
598
- self.encodable_jobs << job
636
+ if ActsAsPhocodable.track_components
637
+ job = self.encodable_jobs.new
638
+ job.phocoder_output_id = response.body["job"]["hdrhtml"]["id"]
639
+ job.phocoder_job_id = response.body["job"]["id"]
640
+ job.phocoder_status = "phocoding"
641
+ job.user_id = self.user_id if (self.respond_to?(:user_id) && self.user_id)
642
+ self.encodable_jobs << job
643
+ end
644
+ if ActsAsPhocodable.track_jobs
645
+ job = self.encodable_jobs.new
646
+ job.tracking_mode = 'job'
647
+ job.phocoder_output_id = response.body["job"]["hdrhtml"]["id"]
648
+ job.phocoder_job_id = response.body["job"]["id"]
649
+ job.phocoder_status = "phocoding"
650
+ job.user_id = self.user_id if (self.respond_to?(:user_id) && self.user_id)
651
+ self.encodable_jobs << job
652
+ end
599
653
  self.encodable_status = "phocoding"
600
654
  self.save #false need to do save(false) here if we're calling phocode on after_save
601
655
  end
@@ -620,11 +674,23 @@ module ActsAsPhocodable
620
674
  response = Phocoder::Job.create(phocoder_tone_mapping_params)
621
675
  Rails.logger.debug "tone_mapping response = #{response.body.to_json}"
622
676
  #puts "tone_mapping response = #{response.body.to_json}"
623
- job = self.encodable_jobs.new
624
- job.phocoder_output_id = response.body["job"]["tone_mapping"]["id"]
625
- job.phocoder_job_id = response.body["job"]["id"]
626
- job.phocoder_status = "phocoding"
627
- self.encodable_jobs << job
677
+ if ActsAsPhocodable.track_components
678
+ job = self.encodable_jobs.new
679
+ job.phocoder_output_id = response.body["job"]["tone_mapping"]["id"]
680
+ job.phocoder_job_id = response.body["job"]["id"]
681
+ job.phocoder_status = "phocoding"
682
+ job.user_id = self.user_id if (self.respond_to?(:user_id) && self.user_id)
683
+ self.encodable_jobs << job
684
+ end
685
+ if ActsAsPhocodable.track_jobs
686
+ job = self.encodable_jobs.new
687
+ job.tracking_mode = 'job'
688
+ job.phocoder_output_id = response.body["job"]["tone_mapping"]["id"]
689
+ job.phocoder_job_id = response.body["job"]["id"]
690
+ job.phocoder_status = "phocoding"
691
+ job.user_id = self.user_id if (self.respond_to?(:user_id) && self.user_id)
692
+ self.encodable_jobs << job
693
+ end
628
694
  self.encodable_status = "phocoding"
629
695
  self.save #false need to do save(false) here if we're calling phocode on after_save
630
696
  response_thumbs = response.body["job"]["thumbnails"]
@@ -651,11 +717,23 @@ module ActsAsPhocodable
651
717
  response = Phocoder::Job.create(phocoder_composite_params)
652
718
  Rails.logger.debug "composite response = #{response.body.to_json}"
653
719
  #puts "composite response = #{response.body.to_json}"
654
- job = self.encodable_jobs.new
655
- job.phocoder_output_id = response.body["job"]["composite"]["id"]
656
- job.phocoder_job_id = response.body["job"]["id"]
657
- job.phocoder_status = "phocoding"
658
- self.encodable_jobs << job
720
+ if ActsAsPhocodable.track_components
721
+ job = self.encodable_jobs.new
722
+ job.phocoder_output_id = response.body["job"]["composite"]["id"]
723
+ job.phocoder_job_id = response.body["job"]["id"]
724
+ job.phocoder_status = "phocoding"
725
+ job.user_id = self.user_id if (self.respond_to?(:user_id) && self.user_id)
726
+ self.encodable_jobs << job
727
+ end
728
+ if ActsAsPhocodable.track_jobs
729
+ job = self.encodable_jobs.new
730
+ job.tracking_mode = 'job'
731
+ job.phocoder_output_id = response.body["job"]["composite"]["id"]
732
+ job.phocoder_job_id = response.body["job"]["id"]
733
+ job.phocoder_status = "phocoding"
734
+ job.user_id = self.user_id if (self.respond_to?(:user_id) && self.user_id)
735
+ self.encodable_jobs << job
736
+ end
659
737
  self.encodable_status = "phocoding"
660
738
  self.save #false need to do save(false) here if we're calling phocode on after_save
661
739
  response_thumbs = response.body["job"]["thumbnails"]
@@ -676,21 +754,33 @@ module ActsAsPhocodable
676
754
  Rails.logger.debug "callback url = #{callback_url}"
677
755
  response = Zencoder::Job.create(zencoder_params)
678
756
  Rails.logger.debug "response from Zencoder = #{response.body.to_json}"
679
- job = self.encodable_jobs.new
680
- job.zencoder_job_id = response.body["id"]
681
- self.encodable_jobs << job
682
-
757
+ if ActsAsPhocodable.track_components
758
+ job = self.encodable_jobs.new
759
+ job.zencoder_job_id = response.body["id"]
760
+ job.user_id = self.user_id if (self.respond_to?(:user_id) && self.user_id)
761
+ self.encodable_jobs << job
762
+ end
763
+ if ActsAsPhocodable.track_jobs
764
+ job = self.encodable_jobs.new
765
+ job.tracking_mode = 'job'
766
+ job.zencoder_job_id = response.body["id"]
767
+ job.user_id = self.user_id if (self.respond_to?(:user_id) && self.user_id)
768
+ self.encodable_jobs << job
769
+ end
770
+
683
771
  response.body["outputs"].each do |output_params|
684
772
  thumb = self.thumbnails.new()
685
773
  thumb.thumbnail = output_params["label"]
686
774
 
687
- tjob = thumb.encodable_jobs.new
688
- tjob.zencoder_output_id = output_params["id"]
689
- tjob.zencoder_url = output_params["url"]
690
- tjob.zencoder_job_id = response.body["id"]
691
- tjob.zencoder_status = "zencoding"
692
- thumb.encodable_jobs << tjob
693
-
775
+ if ActsAsPhocodable.track_components
776
+ tjob = thumb.encodable_jobs.new
777
+ tjob.zencoder_output_id = output_params["id"]
778
+ tjob.zencoder_url = output_params["url"]
779
+ tjob.zencoder_job_id = response.body["id"]
780
+ tjob.zencoder_status = "zencoding"
781
+ tjob.user_id = self.user_id if (self.respond_to?(:user_id) && self.user_id)
782
+ thumb.encodable_jobs << tjob
783
+ end
694
784
  self.thumbnails << thumb
695
785
  thumb.encodable_status = "zencoding"
696
786
  thumb.save
@@ -57,6 +57,35 @@ describe PhocoderController do
57
57
  #@image_upload.file_size.should == 2
58
58
  end
59
59
 
60
+
61
+ it "should handle job tracking updates" do
62
+ @encodable_job.tracking_mode = 'job'
63
+ @encodable_job.save
64
+ post 'phocoder_notification_update', {:class=>"ImageUpload",:id=>1, :job=>{:id => 1,:type=>"ThumbnailJob"},:format=>"json", :inputs => [{}], :outputs => []}
65
+ response.should be_success
66
+ end
67
+
68
+ it "should update all the things for job tracking updates" do
69
+ @encodable_job.tracking_mode = 'job'
70
+ @encodable_job.save
71
+ @thumbnail = @image_upload.thumbnails.create!(:thumbnail => "small")
72
+ params = {
73
+ :class=>@image_upload.class.name.to_s,:id=>@image_upload.id,
74
+ "job"=>{"state"=>"complete", "id"=>1, "type"=>"ThumbnailJob", "pixels"=>26379158, "processing_time"=>43.0},
75
+ "inputs"=>[{"id"=>50, "state"=>"complete", "file_size"=>4742478, "width"=>4288, "height"=>2848, "pixels"=>12212224, "processing_time"=>5.0, "url"=>"http://development.thephotolabs.com.s3.amazonaws.com/photos/150/dsc_8400.jpg", "lat"=>nil, "lng"=>nil, "taken_at"=>"2010-03-08T17:04:29Z", "camera_make"=>0, "camera_model"=>0, "bits_per_pixel"=>8, "exposure_time"=>"0.008000000", "f_number"=>"13.000000000", "iso_speed_rating"=>"1000", "exposure_bias_value"=>"-1.000000000", "focal_length"=>"10.000000000", "focal_length_in_35mm_film"=>"15", "subsec_time"=>74}],
76
+ "outputs"=>[{"id"=>85, "state"=>"complete", "file_size"=>69735, "label"=>"small", "url"=>"s3://development.thephotolabs.com/photo_thumbnails/150/small_dsc_8400.jpg", "pixels"=>6600, "processing_time"=>2.0, "width"=>100, "height"=>66}]
77
+ }
78
+ post 'phocoder_notification_update', params.symbolize_keys
79
+ @encodable_job.reload
80
+ @image_upload.reload
81
+ @thumbnail.reload
82
+ puts @image_upload.to_json
83
+ @encodable_job.phocoder_status.should == 'ready'
84
+ @image_upload.phocoder_status.should == 'ready'
85
+ @image_upload.width.should == 4288
86
+ @thumbnail.phocoder_status.should == 'ready'
87
+ end
88
+
60
89
  end
61
90
 
62
91
 
@@ -120,4 +149,4 @@ describe PhocoderController do
120
149
 
121
150
 
122
151
 
123
- end
152
+ end
@@ -12,6 +12,7 @@ class CreateEncodableJobs < ActiveRecord::Migration
12
12
  t.integer "zencoder_output_id"
13
13
  t.string "zencoder_status"
14
14
  t.string "zencoder_url"
15
+ t.string "tracking_mode"
15
16
  t.timestamps
16
17
  end
17
18
  add_index :encodable_jobs, [:encodable_type, :encodable_id]
@@ -21,4 +22,4 @@ class CreateEncodableJobs < ActiveRecord::Migration
21
22
  def self.down
22
23
  drop_table :encodable_jobs
23
24
  end
24
- end
25
+ end
@@ -0,0 +1,5 @@
1
+ class AddTrackingModeToEncodableJobs < ActiveRecord::Migration
2
+ def change
3
+ #add_column :encodable_jobs, :tracking_mode, :string
4
+ end
5
+ end
@@ -11,7 +11,7 @@
11
11
  #
12
12
  # It's strongly recommended to check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(:version => 20120423030345) do
14
+ ActiveRecord::Schema.define(:version => 20121230165930) do
15
15
 
16
16
  create_table "encodable_jobs", :force => true do |t|
17
17
  t.string "encodable_type"
@@ -27,6 +27,7 @@ ActiveRecord::Schema.define(:version => 20120423030345) do
27
27
  t.string "zencoder_url"
28
28
  t.datetime "created_at", :null => false
29
29
  t.datetime "updated_at", :null => false
30
+ t.string "tracking_mode"
30
31
  end
31
32
 
32
33
  add_index "encodable_jobs", ["encodable_type", "encodable_id"], :name => "index_encodable_jobs_on_encodable_type_and_encodable_id"
@@ -52,6 +52,7 @@ describe ActsAsPhocodable do
52
52
  # )
53
53
  # }
54
54
  ImageUpload.destroy_all
55
+ EncodableJob.destroy_all
55
56
  @fixture_path = ""
56
57
  @attr = {
57
58
  :file => fixture_file_upload(@fixture_path + '/big_eye_tiny.jpg','image/jpeg')
@@ -62,6 +63,8 @@ describe ActsAsPhocodable do
62
63
  @txt_attr = {
63
64
  :file => fixture_file_upload(@fixture_path + '/test.txt', 'text/plain')
64
65
  }
66
+ ActsAsPhocodable.track_jobs = true
67
+ ActsAsPhocodable.track_components = false
65
68
  end
66
69
 
67
70
 
@@ -97,6 +100,27 @@ describe ActsAsPhocodable do
97
100
  ActsAsPhocodable.base_url = "http://new-domain.com"
98
101
  ActsAsPhocodable.base_url.should == "http://new-domain.com"
99
102
  end
103
+
104
+ it "should default to tracking jobs" do
105
+ ActsAsPhocodable.track_jobs.should be_true
106
+ end
107
+
108
+ it "should be able to be set to not track jobs" do
109
+ ActsAsPhocodable.track_jobs = false
110
+ ActsAsPhocodable.track_jobs.should_not be_true
111
+ end
112
+
113
+ it "should default to not tracking components" do
114
+ ActsAsPhocodable.track_components.should_not be_true
115
+ end
116
+
117
+ it "should be able to be set to to track components" do
118
+ ActsAsPhocodable.track_components = true
119
+ ActsAsPhocodable.track_components.should be_true
120
+ ActsAsPhocodable.track_components = false
121
+ end
122
+
123
+
100
124
 
101
125
  it "should default to the normal config file" do
102
126
  ActsAsPhocodable.config_file.should == "config/phocodable.yml"
@@ -255,6 +279,34 @@ describe ActsAsPhocodable do
255
279
  end
256
280
  #
257
281
  it "should call phocoder for images" do
282
+ ActsAsPhocodable.track_components = true
283
+ iu = ImageUpload.new(@attr)
284
+
285
+ Phocoder::Job.should_receive(:create).and_return(mock(Phocoder::Response,:body=>{
286
+ "job"=>{
287
+ "id"=>1,
288
+ "inputs"=>["id"=>1],
289
+ "thumbnails"=>[{"label"=>"small","filename"=>"small-test-file.jpg","id"=>1}]
290
+ }
291
+ }))
292
+ iu.save
293
+ expected_local_path = File.join('/tmp','image_uploads',iu.id.to_s,iu.filename)
294
+ File.exists?(expected_local_path).should be_true
295
+ #iu.phocode
296
+ ImageUpload.count.should == 2 #it should have created a thumbnail record
297
+ EncodableJob.count.should == 3
298
+ iu.destroy
299
+ ImageUpload.count.should == 0
300
+ EncodableJob.count.should == 3
301
+ EncodableJob.for_jobs.count.should == 1
302
+ EncodableJob.for_components.count.should == 2
303
+ File.exists?(expected_local_path).should_not be_true
304
+ ActsAsPhocodable.track_components = false
305
+ end
306
+
307
+
308
+ it "should call phocoder for images and not create encodable_jobs if we're not tracking components" do
309
+ ActsAsPhocodable.track_components = false
258
310
  iu = ImageUpload.new(@attr)
259
311
 
260
312
  Phocoder::Job.should_receive(:create).and_return(mock(Phocoder::Response,:body=>{
@@ -269,9 +321,12 @@ describe ActsAsPhocodable do
269
321
  File.exists?(expected_local_path).should be_true
270
322
  #iu.phocode
271
323
  ImageUpload.count.should == 2 #it should have created a thumbnail record
324
+ EncodableJob.count.should == 1
272
325
  iu.destroy
273
326
  ImageUpload.count.should == 0
327
+ EncodableJob.count.should == 1
274
328
  File.exists?(expected_local_path).should_not be_true
329
+ ActsAsPhocodable.track_components = false
275
330
  end
276
331
 
277
332
 
@@ -125,4 +125,4 @@ describe EncodableJob do
125
125
  end
126
126
 
127
127
 
128
- end
128
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  # Configure Rails Envinronment
2
2
  ENV["RAILS_ENV"] = "test"
3
3
 
4
+ require 'simplecov'
5
+ SimpleCov.start
6
+
4
7
  require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
8
  require "rspec/rails"
6
9
  require 'webmock/rspec'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phocoder-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.48
4
+ version: 0.0.49
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-19 00:00:00.000000000 Z
12
+ date: 2013-01-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -254,6 +254,7 @@ files:
254
254
  - spec/dummy/db/migrate/20110523165522_create_encodable_jobs.rb
255
255
  - spec/dummy/db/migrate/20111101024507_create_images.rb
256
256
  - spec/dummy/db/migrate/20120423030345_add_exif_data_to_image_uploads.rb
257
+ - spec/dummy/db/migrate/20121230165930_add_tracking_mode_to_encodable_jobs.rb
257
258
  - spec/dummy/db/schema.rb
258
259
  - spec/dummy/public/404.html
259
260
  - spec/dummy/public/422.html
@@ -297,7 +298,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
297
298
  version: '0'
298
299
  segments:
299
300
  - 0
300
- hash: 4355286825974465509
301
+ hash: -2014735189134116916
301
302
  required_rubygems_version: !ruby/object:Gem::Requirement
302
303
  none: false
303
304
  requirements: