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,11 @@
1
+ class PartObject < ActiveRecord::Base
2
+
3
+ has_many :part_object_fields, class_name: "PartObjectField", foreign_key: "part_object_id", dependent: :destroy
4
+ # belongs_to :base_model, inverse_of: :part_objects, foreign_key: "base_model_id"
5
+ belongs_to :part
6
+
7
+ accepts_nested_attributes_for :part_object_fields, allow_destroy: true
8
+
9
+ scope :by_position, -> { order('position ASC') }
10
+
11
+ end
@@ -0,0 +1,13 @@
1
+ class PartObjectField < ActiveRecord::Base
2
+
3
+ belongs_to :part_object, class_name: "PartObject", foreign_key: "part_object_id"
4
+ belongs_to :fieldable, polymorphic: true, dependent: :destroy
5
+
6
+ validates :fieldable, presence: true
7
+ accepts_nested_attributes_for :fieldable, allow_destroy: true
8
+
9
+ def build_fieldable(attributes, options = {})
10
+ self.fieldable = fieldable_type.constantize.new(attributes, options)
11
+ end
12
+
13
+ end
@@ -0,0 +1,6 @@
1
+ class RepeaterPartObject < ActiveRecord::Base
2
+ belongs_to :part_object, dependent: :destroy
3
+ belongs_to :field_repeater, class_name: "Field::Repeater", inverse_of: "repeater_part_objects", foreign_key: "field_repeater_id"
4
+
5
+ accepts_nested_attributes_for :part_object, allow_destroy: true
6
+ end
@@ -0,0 +1 @@
1
+ <%= builder.input field_template.field_type, label: field_template.title, input_html: {name: form_prefix + builder.object_name.sub('part[', '[') + "[#{field_template.field_type}]" } %>
@@ -0,0 +1,4 @@
1
+ <%= builder.input :image, as: :file, label: field_template.title, required: field_template.is_required, :hint => ( (builder.object.new_record? || builder.object.image_file_name.nil?) ? content_tag(:span, "No previous image") : ("current image:<br/>").html_safe + image_tag(builder.object.image.url(:thumb)) ), input_html: {value: builder.object.image_file_name, name: form_prefix + builder.object_name.sub('part[', '[') + "[#{field_template.field_type}]" } %>
2
+ <% if ( !builder.object.new_record? and !builder.object.image_file_name.nil? and !field_template.is_required ) %>
3
+ <%= builder.input :delete_image, as: :boolean, label: "Delete Image", input_html: {name: form_prefix + builder.object_name.sub('part[', '[') + "[delete_image]" } %>
4
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= builder.input :product_id, as: :select, multiselect: false, collection: Spree::Product.all, label: field_template.title, required: field_template.is_required, input_html: {name: form_prefix + builder.object_name.sub('part[', '[') + "[product_id]" } %>
@@ -0,0 +1,3 @@
1
+ <%= semantic_fields_for "", builder.object, builder: ActiveadminMagicfields::FormBuilder do |r| %>
2
+ <% r.sections_has_many :parts, collection: Part.includes(:field_templates).all, part_objects: r.object.part_objects, sortable: :position, form_prefix: form_prefix + builder.object_name.sub('part[', '[') %>
3
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= builder.input :site_page_id, as: :select, multiselect: false, collection: SitePage.all, label: field_template.title, required: field_template.is_required, input_html: {name: form_prefix + builder.object_name.sub('part[', '[') + "[site_page_id]" } %>
@@ -0,0 +1 @@
1
+ <%= builder.input field_template.field_type, label: field_template.title, required: field_template.is_required, input_html: {name: form_prefix + builder.object_name.sub('part[', '[') + "[#{field_template.field_type}]" } %>
@@ -0,0 +1,8 @@
1
+ <%= builder.input field_template.field_type, label: field_template.title, required: field_template.is_required, input_html: {name: form_prefix + builder.object_name.sub('part[', '[') + "[#{field_template.field_type}]" } %>
2
+
3
+ <%# To make the textarea a Wysiwyg field, add to your gemfile
4
+ gem 'activeadmin-dragonfly', github: 'stefanoverna/activeadmin-dragonfly'
5
+ gem 'activeadmin-wysihtml5', github: 'silvaire/activeadmin-wysihtml5'
6
+ and replace the above line by the commented one below
7
+ %>
8
+ <%#= builder.input field_template.field_type, as: :wysihtml5, label: field_template.title, required: field_template.is_required, input_html: {name: form_prefix + builder.object_name.sub('part[', '[') + "[#{field_template.field_type}]" } %>
@@ -0,0 +1,53 @@
1
+ <% if !part_object.new_record? or request.xhr?.blank? %>
2
+ <fieldset class="jsonb">
3
+ <% end %>
4
+
5
+
6
+ <%= semantic_fields_for part, namespace: 'part_form' do |r| %>
7
+ <%= r.semantic_fields_for "part_objects_attributes", part_object, index: (part_object.id || DateTime.now.strftime('%Q')) do |f| %>
8
+ <h3 class="section-title"><%= part.name %></h3>
9
+ <%= f.input :position, as: :hidden, input_html: {value: (part_object.position || 9999), name: form_prefix + f.object_name.sub('part[', '[') + "[#{f.index}][position]" } %>
10
+ <%= f.input :part_id, as: :hidden, input_html: {value: part.id, name: form_prefix + f.object_name.sub('part[', '[') + "[#{f.index}][part_id]" } %>
11
+ <% if part_object.part_object_fields.blank? %>
12
+ <% part.field_templates.by_position.each_with_index do |field_template, ix| %>
13
+ <%= f.semantic_fields_for "part_object_fields_attributes", part_object.part_object_fields.build, index: ix do |part_object_field| %>
14
+
15
+ <% field_object = Field.const_get(field_template.field_type.classify).new %>
16
+ <%= part_object_field.input :fieldable_type, as: :hidden, input_html: {value: "Field::" + field_template.field_type.classify, name: form_prefix + part_object_field.object_name.sub('part[', '[') + "[#{ix}][fieldable_type]"} %>
17
+ <%= part_object_field.semantic_fields_for "fieldable_attributes", field_object do |field| %>
18
+ <%= f.inputs do %>
19
+ <%= render partial: "admin/field_inputs/#{field_template.field_type}", locals: {builder: field, form_prefix: form_prefix, field_template: field_template} %>
20
+ <%= field.input :field_template_id, as: :hidden, input_html: {value: field_template.id, name: form_prefix + field.object_name.sub('part[', '[') + "[field_template_id]"} %>
21
+ <% end %>
22
+
23
+ <% end %>
24
+ <% end %>
25
+ <% end %>
26
+ <% else %>
27
+ <%= f.input :id, as: :hidden, input_html: {value: part_object.id, name: form_prefix + f.object_name.sub('part[', '[') + "[#{f.index}][id]" } %>
28
+ <%= f.input :_destroy, as: :boolean, input_html: {name: form_prefix + f.object_name.sub('part[', '[') + "[#{f.index}][_destroy]" }, :wrapper_html => { :class => "destroy-section" } %>
29
+ <% part_object.part_object_fields.each_with_index do |part_object_field, ix| %>
30
+ <%= f.semantic_fields_for "part_object_fields_attributes", part_object_field, index: ix do |pof| %>
31
+ <%= pof.input :id, as: :hidden, input_html: {name: form_prefix + pof.object_name.sub('part[', '[') + "[#{ix}][id]", value: pof.object.id } %>
32
+ <%= pof.input :fieldable_type, as: :hidden, input_html: {name: form_prefix + pof.object_name.sub('part[', '[') + "[#{ix}][fieldable_type]", value: pof.object.fieldable_type } %>
33
+ <%= pof.semantic_fields_for "fieldable_attributes", part_object_field.fieldable do |fieldable| %>
34
+ <%= f.inputs do %>
35
+ <%= fieldable.input :id, as: :hidden, input_html: {name: form_prefix + fieldable.object_name.sub('part[', '[') + "[id]", value: fieldable.object.id } %>
36
+ <%= render partial: "admin/field_inputs/#{fieldable.object.field_template.field_type}", locals: {builder:fieldable, form_prefix: form_prefix, field_template:fieldable.object.field_template} %>
37
+ <%= fieldable.input :field_template_id, as: :hidden, input_html: {value: fieldable.object.field_template_id, name: form_prefix + fieldable.object_name.sub('part[', '[') + "[field_template_id]"} %>
38
+ <% end %>
39
+ <% end %>
40
+ <% end %>
41
+ <% end %>
42
+ <% end %>
43
+ <% end %>
44
+ <% end %>
45
+
46
+
47
+ <ol>
48
+ <li class="handle"><span class="icon icon_move_vertical"><svg x="0px" y="0px" width="100%" height="100%" viewBox="0 0 12 32" enable-background="new 0 0 12 32" xml:space="preserve"><g id=""></g><g id="move_x5F_vertical_x5F_12x32"> <g> <polygon fill="#5E6469" points="8,20 8,26 12,26 6,32 0,26 4,26 4,20 "></polygon> <polygon fill="#5E6469" points="4,12 4,6 0,6 6,0 12,6 8,6 8,12 "></polygon> </g></g></svg></span></li>
49
+ </ol>
50
+
51
+ <% if !part_object.new_record? or request.xhr?.blank? %>
52
+ </fieldset>
53
+ <% end %>
@@ -0,0 +1,11 @@
1
+ <%# Define the Part Object %>
2
+
3
+ <% part_object = resource.part_objects.build %>
4
+
5
+ <%# Build the fields %>
6
+ <%#= semantic_fields_for resource, namespace: 'new_part_form' do |r| %>
7
+ <%= render partial: "admin/part_objects/part_object", locals: {part_object: part_object, part: resource, form_prefix: params[:form_name]} %>
8
+ <%# end %>
9
+
10
+
11
+ <a class="button section_has_many_remove" href="#">Remove</a>
@@ -0,0 +1,32 @@
1
+ # Define the Part Object
2
+ part_objects = resource.part_objects.build
3
+
4
+ # parents_array = params[:form_name].split("[").map{|n| n.chomp(']')}
5
+
6
+ # raise
7
+
8
+ # Build the form
9
+ active_admin_form_for part, url: "to_be_stripped" do |f|
10
+ f.semantic_fields_for :part_objects do |part_object|
11
+
12
+ part_object.input :part_id, as: :hidden, input_html: {value: part.id}
13
+
14
+ resource.field_templates.each_with_index do |field_template, ix|
15
+ part_object.semantic_fields_for "part_object_fields_attributes[#{ix}]", part_objects.part_object_fields.build do |part_object_field|
16
+
17
+
18
+ field_object = Field.const_get(field_template.field_type.classify).new
19
+
20
+ part_object_field.semantic_fields_for "fieldable_attributes", field_object do |field|
21
+ part_object.inputs do
22
+ field.input field_template.field_type, label: field_template.title, required: field_template.is_required
23
+ field.input :fieldable_type, as: :hidden, input_html: {value: field_template.field_type.classify}
24
+ field.input :title, as: :hidden, input_html: {value: field_template.title}
25
+ end
26
+
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+
@@ -0,0 +1,33 @@
1
+ require 'rails/generators/migration'
2
+
3
+ module ActiveadminMagicfields
4
+ module Generators
5
+ class InstallGenerator < ::Rails::Generators::Base
6
+ include Rails::Generators::Migration
7
+ source_root File.expand_path('../templates', __FILE__)
8
+ desc "add the migrations"
9
+
10
+ def self.next_migration_number(path)
11
+ unless @prev_migration_nr
12
+ @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
13
+ else
14
+ @prev_migration_nr += 1
15
+ end
16
+ @prev_migration_nr.to_s
17
+ end
18
+
19
+ def copy_migrations
20
+ migration_template "create_parts.rb", "db/migrate/create_parts.rb"
21
+ migration_template "create_part_objects.rb", "db/migrate/create_part_objects.rb"
22
+ migration_template "create_part_object_fields.rb", "db/migrate/create_part_object_fields.rb"
23
+ migration_template "create_field_templates.rb", "db/migrate/create_field_templates.rb"
24
+ migration_template "create_field_text.rb", "db/migrate/create_field_text.rb"
25
+ migration_template "create_field_image.rb", "db/migrate/create_field_image.rb"
26
+ migration_template "create_field_textarea.rb", "db/migrate/create_field_textarea.rb"
27
+ migration_template "create_field_checkbox.rb", "db/migrate/create_field_checkbox.rb"
28
+ migration_template "create_field_repeater.rb", "db/migrate/create_field_repeater.rb"
29
+ migration_template "create_repeater_part_objects.rb", "db/migrate/create_repeater_part_objects.rb"
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,10 @@
1
+ class CreateFieldCheckbox < ActiveRecord::Migration
2
+ def change
3
+ create_table :field_checkboxes do |t|
4
+ t.string :title
5
+ t.boolean :checkbox
6
+ t.integer :field_template_id
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ class CreateFieldImage < ActiveRecord::Migration
2
+ def change
3
+ create_table :field_images do |t|
4
+ t.has_attached_file :image
5
+ t.string :title
6
+ t.integer :field_template_id
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ class CreateFieldRepeater < ActiveRecord::Migration
2
+ def change
3
+ create_table :field_repeaters do |t|
4
+ t.string :title
5
+ t.integer :field_template_id
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ class CreateFieldTemplates < ActiveRecord::Migration
2
+ def change
3
+ create_table :field_templates do |t|
4
+ t.string :title
5
+ t.boolean :is_required
6
+ t.string :field_type
7
+ t.references :part, index: true
8
+
9
+ t.integer :position
10
+
11
+ t.timestamps
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ class CreateFieldText < ActiveRecord::Migration
2
+ def change
3
+ create_table :field_texts do |t|
4
+ t.string :title
5
+ t.string :text
6
+ t.integer :field_template_id
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ class CreateFieldTextarea < ActiveRecord::Migration
2
+ def change
3
+ create_table :field_textareas do |t|
4
+ t.string :title
5
+ t.text :textarea
6
+ t.integer :field_template_id
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,10 @@
1
+ class CreatePartObjectFields < ActiveRecord::Migration
2
+ def change
3
+ create_table :part_object_fields do |t|
4
+ t.references :fieldable, polymorphic: true, index: true
5
+ t.integer :position
6
+ t.integer :part_object_id
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ class CreatePartObjects < ActiveRecord::Migration
2
+ def change
3
+ create_table :part_objects do |t|
4
+
5
+ t.integer :base_model_id
6
+ t.integer :part_id
7
+ t.integer :position
8
+
9
+ t.timestamps
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ class CreateParts < ActiveRecord::Migration
2
+ def change
3
+ create_table :parts do |t|
4
+ t.string :name
5
+
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ class CreateRepeaterPartObjects < ActiveRecord::Migration
2
+ def change
3
+ create_table :repeater_part_objects do |t|
4
+ t.references :part_object, index: true
5
+ t.references :field_repeater, index: true
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,154 @@
1
+ require 'spec_helper'
2
+
3
+ module ActiveAdminIntegrationSpecHelper
4
+ extend self
5
+
6
+ def load_defaults!
7
+ ActiveAdmin.unload!
8
+ ActiveAdmin.load!
9
+ ActiveAdmin.register(Article)
10
+ ActiveAdmin.register(Image)
11
+ ActiveAdmin.register(Text)
12
+ # reload_menus!
13
+ end
14
+
15
+ # def reload_menus!
16
+ # ActiveAdmin.application.namespaces.values.each{|n| n.reset_menu! }
17
+ # end
18
+
19
+ # Sometimes we need to reload the routes within
20
+ # the application to test them out
21
+ def reload_routes!
22
+ Rails.application.reload_routes!
23
+ end
24
+
25
+ # Helper method to load resources and ensure that Active Admin is
26
+ # setup with the new configurations.
27
+ #
28
+ # Eg:
29
+ # load_resources do
30
+ # ActiveAdmin.regiser(Post)
31
+ # end
32
+ #
33
+ def load_resources
34
+ ActiveAdmin.unload!
35
+ yield
36
+ reload_menus!
37
+ reload_routes!
38
+ end
39
+
40
+ # Sets up a describe block where you can render controller
41
+ # actions. Uses the Admin::PostsController as the subject
42
+ # for the describe block
43
+ def describe_with_render(*args, &block)
44
+ describe *args do
45
+ include RSpec::Rails::ControllerExampleGroup
46
+ render_views
47
+ # metadata[:behaviour][:describes] = ActiveAdmin.namespaces[:admin].resources['Post'].controller
48
+ module_eval &block
49
+ end
50
+ end
51
+
52
+ def arbre(assigns = {}, helpers = mock_action_view, &block)
53
+ Arbre::Context.new(assigns, helpers, &block)
54
+ end
55
+
56
+ def render_arbre_component(assigns = {}, helpers = mock_action_view, &block)
57
+ arbre(assigns, helpers, &block).children.first
58
+ end
59
+
60
+ # Setup a describe block which uses capybara and rails integration
61
+ # test methods.
62
+ def describe_with_capybara(*args, &block)
63
+ describe *args do
64
+ include RSpec::Rails::IntegrationExampleGroup
65
+ module_eval &block
66
+ end
67
+ end
68
+
69
+ # Returns a fake action view instance to use with our renderers
70
+ def mock_action_view(assigns = {})
71
+ controller = ActionView::TestCase::TestController.new
72
+ ActionView::Base.send :include, ActionView::Helpers
73
+ ActionView::Base.send :include, ActiveAdmin::ViewHelpers
74
+ ActionView::Base.send :include, Rails.application.routes.url_helpers
75
+ ActionView::Base.new(ActionController::Base.view_paths, assigns, controller)
76
+ end
77
+ alias_method :action_view, :mock_action_view
78
+
79
+ # A mock resource to register
80
+ class MockResource
81
+ end
82
+
83
+ def with_translation(translation)
84
+ I18n.backend.store_translations :en, translation
85
+ yield
86
+ ensure
87
+ I18n.backend.reload!
88
+ end
89
+
90
+ end
91
+
92
+ ENV['RAILS_ENV'] = 'test'
93
+ ENV['RAILS_ROOT'] = File.expand_path("../rails/rails-#{ENV['RAILS']}", __FILE__)
94
+
95
+ # Create the test app if it doesn't exists
96
+ unless File.exists?(ENV['RAILS_ROOT'])
97
+ system 'rake setup'
98
+ end
99
+
100
+ require 'rails'
101
+ require 'active_record'
102
+ require 'active_admin'
103
+ # require 'devise'
104
+ ActiveAdmin.application.load_paths = [ENV['RAILS_ROOT'] + "/app/admin"]
105
+
106
+ require ENV['RAILS_ROOT'] + '/config/environment'
107
+
108
+ require 'rspec/rails'
109
+
110
+ # Setup Some Admin stuff for us to play with
111
+ include ActiveAdminIntegrationSpecHelper
112
+ load_defaults!
113
+ reload_routes!
114
+
115
+ # Disabling authentication in specs so that we don't have to worry about
116
+ # it allover the place
117
+ ActiveAdmin.application.authentication_method = false
118
+ ActiveAdmin.application.current_user_method = false
119
+
120
+ # Don't add asset cache timestamps. Makes it easy to integration
121
+ # test for the presence of an asset file
122
+ ENV["RAILS_ASSET_ID"] = ''
123
+
124
+ RSpec.configure do |config|
125
+ config.use_transactional_fixtures = true
126
+ config.use_instantiated_fixtures = false
127
+ # config.include Devise::TestHelpers, type: :controller
128
+ config.render_views = false
129
+ config.filter_run focus: true
130
+ config.filter_run_excluding skip: true
131
+ config.run_all_when_everything_filtered = true
132
+ end
133
+
134
+ # All RSpec configuration needs to happen before any examples
135
+ # or else it whines.
136
+ require 'integration_example_group'
137
+ RSpec.configure do |c|
138
+ c.include RSpec::Rails::IntegrationExampleGroup, file_path: /\bspec\/requests\//
139
+ # c.include Devise::TestHelpers, type: :controller
140
+ end
141
+
142
+ # improve the performance of the specs suite by not logging anything
143
+ # see http://blog.plataformatec.com.br/2011/12/three-tips-to-improve-the-performance-of-your-test-suite/
144
+ Rails.logger.level = 4
145
+
146
+
147
+ # Improves performance by forcing the garbage collector to run less often.
148
+ unless ENV['DEFER_GC'] == '0' || ENV['DEFER_GC'] == 'false'
149
+ require 'support/deferred_garbage_collection'
150
+ RSpec.configure do |config|
151
+ config.before(:all) { DeferredGarbageCollection.start }
152
+ config.after(:all) { DeferredGarbageCollection.reconsider }
153
+ end
154
+ end