bulldog 0.0.8 → 0.0.9
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/CHANGELOG +5 -0
- data/VERSION +1 -1
- data/bulldog.gemspec +2 -2
- data/lib/bulldog/attachment/base.rb +6 -11
- data/lib/bulldog/processor/base.rb +9 -4
- data/lib/bulldog/processor/ffmpeg.rb +11 -13
- data/lib/bulldog/processor/image_magick.rb +4 -4
- data/lib/bulldog/processor/one_shot.rb +1 -1
- data/spec/unit/processor/ffmpeg_spec.rb +15 -1
- data/spec/unit/processor/image_magick_spec.rb +16 -2
- data/spec/unit/processor/one_shot_spec.rb +2 -2
- metadata +2 -2
data/CHANGELOG
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.9
|
data/bulldog.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{bulldog}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.9"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["George Ogata"]
|
12
|
-
s.date = %q{2009-11-
|
12
|
+
s.date = %q{2009-11-23}
|
13
13
|
s.description = %q{= Bulldog
|
14
14
|
|
15
15
|
Flexible file attachments for active record.
|
@@ -23,15 +23,18 @@ module Bulldog
|
|
23
23
|
#
|
24
24
|
# Return true if no errors were encountered, false otherwise.
|
25
25
|
#
|
26
|
-
def process(event_name)
|
26
|
+
def process(event_name, options={})
|
27
27
|
reflection.events[event_name].each do |event|
|
28
28
|
if (types = event.attachment_types)
|
29
29
|
next unless types.include?(type)
|
30
30
|
end
|
31
31
|
processor_type = event.processor_type || default_processor_type
|
32
32
|
processor_class = Processor.const_get(processor_type.to_s.camelize)
|
33
|
-
processor = processor_class.new(self,
|
34
|
-
|
33
|
+
processor = processor_class.new(self, stream.path)
|
34
|
+
styles = reflection.styles
|
35
|
+
names = options[:styles] || event.styles and
|
36
|
+
styles = reflection.styles.slice(*names)
|
37
|
+
processor.process(styles, options, &event.callback)
|
35
38
|
end
|
36
39
|
record.errors.empty?
|
37
40
|
end
|
@@ -144,14 +147,6 @@ module Bulldog
|
|
144
147
|
|
145
148
|
private # -------------------------------------------------------
|
146
149
|
|
147
|
-
def styles_for_event(event)
|
148
|
-
if event.styles
|
149
|
-
styles = reflection.styles.slice(*event.styles)
|
150
|
-
else
|
151
|
-
styles = reflection.styles
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
150
|
#
|
156
151
|
# Remove the files for this attachment, along with any parent
|
157
152
|
# directories.
|
@@ -1,9 +1,8 @@
|
|
1
1
|
module Bulldog
|
2
2
|
module Processor
|
3
3
|
class Base
|
4
|
-
def initialize(attachment,
|
4
|
+
def initialize(attachment, input_file)
|
5
5
|
@attachment = attachment
|
6
|
-
@styles = styles
|
7
6
|
@input_file = input_file
|
8
7
|
end
|
9
8
|
|
@@ -61,8 +60,13 @@ module Bulldog
|
|
61
60
|
# #style will be set to the current style each time the block is
|
62
61
|
# called.
|
63
62
|
#
|
64
|
-
|
65
|
-
|
63
|
+
# Return true if any styles were processed, false otherwise.
|
64
|
+
# Subclasses can use this to determine if any processing
|
65
|
+
# commands need to be run.
|
66
|
+
#
|
67
|
+
def process(styles, options={}, &block)
|
68
|
+
@styles = styles
|
69
|
+
return false if styles.empty?
|
66
70
|
styles.each do |style|
|
67
71
|
@style = style
|
68
72
|
begin
|
@@ -71,6 +75,7 @@ module Bulldog
|
|
71
75
|
@style = nil
|
72
76
|
end
|
73
77
|
end
|
78
|
+
true
|
74
79
|
end
|
75
80
|
|
76
81
|
#
|
@@ -7,21 +7,21 @@ module Bulldog
|
|
7
7
|
|
8
8
|
def initialize(*args)
|
9
9
|
super
|
10
|
-
@arguments = style_list_map
|
11
|
-
@still_frame_callbacks = style_list_map
|
12
10
|
end
|
13
11
|
|
14
|
-
def process
|
15
|
-
|
16
|
-
|
17
|
-
run_still_frame_callbacks
|
12
|
+
def process(styles, options={})
|
13
|
+
super or
|
14
|
+
return
|
18
15
|
end
|
19
16
|
|
20
17
|
def process_style(*args)
|
21
18
|
@operation = nil
|
19
|
+
@arguments = []
|
20
|
+
@still_frame_callbacks = []
|
22
21
|
super
|
23
22
|
set_default_operation
|
24
23
|
run_ffmpeg
|
24
|
+
run_still_frame_callbacks
|
25
25
|
end
|
26
26
|
|
27
27
|
def use_threads(num_threads)
|
@@ -65,7 +65,7 @@ module Bulldog
|
|
65
65
|
if (attribute = params[:assign_to])
|
66
66
|
basename = "recorded_frame.#{params[:format]}"
|
67
67
|
output_path = record.send(attribute).interpolate_path(:original, :basename => basename)
|
68
|
-
@still_frame_callbacks
|
68
|
+
@still_frame_callbacks << lambda do
|
69
69
|
file = SavedFile.new(output_path, :file_name => basename)
|
70
70
|
record.update_attribute(attribute, file)
|
71
71
|
end
|
@@ -75,7 +75,7 @@ module Bulldog
|
|
75
75
|
|
76
76
|
operate '-y', output_path
|
77
77
|
if block
|
78
|
-
@still_frame_callbacks
|
78
|
+
@still_frame_callbacks << lambda{instance_exec(output_path, &block)}
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
@@ -88,7 +88,7 @@ module Bulldog
|
|
88
88
|
end
|
89
89
|
|
90
90
|
def operate(*args)
|
91
|
-
@arguments
|
91
|
+
@arguments.concat args.map(&:to_s)
|
92
92
|
end
|
93
93
|
|
94
94
|
def set_default_operation
|
@@ -154,15 +154,13 @@ module Bulldog
|
|
154
154
|
def run_ffmpeg
|
155
155
|
command = [self.class.ffmpeg_path]
|
156
156
|
command << '-i' << input_file
|
157
|
-
command.concat(@arguments
|
157
|
+
command.concat(@arguments)
|
158
158
|
Bulldog.run(*command) or
|
159
159
|
record.errors.add name, "convert failed (status #$?)"
|
160
160
|
end
|
161
161
|
|
162
162
|
def run_still_frame_callbacks
|
163
|
-
@still_frame_callbacks.each
|
164
|
-
callbacks.each{|c| c.call}
|
165
|
-
end
|
163
|
+
@still_frame_callbacks.each(&:call)
|
166
164
|
end
|
167
165
|
end
|
168
166
|
end
|
@@ -10,12 +10,12 @@ module Bulldog
|
|
10
10
|
|
11
11
|
def initialize(*args)
|
12
12
|
super
|
13
|
-
@tree = ArgumentTree.new(styles)
|
14
13
|
end
|
15
14
|
|
16
|
-
def process
|
17
|
-
|
18
|
-
super
|
15
|
+
def process(styles, options={})
|
16
|
+
@tree = ArgumentTree.new(styles)
|
17
|
+
super or
|
18
|
+
return
|
19
19
|
run_convert
|
20
20
|
end
|
21
21
|
|
@@ -51,7 +51,7 @@ describe Processor::Ffmpeg do
|
|
51
51
|
configure(:video) do
|
52
52
|
process(options.merge(:on => :event, :with => :ffmpeg), &block)
|
53
53
|
end
|
54
|
-
@thing.video.process(:event)
|
54
|
+
@thing.video.process(:event, options)
|
55
55
|
end
|
56
56
|
|
57
57
|
describe "#process" do
|
@@ -61,6 +61,20 @@ describe Processor::Ffmpeg do
|
|
61
61
|
process_video
|
62
62
|
end
|
63
63
|
|
64
|
+
it "should process the specified set of styles, if given, even those not in the configured style set" do
|
65
|
+
video_style :one
|
66
|
+
video_style :two
|
67
|
+
video_style :three
|
68
|
+
styles = []
|
69
|
+
configure :video do
|
70
|
+
process(:on => :event, :with => :image_magick, :styles => [:one, :two]) do
|
71
|
+
styles << style.name
|
72
|
+
end
|
73
|
+
end
|
74
|
+
@thing.video.process(:event, :styles => [:two, :three])
|
75
|
+
styles.should == [:two, :three]
|
76
|
+
end
|
77
|
+
|
64
78
|
it "should log the command run" do
|
65
79
|
video_style :output
|
66
80
|
log_path = "#{temporary_directory}/log"
|
@@ -34,11 +34,11 @@ describe Processor::ImageMagick do
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
def process(&block)
|
37
|
+
def process(*args, &block)
|
38
38
|
configure do
|
39
39
|
process(:on => :event, :with => :image_magick, &block)
|
40
40
|
end
|
41
|
-
@thing.attachment.process(:event)
|
41
|
+
@thing.attachment.process(:event, *args)
|
42
42
|
end
|
43
43
|
|
44
44
|
describe "#dimensions" do
|
@@ -78,6 +78,20 @@ describe Processor::ImageMagick do
|
|
78
78
|
process
|
79
79
|
end
|
80
80
|
|
81
|
+
it "should process the specified set of styles, if given, even those not in the configured style set" do
|
82
|
+
style :one
|
83
|
+
style :two
|
84
|
+
style :three
|
85
|
+
styles = []
|
86
|
+
configure do
|
87
|
+
process(:on => :event, :with => :image_magick, :styles => [:one, :two]) do
|
88
|
+
styles << style.name
|
89
|
+
end
|
90
|
+
end
|
91
|
+
@thing.attachment.process(:event, :styles => [:two, :three])
|
92
|
+
styles.should == [:two, :three]
|
93
|
+
end
|
94
|
+
|
81
95
|
it "should add an error to the record if convert fails" do
|
82
96
|
style :output
|
83
97
|
Bulldog.stubs(:run).returns(nil)
|
@@ -72,8 +72,8 @@ describe Processor::OneShot do
|
|
72
72
|
it "should not affect the other processes' styles" do
|
73
73
|
style = Style.new(:style)
|
74
74
|
styles = StyleSet[style]
|
75
|
-
processor = Processor::OneShot.new(mock,
|
76
|
-
processor.process{}
|
75
|
+
processor = Processor::OneShot.new(mock, mock)
|
76
|
+
processor.process(styles){}
|
77
77
|
styles.should have(1).style
|
78
78
|
end
|
79
79
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bulldog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- George Ogata
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-11-
|
12
|
+
date: 2009-11-23 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|