administrate-field-nested_has_many 0.0.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +29 -0
  3. data/.gitignore +4 -0
  4. data/.ruby-version +1 -0
  5. data/Appraisals +13 -0
  6. data/CHANGELOG.md +71 -0
  7. data/Gemfile +5 -0
  8. data/README.md +4 -3
  9. data/Rakefile +24 -0
  10. data/administrate-field-nested_has_many.gemspec +16 -9
  11. data/app/assets/stylesheets/administrate-field-nested_has_many/application.css +3 -0
  12. data/app/assets/stylesheets/administrate-field-nested_has_many/base.scss +14 -0
  13. data/app/views/fields/nested_has_many/_fields.html.erb +3 -5
  14. data/app/views/fields/nested_has_many/_form.html.erb +12 -12
  15. data/app/views/fields/nested_has_many/_show.html.erb +6 -37
  16. data/app/views/fields/nested_has_many/_show_current.html.erb +44 -0
  17. data/app/views/fields/nested_has_many/_show_old.html.erb +36 -0
  18. data/bin/rails +13 -0
  19. data/config/i18n-tasks.yml +8 -0
  20. data/config/locales/administrate-field-nested_has_many.en.yml +7 -0
  21. data/config/locales/administrate-field-nested_has_many.ja.yml +7 -0
  22. data/config/locales/administrate-field-nested_has_many.pt.yml +7 -0
  23. data/config/locales/administrate-field-nested_has_many.ru.yml +7 -0
  24. data/gemfiles/administrate_0.10.gemfile +8 -0
  25. data/gemfiles/administrate_0.10.gemfile.lock +214 -0
  26. data/gemfiles/administrate_0.13.gemfile +8 -0
  27. data/gemfiles/administrate_0.13.gemfile.lock +207 -0
  28. data/gemfiles/administrate_master.gemfile +8 -0
  29. data/gemfiles/administrate_master.gemfile.lock +219 -0
  30. data/lib/administrate/field/nested_has_many.rb +42 -12
  31. data/spec/dummy/.gitignore +3 -0
  32. data/spec/dummy/Rakefile +6 -0
  33. data/spec/dummy/app/assets/config/manifest.js +7 -0
  34. data/spec/dummy/app/assets/images/.keep +0 -0
  35. data/spec/dummy/app/assets/javascripts/application.js +14 -0
  36. data/spec/dummy/app/assets/javascripts/channels/.keep +0 -0
  37. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  38. data/spec/dummy/app/controllers/admin/application_controller.rb +21 -0
  39. data/spec/dummy/app/controllers/admin/foo/students_controller.rb +21 -0
  40. data/spec/dummy/app/controllers/admin/schools_controller.rb +21 -0
  41. data/spec/dummy/app/controllers/application_controller.rb +2 -0
  42. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  43. data/spec/dummy/app/dashboards/foo/student_dashboard.rb +51 -0
  44. data/spec/dummy/app/dashboards/school_dashboard.rb +52 -0
  45. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  46. data/spec/dummy/app/mailers/application_mailer.rb +4 -0
  47. data/spec/dummy/app/models/application_record.rb +3 -0
  48. data/spec/dummy/app/models/concerns/.keep +0 -0
  49. data/spec/dummy/app/models/foo/student.rb +3 -0
  50. data/spec/dummy/app/models/school.rb +4 -0
  51. data/spec/dummy/app/views/layouts/application.html.erb +15 -0
  52. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  53. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  54. data/spec/dummy/bin/bundle +3 -0
  55. data/spec/dummy/bin/rails +4 -0
  56. data/spec/dummy/bin/rake +4 -0
  57. data/spec/dummy/bin/setup +36 -0
  58. data/spec/dummy/bin/update +31 -0
  59. data/spec/dummy/bin/yarn +11 -0
  60. data/spec/dummy/config.ru +5 -0
  61. data/spec/dummy/config/application.rb +18 -0
  62. data/spec/dummy/config/boot.rb +5 -0
  63. data/spec/dummy/config/cable.yml +10 -0
  64. data/spec/dummy/config/database.yml +12 -0
  65. data/spec/dummy/config/environment.rb +5 -0
  66. data/spec/dummy/config/environments/development.rb +53 -0
  67. data/spec/dummy/config/environments/test.rb +36 -0
  68. data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -0
  69. data/spec/dummy/config/initializers/assets.rb +14 -0
  70. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  71. data/spec/dummy/config/initializers/content_security_policy.rb +25 -0
  72. data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
  73. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  74. data/spec/dummy/config/initializers/inflections.rb +16 -0
  75. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  76. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  77. data/spec/dummy/config/locales/en.yml +33 -0
  78. data/spec/dummy/config/puma.rb +34 -0
  79. data/spec/dummy/config/routes.rb +10 -0
  80. data/spec/dummy/config/spring.rb +6 -0
  81. data/spec/dummy/config/storage.yml +34 -0
  82. data/spec/dummy/db/migrate/20180907104642_create_schools.rb +9 -0
  83. data/spec/dummy/db/migrate/20180907104703_create_students.rb +10 -0
  84. data/spec/dummy/db/schema.rb +29 -0
  85. data/spec/dummy/lib/assets/.keep +0 -0
  86. data/spec/dummy/package.json +5 -0
  87. data/spec/dummy/public/404.html +67 -0
  88. data/spec/dummy/public/422.html +67 -0
  89. data/spec/dummy/public/500.html +66 -0
  90. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  91. data/spec/dummy/public/apple-touch-icon.png +0 -0
  92. data/spec/dummy/public/favicon.ico +0 -0
  93. data/spec/dummy/storage/.keep +0 -0
  94. data/spec/factories.rb +9 -0
  95. data/spec/features/has_many_spec.rb +68 -0
  96. data/spec/features/landing_spec.rb +10 -0
  97. data/spec/i18n_spec.rb +29 -0
  98. data/spec/rails_helper.rb +67 -0
  99. data/spec/spec_helper.rb +96 -0
  100. metadata +296 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: b2336e14b58c19c34cd27e3d18f6a64da56f97e0
4
- data.tar.gz: 6638b8ec69dd50bb7bb4c0d0fb1987f314d4d790
2
+ SHA256:
3
+ metadata.gz: 9b4e4495fbe9f39dff627f5b1ddf7d82bc89d5e3a05433cc318f12ab7f02d004
4
+ data.tar.gz: f328a1f6dea3d663ee0d80454bf04a4d55530b1d2a520f1c884c1c6d78b714e5
5
5
  SHA512:
6
- metadata.gz: d100590240ed07f092bf2a7d0345fb14a4cf22be1474007e48dd23e680567dc9cd32c72e1d06cfd0cfe4cc23f6f27b5b5813af55c44898133e2412c6fbbff4fe
7
- data.tar.gz: 39f13eef2ef5f7017981e7d4bf9dbd0c0b4bd3296cb6d3146e23cc0cdc1bf04538c317c66708b63c8575c61b4a30aa0927f478e77afe921acf2344c17bfe174a
6
+ metadata.gz: 5c1a6222bc8d033f871610444425f7c90b015f5b05c9ff2c47187d1f96b0a787a75dbf4f4442335c5f24788713c33f0f67e5e1d6d2677952e5970524366578d1
7
+ data.tar.gz: cc1b62f1e2eb55ca307c7ed7e1f41d5e6f172d604a8e8a986c98d05c0fa3115bdd3f2603d2a339af8c726a6c7404689fed09c4a483e56a24d513b91e0f733f18
@@ -0,0 +1,29 @@
1
+ ---
2
+ version: 2
3
+ jobs:
4
+ build:
5
+ working_directory: ~/administrate-field-nested_has_many
6
+ docker:
7
+ - image: circleci/ruby:2.7.0-node-browsers
8
+ environment:
9
+ PGHOST: localhost
10
+ PGUSER: administrate-field-nested_has_many
11
+ PGPASSWORD: administrate-field-nested_has_many
12
+ RAILS_ENV: test
13
+ - image: postgres:11
14
+ environment:
15
+ POSTGRES_USER: administrate-field-nested_has_many
16
+ POSTGRES_DB: administrate-field-nested_has_many_test
17
+ POSTGRES_PASSWORD: administrate-field-nested_has_many
18
+ steps:
19
+ - checkout
20
+
21
+ - run: bundle install
22
+ - run: bundle exec appraisal install
23
+
24
+ - run: dockerize -wait tcp://localhost:5432 -timeout 1m
25
+
26
+ - run: bundle exec rake db:setup
27
+
28
+ - run: bundle exec rake
29
+ - run: bundle exec appraisal rake
@@ -0,0 +1,4 @@
1
+ Gemfile.lock
2
+ gemfiles/.bundle
3
+ pkg/
4
+ .rspec
@@ -0,0 +1 @@
1
+ ruby-2.7.0
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ appraise "administrate-0.10" do
4
+ gem "administrate", "0.10.0"
5
+ end
6
+
7
+ appraise "administrate-0.13" do
8
+ gem "administrate", "0.13.0"
9
+ end
10
+
11
+ appraise "administrate-master" do
12
+ gem "administrate", git: "https://github.com/thoughtbot/administrate", branch: "master"
13
+ end
@@ -0,0 +1,71 @@
1
+ # CHANGELOG
2
+
3
+ ## 1.3.0
4
+
5
+ * Cover more test cases ([#43][])
6
+ * Update form constructor to avoid undefined method ([#34][])
7
+ * Upgrade Ruby to 2.7.0 ([#27][])
8
+ * We need to use a node-browsers to run features ([#30][])
9
+ * Fix CI by explicitly setting a Postgres password ([#29][])
10
+
11
+ [#43]: https://github.com/nickcharlton/administrate-field-nested_has_many/pull/43
12
+ [#34]: https://github.com/nickcharlton/administrate-field-nested_has_many/pull/34
13
+ [#27]: https://github.com/nickcharlton/administrate-field-nested_has_many/pull/27
14
+ [#30]: https://github.com/nickcharlton/administrate-field-nested_has_many/pull/30
15
+ [#29]: https://github.com/nickcharlton/administrate-field-nested_has_many/pull/29
16
+
17
+ ## 1.2.0
18
+
19
+ * Add support for namespaced models ([#24][])
20
+ * Add missing accepts nested attributes to School.
21
+ * Explicitly import administrate and field JS/CSS.
22
+ * Add ru locale ([#26][]).
23
+ * Add pt locale ([#25][]).
24
+ * Add Circle CI.
25
+ * Upgrade Ruby to 2.6.3.
26
+ * Add a dummy test app ([#19][]).
27
+
28
+ [#24]: https://github.com/nickcharlton/administrate-field-nested_has_many/pull/24
29
+ [#26]: https://github.com/nickcharlton/administrate-field-nested_has_many/pull/26
30
+ [#25]: https://github.com/nickcharlton/administrate-field-nested_has_many/pull/25
31
+ [#19]: https://github.com/nickcharlton/administrate-field-nested_has_many/pull/19
32
+
33
+ ## 1.1.0
34
+
35
+ * Add a `.ruby-version` file.
36
+ * Adjust to upstream administrate changes.
37
+ * Add Japanese locale.
38
+
39
+ ## 1.0.0
40
+
41
+ * Add `rake` for testing and release tools ([#16][]).
42
+ * Fixes for `administrate` 0.9.0 ([#11][]).
43
+ * Ensure current data is injected into nested fields ([#10][]).
44
+ * Remove direct dependency on Rails ([#10][]).
45
+ * Add i18n support ([#10][]).
46
+ * Make styling more consistent with `has_one` form ([#10][]).
47
+ * Add missing Gemfile and missing dependency on RSpec ([#15][]).
48
+ * Update gem location and authors ([#14][]).
49
+ * Avoid circular dependencies by not including the full library in the Gemspec
50
+ ([#13][]).
51
+
52
+ [#16]: https://github.com/nickcharlton/administrate-field-nested_has_many/pull/16
53
+ [#15]: https://github.com/nickcharlton/administrate-field-nested_has_many/pull/15
54
+ [#14]: https://github.com/nickcharlton/administrate-field-nested_has_many/pull/14
55
+ [#13]: https://github.com/nickcharlton/administrate-field-nested_has_many/pull/13
56
+ [#11]: https://github.com/nickcharlton/administrate-field-nested_has_many/pull/11
57
+ [#10]: https://github.com/nickcharlton/administrate-field-nested_has_many/pull/10
58
+
59
+ ## 0.1.0
60
+
61
+ * Updates for changes in `administrate` 0.2.1.
62
+ * Import JavaScript automatically.
63
+
64
+ ## 0.0.2
65
+
66
+ * Add missing import for `cocoon`.
67
+ * Note stop gap fix for missing JavaScript imports.
68
+
69
+ ## 0.0.1
70
+
71
+ * Initial Release.
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "pg"
4
+
5
+ gemspec
data/README.md CHANGED
@@ -13,14 +13,15 @@ gem "administrate-field-nested_has_many"
13
13
  Run:
14
14
 
15
15
  ```bash
16
- $bundle install
16
+ $ bundle install
17
17
  ```
18
18
 
19
19
  Add to your `FooDashboard`:
20
+
20
21
  ```ruby
21
- ATTRIBUTE_TYPES = [
22
+ ATTRIBUTE_TYPES = {
22
23
  bars: Field::NestedHasMany.with_options(skip: :foo),
23
- ]
24
+ }
24
25
  ```
25
26
 
26
27
  The `skip` option takes a single symbol or list of symbols.
@@ -0,0 +1,24 @@
1
+ begin
2
+ require "bundler/setup"
3
+ rescue LoadError
4
+ puts "You must `gem install bundler` and `bundle install` to run rake tasks"
5
+ end
6
+
7
+ require "bundler/gem_tasks"
8
+
9
+ require File.expand_path("../spec/dummy/config/application", __FILE__)
10
+
11
+ Rails.application.load_tasks
12
+
13
+ ##
14
+ # Configure the test suite.
15
+ ##
16
+ require "rspec/core"
17
+ require "rspec/core/rake_task"
18
+
19
+ RSpec::Core::RakeTask.new
20
+
21
+ ##
22
+ # By default, just run the tests.
23
+ ##
24
+ task default: :spec
@@ -1,13 +1,12 @@
1
1
  $:.push File.expand_path("../lib", __FILE__)
2
2
 
3
- require "administrate/field/nested_has_many"
4
-
5
3
  Gem::Specification.new do |gem|
6
4
  gem.name = "administrate-field-nested_has_many"
7
- gem.version = Administrate::Field::NestedHasMany::VERSION
8
- gem.authors = ["Grayson Wright"]
9
- gem.email = ["wright.grayson@gmail.com"]
10
- gem.homepage = "https://github.com/graysonwright/administrate-field-nested_has_many"
5
+ gem.version = "1.3.0"
6
+ gem.authors = ["Nick Charlton", "Grayson Wright"]
7
+ gem.email = ["nick@nickcharlton.net", "wright.grayson@gmail.com"]
8
+ gem.homepage = "https://github.com/nickcharlton/" \
9
+ "administrate-field-nested_has_many"
11
10
  gem.summary = "Plugin for nested has_many forms in Administrate"
12
11
  gem.description = gem.summary
13
12
  gem.license = "MIT"
@@ -16,7 +15,15 @@ Gem::Specification.new do |gem|
16
15
  gem.files = `git ls-files`.split("\n")
17
16
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
17
 
19
- gem.add_dependency "administrate", "~> 0.2.0"
20
- gem.add_dependency "cocoon", "~> 1.2"
21
- gem.add_dependency "rails", "~> 4.2"
18
+ gem.add_dependency "administrate", "> 0.8", "< 1"
19
+ gem.add_dependency "cocoon", "~> 1.2", ">= 1.2.11"
20
+
21
+ gem.add_development_dependency "appraisal"
22
+ gem.add_development_dependency "capybara"
23
+ gem.add_development_dependency "selenium-webdriver"
24
+ gem.add_development_dependency "factory_bot"
25
+ gem.add_development_dependency "i18n-tasks"
26
+ gem.add_development_dependency "rake"
27
+ gem.add_development_dependency "rspec-rails"
28
+ gem.add_development_dependency "sqlite3"
22
29
  end
@@ -0,0 +1,14 @@
1
+ @import 'administrate/library/variables';
2
+ @import 'administrate/library/clearfix';
3
+
4
+ .field-unit--nested-has-many {
5
+ .nested-fields {
6
+ @include administrate-clearfix;
7
+ margin-bottom: $base-spacing;
8
+ padding-bottom: $base-spacing;
9
+ }
10
+
11
+ .remove_fields, .add_fields {
12
+ float: right;
13
+ }
14
+ }
@@ -1,11 +1,9 @@
1
- <div class="nested-fields" style="width:100%">
2
-
3
- <% field.nested_fields.each do |attribute| -%>
1
+ <div class="nested-fields">
2
+ <% field.nested_fields_for_builder(f).each do |attribute| -%>
4
3
  <div class="field-unit field-unit--<%= attribute.html_class %>">
5
4
  <%= render_field attribute, f: f %>
6
5
  </div>
7
6
  <% end -%>
8
7
 
9
- <%# TODO I18n %>
10
- <%= link_to_remove_association "Remove #{field.associated_class_name.titleize}", f %>
8
+ <%= link_to_remove_association I18n.t("administrate.fields.nested_has_many.remove", resource: field.associated_class_name.titleize), f %>
11
9
  </div>
@@ -1,23 +1,23 @@
1
- <div class="nested-fields" style="width: 40%; margin-left: 20%;">
2
-
1
+ <fieldset class="field-unit--nested">
2
+ <legend><%= f.label field.attribute %></legend>
3
3
  <%= f.fields_for field.association_name do |nested_form| %>
4
- <%= render(
5
- partial: "fields/nested_has_many/fields",
6
- locals: {
7
- f: nested_form,
8
- field: field,
9
- },
10
- ) %>
4
+ <%= render(
5
+ partial: "fields/nested_has_many/fields",
6
+ locals: {
7
+ f: nested_form,
8
+ field: field,
9
+ },
10
+ ) %>
11
11
  <% end %>
12
12
 
13
13
  <div>
14
14
  <%= link_to_add_association(
15
- # TODO I18n
16
- "Add #{field.associated_class_name.titleize}",
15
+ I18n.t("administrate.fields.nested_has_many.add", resource: field.associated_class_name.titleize),
17
16
  f,
18
17
  field.association_name,
18
+ class: 'button',
19
19
  partial: "fields/nested_has_many/fields",
20
20
  render_options: { locals: { field: field } },
21
21
  ) %>
22
22
  </div>
23
- </div>
23
+ </fieldset>
@@ -1,40 +1,9 @@
1
- <%#
2
- # HasMany Show Partial
3
-
4
- This partial renders a has_many relationship,
5
- to be displayed on a resource's show page.
6
-
7
- By default, the relationship is rendered
8
- as a table of the first few associated resources.
9
- The columns of the table are taken
10
- from the associated resource class's dashboard.
11
-
12
- ## Local variables:
13
-
14
- - `field`:
15
- An instance of [Administrate::Field::HasMany][1].
16
- Contains methods to help display a table of associated resources.
17
-
18
- [1]: http://www.rubydoc.info/gems/administrate/Administrate/Field/HasMany
1
+ <%
2
+ current = Gem::Version.new(Administrate::VERSION)
3
+ v0_10 = Gem::Version.new("0.10")
19
4
  %>
20
-
21
- <% if field.resources.any? %>
22
- <%= render(
23
- "collection",
24
- collection_presenter: field.associated_collection,
25
- resources: field.resources
26
- ) %>
27
-
28
- <% if field.more_than_limit? %>
29
- <span>
30
- <%= t(
31
- 'administrate.fields.has_many.more',
32
- count: field.limit,
33
- total_count: field.data.count,
34
- ) %>
35
- </span>
36
- <% end %>
37
-
5
+ <% if current <= v0_10 %>
6
+ <%= render "fields/nested_has_many/show_old", **local_assigns %>
38
7
  <% else %>
39
- <%= t("administrate.fields.has_many.none") %>
8
+ <%= render "fields/nested_has_many/show_current", **local_assigns %>
40
9
  <% end %>
@@ -0,0 +1,44 @@
1
+ <%#
2
+ # HasMany Show Partial
3
+
4
+ This partial renders a has_many relationship,
5
+ to be displayed on a resource's show page.
6
+
7
+ By default, the relationship is rendered
8
+ as a table of the first few associated resources.
9
+ The columns of the table are taken
10
+ from the associated resource class's dashboard.
11
+
12
+ ## Local variables:
13
+
14
+ - `field`:
15
+ An instance of [Administrate::Field::HasMany][1].
16
+ Contains methods to help display a table of associated resources.
17
+
18
+ [1]: http://www.rubydoc.info/gems/administrate/Administrate/Field/HasMany
19
+ %>
20
+
21
+ <% if field.resources.any? %>
22
+ <% order = field.order_from_params(params.fetch(field.name, {})) %>
23
+ <% page_number = params.fetch(field.name, {}).fetch(:page, nil) %>
24
+ <%= render(
25
+ "collection",
26
+ collection_presenter: field.associated_collection(order),
27
+ collection_field_name: field.name,
28
+ page: page,
29
+ resources: field.resources(page_number, order),
30
+ table_title: field.name,
31
+ ) %>
32
+
33
+ <% if field.more_than_limit? %>
34
+ <span>
35
+ <%= t(
36
+ 'administrate.fields.has_many.more',
37
+ count: field.limit,
38
+ total_count: field.data.count,
39
+ ) %>
40
+ </span>
41
+ <% end %>
42
+ <% else %>
43
+ <%= t("administrate.fields.has_many.none", default: "–") %>
44
+ <% end %>
@@ -0,0 +1,36 @@
1
+ <%#
2
+ # HasMany Show Partial
3
+ This partial renders a has_many relationship,
4
+ to be displayed on a resource's show page.
5
+ By default, the relationship is rendered
6
+ as a table of the first few associated resources.
7
+ The columns of the table are taken
8
+ from the associated resource class's dashboard.
9
+ ## Local variables:
10
+ - `field`:
11
+ An instance of [Administrate::Field::HasMany][1].
12
+ Contains methods to help display a table of associated resources.
13
+ [1]: http://www.rubydoc.info/gems/administrate/Administrate/Field/HasMany
14
+ %>
15
+
16
+ <% if field.resources.any? %>
17
+ <%= render(
18
+ "collection",
19
+ collection_presenter: field.associated_collection,
20
+ resources: field.resources,
21
+ table_title: field.name
22
+ ) %>
23
+
24
+ <% if field.more_than_limit? %>
25
+ <span>
26
+ <%= t(
27
+ 'administrate.fields.has_many.more',
28
+ count: field.limit,
29
+ total_count: field.data.count,
30
+ ) %>
31
+ </span>
32
+ <% end %>
33
+
34
+ <% else %>
35
+ <%= t("administrate.fields.has_many.none", default: "–") %>
36
+ <% end %>
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails gems
3
+ # installed from the root of your application.
4
+
5
+ ENGINE_ROOT = File.expand_path('..', __dir__)
6
+ APP_PATH = File.expand_path('../spec/dummy/config/application', __dir__)
7
+
8
+ # Set up gems listed in the Gemfile.
9
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
10
+ require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
11
+
12
+ require 'rails/all'
13
+ require 'rails/engine/commands'