kt-paperclip 6.2.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.
Files changed (191) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +17 -0
  3. data/.github/issue_template.md +3 -0
  4. data/.gitignore +19 -0
  5. data/.hound.yml +1050 -0
  6. data/.rubocop.yml +1 -0
  7. data/.travis.yml +47 -0
  8. data/Appraisals +24 -0
  9. data/CONTRIBUTING.md +86 -0
  10. data/Gemfile +18 -0
  11. data/LICENSE +24 -0
  12. data/NEWS +515 -0
  13. data/README.md +1053 -0
  14. data/RELEASING.md +17 -0
  15. data/Rakefile +52 -0
  16. data/UPGRADING +17 -0
  17. data/features/basic_integration.feature +85 -0
  18. data/features/migration.feature +29 -0
  19. data/features/rake_tasks.feature +62 -0
  20. data/features/step_definitions/attachment_steps.rb +110 -0
  21. data/features/step_definitions/html_steps.rb +15 -0
  22. data/features/step_definitions/rails_steps.rb +257 -0
  23. data/features/step_definitions/s3_steps.rb +14 -0
  24. data/features/step_definitions/web_steps.rb +106 -0
  25. data/features/support/env.rb +12 -0
  26. data/features/support/fakeweb.rb +11 -0
  27. data/features/support/file_helpers.rb +34 -0
  28. data/features/support/fixtures/boot_config.txt +15 -0
  29. data/features/support/fixtures/gemfile.txt +5 -0
  30. data/features/support/fixtures/preinitializer.txt +20 -0
  31. data/features/support/paths.rb +28 -0
  32. data/features/support/rails.rb +39 -0
  33. data/features/support/selectors.rb +19 -0
  34. data/gemfiles/4.2.gemfile +20 -0
  35. data/gemfiles/5.0.gemfile +20 -0
  36. data/gemfiles/5.1.gemfile +20 -0
  37. data/gemfiles/5.2.gemfile +20 -0
  38. data/gemfiles/6.0.gemfile +20 -0
  39. data/lib/generators/paperclip/USAGE +8 -0
  40. data/lib/generators/paperclip/paperclip_generator.rb +36 -0
  41. data/lib/generators/paperclip/templates/paperclip_migration.rb.erb +15 -0
  42. data/lib/paperclip.rb +215 -0
  43. data/lib/paperclip/attachment.rb +617 -0
  44. data/lib/paperclip/attachment_registry.rb +60 -0
  45. data/lib/paperclip/callbacks.rb +42 -0
  46. data/lib/paperclip/content_type_detector.rb +80 -0
  47. data/lib/paperclip/errors.rb +34 -0
  48. data/lib/paperclip/file_command_content_type_detector.rb +28 -0
  49. data/lib/paperclip/filename_cleaner.rb +15 -0
  50. data/lib/paperclip/geometry.rb +157 -0
  51. data/lib/paperclip/geometry_detector_factory.rb +45 -0
  52. data/lib/paperclip/geometry_parser_factory.rb +31 -0
  53. data/lib/paperclip/glue.rb +17 -0
  54. data/lib/paperclip/has_attached_file.rb +116 -0
  55. data/lib/paperclip/helpers.rb +60 -0
  56. data/lib/paperclip/interpolations.rb +201 -0
  57. data/lib/paperclip/interpolations/plural_cache.rb +18 -0
  58. data/lib/paperclip/io_adapters/abstract_adapter.rb +75 -0
  59. data/lib/paperclip/io_adapters/attachment_adapter.rb +47 -0
  60. data/lib/paperclip/io_adapters/data_uri_adapter.rb +22 -0
  61. data/lib/paperclip/io_adapters/empty_string_adapter.rb +19 -0
  62. data/lib/paperclip/io_adapters/file_adapter.rb +26 -0
  63. data/lib/paperclip/io_adapters/http_url_proxy_adapter.rb +16 -0
  64. data/lib/paperclip/io_adapters/identity_adapter.rb +17 -0
  65. data/lib/paperclip/io_adapters/nil_adapter.rb +37 -0
  66. data/lib/paperclip/io_adapters/registry.rb +36 -0
  67. data/lib/paperclip/io_adapters/stringio_adapter.rb +36 -0
  68. data/lib/paperclip/io_adapters/uploaded_file_adapter.rb +44 -0
  69. data/lib/paperclip/io_adapters/uri_adapter.rb +68 -0
  70. data/lib/paperclip/locales/en.yml +18 -0
  71. data/lib/paperclip/logger.rb +21 -0
  72. data/lib/paperclip/matchers.rb +64 -0
  73. data/lib/paperclip/matchers/have_attached_file_matcher.rb +54 -0
  74. data/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb +101 -0
  75. data/lib/paperclip/matchers/validate_attachment_presence_matcher.rb +59 -0
  76. data/lib/paperclip/matchers/validate_attachment_size_matcher.rb +97 -0
  77. data/lib/paperclip/media_type_spoof_detector.rb +90 -0
  78. data/lib/paperclip/missing_attachment_styles.rb +84 -0
  79. data/lib/paperclip/processor.rb +56 -0
  80. data/lib/paperclip/processor_helpers.rb +52 -0
  81. data/lib/paperclip/rails_environment.rb +21 -0
  82. data/lib/paperclip/railtie.rb +31 -0
  83. data/lib/paperclip/schema.rb +81 -0
  84. data/lib/paperclip/storage.rb +3 -0
  85. data/lib/paperclip/storage/filesystem.rb +99 -0
  86. data/lib/paperclip/storage/fog.rb +252 -0
  87. data/lib/paperclip/storage/s3.rb +461 -0
  88. data/lib/paperclip/style.rb +106 -0
  89. data/lib/paperclip/tempfile.rb +42 -0
  90. data/lib/paperclip/tempfile_factory.rb +22 -0
  91. data/lib/paperclip/thumbnail.rb +131 -0
  92. data/lib/paperclip/url_generator.rb +76 -0
  93. data/lib/paperclip/validators.rb +73 -0
  94. data/lib/paperclip/validators/attachment_content_type_validator.rb +88 -0
  95. data/lib/paperclip/validators/attachment_file_name_validator.rb +75 -0
  96. data/lib/paperclip/validators/attachment_file_type_ignorance_validator.rb +28 -0
  97. data/lib/paperclip/validators/attachment_presence_validator.rb +28 -0
  98. data/lib/paperclip/validators/attachment_size_validator.rb +109 -0
  99. data/lib/paperclip/validators/media_type_spoof_detection_validator.rb +29 -0
  100. data/lib/paperclip/version.rb +3 -0
  101. data/lib/tasks/paperclip.rake +140 -0
  102. data/paperclip.gemspec +50 -0
  103. data/shoulda_macros/paperclip.rb +134 -0
  104. data/spec/database.yml +4 -0
  105. data/spec/paperclip/attachment_definitions_spec.rb +13 -0
  106. data/spec/paperclip/attachment_processing_spec.rb +79 -0
  107. data/spec/paperclip/attachment_registry_spec.rb +158 -0
  108. data/spec/paperclip/attachment_spec.rb +1590 -0
  109. data/spec/paperclip/content_type_detector_spec.rb +47 -0
  110. data/spec/paperclip/file_command_content_type_detector_spec.rb +40 -0
  111. data/spec/paperclip/filename_cleaner_spec.rb +13 -0
  112. data/spec/paperclip/geometry_detector_spec.rb +38 -0
  113. data/spec/paperclip/geometry_parser_spec.rb +73 -0
  114. data/spec/paperclip/geometry_spec.rb +255 -0
  115. data/spec/paperclip/glue_spec.rb +42 -0
  116. data/spec/paperclip/has_attached_file_spec.rb +78 -0
  117. data/spec/paperclip/integration_spec.rb +702 -0
  118. data/spec/paperclip/interpolations_spec.rb +270 -0
  119. data/spec/paperclip/io_adapters/abstract_adapter_spec.rb +160 -0
  120. data/spec/paperclip/io_adapters/attachment_adapter_spec.rb +140 -0
  121. data/spec/paperclip/io_adapters/data_uri_adapter_spec.rb +88 -0
  122. data/spec/paperclip/io_adapters/empty_string_adapter_spec.rb +17 -0
  123. data/spec/paperclip/io_adapters/file_adapter_spec.rb +131 -0
  124. data/spec/paperclip/io_adapters/http_url_proxy_adapter_spec.rb +137 -0
  125. data/spec/paperclip/io_adapters/identity_adapter_spec.rb +8 -0
  126. data/spec/paperclip/io_adapters/nil_adapter_spec.rb +25 -0
  127. data/spec/paperclip/io_adapters/registry_spec.rb +35 -0
  128. data/spec/paperclip/io_adapters/stringio_adapter_spec.rb +64 -0
  129. data/spec/paperclip/io_adapters/uploaded_file_adapter_spec.rb +146 -0
  130. data/spec/paperclip/io_adapters/uri_adapter_spec.rb +221 -0
  131. data/spec/paperclip/matchers/have_attached_file_matcher_spec.rb +19 -0
  132. data/spec/paperclip/matchers/validate_attachment_content_type_matcher_spec.rb +108 -0
  133. data/spec/paperclip/matchers/validate_attachment_presence_matcher_spec.rb +69 -0
  134. data/spec/paperclip/matchers/validate_attachment_size_matcher_spec.rb +88 -0
  135. data/spec/paperclip/media_type_spoof_detector_spec.rb +120 -0
  136. data/spec/paperclip/meta_class_spec.rb +30 -0
  137. data/spec/paperclip/paperclip_missing_attachment_styles_spec.rb +88 -0
  138. data/spec/paperclip/paperclip_spec.rb +196 -0
  139. data/spec/paperclip/plural_cache_spec.rb +37 -0
  140. data/spec/paperclip/processor_helpers_spec.rb +57 -0
  141. data/spec/paperclip/processor_spec.rb +26 -0
  142. data/spec/paperclip/rails_environment_spec.rb +30 -0
  143. data/spec/paperclip/rake_spec.rb +103 -0
  144. data/spec/paperclip/schema_spec.rb +252 -0
  145. data/spec/paperclip/storage/filesystem_spec.rb +79 -0
  146. data/spec/paperclip/storage/fog_spec.rb +560 -0
  147. data/spec/paperclip/storage/s3_live_spec.rb +188 -0
  148. data/spec/paperclip/storage/s3_spec.rb +1695 -0
  149. data/spec/paperclip/style_spec.rb +251 -0
  150. data/spec/paperclip/tempfile_factory_spec.rb +33 -0
  151. data/spec/paperclip/tempfile_spec.rb +35 -0
  152. data/spec/paperclip/thumbnail_spec.rb +504 -0
  153. data/spec/paperclip/url_generator_spec.rb +221 -0
  154. data/spec/paperclip/validators/attachment_content_type_validator_spec.rb +322 -0
  155. data/spec/paperclip/validators/attachment_file_name_validator_spec.rb +159 -0
  156. data/spec/paperclip/validators/attachment_presence_validator_spec.rb +85 -0
  157. data/spec/paperclip/validators/attachment_size_validator_spec.rb +235 -0
  158. data/spec/paperclip/validators/media_type_spoof_detection_validator_spec.rb +48 -0
  159. data/spec/paperclip/validators_spec.rb +164 -0
  160. data/spec/spec_helper.rb +45 -0
  161. data/spec/support/assertions.rb +84 -0
  162. data/spec/support/fake_model.rb +24 -0
  163. data/spec/support/fake_rails.rb +12 -0
  164. data/spec/support/fixtures/12k.png +0 -0
  165. data/spec/support/fixtures/50x50.png +0 -0
  166. data/spec/support/fixtures/5k.png +0 -0
  167. data/spec/support/fixtures/animated +0 -0
  168. data/spec/support/fixtures/animated.gif +0 -0
  169. data/spec/support/fixtures/animated.unknown +0 -0
  170. data/spec/support/fixtures/bad.png +1 -0
  171. data/spec/support/fixtures/empty.html +1 -0
  172. data/spec/support/fixtures/empty.xlsx +0 -0
  173. data/spec/support/fixtures/fog.yml +8 -0
  174. data/spec/support/fixtures/rotated.jpg +0 -0
  175. data/spec/support/fixtures/s3.yml +8 -0
  176. data/spec/support/fixtures/spaced file.jpg +0 -0
  177. data/spec/support/fixtures/spaced file.png +0 -0
  178. data/spec/support/fixtures/text.txt +1 -0
  179. data/spec/support/fixtures/twopage.pdf +0 -0
  180. data/spec/support/fixtures/uppercase.PNG +0 -0
  181. data/spec/support/matchers/accept.rb +5 -0
  182. data/spec/support/matchers/exist.rb +5 -0
  183. data/spec/support/matchers/have_column.rb +23 -0
  184. data/spec/support/mock_attachment.rb +24 -0
  185. data/spec/support/mock_interpolator.rb +24 -0
  186. data/spec/support/mock_url_generator_builder.rb +26 -0
  187. data/spec/support/model_reconstruction.rb +72 -0
  188. data/spec/support/reporting.rb +11 -0
  189. data/spec/support/test_data.rb +13 -0
  190. data/spec/support/version_helper.rb +9 -0
  191. metadata +586 -0
@@ -0,0 +1,14 @@
1
+ When /^I attach the file "([^"]*)" to "([^"]*)" on S3$/ do |file_path, field|
2
+ definition = Paperclip::AttachmentRegistry.definitions_for(User)[field.downcase.to_sym]
3
+ path = "https://paperclip.s3.us-west-2.amazonaws.com#{definition[:path]}"
4
+ path.gsub!(":filename", File.basename(file_path))
5
+ path.gsub!(/:([^\/\.]+)/) do |_match|
6
+ "([^\/\.]+)"
7
+ end
8
+ FakeWeb.register_uri(:put, Regexp.new(path), body: "<xml></xml>")
9
+ step "I attach the file \"#{file_path}\" to \"#{field}\""
10
+ end
11
+
12
+ Then /^the file at "([^"]*)" should be uploaded to S3$/ do |url|
13
+ FakeWeb.registered_uri?(:put, url)
14
+ end
@@ -0,0 +1,106 @@
1
+ # TL;DR: YOU SHOULD DELETE THIS FILE
2
+ #
3
+ # This file was generated by Cucumber-Rails and is only here to get you a head start
4
+ # These step definitions are thin wrappers around the Capybara/Webrat API that lets you
5
+ # visit pages, interact with widgets and make assertions about page content.
6
+ #
7
+ # If you use these step definitions as basis for your features you will quickly end up
8
+ # with features that are:
9
+ #
10
+ # * Hard to maintain
11
+ # * Verbose to read
12
+ #
13
+ # A much better approach is to write your own higher level step definitions, following
14
+ # the advice in the following blog posts:
15
+ #
16
+ # * http://benmabey.com/2008/05/19/imperative-vs-declarative-scenarios-in-user-stories.html
17
+ # * http://dannorth.net/2011/01/31/whose-domain-is-it-anyway/
18
+ # * http://elabs.se/blog/15-you-re-cuking-it-wrong
19
+ #
20
+
21
+ require "uri"
22
+ require "cgi"
23
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths"))
24
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "selectors"))
25
+
26
+ module WithinHelpers
27
+ def with_scope(locator)
28
+ locator ? within(*selector_for(locator)) { yield } : yield
29
+ end
30
+ end
31
+ World(WithinHelpers)
32
+
33
+ # Single-line step scoper
34
+ When /^(.*) within (.*[^:])$/ do |step, parent|
35
+ with_scope(parent) { When step }
36
+ end
37
+
38
+ # Multi-line step scoper
39
+ When /^(.*) within (.*[^:]):$/ do |step, parent, table_or_string|
40
+ with_scope(parent) { When "#{step}:", table_or_string }
41
+ end
42
+
43
+ Given /^(?:|I )am on (.+)$/ do |page_name|
44
+ visit path_to(page_name)
45
+ end
46
+
47
+ When /^(?:|I )go to (.+)$/ do |page_name|
48
+ visit path_to(page_name)
49
+ end
50
+
51
+ When /^(?:|I )press "([^"]*)"$/ do |button|
52
+ click_button(button)
53
+ end
54
+
55
+ When /^(?:|I )follow "([^"]*)"$/ do |link|
56
+ click_link(link)
57
+ end
58
+
59
+ When /^(?:|I )fill in "([^"]*)" with "([^"]*)"$/ do |field, value|
60
+ fill_in(field, with: value)
61
+ end
62
+
63
+ When /^(?:|I )fill in "([^"]*)" for "([^"]*)"$/ do |value, field|
64
+ fill_in(field, with: value)
65
+ end
66
+
67
+ # Use this to fill in an entire form with data from a table. Example:
68
+ #
69
+ # When I fill in the following:
70
+ # | Account Number | 5002 |
71
+ # | Expiry date | 2009-11-01 |
72
+ # | Note | Nice guy |
73
+ # | Wants Email? | |
74
+ #
75
+ # TODO: Add support for checkbox, select og option
76
+ # based on naming conventions.
77
+ #
78
+ When /^(?:|I )fill in the following:$/ do |fields|
79
+ fields.rows_hash.each do |name, value|
80
+ When %{I fill in "#{name}" with "#{value}"}
81
+ end
82
+ end
83
+
84
+ When /^(?:|I )select "([^"]*)" from "([^"]*)"$/ do |value, field|
85
+ select(value, from: field)
86
+ end
87
+
88
+ When /^(?:|I )check "([^"]*)"$/ do |field|
89
+ check(field)
90
+ end
91
+
92
+ When /^(?:|I )uncheck "([^"]*)"$/ do |field|
93
+ uncheck(field)
94
+ end
95
+
96
+ When /^(?:|I )choose "([^"]*)"$/ do |field|
97
+ choose(field)
98
+ end
99
+
100
+ When /^(?:|I )attach the file "([^"]*)" to "([^"]*)"$/ do |path, field|
101
+ attach_file(field, File.expand_path(path))
102
+ end
103
+
104
+ Then /^(?:|I )should see "([^"]*)"$/ do |text|
105
+ expect(page).to have_content(text)
106
+ end
@@ -0,0 +1,12 @@
1
+ require "aruba/cucumber"
2
+ require "capybara/cucumber"
3
+ require "rspec/matchers"
4
+
5
+ $CUCUMBER = 1
6
+
7
+ World(RSpec::Matchers)
8
+
9
+ Before do
10
+ aruba.config.command_launcher = ENV.fetch("DEBUG", nil) ? :debug : :spawn
11
+ @aruba_timeout_seconds = 120
12
+ end
@@ -0,0 +1,11 @@
1
+ require "fake_web"
2
+
3
+ FakeWeb.allow_net_connect = false
4
+
5
+ module FakeWeb
6
+ class StubSocket
7
+ def read_timeout=(_ignored); end
8
+
9
+ def continue_timeout=(_ignored); end
10
+ end
11
+ end
@@ -0,0 +1,34 @@
1
+ module FileHelpers
2
+ def append_to(path, contents)
3
+ cd(".") do
4
+ File.open(path, "a") do |file|
5
+ file.puts
6
+ file.puts contents
7
+ end
8
+ end
9
+ end
10
+
11
+ def append_to_gemfile(contents)
12
+ append_to("Gemfile", contents)
13
+ end
14
+
15
+ def comment_out_gem_in_gemfile(gemname)
16
+ cd(".") do
17
+ gemfile = File.read("Gemfile")
18
+ gemfile.sub!(/^(\s*)(gem\s*['"]#{gemname})/, "\\1# \\2")
19
+ File.open("Gemfile", "w") { |file| file.write(gemfile) }
20
+ end
21
+ end
22
+
23
+ def read_from_web(url)
24
+ file = if url.match %r{^https?://}
25
+ Net::HTTP.get(URI.parse(url))
26
+ else
27
+ visit(url)
28
+ page.source
29
+ end
30
+ file.force_encoding("UTF-8") if file.respond_to?(:force_encoding)
31
+ end
32
+ end
33
+
34
+ World(FileHelpers)
@@ -0,0 +1,15 @@
1
+ class Rails::Boot
2
+ def run
3
+ load_initializer
4
+
5
+ Rails::Initializer.class_eval do
6
+ def load_gems
7
+ @bundler_loaded ||= Bundler.require :default, Rails.env
8
+ end
9
+ end
10
+
11
+ Rails::Initializer.run(:set_load_path)
12
+ end
13
+ end
14
+
15
+ Rails.boot!
@@ -0,0 +1,5 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "rails", "RAILS_VERSION"
4
+ gem "rdoc"
5
+ gem "sqlite3", "1.3.8"
@@ -0,0 +1,20 @@
1
+ begin
2
+ require "rubygems"
3
+ require "bundler"
4
+ rescue LoadError
5
+ raise "Could not load the bundler gem. Install it with `gem install bundler`."
6
+ end
7
+
8
+ if Gem::Version.new(Bundler::VERSION) <= Gem::Version.new("0.9.24")
9
+ raise RuntimeError, "Your bundler version is too old for Rails 2.3." +
10
+ "Run `gem install bundler` to upgrade."
11
+ end
12
+
13
+ begin
14
+ # Set up load paths for all bundled gems
15
+ ENV["BUNDLE_GEMFILE"] = File.expand_path("../../Gemfile", __FILE__)
16
+ Bundler.setup
17
+ rescue Bundler::GemNotFound
18
+ raise RuntimeError, "Bundler couldn't find some gems." +
19
+ "Did you run `bundle install`?"
20
+ end
@@ -0,0 +1,28 @@
1
+ module NavigationHelpers
2
+ # Maps a name to a path. Used by the
3
+ #
4
+ # When /^I go to (.+)$/ do |page_name|
5
+ #
6
+ # step definition in web_steps.rb
7
+ #
8
+ def path_to(page_name)
9
+ case page_name
10
+
11
+ when /the home\s?page/
12
+ "/"
13
+ when /the new user page/
14
+ "/users/new"
15
+ else
16
+ begin
17
+ page_name =~ /the (.*) page/
18
+ path_components = $1.split(/\s+/)
19
+ send(path_components.push("path").join("_").to_sym)
20
+ rescue Object
21
+ raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
22
+ "Now, go and add a mapping in #{__FILE__}"
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ World(NavigationHelpers)
@@ -0,0 +1,39 @@
1
+ PROJECT_ROOT = File.expand_path(File.join(File.dirname(__FILE__), "..", "..")).freeze
2
+ APP_NAME = "testapp"
3
+ BUNDLE_ENV_VARS = %w(RUBYOPT BUNDLE_PATH BUNDLE_BIN_PATH BUNDLE_GEMFILE).freeze
4
+ ORIGINAL_BUNDLE_VARS = Hash[ENV.select { |key, _value| BUNDLE_ENV_VARS.include?(key) }]
5
+
6
+ ENV["RAILS_ENV"] = "test"
7
+
8
+ Before do
9
+ gemfile = ENV["BUNDLE_GEMFILE"].to_s
10
+ ENV["BUNDLE_GEMFILE"] = File.join(Dir.pwd, gemfile) unless gemfile.start_with?(Dir.pwd)
11
+ @framework_version = nil
12
+ end
13
+
14
+ After do
15
+ ORIGINAL_BUNDLE_VARS.each_pair do |key, value|
16
+ ENV[key] = value
17
+ end
18
+ end
19
+
20
+ When /^I reset Bundler environment variable$/ do
21
+ BUNDLE_ENV_VARS.each do |key|
22
+ ENV[key] = nil
23
+ end
24
+ end
25
+
26
+ module RailsCommandHelpers
27
+ def framework_version?(version_string)
28
+ framework_version =~ /^#{version_string}/
29
+ end
30
+
31
+ def framework_version
32
+ @framework_version ||= `rails -v`[/^Rails (.+)$/, 1]
33
+ end
34
+
35
+ def framework_major_version
36
+ framework_version.split(".").first.to_i
37
+ end
38
+ end
39
+ World(RailsCommandHelpers)
@@ -0,0 +1,19 @@
1
+ module HtmlSelectorsHelpers
2
+ # Maps a name to a selector. Used primarily by the
3
+ #
4
+ # When /^(.+) within (.+)$/ do |step, scope|
5
+ #
6
+ # step definitions in web_steps.rb
7
+ #
8
+ def selector_for(locator)
9
+ case locator
10
+ when "the page"
11
+ "html > body"
12
+ else
13
+ raise "Can't find mapping from \"#{locator}\" to a selector.\n" +
14
+ "Now, go and add a mapping in #{__FILE__}"
15
+ end
16
+ end
17
+ end
18
+
19
+ World(HtmlSelectorsHelpers)
@@ -0,0 +1,20 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "pry"
6
+ gem "sqlite3", "~> 1.3.8", platforms: :ruby
7
+ gem "rails", "~> 4.2.0"
8
+
9
+ group :development, :test do
10
+ gem "activerecord-import"
11
+ gem "bootsnap", require: false
12
+ gem "builder"
13
+ gem "listen", "~> 3.0.8"
14
+ gem "mime-types"
15
+ gem "rspec"
16
+ gem "rubocop", require: false
17
+ gem "sprockets", "3.7.2"
18
+ end
19
+
20
+ gemspec path: "../"
@@ -0,0 +1,20 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "pry"
6
+ gem "sqlite3", "~> 1.3.8", platforms: :ruby
7
+ gem "rails", "~> 5.0.0"
8
+
9
+ group :development, :test do
10
+ gem "activerecord-import"
11
+ gem "bootsnap", require: false
12
+ gem "builder"
13
+ gem "listen", "~> 3.0.8"
14
+ gem "mime-types"
15
+ gem "rspec"
16
+ gem "rubocop", require: false
17
+ gem "sprockets", "3.7.2"
18
+ end
19
+
20
+ gemspec path: "../"
@@ -0,0 +1,20 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "pry"
6
+ gem "sqlite3", "~> 1.3.8", platforms: :ruby
7
+ gem "rails", "~> 5.1.0"
8
+
9
+ group :development, :test do
10
+ gem "activerecord-import"
11
+ gem "bootsnap", require: false
12
+ gem "builder"
13
+ gem "listen", "~> 3.0.8"
14
+ gem "mime-types"
15
+ gem "rspec"
16
+ gem "rubocop", require: false
17
+ gem "sprockets", "3.7.2"
18
+ end
19
+
20
+ gemspec path: "../"
@@ -0,0 +1,20 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "pry"
6
+ gem "sqlite3", "~> 1.3.8", platforms: :ruby
7
+ gem "rails", "~> 5.2.0"
8
+
9
+ group :development, :test do
10
+ gem "activerecord-import"
11
+ gem "bootsnap", require: false
12
+ gem "builder"
13
+ gem "listen", "~> 3.0.8"
14
+ gem "mime-types"
15
+ gem "rspec"
16
+ gem "rubocop", require: false
17
+ gem "sprockets", "3.7.2"
18
+ end
19
+
20
+ gemspec path: "../"
@@ -0,0 +1,20 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "pry"
6
+ gem "sqlite3", "~> 1.4", platforms: :ruby
7
+ gem "rails", "~> 6.0.0"
8
+
9
+ group :development, :test do
10
+ gem "activerecord-import"
11
+ gem "bootsnap", require: false
12
+ gem "builder"
13
+ gem "listen", "~> 3.0.8"
14
+ gem "mime-types"
15
+ gem "rspec"
16
+ gem "rubocop", require: false
17
+ gem "sprockets", "3.7.2"
18
+ end
19
+
20
+ gemspec path: "../"
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Explain the generator
3
+
4
+ Example:
5
+ rails generate paperclip Thing
6
+
7
+ This will create:
8
+ what/will/it/create
@@ -0,0 +1,36 @@
1
+ require "rails/generators/active_record"
2
+
3
+ class PaperclipGenerator < ActiveRecord::Generators::Base
4
+ desc "Create a migration to add paperclip-specific fields to your model. " +
5
+ "The NAME argument is the name of your model, and the following " +
6
+ "arguments are the name of the attachments"
7
+
8
+ argument :attachment_names, required: true, type: :array, desc: "The names of the attachment(s) to add.",
9
+ banner: "attachment_one attachment_two attachment_three ..."
10
+
11
+ def self.source_root
12
+ @source_root ||= File.expand_path("templates", __dir__)
13
+ end
14
+
15
+ def generate_migration
16
+ migration_template("paperclip_migration.rb.erb",
17
+ "db/migrate/#{migration_file_name}",
18
+ migration_version: migration_version)
19
+ end
20
+
21
+ def migration_name
22
+ "add_attachment_#{attachment_names.join('_')}_to_#{name.underscore.pluralize}"
23
+ end
24
+
25
+ def migration_file_name
26
+ "#{migration_name}.rb"
27
+ end
28
+
29
+ def migration_class_name
30
+ migration_name.camelize
31
+ end
32
+
33
+ def migration_version
34
+ "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]" if Rails.version.first.to_i > 4
35
+ end
36
+ end