activeadmin-magicfields 0.4.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 (70) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +50 -0
  3. data/Gemfile +42 -0
  4. data/Guardfile +8 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.md +160 -0
  7. data/Rakefile +33 -0
  8. data/activeadmin-magicfields.gemspec +23 -0
  9. data/app/assets/javascripts/activeadmin-magicfields.js.coffee +101 -0
  10. data/app/assets/stylesheets/activeadmin-magicfields.css.scss +53 -0
  11. data/lib/activeadmin-magicfields.rb +18 -0
  12. data/lib/activeadmin-magicfields/engine.rb +12 -0
  13. data/lib/activeadmin-magicfields/form_builder.rb +175 -0
  14. data/lib/activeadmin-magicfields/paperclip.rb +2 -0
  15. data/lib/activeadmin-magicfields/version.rb +3 -0
  16. data/lib/app/admin/part.rb +29 -0
  17. data/lib/app/admin/part_object.rb +26 -0
  18. data/lib/app/models/field/checkbox.rb +12 -0
  19. data/lib/app/models/field/image.rb +35 -0
  20. data/lib/app/models/field/repeater.rb +19 -0
  21. data/lib/app/models/field/text.rb +14 -0
  22. data/lib/app/models/field/textarea.rb +14 -0
  23. data/lib/app/models/field_template.rb +5 -0
  24. data/lib/app/models/part.rb +6 -0
  25. data/lib/app/models/part_object.rb +11 -0
  26. data/lib/app/models/part_object_field.rb +13 -0
  27. data/lib/app/models/repeater_part_object.rb +6 -0
  28. data/lib/app/views/admin/field_inputs/_checkbox.html.erb +1 -0
  29. data/lib/app/views/admin/field_inputs/_image.html.erb +4 -0
  30. data/lib/app/views/admin/field_inputs/_product.html.erb +1 -0
  31. data/lib/app/views/admin/field_inputs/_repeater.html.erb +3 -0
  32. data/lib/app/views/admin/field_inputs/_site_page.html.erb +1 -0
  33. data/lib/app/views/admin/field_inputs/_text.html.erb +1 -0
  34. data/lib/app/views/admin/field_inputs/_textarea.html.erb +8 -0
  35. data/lib/app/views/admin/part_objects/_part_object.html.erb +53 -0
  36. data/lib/app/views/admin/parts/_part.html.erb +11 -0
  37. data/lib/app/views/admin/parts/_part_old.arb +32 -0
  38. data/lib/generators/activeadmin-magicfields/install/install_generator.rb +33 -0
  39. data/lib/generators/activeadmin-magicfields/install/templates/create_field_checkbox.rb +10 -0
  40. data/lib/generators/activeadmin-magicfields/install/templates/create_field_image.rb +10 -0
  41. data/lib/generators/activeadmin-magicfields/install/templates/create_field_repeater.rb +9 -0
  42. data/lib/generators/activeadmin-magicfields/install/templates/create_field_templates.rb +14 -0
  43. data/lib/generators/activeadmin-magicfields/install/templates/create_field_text.rb +10 -0
  44. data/lib/generators/activeadmin-magicfields/install/templates/create_field_textarea.rb +12 -0
  45. data/lib/generators/activeadmin-magicfields/install/templates/create_part_object_fields.rb +10 -0
  46. data/lib/generators/activeadmin-magicfields/install/templates/create_part_objects.rb +13 -0
  47. data/lib/generators/activeadmin-magicfields/install/templates/create_parts.rb +9 -0
  48. data/lib/generators/activeadmin-magicfields/install/templates/create_repeater_part_objects.rb +10 -0
  49. data/spec/rails_helper.rb +154 -0
  50. data/spec/spec_helper.rb +17 -0
  51. data/spec/support/deferred_garbage_collection.rb +19 -0
  52. data/spec/support/detect_rails_version.rb +26 -0
  53. data/spec/support/integration_example_group.rb +31 -0
  54. data/spec/support/jslint.yml +80 -0
  55. data/spec/support/rails_template.rb +104 -0
  56. data/spec/support/rails_template_with_data.rb +59 -0
  57. data/spec/support/templates/cucumber.rb +24 -0
  58. data/spec/support/templates/cucumber_with_reloading.rb +5 -0
  59. data/spec/support/templates/en.yml +8 -0
  60. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  61. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  62. data/spec/support/templates/policies/application_policy.rb +45 -0
  63. data/spec/support/templates/policies/category_policy.rb +7 -0
  64. data/spec/support/templates/policies/post_policy.rb +15 -0
  65. data/spec/support/templates/policies/store_policy.rb +11 -0
  66. data/spec/support/templates/policies/user_policy.rb +11 -0
  67. data/spec/support/templates/post_decorator.rb +11 -0
  68. data/spec/unit/form_builder_spec.rb +121 -0
  69. data/tasks/test.rake +83 -0
  70. metadata +175 -0
@@ -0,0 +1,7 @@
1
+ class CategoryPolicy < ApplicationPolicy
2
+ class Scope < Struct.new(:user, :scope)
3
+ def resolve
4
+ scope
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ class PostPolicy < ApplicationPolicy
2
+ class Scope < Struct.new(:user, :scope)
3
+ def resolve
4
+ scope
5
+ end
6
+ end
7
+
8
+ def update?
9
+ record.author == user
10
+ end
11
+
12
+ def destroy?
13
+ update?
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ class StorePolicy < ApplicationPolicy
2
+ class Scope < Struct.new(:user, :scope)
3
+ def resolve
4
+ scope
5
+ end
6
+ end
7
+
8
+ def destroy?
9
+ false
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ class UserPolicy < ApplicationPolicy
2
+ class Scope < Struct.new(:user, :scope)
3
+ def resolve
4
+ scope
5
+ end
6
+ end
7
+
8
+ def destroy_all?
9
+ true
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'draper'
2
+
3
+ class PostDecorator < Draper::Decorator
4
+ decorates :post
5
+ delegate_all
6
+
7
+ def decorator_method
8
+ 'A method only available on the decorator'
9
+ end
10
+ end
11
+
@@ -0,0 +1,121 @@
1
+ require 'rails_helper'
2
+ require 'rspec/mocks'
3
+
4
+ describe ActiveadminMagicfields::FormBuilder do
5
+
6
+ # Setup an ActionView::Base object which can be used for
7
+ # generating the form for.
8
+ let(:helpers) do
9
+ view = action_view
10
+ def view.articles_path
11
+ "/articles"
12
+ end
13
+
14
+ def view.protect_against_forgery?
15
+ false
16
+ end
17
+
18
+ def view.url_for(*args)
19
+ if args.first == {action: "index"}
20
+ articles_path
21
+ else
22
+ super
23
+ end
24
+ end
25
+
26
+ def view.a_helper_method
27
+ "A Helper Method"
28
+ end
29
+
30
+ view
31
+ end
32
+
33
+ def build_form(options = {}, form_object = Article.new, &block)
34
+ options = {url: helpers.articles_path}.merge(options)
35
+
36
+ form = render_arbre_component({form_object: form_object, form_options: options, form_block: block}, helpers) do
37
+ active_admin_form_for(assigns[:form_object], assigns[:form_options], &assigns[:form_block])
38
+ end.to_s
39
+
40
+ Capybara.string(form)
41
+ end
42
+
43
+ context "in general" do
44
+ context "it without custom settings" do
45
+ let :body do
46
+ build_form do |f|
47
+ f.inputs do
48
+ f.input :title
49
+ end
50
+ end
51
+ end
52
+
53
+ it "should generate a fieldset with a inputs class" do
54
+ expect(body).to have_selector("fieldset.inputs")
55
+ end
56
+ end
57
+
58
+ context "it with custom settings" do
59
+ let :body do
60
+ build_form do |f|
61
+ f.inputs class: "custom_class" do
62
+ f.input :title
63
+ end
64
+ end
65
+ end
66
+
67
+ it "should generate a fieldset with a inputs and custom class" do
68
+ expect(body).to have_selector("fieldset.inputs.custom_class")
69
+ end
70
+ end
71
+ end
72
+
73
+ context "with polymorphic has many inputs" do
74
+ describe "with simple block" do
75
+ let :body do
76
+ build_form builder: ActiveadminMagicfields::FormBuilder do |f|
77
+ section = f.object.sections.build
78
+ section.sectionable = Image.new
79
+ f.magicfields_has_many :sections, :sectionable, types: [Image, Text]
80
+ end
81
+ end
82
+
83
+ it "should render add section new button" do
84
+ with_translation activerecord: {models: {section: {one: "Section", other: "Sections"}}} do
85
+ expect(body).to have_selector("a", text: "Add New Section")
86
+ end
87
+ end
88
+
89
+ it "should render the nested form" do
90
+ expect(body).to have_selector("input[name='article[sections_attributes][0][sectionable_id]']")
91
+ expect(body).to have_selector("input[name='article[sections_attributes][0][sectionable_type]']")
92
+ end
93
+
94
+ it "should add a link to remove new nested records" do
95
+ expect(body).to have_selector(
96
+ ".magicfields_has_many_container > fieldset > ol > li > a.button.magicfields_has_many_remove[href='#']", text: "Remove"
97
+ )
98
+ end
99
+ end
100
+
101
+ describe "sortable" do
102
+ context "with new section" do
103
+ let :body do
104
+ build_form builder: ActiveadminMagicfields::FormBuilder do |f|
105
+ section = f.object.sections.build
106
+ section.sectionable = Image.new
107
+ f.magicfields_has_many :sections, :sectionable, types: [Image, Text], sortable: :position
108
+ end
109
+ end
110
+
111
+ it "shows the nested fields for unsaved records" do
112
+ expect(body).to have_selector("input[name='article[sections_attributes][0][position]']")
113
+ end
114
+
115
+ it "shows the nested fields for unsaved records" do
116
+ expect(body).to have_selector('.magicfields_has_many_container[data-sortable=position]')
117
+ end
118
+ end
119
+ end
120
+ end
121
+ end
data/tasks/test.rake ADDED
@@ -0,0 +1,83 @@
1
+ desc "Creates a test rails app for the specs to run against"
2
+ task :setup, :parallel do |t, args|
3
+ require 'rails/version'
4
+ if File.exists? dir = "spec/rails/rails-#{Rails::VERSION::STRING}"
5
+ puts "test app #{dir} already exists; skipping"
6
+ else
7
+ system("mkdir spec/rails") unless File.exists?("spec/rails")
8
+ system "#{'INSTALL_PARALLEL=yes' if args[:parallel]} bundle exec rails new #{dir} -m spec/support/rails_template.rb --skip-bundle"
9
+ Rake::Task['parallel:after_setup_hook'].invoke if args[:parallel]
10
+ end
11
+ end
12
+
13
+ desc "Run the full suite using 1 core"
14
+ task test: ['spec:unit', 'spec:integration', 'cucumber', 'cucumber:class_reloading']
15
+
16
+ require 'coveralls/rake/task'
17
+ Coveralls::RakeTask.new
18
+ task test_with_coveralls: [:test, 'coveralls:push']
19
+
20
+ namespace :test do
21
+
22
+ def run_tests_against(*versions)
23
+ current_version = detect_rails_version if File.exists?("Gemfile.lock")
24
+
25
+ versions.each do |version|
26
+ puts
27
+ puts "== Using Rails #{version}"
28
+
29
+ cmd "./script/use_rails #{version}"
30
+ cmd "bundle exec rspec spec"
31
+ cmd "bundle exec cucumber features"
32
+ cmd "bundle exec cucumber -p class-reloading features"
33
+ end
34
+
35
+ cmd "./script/use_rails #{current_version}" if current_version
36
+ end
37
+
38
+ desc "Run the full suite against the important versions of rails"
39
+ task :major_supported_rails do
40
+ run_tests_against *TRAVIS_RAILS_VERSIONS
41
+ end
42
+
43
+ desc "Alias for major_supported_rails"
44
+ task :all => :major_supported_rails
45
+
46
+ end
47
+
48
+ require 'rspec/core/rake_task'
49
+
50
+ RSpec::Core::RakeTask.new(:spec)
51
+
52
+ namespace :spec do
53
+
54
+ desc "Run the unit specs"
55
+ RSpec::Core::RakeTask.new(:unit) do |t|
56
+ t.pattern = "spec/unit/**/*_spec.rb"
57
+ end
58
+
59
+ desc "Run the integration specs"
60
+ RSpec::Core::RakeTask.new(:integration) do |t|
61
+ t.pattern = "spec/integration/**/*_spec.rb"
62
+ end
63
+
64
+ end
65
+
66
+
67
+ require 'cucumber/rake/task'
68
+
69
+ Cucumber::Rake::Task.new(:cucumber) do |t|
70
+ t.profile = 'default'
71
+ end
72
+
73
+ namespace :cucumber do
74
+
75
+ Cucumber::Rake::Task.new(:wip, "Run the cucumber scenarios with the @wip tag") do |t|
76
+ t.profile = 'wip'
77
+ end
78
+
79
+ Cucumber::Rake::Task.new(:class_reloading, "Run the cucumber scenarios that test reloading") do |t|
80
+ t.profile = 'class-reloading'
81
+ end
82
+
83
+ end
metadata ADDED
@@ -0,0 +1,175 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: activeadmin-magicfields
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.0
5
+ platform: ruby
6
+ authors:
7
+ - Silvain Toromanoff
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-09-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activeadmin
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: inherited_resources
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: paperclip
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: This gem extends formtastic's form builder to support custom sections
56
+ and fields in your forms
57
+ email:
58
+ - silvain@agencyleroy.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - ".gitignore"
64
+ - Gemfile
65
+ - Guardfile
66
+ - LICENSE.txt
67
+ - README.md
68
+ - Rakefile
69
+ - activeadmin-magicfields.gemspec
70
+ - app/assets/javascripts/activeadmin-magicfields.js.coffee
71
+ - app/assets/stylesheets/activeadmin-magicfields.css.scss
72
+ - lib/activeadmin-magicfields.rb
73
+ - lib/activeadmin-magicfields/engine.rb
74
+ - lib/activeadmin-magicfields/form_builder.rb
75
+ - lib/activeadmin-magicfields/paperclip.rb
76
+ - lib/activeadmin-magicfields/version.rb
77
+ - lib/app/admin/part.rb
78
+ - lib/app/admin/part_object.rb
79
+ - lib/app/models/field/checkbox.rb
80
+ - lib/app/models/field/image.rb
81
+ - lib/app/models/field/repeater.rb
82
+ - lib/app/models/field/text.rb
83
+ - lib/app/models/field/textarea.rb
84
+ - lib/app/models/field_template.rb
85
+ - lib/app/models/part.rb
86
+ - lib/app/models/part_object.rb
87
+ - lib/app/models/part_object_field.rb
88
+ - lib/app/models/repeater_part_object.rb
89
+ - lib/app/views/admin/field_inputs/_checkbox.html.erb
90
+ - lib/app/views/admin/field_inputs/_image.html.erb
91
+ - lib/app/views/admin/field_inputs/_product.html.erb
92
+ - lib/app/views/admin/field_inputs/_repeater.html.erb
93
+ - lib/app/views/admin/field_inputs/_site_page.html.erb
94
+ - lib/app/views/admin/field_inputs/_text.html.erb
95
+ - lib/app/views/admin/field_inputs/_textarea.html.erb
96
+ - lib/app/views/admin/part_objects/_part_object.html.erb
97
+ - lib/app/views/admin/parts/_part.html.erb
98
+ - lib/app/views/admin/parts/_part_old.arb
99
+ - lib/generators/activeadmin-magicfields/install/install_generator.rb
100
+ - lib/generators/activeadmin-magicfields/install/templates/create_field_checkbox.rb
101
+ - lib/generators/activeadmin-magicfields/install/templates/create_field_image.rb
102
+ - lib/generators/activeadmin-magicfields/install/templates/create_field_repeater.rb
103
+ - lib/generators/activeadmin-magicfields/install/templates/create_field_templates.rb
104
+ - lib/generators/activeadmin-magicfields/install/templates/create_field_text.rb
105
+ - lib/generators/activeadmin-magicfields/install/templates/create_field_textarea.rb
106
+ - lib/generators/activeadmin-magicfields/install/templates/create_part_object_fields.rb
107
+ - lib/generators/activeadmin-magicfields/install/templates/create_part_objects.rb
108
+ - lib/generators/activeadmin-magicfields/install/templates/create_parts.rb
109
+ - lib/generators/activeadmin-magicfields/install/templates/create_repeater_part_objects.rb
110
+ - spec/rails_helper.rb
111
+ - spec/spec_helper.rb
112
+ - spec/support/deferred_garbage_collection.rb
113
+ - spec/support/detect_rails_version.rb
114
+ - spec/support/integration_example_group.rb
115
+ - spec/support/jslint.yml
116
+ - spec/support/rails_template.rb
117
+ - spec/support/rails_template_with_data.rb
118
+ - spec/support/templates/cucumber.rb
119
+ - spec/support/templates/cucumber_with_reloading.rb
120
+ - spec/support/templates/en.yml
121
+ - spec/support/templates/policies/active_admin/comment_policy.rb
122
+ - spec/support/templates/policies/active_admin/page_policy.rb
123
+ - spec/support/templates/policies/application_policy.rb
124
+ - spec/support/templates/policies/category_policy.rb
125
+ - spec/support/templates/policies/post_policy.rb
126
+ - spec/support/templates/policies/store_policy.rb
127
+ - spec/support/templates/policies/user_policy.rb
128
+ - spec/support/templates/post_decorator.rb
129
+ - spec/unit/form_builder_spec.rb
130
+ - tasks/test.rake
131
+ homepage: ''
132
+ licenses:
133
+ - MIT
134
+ metadata: {}
135
+ post_install_message:
136
+ rdoc_options: []
137
+ require_paths:
138
+ - lib
139
+ required_ruby_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ requirements: []
150
+ rubyforge_project:
151
+ rubygems_version: 2.2.2
152
+ signing_key:
153
+ specification_version: 4
154
+ summary: Custom fields and sections for active admin.
155
+ test_files:
156
+ - spec/rails_helper.rb
157
+ - spec/spec_helper.rb
158
+ - spec/support/deferred_garbage_collection.rb
159
+ - spec/support/detect_rails_version.rb
160
+ - spec/support/integration_example_group.rb
161
+ - spec/support/jslint.yml
162
+ - spec/support/rails_template.rb
163
+ - spec/support/rails_template_with_data.rb
164
+ - spec/support/templates/cucumber.rb
165
+ - spec/support/templates/cucumber_with_reloading.rb
166
+ - spec/support/templates/en.yml
167
+ - spec/support/templates/policies/active_admin/comment_policy.rb
168
+ - spec/support/templates/policies/active_admin/page_policy.rb
169
+ - spec/support/templates/policies/application_policy.rb
170
+ - spec/support/templates/policies/category_policy.rb
171
+ - spec/support/templates/policies/post_policy.rb
172
+ - spec/support/templates/policies/store_policy.rb
173
+ - spec/support/templates/policies/user_policy.rb
174
+ - spec/support/templates/post_decorator.rb
175
+ - spec/unit/form_builder_spec.rb