attached 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.rdoc CHANGED
@@ -4,7 +4,7 @@ Attached is a Ruby on Rails file attachment tool that lets users upload to the c
4
4
 
5
5
  == Requirements
6
6
 
7
- The gem is tested with Ruby 1.9.2 and Rails 3.0.6 but may well work with other versions of Ruby and Rails.
7
+ The gem is tested with Ruby 1.9.2 and Rails 3.0.9 but may well work with other versions of Ruby and Rails.
8
8
 
9
9
  == Installation
10
10
 
@@ -98,7 +98,7 @@ View:
98
98
  Attached::Attachment.options[:medium] = :rackspace
99
99
  Attached::Attachment.options[:credentials] = "#{Rails.root}/config/rackspace.yml"
100
100
 
101
- === Processor
101
+ === Processors
102
102
 
103
103
  # app/models/image.rb
104
104
  has_attached :file, processor: :image, styles: {
@@ -135,11 +135,16 @@ View:
135
135
  small: { preset: 'medium', extension: '.wav' },
136
136
  }
137
137
 
138
- -preset fast extreme
138
+ === Strategies
139
+
140
+ # app/models/sample.rb
141
+ has_attached :file, processor: ..., styles: { ... }, strategy: :delay
142
+ has_attached :file, processor: ..., styles: { ... }, strategy: :cache
139
143
 
140
144
  === Reprocessing
141
145
 
142
146
  rake attached:process[Image,file]
147
+ rake attached:process[Audio,file]
143
148
 
144
149
  === Aliases
145
150
 
data/lib/attached.rb CHANGED
@@ -17,6 +17,7 @@ module Attached
17
17
  args.each do |name|
18
18
  column("#{name}_identifier", :string, options)
19
19
  column("#{name}_extension", :string, options)
20
+ column("#{name}_status", :string, options)
20
21
  column("#{name}_size", :integer, options)
21
22
  end
22
23
  end
@@ -1,4 +1,4 @@
1
- require 'guid'
1
+ require 'identifier'
2
2
 
3
3
  require 'attached/storage'
4
4
  require 'attached/storage/error'
@@ -21,6 +21,7 @@ module Attached
21
21
  attr_reader :missing
22
22
  attr_reader :styles
23
23
  attr_reader :default
24
+ attr_reader :strategy
24
25
  attr_reader :medium
25
26
  attr_reader :credentials
26
27
  attr_reader :processors
@@ -44,9 +45,6 @@ module Attached
44
45
  :default => :original,
45
46
  :medium => :local,
46
47
  :credentials => {},
47
- :styles => {},
48
- :processors => [],
49
- :aliases => [],
50
48
  }
51
49
  end
52
50
 
@@ -70,7 +68,11 @@ module Attached
70
68
  # * :aliases - An array of aliases
71
69
 
72
70
  def initialize(name, instance, options = {})
73
- options = self.class.options.merge(options)
71
+ options = self.class.options.clone.merge(options)
72
+
73
+ options[:styles] ||= {}
74
+ options[:aliases] ||= []
75
+ options[:processors] ||= []
74
76
 
75
77
  @name = name
76
78
  @instance = instance
@@ -83,6 +85,7 @@ module Attached
83
85
  @missing = options[:missing]
84
86
  @styles = options[:styles]
85
87
  @default = options[:default]
88
+ @strategy = options[:strategy]
86
89
  @medium = options[:medium]
87
90
  @credentials = options[:credentials]
88
91
  @processors = options[:processors]
@@ -90,8 +93,8 @@ module Attached
90
93
  @aliases = options[:aliases]
91
94
  @alias = options[:alias]
92
95
 
93
- @processors = self.processors + [self.processor] if self.processor
94
- @aliases = self.aliases + [self.alias] if self.alias
96
+ @aliases = self.aliases << self.alias if self.alias
97
+ @processors = self.processors << self.processor if self.processor
95
98
 
96
99
  @storage = Attached::Storage.storage(self.medium, self.credentials)
97
100
 
@@ -150,19 +153,21 @@ module Attached
150
153
  #
151
154
  # @object.avatar.assign(...)
152
155
 
153
- def assign(file, identifier = "#{Guid.new}")
156
+ def assign(file, identifier = Identifier.generate)
154
157
  self.file = file
155
158
 
156
- extension ||= File.extname(file.original_filename) if file.respond_to?(:original_filename)
157
- extension ||= File.extname(file.path) if file.respond_to?(:path)
159
+ if file
160
+ extension ||= File.extname(file.original_filename) if file.respond_to?(:original_filename)
161
+ extension ||= File.extname(file.path) if file.respond_to?(:path)
162
+ end
158
163
 
159
164
  @purge = [self.path, *self.styles.map { |style, options| self.path(style) }] if attached?
160
165
 
161
- instance_set :size, file.size
162
- instance_set :extension, extension
163
- instance_set :identifier, identifier
166
+ self.size = file ? file.size : nil
167
+ self.extension = file ? extension : nil
168
+ self.identifier = file ? identifier : nil
164
169
 
165
- process
170
+ process if file
166
171
  end
167
172
 
168
173
 
@@ -255,6 +260,17 @@ module Attached
255
260
  end
256
261
 
257
262
 
263
+ # Access the status for an attachment.
264
+ #
265
+ # Usage:
266
+ #
267
+ # @object.avatar.status
268
+
269
+ def status
270
+ instance_get(:status)
271
+ end
272
+
273
+
258
274
  # Access the extension for an attachment. It will first check the styles
259
275
  # to see if one is specified before checking the instance.
260
276
  #
@@ -287,6 +303,28 @@ module Attached
287
303
  end
288
304
 
289
305
 
306
+ # Set the size for an attachment.
307
+ #
308
+ # Usage:
309
+ #
310
+ # @object.avatar.size = 1024
311
+
312
+ def size=(size)
313
+ instance_set(:size, size)
314
+ end
315
+
316
+
317
+ # Set the status for an attachment.
318
+ #
319
+ # Usage:
320
+ #
321
+ # @object.avatar.status = 'processing'
322
+
323
+ def status=(status)
324
+ instance_set(:size, status)
325
+ end
326
+
327
+
290
328
  # Set the extension for an attachment. It will act independently of the
291
329
  # defined style.
292
330
  #
@@ -0,0 +1,20 @@
1
+ module Attached
2
+ class Job
3
+ @queue = :attached
4
+
5
+ def self.perform(klass, id, method)
6
+ object = eval(klass).find(id)
7
+ attachment = object.send(name)
8
+ attachment.reprocess!
9
+ attachment.status = 'active'
10
+ end
11
+
12
+ def self.enqueue(attachment)
13
+ klass = attachment.instance.class.name
14
+ id = attachment.instance.id
15
+ method = attachment.name
16
+ attachment.status = 'processing'
17
+ end
18
+
19
+ end
20
+ end
@@ -1,3 +1,3 @@
1
1
  module Attached
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.2"
3
3
  end
metadata CHANGED
@@ -1,50 +1,50 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: attached
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.2
4
5
  prerelease:
5
- version: 0.4.1
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Kevin Sylvestre
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-06-09 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2011-07-24 00:00:00.000000000 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
16
  name: fog
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: &70341108747620 !ruby/object:Gem::Requirement
19
18
  none: false
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: "0"
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
24
23
  type: :runtime
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: guid
28
24
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: *70341108747620
26
+ - !ruby/object:Gem::Dependency
27
+ name: identifier
28
+ requirement: &70341108747060 !ruby/object:Gem::Requirement
30
29
  none: false
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: "0"
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
35
34
  type: :runtime
36
- version_requirements: *id002
37
- description: Attached is a Ruby on Rails cloud attachment and processor library inspired by Paperclip. Attached lets users push files to the cloud, then perform remote processing on the files.
38
- email:
35
+ prerelease: false
36
+ version_requirements: *70341108747060
37
+ description: Attached is a Ruby on Rails cloud attachment and processor library inspired
38
+ by Paperclip. Attached lets users push files to the cloud, then perform remote processing
39
+ on the files.
40
+ email:
39
41
  - kevin@ksylvest.com
40
42
  executables: []
41
-
42
43
  extensions: []
43
-
44
44
  extra_rdoc_files: []
45
-
46
- files:
45
+ files:
47
46
  - lib/attached/attachment.rb
47
+ - lib/attached/job.rb
48
48
  - lib/attached/processor/audio.rb
49
49
  - lib/attached/processor/base.rb
50
50
  - lib/attached/processor/error.rb
@@ -65,32 +65,29 @@ files:
65
65
  - LICENSE
66
66
  - Gemfile
67
67
  - Rakefile
68
+ has_rdoc: true
68
69
  homepage: http://github.com/ksylvest/attached
69
70
  licenses: []
70
-
71
71
  post_install_message:
72
72
  rdoc_options: []
73
-
74
- require_paths:
73
+ require_paths:
75
74
  - lib
76
- required_ruby_version: !ruby/object:Gem::Requirement
75
+ required_ruby_version: !ruby/object:Gem::Requirement
77
76
  none: false
78
- requirements:
79
- - - ">="
80
- - !ruby/object:Gem::Version
81
- version: "0"
82
- required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
83
82
  none: false
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- version: "0"
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
88
87
  requirements: []
89
-
90
88
  rubyforge_project:
91
- rubygems_version: 1.8.5
89
+ rubygems_version: 1.6.2
92
90
  signing_key:
93
91
  specification_version: 3
94
92
  summary: An attachment library designed with cloud processors in mind
95
93
  test_files: []
96
-