paperweight 0.2.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c9e3211e8bbf5de4d55271d89815de2fb413b8a9702e7ff280771ef2e4dfe944
4
- data.tar.gz: f643f81049c0b4accef26b1ba8fd7c26af8030c8315e5656f6039946e52c240b
3
+ metadata.gz: f08760e0f79a70c76350131c65de6fcca3ed7a3366eeb3893d1f64b817ede4ee
4
+ data.tar.gz: 42df1435f059aab276345f12fac1c35fdce71b9bf237bd73163fa4ef3d87c5df
5
5
  SHA512:
6
- metadata.gz: e4099be28ad137adc0307b4e507e25a20d0edfd83c86d13fb2d2b62d50882e0c390e797bc50fa878a9803cc7117c3f4614d01a2d4807d36bdd4a2c848839682c
7
- data.tar.gz: ca6ed11cd8f2bd2ad78baec34a7a4aca11d7797dde33dac29dbfb11b88e3b713ed48b715d1579c712fed713e895ec885d6974a9d68cd5314550a538ec5356afa
6
+ metadata.gz: 54348c7ce20c685556a8ad1aad6e8c62abee2916091f5120cdfa4c266c5a3790ecd0a0234ec3e18a7218fb2c402aaef20b0b4484d3363dbee7ae12acdf1aec76
7
+ data.tar.gz: 1176e2de7cab6b5d0f8eea6e76fbfad435cc2d06fcacb633286db19c56e3937cfbf0dcdde2d19b5ab43dadbd447c461d009a3cad0e8be13796a05917d0a48692
data/CHANGELOG.md CHANGED
@@ -6,9 +6,14 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.0.0] - 2018-08-15
10
+ ### Changed
11
+ - Changed the expected column type of `#*_processing` from a boolean to string. This allows us to use it to store the URL from the `#*_url=` method so that it can be used in the meantime before the job finishes processing.
12
+
9
13
  ## [0.2.0] - 2018-08-15
10
14
  ### Added
11
15
  - The ability to configure the `max_size` value (the maximum download size) using the `Paperweight.configure` method.
12
16
 
13
17
  [Unreleased]: https://github.com/CultureHQ/client/compare/v0.2.0...HEAD
18
+ [v1.0.0]: https://github.com/CultureHQ/client/compare/v0.2.0...v1.0.0
14
19
  [v0.2.0]: https://github.com/CultureHQ/client/compare/v0.1.2...v0.2.0
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- paperweight (0.2.0)
4
+ paperweight (1.0.0)
5
5
  paperclip (>= 5)
6
6
  rails (>= 5)
7
7
 
@@ -71,11 +71,11 @@ GEM
71
71
  marcel (0.3.2)
72
72
  mimemagic (~> 0.3.2)
73
73
  method_source (0.9.0)
74
- mime-types (3.1)
74
+ mime-types (3.2.2)
75
75
  mime-types-data (~> 3.2015)
76
- mime-types-data (3.2016.0521)
76
+ mime-types-data (3.2018.0812)
77
77
  mimemagic (0.3.2)
78
- mini_mime (1.0.0)
78
+ mini_mime (1.0.1)
79
79
  mini_portile2 (2.3.0)
80
80
  minitest (5.11.3)
81
81
  nio4r (2.3.1)
data/README.md CHANGED
@@ -22,16 +22,18 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- Configure `Paperclip` as you normally would, according to their docs. Then, add an additional `*_processing` boolean field to the model for which you want to process attachments in the background, where `*` is the name of the attachment that you specified in your model's call to `has_attached_file`.
25
+ Configure `Paperclip` as you normally would, according to their docs. Then, add an additional `*_processing` string field to the model for which you want to process attachments in the background, where `*` is the name of the attachment that you specified in your model's call to `has_attached_file`.
26
26
 
27
27
  ```ruby
28
28
  class AddImageProcessingToPosts < ActiveRecord::Migration[5.2]
29
29
  def change
30
- add_column :posts, :image_processing, :boolean
30
+ add_column :posts, :image_processing, :string
31
31
  end
32
32
  end
33
33
  ```
34
34
 
35
+ This column will be used to hold the temporary URL of the image that needs to be processed. It will override all calls to the `#url` method on `Paperclip` attachments until the processing is done so that there's no break in the visibility of the image.
36
+
35
37
  Then, add the ability to update the `*_url` attribute from the controller.
36
38
 
37
39
  ```ruby
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Paperweight
4
+ # Overrides that hook into `paperclip` to add functionality.
5
+ module Hooks
6
+ # Overrides the `has_attached_file` method from `paperclip` so that
7
+ # `paperweight` can add extras when the macro is called.
8
+ module RecordHook
9
+ # Converts a parent name to its respective component child names.
10
+ class AttachmentName
11
+ attr_reader :name
12
+
13
+ def initialize(name)
14
+ @name = name
15
+ end
16
+
17
+ def processing
18
+ :"#{name}_processing"
19
+ end
20
+
21
+ def url
22
+ :"#{name}_url"
23
+ end
24
+
25
+ def url_eq
26
+ :"#{name}_url="
27
+ end
28
+
29
+ def url_attr
30
+ :"@#{name}_url"
31
+ end
32
+ end
33
+
34
+ def has_attached_file(name, *) # rubocop:disable Naming/PredicateName
35
+ super
36
+
37
+ name = AttachmentName.new(name)
38
+ attr_reader name.url
39
+
40
+ define_paperweight_setter_for(name)
41
+ define_paperweight_after_commit_for(name)
42
+ end
43
+
44
+ private
45
+
46
+ def define_paperweight_setter_for(name)
47
+ define_method(name.url_eq) do |value|
48
+ instance_variable_set(name.url_attr, value)
49
+ self[name.processing] = value
50
+ self.updated_at = Time.now if value
51
+ end
52
+ end
53
+
54
+ def define_paperweight_after_commit_for(name)
55
+ after_commit if: name.url do
56
+ attachment_url = public_send(name.url)
57
+ PostProcessJob.perform_later(self, name.name.to_s, attachment_url)
58
+ end
59
+ end
60
+ end
61
+
62
+ # Overrides the `url` method from `paperclip` so that `paperweight` can
63
+ # check the `image_processing` field and use that if it's still processing.
64
+ module AttachmentHook
65
+ def url(*)
66
+ instance.public_send(:"#{name}_processing") || super
67
+ end
68
+ end
69
+ end
70
+ end
@@ -8,10 +8,8 @@ module Paperweight
8
8
  discard_on ActiveJob::DeserializationError
9
9
 
10
10
  def perform(model, name, url)
11
- model.update!(
12
- name => Download.new.download(url),
13
- :"#{name}_processing" => false
14
- )
11
+ tempfile = Download.new.download(url)
12
+ model.update!(name => tempfile, :"#{name}_processing" => nil)
15
13
  end
16
14
  end
17
15
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Paperweight
4
- VERSION = '0.2.0'
4
+ VERSION = '1.0.0'
5
5
  end
data/lib/paperweight.rb CHANGED
@@ -9,8 +9,9 @@ require 'active_job'
9
9
 
10
10
  require 'paperweight/configuration'
11
11
  require 'paperweight/download'
12
- require 'paperweight/hook'
12
+ require 'paperweight/hooks'
13
13
  require 'paperweight/post_process_job'
14
14
  require 'paperweight/version'
15
15
 
16
- Paperclip::ClassMethods.prepend(Paperweight::Hook)
16
+ Paperclip::ClassMethods.prepend(Paperweight::Hooks::RecordHook)
17
+ Paperclip::Attachment.prepend(Paperweight::Hooks::AttachmentHook)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paperweight
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Deisz
@@ -143,7 +143,7 @@ files:
143
143
  - lib/paperweight.rb
144
144
  - lib/paperweight/configuration.rb
145
145
  - lib/paperweight/download.rb
146
- - lib/paperweight/hook.rb
146
+ - lib/paperweight/hooks.rb
147
147
  - lib/paperweight/post_process_job.rb
148
148
  - lib/paperweight/version.rb
149
149
  - paperweight.gemspec
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Paperweight
4
- # Overrides the `has_attached_file` method from `paperclip` so that
5
- # `paperweight` can add extras when the macro is called.
6
- module Hook
7
- # Converts a parent name to its respective component child names.
8
- class AttachmentName
9
- attr_reader :name
10
-
11
- def initialize(name)
12
- @name = name
13
- end
14
-
15
- def processing
16
- :"#{name}_processing"
17
- end
18
-
19
- def url
20
- :"#{name}_url"
21
- end
22
-
23
- def url_eq
24
- :"#{name}_url="
25
- end
26
-
27
- def url_attr
28
- :"@#{name}_url"
29
- end
30
- end
31
-
32
- def has_attached_file(name, *) # rubocop:disable Naming/PredicateName
33
- super
34
-
35
- name = AttachmentName.new(name)
36
- attr_reader name.url
37
-
38
- define_paperweight_setter_for(name)
39
- define_paperweight_after_commit_for(name)
40
- end
41
-
42
- private
43
-
44
- def define_paperweight_setter_for(name)
45
- define_method(name.url_eq) do |value|
46
- instance_variable_set(name.url_attr, value)
47
- self[name.processing] = value ? true : false
48
- self.updated_at = Time.now if value
49
- end
50
- end
51
-
52
- def define_paperweight_after_commit_for(name)
53
- after_commit if: name.url do
54
- attachment_url = public_send(name.url)
55
- PostProcessJob.perform_later(self, name.name.to_s, attachment_url)
56
- end
57
- end
58
- end
59
- end