administrate-field-nested_has_many 0.0.1 → 1.3.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 (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
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "pg"
6
+ gem "administrate", git: "https://github.com/thoughtbot/administrate", branch: "master"
7
+
8
+ gemspec path: "../"
@@ -0,0 +1,219 @@
1
+ GIT
2
+ remote: https://github.com/thoughtbot/administrate
3
+ revision: 32b3cfc6b5e9183fa052e40bf523000d1edf06dd
4
+ branch: master
5
+ specs:
6
+ administrate (0.11.0)
7
+ actionpack (>= 4.2, < 6.0)
8
+ actionview (>= 4.2, < 6.0)
9
+ activerecord (>= 4.2, < 6.0)
10
+ autoprefixer-rails (>= 6.0)
11
+ datetime_picker_rails (~> 0.0.7)
12
+ jquery-rails (>= 4.0)
13
+ kaminari (>= 1.0)
14
+ momentjs-rails (~> 2.8)
15
+ sass-rails (~> 5.0)
16
+ selectize-rails (~> 0.6)
17
+
18
+ PATH
19
+ remote: ..
20
+ specs:
21
+ administrate-field-nested_has_many (1.2.0)
22
+ administrate (> 0.8, < 1)
23
+ cocoon (~> 1.2, >= 1.2.11)
24
+
25
+ GEM
26
+ remote: https://rubygems.org/
27
+ specs:
28
+ actionpack (5.2.2)
29
+ actionview (= 5.2.2)
30
+ activesupport (= 5.2.2)
31
+ rack (~> 2.0)
32
+ rack-test (>= 0.6.3)
33
+ rails-dom-testing (~> 2.0)
34
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
35
+ actionview (5.2.2)
36
+ activesupport (= 5.2.2)
37
+ builder (~> 3.1)
38
+ erubi (~> 1.4)
39
+ rails-dom-testing (~> 2.0)
40
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
41
+ activemodel (5.2.2)
42
+ activesupport (= 5.2.2)
43
+ activerecord (5.2.2)
44
+ activemodel (= 5.2.2)
45
+ activesupport (= 5.2.2)
46
+ arel (>= 9.0)
47
+ activesupport (5.2.2)
48
+ concurrent-ruby (~> 1.0, >= 1.0.2)
49
+ i18n (>= 0.7, < 2)
50
+ minitest (~> 5.1)
51
+ tzinfo (~> 1.1)
52
+ addressable (2.6.0)
53
+ public_suffix (>= 2.0.2, < 4.0)
54
+ appraisal (2.2.0)
55
+ bundler
56
+ rake
57
+ thor (>= 0.14.0)
58
+ arel (9.0.0)
59
+ ast (2.4.0)
60
+ autoprefixer-rails (9.4.6)
61
+ execjs
62
+ builder (3.2.3)
63
+ capybara (3.13.2)
64
+ addressable
65
+ mini_mime (>= 0.1.3)
66
+ nokogiri (~> 1.8)
67
+ rack (>= 1.6.0)
68
+ rack-test (>= 0.6.3)
69
+ regexp_parser (~> 1.2)
70
+ xpath (~> 3.2)
71
+ childprocess (3.0.0)
72
+ cocoon (1.2.14)
73
+ concurrent-ruby (1.1.4)
74
+ crass (1.0.4)
75
+ datetime_picker_rails (0.0.7)
76
+ momentjs-rails (>= 2.8.1)
77
+ diff-lcs (1.3)
78
+ erubi (1.8.0)
79
+ execjs (2.7.0)
80
+ factory_bot (4.11.1)
81
+ activesupport (>= 3.0.0)
82
+ ffi (1.10.0)
83
+ highline (2.0.1)
84
+ i18n (1.5.3)
85
+ concurrent-ruby (~> 1.0)
86
+ i18n-tasks (0.9.28)
87
+ activesupport (>= 4.0.2)
88
+ ast (>= 2.1.0)
89
+ erubi
90
+ highline (>= 2.0.0)
91
+ i18n
92
+ parser (>= 2.2.3.0)
93
+ rails-i18n
94
+ rainbow (>= 2.2.2, < 4.0)
95
+ terminal-table (>= 1.5.1)
96
+ jquery-rails (4.3.3)
97
+ rails-dom-testing (>= 1, < 3)
98
+ railties (>= 4.2.0)
99
+ thor (>= 0.14, < 2.0)
100
+ kaminari (1.1.1)
101
+ activesupport (>= 4.1.0)
102
+ kaminari-actionview (= 1.1.1)
103
+ kaminari-activerecord (= 1.1.1)
104
+ kaminari-core (= 1.1.1)
105
+ kaminari-actionview (1.1.1)
106
+ actionview
107
+ kaminari-core (= 1.1.1)
108
+ kaminari-activerecord (1.1.1)
109
+ activerecord
110
+ kaminari-core (= 1.1.1)
111
+ kaminari-core (1.1.1)
112
+ loofah (2.2.3)
113
+ crass (~> 1.0.2)
114
+ nokogiri (>= 1.5.9)
115
+ method_source (0.9.2)
116
+ mini_mime (1.0.1)
117
+ mini_portile2 (2.4.0)
118
+ minitest (5.11.3)
119
+ momentjs-rails (2.20.1)
120
+ railties (>= 3.1)
121
+ nokogiri (1.10.1)
122
+ mini_portile2 (~> 2.4.0)
123
+ parser (2.6.0.0)
124
+ ast (~> 2.4.0)
125
+ pg (1.1.4)
126
+ public_suffix (3.0.3)
127
+ rack (2.0.6)
128
+ rack-test (1.1.0)
129
+ rack (>= 1.0, < 3)
130
+ rails-dom-testing (2.0.3)
131
+ activesupport (>= 4.2.0)
132
+ nokogiri (>= 1.6)
133
+ rails-html-sanitizer (1.0.4)
134
+ loofah (~> 2.2, >= 2.2.2)
135
+ rails-i18n (5.1.2)
136
+ i18n (>= 0.7, < 2)
137
+ railties (>= 5.0, < 6)
138
+ railties (5.2.2)
139
+ actionpack (= 5.2.2)
140
+ activesupport (= 5.2.2)
141
+ method_source
142
+ rake (>= 0.8.7)
143
+ thor (>= 0.19.0, < 2.0)
144
+ rainbow (3.0.0)
145
+ rake (12.3.2)
146
+ rb-fsevent (0.10.3)
147
+ rb-inotify (0.10.0)
148
+ ffi (~> 1.0)
149
+ regexp_parser (1.3.0)
150
+ rspec-core (3.8.0)
151
+ rspec-support (~> 3.8.0)
152
+ rspec-expectations (3.8.2)
153
+ diff-lcs (>= 1.2.0, < 2.0)
154
+ rspec-support (~> 3.8.0)
155
+ rspec-mocks (3.8.0)
156
+ diff-lcs (>= 1.2.0, < 2.0)
157
+ rspec-support (~> 3.8.0)
158
+ rspec-rails (3.8.2)
159
+ actionpack (>= 3.0)
160
+ activesupport (>= 3.0)
161
+ railties (>= 3.0)
162
+ rspec-core (~> 3.8.0)
163
+ rspec-expectations (~> 3.8.0)
164
+ rspec-mocks (~> 3.8.0)
165
+ rspec-support (~> 3.8.0)
166
+ rspec-support (3.8.0)
167
+ rubyzip (2.2.0)
168
+ sass (3.7.3)
169
+ sass-listen (~> 4.0.0)
170
+ sass-listen (4.0.0)
171
+ rb-fsevent (~> 0.9, >= 0.9.4)
172
+ rb-inotify (~> 0.9, >= 0.9.7)
173
+ sass-rails (5.0.7)
174
+ railties (>= 4.0.0, < 6)
175
+ sass (~> 3.1)
176
+ sprockets (>= 2.8, < 4.0)
177
+ sprockets-rails (>= 2.0, < 4.0)
178
+ tilt (>= 1.1, < 3)
179
+ selectize-rails (0.12.6)
180
+ selenium-webdriver (3.142.7)
181
+ childprocess (>= 0.5, < 4.0)
182
+ rubyzip (>= 1.2.2)
183
+ sprockets (3.7.2)
184
+ concurrent-ruby (~> 1.0)
185
+ rack (> 1, < 3)
186
+ sprockets-rails (3.2.1)
187
+ actionpack (>= 4.0)
188
+ activesupport (>= 4.0)
189
+ sprockets (>= 3.0.0)
190
+ sqlite3 (1.3.13)
191
+ terminal-table (1.8.0)
192
+ unicode-display_width (~> 1.1, >= 1.1.1)
193
+ thor (0.20.3)
194
+ thread_safe (0.3.6)
195
+ tilt (2.0.9)
196
+ tzinfo (1.2.5)
197
+ thread_safe (~> 0.1)
198
+ unicode-display_width (1.4.1)
199
+ xpath (3.2.0)
200
+ nokogiri (~> 1.8)
201
+
202
+ PLATFORMS
203
+ ruby
204
+
205
+ DEPENDENCIES
206
+ administrate!
207
+ administrate-field-nested_has_many!
208
+ appraisal
209
+ capybara
210
+ factory_bot
211
+ i18n-tasks
212
+ pg
213
+ rake
214
+ rspec-rails
215
+ selenium-webdriver
216
+ sqlite3
217
+
218
+ BUNDLED WITH
219
+ 1.17.3
@@ -1,16 +1,23 @@
1
1
  require "administrate/field/has_many"
2
2
  require "administrate/page/form"
3
3
  require "rails"
4
+ require "administrate/engine"
5
+ require "administrate/version"
6
+ require "cocoon"
4
7
 
5
8
  module Administrate
6
9
  module Field
7
10
  class NestedHasMany < Administrate::Field::HasMany
8
- VERSION = "0.0.1"
9
-
10
11
  class Engine < ::Rails::Engine
12
+ Administrate::Engine.add_javascript(
13
+ "administrate-field-nested_has_many/application",
14
+ )
15
+ Administrate::Engine.add_stylesheet(
16
+ "administrate-field-nested_has_many/application",
17
+ )
11
18
  end
12
19
 
13
- DEFAULT_ATTRIBUTES = [:id, :_destroy].freeze
20
+ DEFAULT_ATTRIBUTES = %i(id _destroy).freeze
14
21
 
15
22
  def nested_fields
16
23
  associated_form.attributes.reject do |nested_field|
@@ -18,23 +25,39 @@ module Administrate
18
25
  end
19
26
  end
20
27
 
28
+ def nested_fields_for_builder(form_builder)
29
+ return nested_fields unless form_builder.index.is_a? Integer
30
+
31
+ nested_fields.each do |nested_field|
32
+ next if nested_field.resource.blank?
33
+
34
+ # inject current data into field
35
+ resource = data[form_builder.index]
36
+ nested_field.instance_variable_set(
37
+ "@data",
38
+ resource.send(nested_field.attribute),
39
+ )
40
+ end
41
+ end
42
+
21
43
  def to_s
22
44
  data
23
45
  end
24
46
 
25
- def self.dashboard_for_resource(resource)
26
- "#{resource.to_s.classify}Dashboard".constantize
47
+ def self.dashboard_for_resource(resource, options)
48
+ class_name = options && options[:class_name] || resource.to_s.classify
49
+ "#{class_name}Dashboard".constantize
27
50
  end
28
51
 
29
- def self.associated_attributes(associated_resource)
30
- DEFAULT_ATTRIBUTES +
31
- dashboard_for_resource(associated_resource).new.permitted_attributes
52
+ def self.associated_attributes(associated_resource, options)
53
+ dashboard_class = dashboard_for_resource(associated_resource, options)
54
+ DEFAULT_ATTRIBUTES + dashboard_class.new.permitted_attributes
32
55
  end
33
56
 
34
- def self.permitted_attribute(associated_resource)
57
+ def self.permitted_attribute(associated_resource, options = nil)
35
58
  {
36
59
  "#{associated_resource}_attributes".to_sym =>
37
- associated_attributes(associated_resource),
60
+ associated_attributes(associated_resource, options),
38
61
  }
39
62
  end
40
63
 
@@ -43,15 +66,22 @@ module Administrate
43
66
  end
44
67
 
45
68
  def association_name
46
- associated_class_name.underscore.pluralize
69
+ options.fetch(
70
+ :association_name,
71
+ associated_class_name.underscore.pluralize[/([^\/]*)$/, 1],
72
+ )
47
73
  end
48
74
 
49
75
  def associated_form
50
- Administrate::Page::Form.new(associated_dashboard, association_name)
76
+ Administrate::Page::Form.new(associated_dashboard, new_resource)
51
77
  end
52
78
 
53
79
  private
54
80
 
81
+ def new_resource
82
+ @new_resource ||= associated_class_name.constantize.new
83
+ end
84
+
55
85
  def skipped_fields
56
86
  Array(options[:skip])
57
87
  end
@@ -0,0 +1,3 @@
1
+ db/*.sqlite3
2
+ log/
3
+ tmp/
@@ -0,0 +1,6 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require_relative 'config/application'
5
+
6
+ Rails.application.load_tasks
@@ -0,0 +1,7 @@
1
+ //= link_tree ../images
2
+ //= link_directory ../javascripts .js
3
+ //= link administrate/application.js
4
+ //= link administrate-field-nested_has_many/application.js
5
+ //= link_directory ../stylesheets .css
6
+ //= link administrate/application.css
7
+ //= link administrate-field-nested_has_many/application.css
File without changes
@@ -0,0 +1,14 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file. JavaScript code in this file should be added after the last require_* statement.
9
+ //
10
+ // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require rails-ujs
14
+ //= require_tree .
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
+ * files in this directory. Styles in this file should be added after the last require_* statement.
11
+ * It is generally better to create a new file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,21 @@
1
+ # All Administrate controllers inherit from this `Admin::ApplicationController`,
2
+ # making it the ideal place to put authentication logic or other
3
+ # before_actions.
4
+ #
5
+ # If you want to add pagination or other controller-level concerns,
6
+ # you're free to overwrite the RESTful controller actions.
7
+ module Admin
8
+ class ApplicationController < Administrate::ApplicationController
9
+ before_action :authenticate_admin
10
+
11
+ def authenticate_admin
12
+ # TODO Add authentication logic here.
13
+ end
14
+
15
+ # Override this value to specify the number of elements to display at a time
16
+ # on index pages. Defaults to 20.
17
+ # def records_per_page
18
+ # params[:per_page] || 20
19
+ # end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ module Admin
2
+ class Foo::StudentsController < Admin::ApplicationController
3
+ # To customize the behavior of this controller,
4
+ # you can overwrite any of the RESTful actions. For example:
5
+ #
6
+ # def index
7
+ # super
8
+ # @resources = Student.
9
+ # page(params[:page]).
10
+ # per(10)
11
+ # end
12
+
13
+ # Define a custom finder by overriding the `find_resource` method:
14
+ # def find_resource(param)
15
+ # Student.find_by!(slug: param)
16
+ # end
17
+
18
+ # See https://administrate-prototype.herokuapp.com/customizing_controller_actions
19
+ # for more information
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ module Admin
2
+ class SchoolsController < Admin::ApplicationController
3
+ # To customize the behavior of this controller,
4
+ # you can overwrite any of the RESTful actions. For example:
5
+ #
6
+ # def index
7
+ # super
8
+ # @resources = School.
9
+ # page(params[:page]).
10
+ # per(10)
11
+ # end
12
+
13
+ # Define a custom finder by overriding the `find_resource` method:
14
+ # def find_resource(param)
15
+ # School.find_by!(slug: param)
16
+ # end
17
+
18
+ # See https://administrate-prototype.herokuapp.com/customizing_controller_actions
19
+ # for more information
20
+ end
21
+ end