viniBaxter-spa-nested_has_many 2.0.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.
- checksums.yaml +7 -0
- data/.DS_Store +0 -0
- data/.circleci/config.yml +29 -0
- data/.gitignore +4 -0
- data/.ruby-version +1 -0
- data/Appraisals +13 -0
- data/CHANGELOG.md +57 -0
- data/Gemfile +5 -0
- data/README.md +38 -0
- data/Rakefile +24 -0
- data/app/assets/javascripts/administrate-field-nested_has_many/application.js +1 -0
- data/app/assets/stylesheets/administrate-field-nested_has_many/application.css +3 -0
- data/app/assets/stylesheets/administrate-field-nested_has_many/base.scss +14 -0
- data/app/views/fields/nested_has_many/_fields.html.erb +9 -0
- data/app/views/fields/nested_has_many/_form.html.erb +23 -0
- data/app/views/fields/nested_has_many/_index.html.erb +19 -0
- data/app/views/fields/nested_has_many/_show.html.erb +9 -0
- data/app/views/fields/nested_has_many/_show_current.html.erb +44 -0
- data/app/views/fields/nested_has_many/_show_old.html.erb +36 -0
- data/bin/rails +13 -0
- data/config/i18n-tasks.yml +8 -0
- data/config/locales/administrate-field-nested_has_many.en.yml +7 -0
- data/config/locales/administrate-field-nested_has_many.ja.yml +7 -0
- data/config/locales/administrate-field-nested_has_many.pt.yml +7 -0
- data/config/locales/administrate-field-nested_has_many.ru.yml +7 -0
- data/gemfiles/administrate_0.10.gemfile +8 -0
- data/gemfiles/administrate_0.10.gemfile.lock +214 -0
- data/gemfiles/administrate_0.13.gemfile +8 -0
- data/gemfiles/administrate_0.13.gemfile.lock +207 -0
- data/gemfiles/administrate_master.gemfile +8 -0
- data/gemfiles/administrate_master.gemfile.lock +219 -0
- data/lib/viniBaxter/spa/nested_has_many.rb +90 -0
- data/spec/dummy/.gitignore +3 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/config/manifest.js +7 -0
- data/spec/dummy/app/assets/images/.keep +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +14 -0
- data/spec/dummy/app/assets/javascripts/channels/.keep +0 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/controllers/admin/application_controller.rb +21 -0
- data/spec/dummy/app/controllers/admin/foo/students_controller.rb +21 -0
- data/spec/dummy/app/controllers/admin/schools_controller.rb +21 -0
- data/spec/dummy/app/controllers/application_controller.rb +2 -0
- data/spec/dummy/app/controllers/concerns/.keep +0 -0
- data/spec/dummy/app/dashboards/foo/student_dashboard.rb +51 -0
- data/spec/dummy/app/dashboards/school_dashboard.rb +52 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/application_mailer.rb +4 -0
- data/spec/dummy/app/models/application_record.rb +3 -0
- data/spec/dummy/app/models/concerns/.keep +0 -0
- data/spec/dummy/app/models/foo/student.rb +3 -0
- data/spec/dummy/app/models/school.rb +4 -0
- data/spec/dummy/app/views/layouts/application.html.erb +15 -0
- data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +36 -0
- data/spec/dummy/bin/update +31 -0
- data/spec/dummy/bin/yarn +11 -0
- data/spec/dummy/config.ru +5 -0
- data/spec/dummy/config/application.rb +18 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/cable.yml +10 -0
- data/spec/dummy/config/database.yml +12 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +53 -0
- data/spec/dummy/config/environments/test.rb +36 -0
- data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -0
- data/spec/dummy/config/initializers/assets.rb +14 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/content_security_policy.rb +25 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +33 -0
- data/spec/dummy/config/puma.rb +34 -0
- data/spec/dummy/config/routes.rb +9 -0
- data/spec/dummy/config/spring.rb +6 -0
- data/spec/dummy/config/storage.yml +34 -0
- data/spec/dummy/db/migrate/20180907104642_create_schools.rb +9 -0
- data/spec/dummy/db/migrate/20180907104703_create_students.rb +10 -0
- data/spec/dummy/db/schema.rb +29 -0
- data/spec/dummy/lib/assets/.keep +0 -0
- data/spec/dummy/package.json +5 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
- data/spec/dummy/public/apple-touch-icon.png +0 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/storage/.keep +0 -0
- data/spec/factories.rb +9 -0
- data/spec/features/has_many_spec.rb +41 -0
- data/spec/features/landing_spec.rb +10 -0
- data/spec/i18n_spec.rb +29 -0
- data/spec/lib/administrate/field/nested_has_many_spec.rb +14 -0
- data/spec/rails_helper.rb +67 -0
- data/spec/spec_helper.rb +96 -0
- data/viniBaxter-spa-nested_has_many.gemspec +29 -0
- metadata +368 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
require "administrate/field/has_many"
|
|
2
|
+
require "administrate/page/form"
|
|
3
|
+
require "rails"
|
|
4
|
+
require "administrate/engine"
|
|
5
|
+
require "administrate/version"
|
|
6
|
+
require "cocoon"
|
|
7
|
+
|
|
8
|
+
module Administrate
|
|
9
|
+
module Field
|
|
10
|
+
class NestedHasMany < Administrate::Field::HasMany
|
|
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
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
DEFAULT_ATTRIBUTES = %i(id _destroy).freeze
|
|
21
|
+
|
|
22
|
+
def nested_fields
|
|
23
|
+
associated_form.attributes.reject do |nested_field|
|
|
24
|
+
skipped_fields.include?(nested_field.attribute)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
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
|
+
|
|
43
|
+
def to_s
|
|
44
|
+
data
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def self.dashboard_for_resource(resource, options)
|
|
48
|
+
class_name = options && options[:class_name] || resource.to_s.classify
|
|
49
|
+
"#{class_name}Dashboard".constantize
|
|
50
|
+
end
|
|
51
|
+
|
|
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
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def self.permitted_attribute(associated_resource, options = nil)
|
|
58
|
+
{
|
|
59
|
+
"#{associated_resource}_attributes".to_sym =>
|
|
60
|
+
associated_attributes(associated_resource, options),
|
|
61
|
+
}
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def associated_class_name
|
|
65
|
+
options.fetch(:class_name, attribute.to_s.singularize.camelcase)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def association_name
|
|
69
|
+
options.fetch(
|
|
70
|
+
:association_name,
|
|
71
|
+
associated_class_name.underscore.pluralize[/([^\/]*)$/, 1],
|
|
72
|
+
)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def associated_form
|
|
76
|
+
Administrate::Page::Form.new(associated_dashboard, new_resource)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
private
|
|
80
|
+
|
|
81
|
+
def new_resource
|
|
82
|
+
@new_resource ||= associated_class_name.constantize.new
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def skipped_fields
|
|
86
|
+
Array(options[:skip])
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
data/spec/dummy/Rakefile
ADDED
|
@@ -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 .
|
|
File without changes
|
|
@@ -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
|
|
File without changes
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require "administrate/base_dashboard"
|
|
2
|
+
|
|
3
|
+
class Foo::StudentDashboard < Administrate::BaseDashboard
|
|
4
|
+
# ATTRIBUTE_TYPES
|
|
5
|
+
# a hash that describes the type of each of the model's fields.
|
|
6
|
+
#
|
|
7
|
+
# Each different type represents an Administrate::Field object,
|
|
8
|
+
# which determines how the attribute is displayed
|
|
9
|
+
# on pages throughout the dashboard.
|
|
10
|
+
ATTRIBUTE_TYPES = {
|
|
11
|
+
school: Field::BelongsTo,
|
|
12
|
+
id: Field::Number,
|
|
13
|
+
name: Field::String,
|
|
14
|
+
created_at: Field::DateTime,
|
|
15
|
+
updated_at: Field::DateTime,
|
|
16
|
+
}.freeze
|
|
17
|
+
|
|
18
|
+
# COLLECTION_ATTRIBUTES
|
|
19
|
+
# an array of attributes that will be displayed on the model's index page.
|
|
20
|
+
#
|
|
21
|
+
# By default, it's limited to four items to reduce clutter on index pages.
|
|
22
|
+
# Feel free to add, remove, or rearrange items.
|
|
23
|
+
COLLECTION_ATTRIBUTES = [
|
|
24
|
+
:school,
|
|
25
|
+
:id,
|
|
26
|
+
:name,
|
|
27
|
+
:created_at,
|
|
28
|
+
].freeze
|
|
29
|
+
|
|
30
|
+
# SHOW_PAGE_ATTRIBUTES
|
|
31
|
+
# an array of attributes that will be displayed on the model's show page.
|
|
32
|
+
SHOW_PAGE_ATTRIBUTES = [
|
|
33
|
+
:school,
|
|
34
|
+
:id,
|
|
35
|
+
:name,
|
|
36
|
+
:created_at,
|
|
37
|
+
:updated_at,
|
|
38
|
+
].freeze
|
|
39
|
+
|
|
40
|
+
# FORM_ATTRIBUTES
|
|
41
|
+
# an array of attributes that will be displayed
|
|
42
|
+
# on the model's form (`new` and `edit`) pages.
|
|
43
|
+
FORM_ATTRIBUTES = [
|
|
44
|
+
:school,
|
|
45
|
+
:name,
|
|
46
|
+
].freeze
|
|
47
|
+
|
|
48
|
+
def display_resource(student)
|
|
49
|
+
student.name
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
require "administrate/base_dashboard"
|
|
2
|
+
|
|
3
|
+
class SchoolDashboard < Administrate::BaseDashboard
|
|
4
|
+
# ATTRIBUTE_TYPES
|
|
5
|
+
# a hash that describes the type of each of the model's fields.
|
|
6
|
+
#
|
|
7
|
+
# Each different type represents an Administrate::Field object,
|
|
8
|
+
# which determines how the attribute is displayed
|
|
9
|
+
# on pages throughout the dashboard.
|
|
10
|
+
ATTRIBUTE_TYPES = {
|
|
11
|
+
id: Field::Number,
|
|
12
|
+
name: Field::String,
|
|
13
|
+
students: Field::NestedHasMany.with_options(class_name: "Foo::Student"),
|
|
14
|
+
created_at: Field::DateTime,
|
|
15
|
+
updated_at: Field::DateTime,
|
|
16
|
+
}.freeze
|
|
17
|
+
|
|
18
|
+
# COLLECTION_ATTRIBUTES
|
|
19
|
+
# an array of attributes that will be displayed on the model's index page.
|
|
20
|
+
#
|
|
21
|
+
# By default, it's limited to four items to reduce clutter on index pages.
|
|
22
|
+
# Feel free to add, remove, or rearrange items.
|
|
23
|
+
COLLECTION_ATTRIBUTES = [
|
|
24
|
+
:id,
|
|
25
|
+
:name,
|
|
26
|
+
:students,
|
|
27
|
+
:created_at,
|
|
28
|
+
:updated_at,
|
|
29
|
+
].freeze
|
|
30
|
+
|
|
31
|
+
# SHOW_PAGE_ATTRIBUTES
|
|
32
|
+
# an array of attributes that will be displayed on the model's show page.
|
|
33
|
+
SHOW_PAGE_ATTRIBUTES = [
|
|
34
|
+
:id,
|
|
35
|
+
:name,
|
|
36
|
+
:students,
|
|
37
|
+
:created_at,
|
|
38
|
+
:updated_at,
|
|
39
|
+
].freeze
|
|
40
|
+
|
|
41
|
+
# FORM_ATTRIBUTES
|
|
42
|
+
# an array of attributes that will be displayed
|
|
43
|
+
# on the model's form (`new` and `edit`) pages.
|
|
44
|
+
FORM_ATTRIBUTES = [
|
|
45
|
+
:name,
|
|
46
|
+
:students,
|
|
47
|
+
].freeze
|
|
48
|
+
|
|
49
|
+
def display_resource(school)
|
|
50
|
+
school.name
|
|
51
|
+
end
|
|
52
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>Dummy</title>
|
|
5
|
+
<%= csrf_meta_tags %>
|
|
6
|
+
<%= csp_meta_tag %>
|
|
7
|
+
|
|
8
|
+
<%= stylesheet_link_tag 'application', media: 'all' %>
|
|
9
|
+
<%= javascript_include_tag 'application' %>
|
|
10
|
+
</head>
|
|
11
|
+
|
|
12
|
+
<body>
|
|
13
|
+
<%= yield %>
|
|
14
|
+
</body>
|
|
15
|
+
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= yield %>
|
data/spec/dummy/bin/rake
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
include FileUtils
|
|
4
|
+
|
|
5
|
+
# path to your application root.
|
|
6
|
+
APP_ROOT = File.expand_path('..', __dir__)
|
|
7
|
+
|
|
8
|
+
def system!(*args)
|
|
9
|
+
system(*args) || abort("\n== Command #{args} failed ==")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
chdir APP_ROOT do
|
|
13
|
+
# This script is a starting point to setup your application.
|
|
14
|
+
# Add necessary setup steps to this file.
|
|
15
|
+
|
|
16
|
+
puts '== Installing dependencies =='
|
|
17
|
+
system! 'gem install bundler --conservative'
|
|
18
|
+
system('bundle check') || system!('bundle install')
|
|
19
|
+
|
|
20
|
+
# Install JavaScript dependencies if using Yarn
|
|
21
|
+
# system('bin/yarn')
|
|
22
|
+
|
|
23
|
+
# puts "\n== Copying sample files =="
|
|
24
|
+
# unless File.exist?('config/database.yml')
|
|
25
|
+
# cp 'config/database.yml.sample', 'config/database.yml'
|
|
26
|
+
# end
|
|
27
|
+
|
|
28
|
+
puts "\n== Preparing database =="
|
|
29
|
+
system! 'bin/rails db:setup'
|
|
30
|
+
|
|
31
|
+
puts "\n== Removing old logs and tempfiles =="
|
|
32
|
+
system! 'bin/rails log:clear tmp:clear'
|
|
33
|
+
|
|
34
|
+
puts "\n== Restarting application server =="
|
|
35
|
+
system! 'bin/rails restart'
|
|
36
|
+
end
|