paperclip-globalize3 0.1.0 → 1.0.0

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.
@@ -1,9 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.8.7
4
3
  - 1.9.2
5
4
  - 1.9.3
6
- - ree
7
5
  script: "bundle exec rake spec"
8
6
  gemfile:
9
7
  - gemfiles/rails_3.0.gemfile
data/README.md CHANGED
@@ -10,7 +10,9 @@ Note that this implementation patches some methods in the `Paperclip::Attachment
10
10
 
11
11
  ## Compatibility
12
12
 
13
- Currently, paperclip 2.x (>= 2.5) and globalize3 0.3 are supported. Support for paperclip 3.x is planned.
13
+ Currently, paperclip 3.x (>= 3.3) and globalize3 0.3 are supported.
14
+
15
+ For paperclip 2.x support please use the 0.x versions of this gem.
14
16
 
15
17
  ## Installation
16
18
 
@@ -46,7 +48,6 @@ Example:
46
48
 
47
49
  ## Todo / Future Plans
48
50
 
49
- * Support paperclip 3.x
50
51
  * Make it easier to specify translated attachments, e.g. using one of these options:
51
52
  * support `translates :attachment_name`
52
53
  * support `:translated` option for `has_attached_file`
@@ -6,4 +6,8 @@ require "paperclip"
6
6
 
7
7
  Paperclip.interpolates(:locale) { |_, _| Globalize.locale.to_s }
8
8
 
9
+ unless Paperclip::Attachment.instance_methods.include?(:only_process)
10
+ Paperclip::Attachment.send(:include, Paperclip::Globalize3::Attachment::Compatibility::Paperclip33)
11
+ end
12
+
9
13
  Paperclip::Attachment.send(:include, Paperclip::Globalize3::Attachment)
@@ -4,94 +4,94 @@ module Paperclip
4
4
 
5
5
  def self.included(base)
6
6
  base.send :include, InstanceMethods
7
- base.send :alias_method_chain, :instance_write, :globalize3
8
- base.send :alias_method_chain, :instance_read, :globalize3
9
7
  base.send :alias_method_chain, :assign, :globalize3
10
8
  base.send :alias_method_chain, :clear, :globalize3
11
- base.send :alias_method_chain, :queue_existing_for_delete, :globalize3
9
+ base.send :alias_method_chain, :queue_all_for_delete, :globalize3
10
+ base.send :alias_method_chain, :queue_some_for_delete, :globalize3
12
11
  end
13
12
 
14
13
  module InstanceMethods
15
14
 
16
- # use a localized cache if required
17
- def cached_instance_variable_name(getter)
18
- if instance.respond_to?(:translated?) && instance.translated?(getter.to_sym)
19
- :"@_#{getter}_#{Globalize.locale}"
20
- else
21
- :"@_#{getter}"
22
- end
23
- end
24
-
25
- def instance_write_with_globalize3(attr, value)
26
- setter = :"#{name}_#{attr}="
27
- responds = instance.respond_to?(setter)
28
- self.instance_variable_set(cached_instance_variable_name(setter.to_s.chop), value)
29
- instance.send(setter, value) if responds || attr.to_s == "file_name"
30
- end
31
-
32
- def instance_read_with_globalize3(attr)
33
- getter = :"#{name}_#{attr}"
34
- responds = instance.respond_to?(getter)
35
- cached = self.instance_variable_get(cached_instance_variable_name(getter))
36
- return cached if cached
37
- instance.send(getter) if responds || attr.to_s == "file_name"
38
- end
39
-
40
15
  def assign_with_globalize3(uploaded_file)
41
16
  ensure_required_accessors!
17
+ file = Paperclip.io_adapters.for(uploaded_file)
42
18
 
43
- if uploaded_file.is_a?(Paperclip::Attachment)
44
- uploaded_filename = uploaded_file.original_filename
45
- uploaded_file = uploaded_file.to_file(:original)
46
- close_uploaded_file = uploaded_file.respond_to?(:close)
47
- else
48
- instance_write(:uploaded_file, uploaded_file) if uploaded_file
49
- end
50
-
51
- return nil unless valid_assignment?(uploaded_file)
19
+ self.clear(*only_process, :locales => Globalize.locale) # [paperclip-globalize3] only clear current locale
20
+ return nil if file.nil?
52
21
 
53
- uploaded_file.binmode if uploaded_file.respond_to? :binmode
54
- self.clear(Globalize.locale) # [paperclip-globalize3] only clear current locale
55
-
56
- return nil if uploaded_file.nil?
57
-
58
- uploaded_filename ||= uploaded_file.original_filename
59
- stores_fingerprint = @instance.respond_to?("#{name}_fingerprint".to_sym)
60
- @queued_for_write[:original] = to_tempfile(uploaded_file)
61
- instance_write(:file_name, cleanup_filename(uploaded_filename.strip))
62
- instance_write(:content_type, uploaded_file.content_type.to_s.strip)
63
- instance_write(:file_size, uploaded_file.size.to_i)
64
- instance_write(:fingerprint, generate_fingerprint(uploaded_file)) if stores_fingerprint
22
+ @queued_for_write[:original] = file
23
+ instance_write(:file_name, cleanup_filename(file.original_filename))
24
+ instance_write(:content_type, file.content_type.to_s.strip)
25
+ instance_write(:file_size, file.size)
26
+ instance_write(:fingerprint, file.fingerprint) if instance_respond_to?(:fingerprint)
27
+ instance_write(:created_at, Time.now) if has_enabled_but_unset_created_at?
65
28
  instance_write(:updated_at, Time.now)
66
29
 
67
30
  @dirty = true
68
31
 
69
- post_process(*@options[:only_process]) if post_processing
32
+ if post_processing &&
33
+ (Paperclip::Attachment.instance_method(:valid_assignment?).parameters.present? || # paperclip <=3.3 compatibility
34
+ valid_assignment?)
35
+ post_process(*only_process)
36
+ end
70
37
 
71
- # Reset the file size if the original file was reprocessed.
72
- instance_write(:file_size, @queued_for_write[:original].size.to_i)
73
- instance_write(:fingerprint, generate_fingerprint(@queued_for_write[:original])) if stores_fingerprint
74
- ensure
75
- uploaded_file.close if close_uploaded_file
38
+ instance_write(:file_size, @queued_for_write[:original].size)
39
+ instance_write(:fingerprint, @queued_for_write[:original].fingerprint) if instance_respond_to?(:fingerprint)
40
+ updater = :"#{name}_file_name_will_change!"
41
+ instance.send updater if instance.respond_to? updater
76
42
  end
77
43
 
78
44
 
79
- def clear_with_globalize3(with_locales = nil)
80
- queue_existing_for_delete(with_locales)
81
- @queued_for_write = {}
82
- @errors = {}
45
+ def clear_with_globalize3(*args)
46
+ options = args.extract_options!
47
+ styles_to_clear = args
48
+ if styles_to_clear.any?
49
+ queue_some_for_delete(*styles_to_clear, options)
50
+ else
51
+ queue_all_for_delete(options)
52
+ @queued_for_write = {}
53
+ @errors = {}
54
+ end
83
55
  end
84
56
 
85
57
  private
86
58
 
87
- def queue_existing_for_delete_with_globalize3(with_locales = nil) #:nodoc:
59
+ def queue_all_for_delete_with_globalize3(options = {}) #:nodoc:
60
+ with_locales_if_translated(options[:locales]) do
61
+ queue_all_for_delete_without_globalize3
62
+ end
63
+ end
64
+
65
+ def queue_some_for_delete_with_globalize3(*args)
66
+ options = args.extract_options!
67
+ styles = args
68
+ with_locales_if_translated(options[:locales]) do
69
+ queue_some_for_delete_without_globalize3(styles)
70
+ end
71
+ end
72
+
73
+ # If translated, execute the block for the given locales only (or for all translated locales if none are given).
74
+ # Otherwise, simply execute the block.
75
+ def with_locales_if_translated(with_locales = nil, &block)
88
76
  if instance.respond_to?(:translated_locales) && instance.translated?(:"#{name}_file_name")
89
- # do it for the given locales only (or for all translated locales if none are given)
90
77
  # TODO translated_locales are not present any more when this is called via destroy callback (unless 'translates' is defined AFTER 'has_attached_file' in the model class)
91
78
  with_locales = instance.translated_locales if with_locales.nil?
92
- Globalize.with_locales([*with_locales]) { queue_existing_for_delete_without_globalize3 }
79
+ Globalize.with_locales([*with_locales]) { yield }
93
80
  else
94
- queue_existing_for_delete_without_globalize3
81
+ yield
82
+ end
83
+ end
84
+
85
+ end
86
+
87
+ module Compatibility
88
+
89
+ # For compatibility with paperclip 3.3
90
+ module Paperclip33
91
+ def only_process
92
+ only_process = @options[:only_process].dup
93
+ only_process = only_process.call(self) if only_process.respond_to?(:call)
94
+ only_process.map(&:to_sym)
95
95
  end
96
96
  end
97
97
 
@@ -1,5 +1,5 @@
1
1
  module Paperclip
2
2
  module Globalize3
3
- VERSION = "0.1.0"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_runtime_dependency "paperclip", "~> 2.5"
21
+ spec.add_runtime_dependency "paperclip", "~> 3.3"
22
22
  spec.add_runtime_dependency "globalize3", "~> 0.3"
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.3"
@@ -10,12 +10,16 @@ describe 'Paperclip::Globalize3::Attachment' do
10
10
  Rails.stub(:const_defined?).with(:Railtie).and_return(false)
11
11
  end
12
12
 
13
+ let (:test_image_dir) do
14
+ File.expand_path(File.join(File.dirname(__FILE__), 'data'))
15
+ end
16
+
13
17
  let(:test_image_file) do
14
- File.new(File.expand_path(File.join(File.dirname(__FILE__), 'data/test.png')))
18
+ File.new(File.join(test_image_dir,'test.png'))
15
19
  end
16
20
 
17
21
  let(:test_image_file2) do
18
- File.new(File.expand_path(File.join(File.dirname(__FILE__), 'data/test2.png')))
22
+ File.new(File.join(test_image_dir, 'test2.png'))
19
23
  end
20
24
 
21
25
  context 'with translations' do
@@ -84,6 +88,20 @@ describe 'Paperclip::Globalize3::Attachment' do
84
88
  File.exist?(path_de).should be_false
85
89
  end
86
90
 
91
+ context 'with :only_process' do
92
+
93
+ it 'should only clear the provided style in the current locale on assign' do
94
+ p = OnlyProcessPost.create
95
+ p.image.should_receive(:queue_some_for_delete).with(:thumb, :locales => :en)
96
+ p.image.should_not_receive(:queue_all_for_delete)
97
+
98
+ Globalize.with_locale(:en) do
99
+ p.update_attributes!(:image => test_image_file)
100
+ end
101
+ end
102
+
103
+ end
104
+
87
105
  end
88
106
 
89
107
  context 'without translations' do
@@ -1,10 +1,23 @@
1
- class Post < ActiveRecord::Base
1
+ class BasePost < ActiveRecord::Base
2
+ self.table_name = 'posts'
3
+ end
4
+
5
+ class Post < BasePost
2
6
  has_attached_file :image,
3
7
  :url => "/system/:class/:attachment/:id/:locale/:style-:fingerprint.:extension"
4
8
 
5
9
  translates :image_file_name, :image_content_type, :image_file_size, :image_updated_at, :image_fingerprint
6
10
  end
7
11
 
12
+ class OnlyProcessPost < BasePost
13
+ has_attached_file :image,
14
+ :url => "/system/:class/:attachment/:id/:locale/:style-:fingerprint.:extension",
15
+ :styles => { :thumb => "10x10", :large => "40x40" },
16
+ :only_process => [:thumb]
17
+
18
+ translates :image_file_name, :image_content_type, :image_file_size, :image_updated_at, :image_fingerprint
19
+ end
20
+
8
21
  class Untranslated < ActiveRecord::Base
9
22
  has_attached_file :image,
10
23
  :url => "/system/:class/:attachment/:id/:style-:fingerprint.:extension"
metadata CHANGED
@@ -1,120 +1,137 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: paperclip-globalize3
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.0
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 0
10
+ version: 1.0.0
5
11
  platform: ruby
6
- authors:
12
+ authors:
7
13
  - Maximilian Herold
8
14
  autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
- date: 2013-04-30 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2013-05-07 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
14
21
  name: paperclip
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ~>
18
- - !ruby/object:Gem::Version
19
- version: '2.5'
20
- type: :runtime
21
22
  prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ~>
25
- - !ruby/object:Gem::Version
26
- version: '2.5'
27
- - !ruby/object:Gem::Dependency
28
- name: globalize3
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
31
26
  - - ~>
32
- - !ruby/object:Gem::Version
33
- version: '0.3'
27
+ - !ruby/object:Gem::Version
28
+ hash: 1
29
+ segments:
30
+ - 3
31
+ - 3
32
+ version: "3.3"
34
33
  type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: globalize3
35
37
  prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
38
41
  - - ~>
39
- - !ruby/object:Gem::Version
40
- version: '0.3'
41
- - !ruby/object:Gem::Dependency
42
+ - !ruby/object:Gem::Version
43
+ hash: 13
44
+ segments:
45
+ - 0
46
+ - 3
47
+ version: "0.3"
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
42
51
  name: bundler
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ~>
46
- - !ruby/object:Gem::Version
47
- version: '1.3'
48
- type: :development
49
52
  prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
52
56
  - - ~>
53
- - !ruby/object:Gem::Version
54
- version: '1.3'
55
- - !ruby/object:Gem::Dependency
56
- name: appraisal
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: 0.5.1
57
+ - !ruby/object:Gem::Version
58
+ hash: 9
59
+ segments:
60
+ - 1
61
+ - 3
62
+ version: "1.3"
62
63
  type: :development
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: appraisal
63
67
  prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
68
+ requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
66
71
  - - ~>
67
- - !ruby/object:Gem::Version
72
+ - !ruby/object:Gem::Version
73
+ hash: 9
74
+ segments:
75
+ - 0
76
+ - 5
77
+ - 1
68
78
  version: 0.5.1
69
- - !ruby/object:Gem::Dependency
70
- name: rspec-rails
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ~>
74
- - !ruby/object:Gem::Version
75
- version: 2.8.0
76
79
  type: :development
80
+ version_requirements: *id004
81
+ - !ruby/object:Gem::Dependency
82
+ name: rspec-rails
77
83
  prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
84
+ requirement: &id005 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
80
87
  - - ~>
81
- - !ruby/object:Gem::Version
88
+ - !ruby/object:Gem::Version
89
+ hash: 47
90
+ segments:
91
+ - 2
92
+ - 8
93
+ - 0
82
94
  version: 2.8.0
83
- - !ruby/object:Gem::Dependency
84
- name: sqlite3
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ! '>='
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
95
  type: :development
96
+ version_requirements: *id005
97
+ - !ruby/object:Gem::Dependency
98
+ name: sqlite3
91
99
  prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ! '>='
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: rake
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ! '>='
102
- - !ruby/object:Gem::Version
103
- version: '0'
100
+ requirement: &id006 !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ hash: 3
106
+ segments:
107
+ - 0
108
+ version: "0"
104
109
  type: :development
110
+ version_requirements: *id006
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake
105
113
  prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ! '>='
109
- - !ruby/object:Gem::Version
110
- version: '0'
114
+ requirement: &id007 !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ hash: 3
120
+ segments:
121
+ - 0
122
+ version: "0"
123
+ type: :development
124
+ version_requirements: *id007
111
125
  description: locale-specific attachments with paperclip and globalize3
112
- email:
126
+ email:
113
127
  - herold@emjot.de
114
128
  executables: []
129
+
115
130
  extensions: []
131
+
116
132
  extra_rdoc_files: []
117
- files:
133
+
134
+ files:
118
135
  - .gitignore
119
136
  - .rspec
120
137
  - .travis.yml
@@ -137,33 +154,43 @@ files:
137
154
  - spec/data/test2.png
138
155
  - spec/spec_helper.rb
139
156
  homepage: https://github.com/emjot/paperclip-globalize3
140
- licenses:
157
+ licenses:
141
158
  - MIT
142
- metadata: {}
143
159
  post_install_message:
144
160
  rdoc_options: []
145
- require_paths:
161
+
162
+ require_paths:
146
163
  - lib
147
- required_ruby_version: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - ! '>='
150
- - !ruby/object:Gem::Version
151
- version: '0'
152
- required_rubygems_version: !ruby/object:Gem::Requirement
153
- requirements:
154
- - - ! '>='
155
- - !ruby/object:Gem::Version
156
- version: '0'
164
+ required_ruby_version: !ruby/object:Gem::Requirement
165
+ none: false
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ hash: 3
170
+ segments:
171
+ - 0
172
+ version: "0"
173
+ required_rubygems_version: !ruby/object:Gem::Requirement
174
+ none: false
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ hash: 3
179
+ segments:
180
+ - 0
181
+ version: "0"
157
182
  requirements: []
183
+
158
184
  rubyforge_project:
159
- rubygems_version: 2.0.3
185
+ rubygems_version: 1.8.15
160
186
  signing_key:
161
- specification_version: 4
187
+ specification_version: 3
162
188
  summary: locale-specific attachments with paperclip and globalize3
163
- test_files:
189
+ test_files:
164
190
  - spec/attachment_helper_spec.rb
165
191
  - spec/data/models.rb
166
192
  - spec/data/schema.rb
167
193
  - spec/data/test.png
168
194
  - spec/data/test2.png
169
195
  - spec/spec_helper.rb
196
+ has_rdoc:
checksums.yaml DELETED
@@ -1,15 +0,0 @@
1
- ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- Y2FmNjZlMGNjMGNkNzg4MDZkNGEwMDI4MmI4M2UzN2ZmZjA5NGYzZg==
5
- data.tar.gz: !binary |-
6
- NmI0ZTc1OGZmMjBiZDhjYjJlY2JlMDBmMDgzZGQ0ZmMzNjc5YTI4Zg==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- MjE1ODcxNzc0MjA4MDNkOGRiNjQyMmM1Yzc0OGExOTNiNTYxOWIyNmI1ZDZi
10
- NjY1ZmY1YTQ4NjYwNmFhNmEyOWM2MGE4OTU0ZDQ4NTAyYzJhMDk1YjhhN2Zi
11
- ZDU5NDY4ZTc3YjJiMzZiMjdkYWI3MzQzOGY1MDUzYWRjNDI1MWI=
12
- data.tar.gz: !binary |-
13
- YTBmZTU2ZGNlM2JjOTAzZWY0ZDg0Y2NmMWYxZTAxZjc0MDA3OGQ2NzAxOWRl
14
- NTE3ZWQxOTlhYmI4NzZmNDY5NWNjNzA4ZDA1ODIwY2MzN2U1MTQzNDYwNDQx
15
- ODFiZDE1MmJhZDg4YzZlNTM5OTc0YThiYmJhYTFlOGU2YzkyOTU=