card 1.19.3 → 1.19.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (190) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/VERSION +1 -1
  4. data/card.gemspec +1 -3
  5. data/db/migrate_core_cards/20160914132636_fix_mod_files.rb +25 -0
  6. data/lib/card.rb +0 -2
  7. data/lib/card/content/diff.rb +3 -4
  8. data/lib/card/format/error.rb +1 -1
  9. data/mod/admin/set/self/admin.rb +2 -2
  10. data/mod/admin/set/self/trash.rb +9 -3
  11. data/mod/basic_types/set/type/html.rb +1 -1
  12. data/mod/bootstrap/set/all/bootstrap/layout.rb +58 -0
  13. data/mod/bootstrap/spec/set/all/bootstrap/layout_spec.rb +32 -0
  14. data/mod/carrierwave/lib/carrier_wave/cardmount.rb +0 -2
  15. data/mod/carrierwave/set/abstract/attachment/upload_cache.rb +2 -1
  16. data/mod/core/set/all/stages.rb +6 -4
  17. data/mod/history/lib/card/act.rb +8 -7
  18. data/mod/history/set/all/history.rb +10 -8
  19. data/mod/machines/set/abstract/script.rb +1 -1
  20. data/mod/machines/set/type/css.rb +1 -1
  21. data/mod/pointer/set/abstract/01_pointer.rb +1 -1
  22. data/mod/standard/file/credit_image/image-icon.png +0 -0
  23. data/mod/standard/file/credit_image/image-large.png +0 -0
  24. data/mod/standard/file/credit_image/image-medium.png +0 -0
  25. data/mod/standard/file/credit_image/image-small.png +0 -0
  26. data/mod/standard/file/favicon/image-icon.png +0 -0
  27. data/mod/standard/file/favicon/image-large.png +0 -0
  28. data/mod/standard/file/favicon/image-medium.png +0 -0
  29. data/mod/standard/file/favicon/image-small.png +0 -0
  30. data/mod/standard/file/logo/image-icon.png +0 -0
  31. data/mod/standard/file/logo/image-large.png +0 -0
  32. data/mod/standard/file/logo/image-medium.png +0 -0
  33. data/mod/standard/file/logo/image-small.png +0 -0
  34. data/mod/standard/set/self/recent.rb +2 -2
  35. data/spec/lib/card/diff_spec.rb +9 -9
  36. metadata +19 -156
  37. data/vendor/carrierwave/.gitignore +0 -19
  38. data/vendor/carrierwave/.rubocop.yml +0 -262
  39. data/vendor/carrierwave/.travis.yml +0 -58
  40. data/vendor/carrierwave/CHANGELOG.md +0 -81
  41. data/vendor/carrierwave/CONTRIBUTING.md +0 -37
  42. data/vendor/carrierwave/Gemfile +0 -5
  43. data/vendor/carrierwave/README.md +0 -995
  44. data/vendor/carrierwave/Rakefile +0 -26
  45. data/vendor/carrierwave/carrierwave.gemspec +0 -45
  46. data/vendor/carrierwave/cucumber.yml +0 -2
  47. data/vendor/carrierwave/features/caching.feature +0 -28
  48. data/vendor/carrierwave/features/download.feature +0 -20
  49. data/vendor/carrierwave/features/file_storage.feature +0 -37
  50. data/vendor/carrierwave/features/file_storage_overridden_filename.feature +0 -38
  51. data/vendor/carrierwave/features/file_storage_overridden_store_dir.feature +0 -38
  52. data/vendor/carrierwave/features/file_storage_reversing_processor.feature +0 -43
  53. data/vendor/carrierwave/features/fixtures/bork.txt +0 -1
  54. data/vendor/carrierwave/features/fixtures/monkey.txt +0 -1
  55. data/vendor/carrierwave/features/fixtures/upcased_bork.txt +0 -1
  56. data/vendor/carrierwave/features/mount_activerecord.feature +0 -46
  57. data/vendor/carrierwave/features/step_definitions/activerecord_steps.rb +0 -20
  58. data/vendor/carrierwave/features/step_definitions/caching_steps.rb +0 -12
  59. data/vendor/carrierwave/features/step_definitions/datamapper_steps.rb +0 -27
  60. data/vendor/carrierwave/features/step_definitions/download_steps.rb +0 -8
  61. data/vendor/carrierwave/features/step_definitions/file_steps.rb +0 -51
  62. data/vendor/carrierwave/features/step_definitions/general_steps.rb +0 -102
  63. data/vendor/carrierwave/features/step_definitions/mount_steps.rb +0 -17
  64. data/vendor/carrierwave/features/step_definitions/store_steps.rb +0 -16
  65. data/vendor/carrierwave/features/support/activerecord.rb +0 -18
  66. data/vendor/carrierwave/features/support/env.rb +0 -19
  67. data/vendor/carrierwave/features/versions_basics.feature +0 -50
  68. data/vendor/carrierwave/features/versions_caching_from_versions.feature +0 -32
  69. data/vendor/carrierwave/features/versions_nested_versions.feature +0 -70
  70. data/vendor/carrierwave/features/versions_overridden_filename.feature +0 -51
  71. data/vendor/carrierwave/features/versions_overriden_store_dir.feature +0 -41
  72. data/vendor/carrierwave/gemfiles/rails-4-0-stable.gemfile +0 -5
  73. data/vendor/carrierwave/gemfiles/rails-4-1-stable.gemfile +0 -5
  74. data/vendor/carrierwave/gemfiles/rails-4-2-stable.gemfile +0 -5
  75. data/vendor/carrierwave/gemfiles/rails-master.gemfile +0 -11
  76. data/vendor/carrierwave/lib/carrierwave.rb +0 -93
  77. data/vendor/carrierwave/lib/carrierwave/compatibility/paperclip.rb +0 -103
  78. data/vendor/carrierwave/lib/carrierwave/error.rb +0 -8
  79. data/vendor/carrierwave/lib/carrierwave/locale/cs.yml +0 -14
  80. data/vendor/carrierwave/lib/carrierwave/locale/de.yml +0 -14
  81. data/vendor/carrierwave/lib/carrierwave/locale/el.yml +0 -14
  82. data/vendor/carrierwave/lib/carrierwave/locale/en.yml +0 -14
  83. data/vendor/carrierwave/lib/carrierwave/locale/es.yml +0 -14
  84. data/vendor/carrierwave/lib/carrierwave/locale/fr-CA.yml +0 -14
  85. data/vendor/carrierwave/lib/carrierwave/locale/fr.yml +0 -14
  86. data/vendor/carrierwave/lib/carrierwave/locale/id.yml +0 -14
  87. data/vendor/carrierwave/lib/carrierwave/locale/ja.yml +0 -14
  88. data/vendor/carrierwave/lib/carrierwave/locale/nb.yml +0 -14
  89. data/vendor/carrierwave/lib/carrierwave/locale/nl.yml +0 -14
  90. data/vendor/carrierwave/lib/carrierwave/locale/pl.yml +0 -14
  91. data/vendor/carrierwave/lib/carrierwave/locale/pt-BR.yml +0 -14
  92. data/vendor/carrierwave/lib/carrierwave/locale/pt-PT.yml +0 -14
  93. data/vendor/carrierwave/lib/carrierwave/locale/ru.yml +0 -14
  94. data/vendor/carrierwave/lib/carrierwave/locale/sk.yml +0 -14
  95. data/vendor/carrierwave/lib/carrierwave/locale/tr.yml +0 -14
  96. data/vendor/carrierwave/lib/carrierwave/locale/zh-CN.yml +0 -14
  97. data/vendor/carrierwave/lib/carrierwave/locale/zh-TW.yml +0 -14
  98. data/vendor/carrierwave/lib/carrierwave/mount.rb +0 -444
  99. data/vendor/carrierwave/lib/carrierwave/mounter.rb +0 -163
  100. data/vendor/carrierwave/lib/carrierwave/orm/activerecord.rb +0 -103
  101. data/vendor/carrierwave/lib/carrierwave/processing.rb +0 -2
  102. data/vendor/carrierwave/lib/carrierwave/processing/mini_magick.rb +0 -328
  103. data/vendor/carrierwave/lib/carrierwave/processing/rmagick.rb +0 -379
  104. data/vendor/carrierwave/lib/carrierwave/sanitized_file.rb +0 -348
  105. data/vendor/carrierwave/lib/carrierwave/storage.rb +0 -2
  106. data/vendor/carrierwave/lib/carrierwave/storage/abstract.rb +0 -43
  107. data/vendor/carrierwave/lib/carrierwave/storage/file.rb +0 -118
  108. data/vendor/carrierwave/lib/carrierwave/storage/fog.rb +0 -462
  109. data/vendor/carrierwave/lib/carrierwave/test/matchers.rb +0 -394
  110. data/vendor/carrierwave/lib/carrierwave/uploader.rb +0 -67
  111. data/vendor/carrierwave/lib/carrierwave/uploader/cache.rb +0 -207
  112. data/vendor/carrierwave/lib/carrierwave/uploader/callbacks.rb +0 -33
  113. data/vendor/carrierwave/lib/carrierwave/uploader/configuration.rb +0 -203
  114. data/vendor/carrierwave/lib/carrierwave/uploader/content_type_blacklist.rb +0 -48
  115. data/vendor/carrierwave/lib/carrierwave/uploader/content_type_whitelist.rb +0 -48
  116. data/vendor/carrierwave/lib/carrierwave/uploader/default_url.rb +0 -17
  117. data/vendor/carrierwave/lib/carrierwave/uploader/download.rb +0 -92
  118. data/vendor/carrierwave/lib/carrierwave/uploader/extension_blacklist.rb +0 -51
  119. data/vendor/carrierwave/lib/carrierwave/uploader/extension_whitelist.rb +0 -51
  120. data/vendor/carrierwave/lib/carrierwave/uploader/file_size.rb +0 -41
  121. data/vendor/carrierwave/lib/carrierwave/uploader/magic_mime_blacklist.rb +0 -94
  122. data/vendor/carrierwave/lib/carrierwave/uploader/magic_mime_whitelist.rb +0 -94
  123. data/vendor/carrierwave/lib/carrierwave/uploader/mountable.rb +0 -38
  124. data/vendor/carrierwave/lib/carrierwave/uploader/processing.rb +0 -88
  125. data/vendor/carrierwave/lib/carrierwave/uploader/proxy.rb +0 -86
  126. data/vendor/carrierwave/lib/carrierwave/uploader/remove.rb +0 -21
  127. data/vendor/carrierwave/lib/carrierwave/uploader/serialization.rb +0 -28
  128. data/vendor/carrierwave/lib/carrierwave/uploader/store.rb +0 -93
  129. data/vendor/carrierwave/lib/carrierwave/uploader/url.rb +0 -41
  130. data/vendor/carrierwave/lib/carrierwave/uploader/versions.rb +0 -295
  131. data/vendor/carrierwave/lib/carrierwave/utilities.rb +0 -6
  132. data/vendor/carrierwave/lib/carrierwave/utilities/uri.rb +0 -21
  133. data/vendor/carrierwave/lib/carrierwave/validations/active_model.rb +0 -78
  134. data/vendor/carrierwave/lib/carrierwave/version.rb +0 -3
  135. data/vendor/carrierwave/lib/generators/templates/uploader.rb +0 -49
  136. data/vendor/carrierwave/lib/generators/uploader_generator.rb +0 -7
  137. data/vendor/carrierwave/script/console +0 -10
  138. data/vendor/carrierwave/script/destroy +0 -14
  139. data/vendor/carrierwave/script/generate +0 -14
  140. data/vendor/carrierwave/spec/compatibility/paperclip_spec.rb +0 -138
  141. data/vendor/carrierwave/spec/fixtures/Uppercase.jpg +0 -1
  142. data/vendor/carrierwave/spec/fixtures/bork.ttxt +0 -1
  143. data/vendor/carrierwave/spec/fixtures/bork.txt +0 -1
  144. data/vendor/carrierwave/spec/fixtures/bork.txtt +0 -1
  145. data/vendor/carrierwave/spec/fixtures/case.JPG +0 -1
  146. data/vendor/carrierwave/spec/fixtures/landscape.jpg +0 -0
  147. data/vendor/carrierwave/spec/fixtures/multi_page.pdf +0 -0
  148. data/vendor/carrierwave/spec/fixtures/new.jpeg +0 -1
  149. data/vendor/carrierwave/spec/fixtures/new.txt +0 -1
  150. data/vendor/carrierwave/spec/fixtures/old.jpeg +0 -1
  151. data/vendor/carrierwave/spec/fixtures/old.txt +0 -1
  152. data/vendor/carrierwave/spec/fixtures/portrait.jpg +0 -0
  153. data/vendor/carrierwave/spec/fixtures/ruby.gif +0 -0
  154. data/vendor/carrierwave/spec/fixtures/sponsored.doc +0 -1
  155. data/vendor/carrierwave/spec/fixtures/test+.jpg +0 -1
  156. data/vendor/carrierwave/spec/fixtures/test.jpeg +0 -1
  157. data/vendor/carrierwave/spec/fixtures/test.jpg +0 -1
  158. data/vendor/carrierwave/spec/generators/uploader_generator_spec.rb +0 -19
  159. data/vendor/carrierwave/spec/mount_multiple_spec.rb +0 -913
  160. data/vendor/carrierwave/spec/mount_single_spec.rb +0 -793
  161. data/vendor/carrierwave/spec/orm/activerecord_spec.rb +0 -1556
  162. data/vendor/carrierwave/spec/processing/mini_magick_spec.rb +0 -210
  163. data/vendor/carrierwave/spec/processing/rmagick_spec.rb +0 -250
  164. data/vendor/carrierwave/spec/sanitized_file_spec.rb +0 -805
  165. data/vendor/carrierwave/spec/spec_helper.rb +0 -105
  166. data/vendor/carrierwave/spec/storage/file_spec.rb +0 -82
  167. data/vendor/carrierwave/spec/storage/fog_credentials.rb +0 -46
  168. data/vendor/carrierwave/spec/storage/fog_helper.rb +0 -428
  169. data/vendor/carrierwave/spec/storage/fog_spec.rb +0 -48
  170. data/vendor/carrierwave/spec/support/activerecord.rb +0 -31
  171. data/vendor/carrierwave/spec/support/file_utils_helper.rb +0 -15
  172. data/vendor/carrierwave/spec/uploader/cache_spec.rb +0 -324
  173. data/vendor/carrierwave/spec/uploader/callback_spec.rb +0 -30
  174. data/vendor/carrierwave/spec/uploader/configuration_spec.rb +0 -133
  175. data/vendor/carrierwave/spec/uploader/content_type_blacklist_spec.rb +0 -61
  176. data/vendor/carrierwave/spec/uploader/content_type_whitelist_spec.rb +0 -63
  177. data/vendor/carrierwave/spec/uploader/default_url_spec.rb +0 -77
  178. data/vendor/carrierwave/spec/uploader/download_spec.rb +0 -204
  179. data/vendor/carrierwave/spec/uploader/extension_blacklist_spec.rb +0 -112
  180. data/vendor/carrierwave/spec/uploader/extension_whitelist_spec.rb +0 -102
  181. data/vendor/carrierwave/spec/uploader/file_size_spec.rb +0 -52
  182. data/vendor/carrierwave/spec/uploader/mountable_spec.rb +0 -26
  183. data/vendor/carrierwave/spec/uploader/overrides_spec.rb +0 -71
  184. data/vendor/carrierwave/spec/uploader/paths_spec.rb +0 -18
  185. data/vendor/carrierwave/spec/uploader/processing_spec.rb +0 -159
  186. data/vendor/carrierwave/spec/uploader/proxy_spec.rb +0 -79
  187. data/vendor/carrierwave/spec/uploader/remove_spec.rb +0 -71
  188. data/vendor/carrierwave/spec/uploader/store_spec.rb +0 -400
  189. data/vendor/carrierwave/spec/uploader/url_spec.rb +0 -273
  190. data/vendor/carrierwave/spec/uploader/versions_spec.rb +0 -633
@@ -1,163 +0,0 @@
1
- module CarrierWave
2
-
3
- # this is an internal class, used by CarrierWave::Mount so that
4
- # we don't pollute the model with a lot of methods.
5
- class Mounter #:nodoc:
6
- attr_reader :column, :record, :remote_urls, :integrity_error, :processing_error, :download_error
7
- attr_accessor :remove
8
-
9
- def initialize(record, column, options={})
10
- @record = record
11
- @column = column
12
- @options = record.class.uploader_options[column]
13
- end
14
-
15
- def uploader_class
16
- record.class.uploaders[column]
17
- end
18
-
19
- def blank_uploader
20
- uploader_class.new(record, column)
21
- end
22
-
23
- def identifiers
24
- uploaders.map(&:identifier)
25
- end
26
-
27
- def read_identifiers
28
- [record.read_uploader(serialization_column)].flatten.reject(&:blank?)
29
- end
30
-
31
- def uploaders
32
- @uploaders ||= read_identifiers.map do |identifier|
33
- uploader = blank_uploader
34
- uploader.retrieve_from_store!(identifier) if identifier.present?
35
- uploader
36
- end
37
- end
38
-
39
- def cache(new_files)
40
- return if not new_files or new_files == ""
41
- @uploaders = new_files.map do |new_file|
42
- uploader = blank_uploader
43
- uploader.cache!(new_file)
44
- uploader
45
- end
46
-
47
- @integrity_error = nil
48
- @processing_error = nil
49
- rescue CarrierWave::IntegrityError => e
50
- @integrity_error = e
51
- raise e unless option(:ignore_integrity_errors)
52
- rescue CarrierWave::ProcessingError => e
53
- @processing_error = e
54
- raise e unless option(:ignore_processing_errors)
55
- end
56
-
57
- def cache_names
58
- uploaders.map(&:cache_name).compact
59
- end
60
-
61
- def cache_names=(cache_names)
62
- return if not cache_names or cache_names == "" or uploaders.any?(&:cached?)
63
- @uploaders = cache_names.map do |cache_name|
64
- uploader = blank_uploader
65
- uploader.retrieve_from_cache!(cache_name)
66
- uploader
67
- end
68
- rescue CarrierWave::InvalidParameter
69
- end
70
-
71
- def remote_urls=(urls)
72
- return if not urls or urls == "" or urls.all?(&:blank?)
73
-
74
- @remote_urls = urls
75
- @download_error = nil
76
- @integrity_error = nil
77
-
78
- @uploaders = urls.map do |url|
79
- uploader = blank_uploader
80
- uploader.download!(url)
81
- uploader
82
- end
83
-
84
- rescue CarrierWave::DownloadError => e
85
- @download_error = e
86
- raise e unless option(:ignore_download_errors)
87
- rescue CarrierWave::ProcessingError => e
88
- @processing_error = e
89
- raise e unless option(:ignore_processing_errors)
90
- rescue CarrierWave::IntegrityError => e
91
- @integrity_error = e
92
- raise e unless option(:ignore_integrity_errors)
93
- end
94
-
95
- def store!
96
- if remove?
97
- remove!
98
- else
99
- uploaders.reject(&:blank?).each(&:store!)
100
- end
101
- end
102
-
103
- def urls(*args)
104
- uploaders.map { |u| u.url(*args) }
105
- end
106
-
107
- def blank?
108
- uploaders.none?(&:present?)
109
- end
110
-
111
- def remove?
112
- remove.present? && remove !~ /\A0|false$\z/
113
- end
114
-
115
- def remove!
116
- uploaders.reject(&:blank?).each(&:remove!)
117
- @uploaders = []
118
- end
119
-
120
- def serialization_column
121
- option(:mount_on) || column
122
- end
123
-
124
- def remove_previous(before=nil, after=nil)
125
- return unless before
126
-
127
- # both 'before' and 'after' can be string when 'mount_on' option is set
128
- before = before.reject(&:blank?).map do |value|
129
- if value.is_a?(String)
130
- uploader = blank_uploader
131
- uploader.retrieve_from_store!(value)
132
- uploader
133
- else
134
- value
135
- end
136
- end
137
- after_paths = after.reject(&:blank?).map do |value|
138
- if value.is_a?(String)
139
- uploader = blank_uploader
140
- uploader.retrieve_from_store!(value)
141
- uploader
142
- else
143
- value
144
- end.path
145
- end
146
- before.each do |uploader|
147
- if uploader.remove_previously_stored_files_after_update and not after_paths.include?(uploader.path)
148
- uploader.remove!
149
- end
150
- end
151
- end
152
-
153
- attr_accessor :uploader_options
154
-
155
- private
156
-
157
- def option(name)
158
- self.uploader_options ||= {}
159
- self.uploader_options[name] ||= record.class.uploader_option(column, name)
160
- end
161
-
162
- end # Mounter
163
- end # CarrierWave
@@ -1,103 +0,0 @@
1
- require 'active_record'
2
- require 'carrierwave/validations/active_model'
3
-
4
- module CarrierWave
5
- module ActiveRecord
6
-
7
- include CarrierWave::Mount
8
-
9
- ##
10
- # See +CarrierWave::Mount#mount_uploader+ for documentation
11
- #
12
- def mount_uploader(column, uploader=nil, options={}, &block)
13
- super
14
-
15
- class_eval <<-RUBY, __FILE__, __LINE__+1
16
- def remote_#{column}_url=(url)
17
- column = _mounter(:#{column}).serialization_column
18
- send(:"\#{column}_will_change!")
19
- super
20
- end
21
- RUBY
22
- end
23
-
24
- ##
25
- # See +CarrierWave::Mount#mount_uploaders+ for documentation
26
- #
27
- def mount_uploaders(column, uploader=nil, options={}, &block)
28
- super
29
-
30
- class_eval <<-RUBY, __FILE__, __LINE__+1
31
- def remote_#{column}_urls=(url)
32
- column = _mounter(:#{column}).serialization_column
33
- send(:"\#{column}_will_change!")
34
- super
35
- end
36
- RUBY
37
- end
38
-
39
- private
40
-
41
- def mount_base(column, uploader=nil, options={}, &block)
42
- super
43
-
44
- alias_method :read_uploader, :read_attribute
45
- alias_method :write_uploader, :write_attribute
46
- public :read_uploader
47
- public :write_uploader
48
-
49
- include CarrierWave::Validations::ActiveModel
50
-
51
- validates_integrity_of column if uploader_option(column.to_sym, :validate_integrity)
52
- validates_processing_of column if uploader_option(column.to_sym, :validate_processing)
53
- validates_download_of column if uploader_option(column.to_sym, :validate_download)
54
-
55
- after_save :"store_#{column}!"
56
- before_save :"write_#{column}_identifier"
57
- after_commit :"remove_#{column}!", :on => :destroy
58
- after_commit :"mark_remove_#{column}_false", :on => :update
59
-
60
- after_save :"store_previous_changes_for_#{column}"
61
- after_commit :"remove_previously_stored_#{column}", :on => :update
62
-
63
- class_eval <<-RUBY, __FILE__, __LINE__+1
64
- def #{column}=(new_file)
65
- column = _mounter(:#{column}).serialization_column
66
- if !(new_file.blank? && send(:#{column}).blank?)
67
- send(:"\#{column}_will_change!")
68
- end
69
-
70
- super
71
- end
72
-
73
- def remove_#{column}=(value)
74
- column = _mounter(:#{column}).serialization_column
75
- send(:"\#{column}_will_change!")
76
- super
77
- end
78
-
79
- def remove_#{column}!
80
- self.remove_#{column} = true
81
- write_#{column}_identifier
82
- self.remove_#{column} = false
83
- super
84
- end
85
-
86
- # Reset cached mounter on record reload
87
- def reload(*)
88
- @_mounters = nil
89
- super
90
- end
91
-
92
- # Reset cached mounter on record dup
93
- def initialize_dup(other)
94
- @_mounters = nil
95
- super
96
- end
97
- RUBY
98
- end
99
-
100
- end # ActiveRecord
101
- end # CarrierWave
102
-
103
- ActiveRecord::Base.extend CarrierWave::ActiveRecord
@@ -1,2 +0,0 @@
1
- require "carrierwave/processing/rmagick"
2
- require "carrierwave/processing/mini_magick"
@@ -1,328 +0,0 @@
1
- module CarrierWave
2
-
3
- ##
4
- # This module simplifies manipulation with MiniMagick by providing a set
5
- # of convenient helper methods. If you want to use them, you'll need to
6
- # require this file:
7
- #
8
- # require 'carrierwave/processing/mini_magick'
9
- #
10
- # And then include it in your uploader:
11
- #
12
- # class MyUploader < CarrierWave::Uploader::Base
13
- # include CarrierWave::MiniMagick
14
- # end
15
- #
16
- # You can now use the provided helpers:
17
- #
18
- # class MyUploader < CarrierWave::Uploader::Base
19
- # include CarrierWave::MiniMagick
20
- #
21
- # process :resize_to_fit => [200, 200]
22
- # end
23
- #
24
- # Or create your own helpers with the powerful manipulate! method. Check
25
- # out the ImageMagick docs at http://www.imagemagick.org/script/command-line-options.php for more
26
- # info
27
- #
28
- # class MyUploader < CarrierWave::Uploader::Base
29
- # include CarrierWave::MiniMagick
30
- #
31
- # process :radial_blur => 10
32
- #
33
- # def radial_blur(amount)
34
- # manipulate! do |img|
35
- # img.radial_blur(amount)
36
- # img = yield(img) if block_given?
37
- # img
38
- # end
39
- # end
40
- # end
41
- #
42
- # === Note
43
- #
44
- # MiniMagick is a mini replacement for RMagick that uses the command line
45
- # tool "mogrify" for image manipulation.
46
- #
47
- # You can find more information here:
48
- #
49
- # http://mini_magick.rubyforge.org/
50
- # and
51
- # https://github.com/minimagick/minimagick/
52
- #
53
- #
54
- module MiniMagick
55
- extend ActiveSupport::Concern
56
-
57
- included do
58
- begin
59
- require "mini_magick"
60
- rescue LoadError => e
61
- e.message << " (You may need to install the mini_magick gem)"
62
- raise e
63
- end
64
- end
65
-
66
- module ClassMethods
67
- def convert(format)
68
- process :convert => format
69
- end
70
-
71
- def resize_to_limit(width, height)
72
- process :resize_to_limit => [width, height]
73
- end
74
-
75
- def resize_to_fit(width, height)
76
- process :resize_to_fit => [width, height]
77
- end
78
-
79
- def resize_to_fill(width, height, gravity='Center')
80
- process :resize_to_fill => [width, height, gravity]
81
- end
82
-
83
- def resize_and_pad(width, height, background=:transparent, gravity='Center')
84
- process :resize_and_pad => [width, height, background, gravity]
85
- end
86
- end
87
-
88
- ##
89
- # Changes the image encoding format to the given format
90
- #
91
- # See http://www.imagemagick.org/script/command-line-options.php#format
92
- #
93
- # === Parameters
94
- #
95
- # [format (#to_s)] an abreviation of the format
96
- #
97
- # === Yields
98
- #
99
- # [MiniMagick::Image] additional manipulations to perform
100
- #
101
- # === Examples
102
- #
103
- # image.convert(:png)
104
- #
105
- def convert(format, page=nil)
106
- @format = format
107
- @page = page
108
- manipulate! do |img|
109
- img = yield(img) if block_given?
110
- img
111
- end
112
- end
113
-
114
- ##
115
- # Resize the image to fit within the specified dimensions while retaining
116
- # the original aspect ratio. Will only resize the image if it is larger than the
117
- # specified dimensions. The resulting image may be shorter or narrower than specified
118
- # in the smaller dimension but will not be larger than the specified values.
119
- #
120
- # === Parameters
121
- #
122
- # [width (Integer)] the width to scale the image to
123
- # [height (Integer)] the height to scale the image to
124
- #
125
- # === Yields
126
- #
127
- # [MiniMagick::Image] additional manipulations to perform
128
- #
129
- def resize_to_limit(width, height, combine_options: {})
130
- manipulate! do |img|
131
- img.combine_options do |cmd|
132
- cmd.resize "#{width}x#{height}>"
133
- append_combine_options cmd, combine_options
134
- end
135
- img = yield(img) if block_given?
136
- img
137
- end
138
- end
139
-
140
- ##
141
- # Resize the image to fit within the specified dimensions while retaining
142
- # the original aspect ratio. The image may be shorter or narrower than
143
- # specified in the smaller dimension but will not be larger than the specified values.
144
- #
145
- # === Parameters
146
- #
147
- # [width (Integer)] the width to scale the image to
148
- # [height (Integer)] the height to scale the image to
149
- #
150
- # === Yields
151
- #
152
- # [MiniMagick::Image] additional manipulations to perform
153
- #
154
- def resize_to_fit(width, height, combine_options: {})
155
- manipulate! do |img|
156
- img.combine_options do |cmd|
157
- cmd.resize "#{width}x#{height}"
158
- append_combine_options cmd, combine_options
159
- end
160
- img = yield(img) if block_given?
161
- img
162
- end
163
- end
164
-
165
- ##
166
- # Resize the image to fit within the specified dimensions while retaining
167
- # the aspect ratio of the original image. If necessary, crop the image in the
168
- # larger dimension.
169
- #
170
- # === Parameters
171
- #
172
- # [width (Integer)] the width to scale the image to
173
- # [height (Integer)] the height to scale the image to
174
- # [gravity (String)] the current gravity suggestion (default: 'Center'; options: 'NorthWest', 'North', 'NorthEast', 'West', 'Center', 'East', 'SouthWest', 'South', 'SouthEast')
175
- #
176
- # === Yields
177
- #
178
- # [MiniMagick::Image] additional manipulations to perform
179
- #
180
- def resize_to_fill(width, height, gravity = 'Center', combine_options: {})
181
- manipulate! do |img|
182
- cols, rows = img[:dimensions]
183
- img.combine_options do |cmd|
184
- if width != cols || height != rows
185
- scale_x = width/cols.to_f
186
- scale_y = height/rows.to_f
187
- if scale_x >= scale_y
188
- cols = (scale_x * (cols + 0.5)).round
189
- rows = (scale_x * (rows + 0.5)).round
190
- cmd.resize "#{cols}"
191
- else
192
- cols = (scale_y * (cols + 0.5)).round
193
- rows = (scale_y * (rows + 0.5)).round
194
- cmd.resize "x#{rows}"
195
- end
196
- end
197
- cmd.gravity gravity
198
- cmd.background "rgba(255,255,255,0.0)"
199
- cmd.extent "#{width}x#{height}" if cols != width || rows != height
200
- append_combine_options cmd, combine_options
201
- end
202
- img = yield(img) if block_given?
203
- img
204
- end
205
- end
206
-
207
- ##
208
- # Resize the image to fit within the specified dimensions while retaining
209
- # the original aspect ratio. If necessary, will pad the remaining area
210
- # with the given color, which defaults to transparent (for gif and png,
211
- # white for jpeg).
212
- #
213
- # See http://www.imagemagick.org/script/command-line-options.php#gravity
214
- # for gravity options.
215
- #
216
- # === Parameters
217
- #
218
- # [width (Integer)] the width to scale the image to
219
- # [height (Integer)] the height to scale the image to
220
- # [background (String, :transparent)] the color of the background as a hexcode, like "#ff45de"
221
- # [gravity (String)] how to position the image
222
- #
223
- # === Yields
224
- #
225
- # [MiniMagick::Image] additional manipulations to perform
226
- #
227
- def resize_and_pad(width, height, background=:transparent, gravity='Center', combine_options: {})
228
- manipulate! do |img|
229
- img.combine_options do |cmd|
230
- cmd.thumbnail "#{width}x#{height}>"
231
- if background == :transparent
232
- cmd.background "rgba(255, 255, 255, 0.0)"
233
- else
234
- cmd.background background
235
- end
236
- cmd.gravity gravity
237
- cmd.extent "#{width}x#{height}"
238
- append_combine_options cmd, combine_options
239
- end
240
- img = yield(img) if block_given?
241
- img
242
- end
243
- end
244
-
245
- ##
246
- # Returns the width of the image in pixels.
247
- #
248
- # === Returns
249
- #
250
- # [Integer] the image's width in pixels
251
- #
252
- def width
253
- mini_magick_image[:width]
254
- end
255
-
256
- ##
257
- # Returns the height of the image in pixels.
258
- #
259
- # === Returns
260
- #
261
- # [Integer] the image's height in pixels
262
- #
263
- def height
264
- mini_magick_image[:height]
265
- end
266
-
267
- ##
268
- # Manipulate the image with MiniMagick. This method will load up an image
269
- # and then pass each of its frames to the supplied block. It will then
270
- # save the image to disk.
271
- #
272
- # === Gotcha
273
- #
274
- # This method assumes that the object responds to +current_path+.
275
- # Any class that this module is mixed into must have a +current_path+ method.
276
- # CarrierWave::Uploader does, so you won't need to worry about this in
277
- # most cases.
278
- #
279
- # === Yields
280
- #
281
- # [MiniMagick::Image] manipulations to perform
282
- #
283
- # === Raises
284
- #
285
- # [CarrierWave::ProcessingError] if manipulation failed.
286
- #
287
- def manipulate!
288
- cache_stored_file! if !cached?
289
- image = ::MiniMagick::Image.open(current_path)
290
-
291
- begin
292
- image.format(@format.to_s.downcase, @page) if @format
293
- image = yield(image)
294
- image.write(current_path)
295
-
296
- if @format
297
- move_to = current_path.chomp(File.extname(current_path)) + ".#{@format}"
298
- file.move_to(move_to, permissions, directory_permissions)
299
- end
300
-
301
- image.run_command("identify", current_path)
302
- ensure
303
- image.destroy!
304
- end
305
- rescue ::MiniMagick::Error, ::MiniMagick::Invalid => e
306
- default = I18n.translate(:"errors.messages.mini_magick_processing_error", :e => e, :locale => :en)
307
- message = I18n.translate(:"errors.messages.mini_magick_processing_error", :e => e, :default => default)
308
- raise CarrierWave::ProcessingError, message
309
- end
310
-
311
- private
312
-
313
- def append_combine_options(cmd, combine_options)
314
- combine_options.each do |method, options|
315
- cmd.send(method, options)
316
- end
317
- end
318
-
319
- def mini_magick_image
320
- if url
321
- ::MiniMagick::Image.open(url)
322
- else
323
- ::MiniMagick::Image.open(current_path)
324
- end
325
- end
326
-
327
- end # MiniMagick
328
- end # CarrierWave