activeadmin-magicfields 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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