alchemy_cms 3.3.0.rc1 → 3.3.0.rc2
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 +4 -4
- data/CHANGELOG.md +3 -2
- data/Gemfile +1 -0
- data/alchemy_cms.gemspec +6 -6
- data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +0 -7
- data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +4 -4
- data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +51 -5
- data/app/assets/javascripts/alchemy/alchemy.sitemap.js.coffee +0 -2
- data/app/assets/stylesheets/alchemy/elements.scss +2 -2
- data/app/controllers/alchemy/admin/elements_controller.rb +2 -0
- data/app/controllers/alchemy/admin/pages_controller.rb +11 -3
- data/app/controllers/alchemy/admin/pictures_controller.rb +1 -0
- data/app/models/alchemy/element.rb +3 -1
- data/app/models/alchemy/element/element_contents.rb +2 -7
- data/app/models/alchemy/element/presenters.rb +11 -4
- data/app/models/alchemy/page.rb +3 -1
- data/app/views/alchemy/admin/attachments/archive_overlay.js.erb +0 -1
- data/app/views/alchemy/admin/contents/create.js.erb +0 -1
- data/app/views/alchemy/admin/elements/_element_header.html.erb +3 -1
- data/app/views/alchemy/admin/elements/order.js.erb +25 -10
- data/app/views/alchemy/admin/elements/update.js.erb +1 -2
- data/app/views/alchemy/admin/essence_files/assign.js.erb +0 -1
- data/app/views/alchemy/admin/essence_pictures/assign.js.erb +0 -1
- data/app/views/alchemy/admin/legacy_page_urls/create.js.erb +0 -1
- data/app/views/alchemy/admin/pages/destroy.js.erb +0 -1
- data/app/views/alchemy/admin/pages/update.js.erb +6 -4
- data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +2 -1
- data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -7
- data/app/views/alchemy/admin/pictures/archive_overlay.js.erb +0 -1
- data/bin/alchemy +1 -1
- data/bin/rspec +3 -2
- data/bin/spring +6 -6
- data/config/alchemy/config.yml +6 -1
- data/lib/alchemy/seeder.rb +9 -3
- data/lib/alchemy/version.rb +1 -1
- metadata +6 -471
- data/spec/controllers/alchemy/admin/attachments_controller_spec.rb +0 -193
- data/spec/controllers/alchemy/admin/base_controller_spec.rb +0 -87
- data/spec/controllers/alchemy/admin/clipboard_controller_spec.rb +0 -60
- data/spec/controllers/alchemy/admin/contents_controller_spec.rb +0 -78
- data/spec/controllers/alchemy/admin/dashboard_controller_spec.rb +0 -144
- data/spec/controllers/alchemy/admin/elements_controller_spec.rb +0 -496
- data/spec/controllers/alchemy/admin/essence_files_controller_spec.rb +0 -76
- data/spec/controllers/alchemy/admin/essence_pictures_controller_spec.rb +0 -202
- data/spec/controllers/alchemy/admin/languages_controller_spec.rb +0 -73
- data/spec/controllers/alchemy/admin/layoutpages_controller_spec.rb +0 -21
- data/spec/controllers/alchemy/admin/pages_controller_spec.rb +0 -639
- data/spec/controllers/alchemy/admin/pictures_controller_spec.rb +0 -383
- data/spec/controllers/alchemy/admin/resources_controller_spec.rb +0 -81
- data/spec/controllers/alchemy/admin/tags_controller_spec.rb +0 -63
- data/spec/controllers/alchemy/admin/trash_controller_spec.rb +0 -67
- data/spec/controllers/alchemy/api/contents_controller_spec.rb +0 -125
- data/spec/controllers/alchemy/api/elements_controller_spec.rb +0 -124
- data/spec/controllers/alchemy/api/pages_controller_spec.rb +0 -167
- data/spec/controllers/alchemy/attachments_controller_spec.rb +0 -64
- data/spec/controllers/alchemy/base_controller_spec.rb +0 -106
- data/spec/controllers/alchemy/elements_controller_spec.rb +0 -48
- data/spec/controllers/alchemy/messages_controller_spec.rb +0 -204
- data/spec/controllers/alchemy/on_page_layout_mixin_spec.rb +0 -330
- data/spec/controllers/alchemy/pages_controller_spec.rb +0 -343
- data/spec/controllers/alchemy/pictures_controller_spec.rb +0 -415
- data/spec/dummy/Rakefile +0 -6
- data/spec/dummy/app/assets/javascripts/application.js +0 -13
- data/spec/dummy/app/assets/stylesheets/application.css +0 -15
- data/spec/dummy/app/controllers/admin/events_controller.rb +0 -3
- data/spec/dummy/app/controllers/application_controller.rb +0 -15
- data/spec/dummy/app/controllers/login_controller.rb +0 -5
- data/spec/dummy/app/helpers/application_helper.rb +0 -2
- data/spec/dummy/app/mailers/.gitkeep +0 -0
- data/spec/dummy/app/models/ability.rb +0 -9
- data/spec/dummy/app/models/dummy_model.rb +0 -3
- data/spec/dummy/app/models/dummy_user.rb +0 -15
- data/spec/dummy/app/models/event.rb +0 -10
- data/spec/dummy/app/models/location.rb +0 -3
- data/spec/dummy/app/views/alchemy/elements/_all_you_can_eat_editor.html.erb +0 -11
- data/spec/dummy/app/views/alchemy/elements/_all_you_can_eat_view.html.erb +0 -31
- data/spec/dummy/app/views/alchemy/elements/_article_editor.html.erb +0 -6
- data/spec/dummy/app/views/alchemy/elements/_article_view.html.erb +0 -10
- data/spec/dummy/app/views/alchemy/elements/_bild_editor.html.erb +0 -3
- data/spec/dummy/app/views/alchemy/elements/_bild_view.html.erb +0 -5
- data/spec/dummy/app/views/alchemy/elements/_contactform_editor.html.erb +0 -6
- data/spec/dummy/app/views/alchemy/elements/_contactform_view.html.erb +0 -16
- data/spec/dummy/app/views/alchemy/elements/_download_editor.html.erb +0 -3
- data/spec/dummy/app/views/alchemy/elements/_download_view.html.erb +0 -5
- data/spec/dummy/app/views/alchemy/elements/_erb_element_editor.html.erb +0 -3
- data/spec/dummy/app/views/alchemy/elements/_erb_element_view.html.erb +0 -5
- data/spec/dummy/app/views/alchemy/elements/_header_editor.html.erb +0 -3
- data/spec/dummy/app/views/alchemy/elements/_header_view.html.erb +0 -5
- data/spec/dummy/app/views/alchemy/elements/_headline_editor.html.erb +0 -1
- data/spec/dummy/app/views/alchemy/elements/_headline_view.html.erb +0 -1
- data/spec/dummy/app/views/alchemy/elements/_news_editor.html.erb +0 -5
- data/spec/dummy/app/views/alchemy/elements/_news_view.html.erb +0 -11
- data/spec/dummy/app/views/alchemy/elements/_search_editor.html.erb +0 -1
- data/spec/dummy/app/views/alchemy/elements/_search_view.html.erb +0 -4
- data/spec/dummy/app/views/alchemy/elements/_slide_editor.html.erb +0 -3
- data/spec/dummy/app/views/alchemy/elements/_slide_view.html.erb +0 -5
- data/spec/dummy/app/views/alchemy/elements/_slider_editor.html.erb +0 -2
- data/spec/dummy/app/views/alchemy/elements/_slider_view.html.erb +0 -4
- data/spec/dummy/app/views/alchemy/elements/_text_editor.html.erb +0 -3
- data/spec/dummy/app/views/alchemy/elements/_text_view.html.erb +0 -5
- data/spec/dummy/app/views/alchemy/page_layouts/_standard.html.erb +0 -15
- data/spec/dummy/app/views/layouts/application.html.erb +0 -17
- data/spec/dummy/bin/bundle +0 -3
- data/spec/dummy/bin/rails +0 -4
- data/spec/dummy/bin/rake +0 -4
- data/spec/dummy/config.ru +0 -4
- data/spec/dummy/config/alchemy/cells.yml +0 -5
- data/spec/dummy/config/alchemy/elements.yml +0 -109
- data/spec/dummy/config/alchemy/page_layouts.yml +0 -32
- data/spec/dummy/config/application.rb +0 -32
- data/spec/dummy/config/boot.rb +0 -5
- data/spec/dummy/config/database.yml +0 -32
- data/spec/dummy/config/environment.rb +0 -5
- data/spec/dummy/config/environments/development.rb +0 -41
- data/spec/dummy/config/environments/production.rb +0 -77
- data/spec/dummy/config/environments/test.rb +0 -43
- data/spec/dummy/config/initializers/alchemy.rb +0 -3
- data/spec/dummy/config/initializers/assets.rb +0 -11
- data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/dummy/config/initializers/cookies_serializer.rb +0 -3
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +0 -4
- data/spec/dummy/config/initializers/inflections.rb +0 -16
- data/spec/dummy/config/initializers/mime_types.rb +0 -4
- data/spec/dummy/config/initializers/secret_token.rb +0 -12
- data/spec/dummy/config/initializers/session_store.rb +0 -3
- data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/spec/dummy/config/locales/kl.yml +0 -2
- data/spec/dummy/config/routes.rb +0 -12
- data/spec/dummy/config/secrets.yml +0 -22
- data/spec/dummy/db/migrate/20121026104128_create_events.rb +0 -20
- data/spec/dummy/db/migrate/20130328101418_create_locations.rb +0 -9
- data/spec/dummy/db/migrate/20130827094554_alchemy_two_point_six.rb +0 -1
- data/spec/dummy/db/migrate/20130828121054_remove_do_not_index_from_alchemy_essence_texts.rb +0 -1
- data/spec/dummy/db/migrate/20130828121120_remove_do_not_index_from_alchemy_essence_richtexts.rb +0 -1
- data/spec/dummy/db/migrate/20130918201742_add_published_at_to_alchemy_pages.rb +0 -1
- data/spec/dummy/db/migrate/20131209225243_create_dummy_users.rb +0 -9
- data/spec/dummy/db/migrate/20150122213511_acts_as_taggable_on_migration.acts_as_taggable_on_engine.rb +0 -31
- data/spec/dummy/db/migrate/20150122213512_add_missing_unique_indices.acts_as_taggable_on_engine.rb +0 -20
- data/spec/dummy/db/migrate/20150122213513_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb +0 -15
- data/spec/dummy/db/migrate/20150122213514_add_missing_taggable_index.acts_as_taggable_on_engine.rb +0 -10
- data/spec/dummy/db/migrate/20150412103152_create_dummy_model.rb +0 -7
- data/spec/dummy/db/migrate/20150608204610_add_parent_element_id_to_alchemy_elements.rb +0 -1
- data/spec/dummy/db/migrate/20150729151825_add_link_text_to_alchemy_essence_files.rb +0 -1
- data/spec/dummy/db/migrate/20150906195818_add_locale_to_alchemy_languages.rb +0 -1
- data/spec/dummy/db/schema.rb +0 -326
- data/spec/dummy/db/seeds.rb +0 -1
- data/spec/dummy/lib/assets/.gitkeep +0 -0
- data/spec/dummy/public/404.html +0 -67
- data/spec/dummy/public/422.html +0 -67
- data/spec/dummy/public/500.html +0 -66
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/spec/javascripts +0 -1
- data/spec/factories.rb +0 -13
- data/spec/features/admin/admin_layout_spec.rb +0 -14
- data/spec/features/admin/dashboard_spec.rb +0 -81
- data/spec/features/admin/edit_elements_feature_spec.rb +0 -36
- data/spec/features/admin/language_tree_feature_spec.rb +0 -32
- data/spec/features/admin/languages_features_spec.rb +0 -65
- data/spec/features/admin/legacy_page_url_management_spec.rb +0 -62
- data/spec/features/admin/link_overlay_spec.rb +0 -53
- data/spec/features/admin/locale_select_feature_spec.rb +0 -25
- data/spec/features/admin/modules_integration_spec.rb +0 -23
- data/spec/features/admin/navigation_feature_spec.rb +0 -22
- data/spec/features/admin/page_creation_feature_spec.rb +0 -51
- data/spec/features/admin/page_editing_feature_spec.rb +0 -135
- data/spec/features/admin/picture_library_integration_spec.rb +0 -62
- data/spec/features/admin/resources_integration_spec.rb +0 -128
- data/spec/features/admin/site_select_feature_spec.rb +0 -31
- data/spec/features/admin/tinymce_feature_spec.rb +0 -33
- data/spec/features/navigation_spec.rb +0 -9
- data/spec/features/page_feature_spec.rb +0 -186
- data/spec/features/page_redirects_spec.rb +0 -358
- data/spec/features/picture_security_spec.rb +0 -29
- data/spec/features/security_spec.rb +0 -24
- data/spec/features/translation_integration_spec.rb +0 -51
- data/spec/fixtures/500x500.png +0 -0
- data/spec/fixtures/80x60.png +0 -0
- data/spec/fixtures/animated.gif +0 -0
- data/spec/fixtures/image with spaces.png +0 -0
- data/spec/fixtures/image.png +0 -0
- data/spec/fixtures/image2.PNG +0 -0
- data/spec/fixtures/image3.jpeg +0 -0
- data/spec/helpers/alchemy/admin/attachments_helper_spec.rb +0 -15
- data/spec/helpers/alchemy/admin/base_helper_spec.rb +0 -280
- data/spec/helpers/alchemy/admin/contents_helper_spec.rb +0 -46
- data/spec/helpers/alchemy/admin/elements_helper_spec.rb +0 -314
- data/spec/helpers/alchemy/admin/essences_helper_spec.rb +0 -201
- data/spec/helpers/alchemy/admin/navigation_helper_spec.rb +0 -294
- data/spec/helpers/alchemy/admin/pages_helper_spec.rb +0 -63
- data/spec/helpers/alchemy/admin/pictures_helper_spec.rb +0 -28
- data/spec/helpers/alchemy/admin/tags_helper_spec.rb +0 -111
- data/spec/helpers/alchemy/base_helper_spec.rb +0 -44
- data/spec/helpers/alchemy/elements_block_helper_spec.rb +0 -135
- data/spec/helpers/alchemy/elements_helper_spec.rb +0 -326
- data/spec/helpers/alchemy/essences_helper_spec.rb +0 -85
- data/spec/helpers/alchemy/pages_helper_spec.rb +0 -499
- data/spec/helpers/alchemy/picture_url_helpers_spec.rb +0 -78
- data/spec/helpers/alchemy/url_helper_spec.rb +0 -200
- data/spec/javascripts/alchemy/dialog_spec.coffee +0 -82
- data/spec/javascripts/alchemy/link_overlay_spec.coffee +0 -25
- data/spec/javascripts/alchemy_integration_spec.coffee +0 -3
- data/spec/javascripts/fixtures/select.html +0 -3
- data/spec/javascripts/helpers/mock-ajax.js +0 -199
- data/spec/javascripts/helpers/test_responses/test_responses.js +0 -1
- data/spec/javascripts/support/jasmine.yml +0 -29
- data/spec/libraries/auth_accessors_spec.rb +0 -40
- data/spec/libraries/config_spec.rb +0 -111
- data/spec/libraries/controller_actions_spec.rb +0 -133
- data/spec/libraries/i18n_spec.rb +0 -37
- data/spec/libraries/kaminari/scoped_pagination_url_helper_spec.rb +0 -30
- data/spec/libraries/modules_spec.rb +0 -67
- data/spec/libraries/mount_point_spec.rb +0 -77
- data/spec/libraries/page_layout_spec.rb +0 -150
- data/spec/libraries/paths_spec.rb +0 -15
- data/spec/libraries/permissions_spec.rb +0 -260
- data/spec/libraries/resource_spec.rb +0 -344
- data/spec/libraries/resources_helper_spec.rb +0 -193
- data/spec/libraries/shell_spec.rb +0 -121
- data/spec/libraries/template_tracker_spec.rb +0 -85
- data/spec/libraries/tinymce_spec.rb +0 -111
- data/spec/libraries/userstamp_spec.rb +0 -10
- data/spec/mailers/alchemy/messages_spec.rb +0 -21
- data/spec/models/alchemy/attachment_spec.rb +0 -250
- data/spec/models/alchemy/cell_spec.rb +0 -101
- data/spec/models/alchemy/content_spec.rb +0 -513
- data/spec/models/alchemy/element_spec.rb +0 -862
- data/spec/models/alchemy/element_to_page_spec.rb +0 -13
- data/spec/models/alchemy/essence_boolean_spec.rb +0 -10
- data/spec/models/alchemy/essence_date_spec.rb +0 -28
- data/spec/models/alchemy/essence_file_spec.rb +0 -40
- data/spec/models/alchemy/essence_html_spec.rb +0 -18
- data/spec/models/alchemy/essence_link_spec.rb +0 -10
- data/spec/models/alchemy/essence_picture_spec.rb +0 -255
- data/spec/models/alchemy/essence_richtext_spec.rb +0 -23
- data/spec/models/alchemy/essence_select_spec.rb +0 -10
- data/spec/models/alchemy/essence_text_spec.rb +0 -110
- data/spec/models/alchemy/language_spec.rb +0 -243
- data/spec/models/alchemy/legacy_page_url_spec.rb +0 -21
- data/spec/models/alchemy/message_spec.rb +0 -55
- data/spec/models/alchemy/page_spec.rb +0 -2108
- data/spec/models/alchemy/picture_spec.rb +0 -418
- data/spec/models/alchemy/site_spec.rb +0 -168
- data/spec/models/alchemy/tag_spec.rb +0 -29
- data/spec/models/dummy_model_spec.rb +0 -10
- data/spec/requests/alchemy/admin/resources_requests_spec.rb +0 -26
- data/spec/requests/alchemy/admin/site_requests_spec.rb +0 -19
- data/spec/requests/alchemy/site_requests_spec.rb +0 -18
- data/spec/requests/alchemy/sitemap_spec.rb +0 -56
- data/spec/routing/api_routing_spec.rb +0 -150
- data/spec/routing/routing_spec.rb +0 -340
- data/spec/spec_helper.rb +0 -90
- data/spec/support/ci/install_phantomjs +0 -7
- data/spec/support/hint_examples.rb +0 -28
- data/spec/support/test_tweaks.rb +0 -31
- data/spec/support/transformation_examples.rb +0 -179
- data/spec/tasks/helpers_spec.rb +0 -217
- data/spec/views/admin/pictures/show_spec.rb +0 -43
- data/spec/views/essences/essence_boolean_editor_spec.rb +0 -32
- data/spec/views/essences/essence_boolean_view_spec.rb +0 -23
- data/spec/views/essences/essence_date_view_spec.rb +0 -38
- data/spec/views/essences/essence_file_editor_spec.rb +0 -59
- data/spec/views/essences/essence_file_view_spec.rb +0 -77
- data/spec/views/essences/essence_html_view_spec.rb +0 -22
- data/spec/views/essences/essence_link_view_spec.rb +0 -41
- data/spec/views/essences/essence_picture_editor_spec.rb +0 -80
- data/spec/views/essences/essence_picture_view_spec.rb +0 -128
- data/spec/views/essences/essence_richtext_view_spec.rb +0 -32
- data/spec/views/essences/essence_select_view_spec.rb +0 -11
- data/spec/views/essences/essence_text_view_spec.rb +0 -51
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
class Party
|
|
4
|
-
end
|
|
5
|
-
|
|
6
|
-
module Namespace1
|
|
7
|
-
module Namespace2
|
|
8
|
-
class Party
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
module Namespace
|
|
14
|
-
class Party
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
module PartyEngine
|
|
19
|
-
module Namespace
|
|
20
|
-
class Party
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
module Alchemy
|
|
26
|
-
describe Resource do
|
|
27
|
-
# Alchemy's standard module definition. Only engine_name is relevant here
|
|
28
|
-
let(:module_definition) do
|
|
29
|
-
{
|
|
30
|
-
"name" => "party_list",
|
|
31
|
-
"engine_name" => "party_engine",
|
|
32
|
-
"navigation" => {
|
|
33
|
-
"name" => "modules.party_list",
|
|
34
|
-
"controller" => "/admin/parties",
|
|
35
|
-
"action" => "index",
|
|
36
|
-
"image" => "/assets/party_list_module.png"
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
let(:columns) do
|
|
42
|
-
[
|
|
43
|
-
double(:column, {name: 'name', type: :string, array: false}),
|
|
44
|
-
double(:column, {name: 'hidden_value', type: :string, array: false}),
|
|
45
|
-
double(:column, {name: 'description', type: :string, array: false}),
|
|
46
|
-
double(:column, {name: 'id', type: :integer, array: false}),
|
|
47
|
-
double(:column, {name: 'starts_at', type: :datetime, array: false}),
|
|
48
|
-
double(:column, {name: 'location_id', type: :integer, array: false}),
|
|
49
|
-
double(:column, {name: 'organizer_id', type: :integer, array: false})
|
|
50
|
-
]
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
let(:resource) { Resource.new("admin/parties", module_definition) }
|
|
54
|
-
|
|
55
|
-
before :each do
|
|
56
|
-
# stubbing an ActiveRecord::ModelSchema...
|
|
57
|
-
allow(Party).to receive(:columns).and_return columns
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
describe "#initialize" do
|
|
61
|
-
it "sets an instance variable that holds the controller path" do
|
|
62
|
-
resource = Resource.new("admin/parties")
|
|
63
|
-
expect(resource.instance_variable_get(:@controller_path)).to eq("admin/parties")
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
context "when initialized with a module definition" do
|
|
67
|
-
it "sets an instance variable that holds the module definition" do
|
|
68
|
-
expect(resource.instance_variable_get(:@module_definition)).to eq(module_definition)
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
context "when initialized with a custom model" do
|
|
73
|
-
it "sets @model to custom model" do
|
|
74
|
-
CustomParty = Class.new
|
|
75
|
-
resource = Resource.new("admin/parties", nil, CustomParty)
|
|
76
|
-
expect(resource.instance_variable_get(:@model)).to eq(CustomParty)
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
context "when initialized without custom model" do
|
|
81
|
-
it "guesses the model by the controller_path" do
|
|
82
|
-
resource = Resource.new("admin/parties", nil, nil)
|
|
83
|
-
expect(resource.instance_variable_get(:@model)).to eq(Party)
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
context "when model has alchemy_resource_relations defined" do
|
|
88
|
-
before do
|
|
89
|
-
allow(Party).to receive(:alchemy_resource_relations) do
|
|
90
|
-
{location: {attr_method: 'name', type: 'string'}}
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
context ", but not an ActiveRecord association" do
|
|
95
|
-
before do
|
|
96
|
-
allow(Party).to receive(:respond_to?) do |arg|
|
|
97
|
-
case arg
|
|
98
|
-
when :reflect_on_all_associations
|
|
99
|
-
then false
|
|
100
|
-
when :alchemy_resource_relations
|
|
101
|
-
then true
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
it "should raise error." do
|
|
107
|
-
expect { Resource.new("admin/parties") }.to raise_error(MissingActiveRecordAssociation)
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
describe "#resource_array" do
|
|
114
|
-
it "splits the controller_path and returns it as array." do
|
|
115
|
-
resource = Resource.new("namespace1/namespace2/parties")
|
|
116
|
-
expect(resource.resource_array).to eql(%w(namespace1 namespace2 parties))
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
it "deletes 'admin' if found hence our model isn't in the admin-namespace by convention" do
|
|
120
|
-
expect(resource.resource_array).to eql(%w(parties))
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
describe "#model" do
|
|
125
|
-
it "returns the @model instance variable" do
|
|
126
|
-
expect(resource.model).to eq(resource.instance_variable_get(:@model))
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
describe "#resources_name" do
|
|
131
|
-
it "returns plural name (like parties for model Party)" do
|
|
132
|
-
expect(resource.resources_name).to eq("parties")
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
describe "#resource_name" do
|
|
137
|
-
it "returns the resources name as singular" do
|
|
138
|
-
expect(resource.resource_name).to eq("party")
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
describe "#namespaced_resource_name" do
|
|
143
|
-
it "returns resource_name with namespace (namespace_party for Namespace::Party), i.e. for use in forms" do
|
|
144
|
-
namespaced_resource = Resource.new("admin/namespace/parties")
|
|
145
|
-
expect(namespaced_resource.namespaced_resource_name).to eq('namespace_party')
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
it "equals resource_name if resource not namespaced" do
|
|
149
|
-
namespaced_resource = Resource.new("admin/parties")
|
|
150
|
-
expect(namespaced_resource.namespaced_resource_name).to eq('party')
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
it "doesn't include the engine's name" do
|
|
154
|
-
namespaced_resource = Resource.new("admin/party_engine/namespace/parties", module_definition)
|
|
155
|
-
expect(namespaced_resource.namespaced_resource_name).to eq('namespace_party')
|
|
156
|
-
end
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
describe "#engine_name" do
|
|
160
|
-
it "should return the engine name of the module" do
|
|
161
|
-
resource = Resource.new("admin/party_engine/namespace/parties", module_definition)
|
|
162
|
-
expect(resource.engine_name).to eq("party_engine")
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
describe "#namespace_for_scope" do
|
|
167
|
-
it "returns a scope for use in url_for based path helpers" do
|
|
168
|
-
expect(resource.namespace_for_scope).to eq(%w(admin))
|
|
169
|
-
end
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
describe "#attributes" do
|
|
173
|
-
subject { resource.attributes }
|
|
174
|
-
|
|
175
|
-
it "parses and returns the resource model's attributes from ActiveRecord::ModelSchema" do
|
|
176
|
-
expect(subject).to eq([
|
|
177
|
-
{name: "name", type: :string},
|
|
178
|
-
{name: "hidden_value", type: :string},
|
|
179
|
-
{name: "description", type: :string},
|
|
180
|
-
{name: "starts_at", type: :datetime},
|
|
181
|
-
{name: "location_id", type: :integer},
|
|
182
|
-
{name: "organizer_id", type: :integer}
|
|
183
|
-
])
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
it "skips the standard database attributes (rails defaults)" do
|
|
187
|
-
expect(subject.map { |el| el[:name] }).not_to include(%w(id updated_at created_at creator_id updater_id))
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
it "skips attributes returned by skipped_alchemy_resource_attributes" do
|
|
191
|
-
allow(Party).to receive(:skipped_alchemy_resource_attributes) { %w(hidden_value) }
|
|
192
|
-
expect(subject).to include({name: "id", type: :integer})
|
|
193
|
-
expect(subject).not_to include({name: "hidden_value", type: :string})
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
context "when resource_relations are not defined" do
|
|
197
|
-
it "includes the attribute" do
|
|
198
|
-
expect(subject.detect { |a| a[:name] == "location_id" }).to eq({name: "location_id", type: :integer})
|
|
199
|
-
end
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
context "with restricted attributes set" do
|
|
203
|
-
before do
|
|
204
|
-
allow(Party).to receive(:restricted_alchemy_resource_attributes) do
|
|
205
|
-
[{name: "name", type: :string}]
|
|
206
|
-
end
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
it "should include the restricted attributes" do
|
|
210
|
-
expect(subject).to include(name: "name", type: :string)
|
|
211
|
-
end
|
|
212
|
-
end
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
context "when `skipped_alchemy_resource_attributes` is defined as class method in the model" do
|
|
216
|
-
let(:custom_skipped_attributes) { %w(hidden_name) }
|
|
217
|
-
|
|
218
|
-
before do
|
|
219
|
-
allow(Party).to receive(:skipped_alchemy_resource_attributes) do
|
|
220
|
-
custom_skipped_attributes
|
|
221
|
-
end
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
describe '#attributes' do
|
|
225
|
-
it "does not return the attributes returned by that method" do
|
|
226
|
-
expect(resource.attributes.detect { |a| a[:name] == 'hidden_name' }).to be_nil
|
|
227
|
-
expect(resource.attributes.detect { |a| a[:name] == 'name' }).not_to be_nil
|
|
228
|
-
end
|
|
229
|
-
end
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
describe "#searchable_attributes" do
|
|
233
|
-
subject { resource.searchable_attributes }
|
|
234
|
-
|
|
235
|
-
it "returns all attributes of type string" do
|
|
236
|
-
is_expected.to eq([
|
|
237
|
-
{name: "name", type: :string},
|
|
238
|
-
{name: "hidden_value", type: :string},
|
|
239
|
-
{name: "description", type: :string}
|
|
240
|
-
])
|
|
241
|
-
end
|
|
242
|
-
|
|
243
|
-
context "with an array attribute" do
|
|
244
|
-
let(:columns) do
|
|
245
|
-
[
|
|
246
|
-
double(:column, {name: 'name', type: :string, array: false}),
|
|
247
|
-
double(:column, {name: 'languages', type: :string, array: true})
|
|
248
|
-
]
|
|
249
|
-
end
|
|
250
|
-
|
|
251
|
-
it "does not include this column" do
|
|
252
|
-
is_expected.to eq([{name: "name", type: :string}])
|
|
253
|
-
end
|
|
254
|
-
end
|
|
255
|
-
end
|
|
256
|
-
|
|
257
|
-
describe "#editable_attributes" do
|
|
258
|
-
subject { resource.editable_attributes }
|
|
259
|
-
|
|
260
|
-
let(:columns) do
|
|
261
|
-
[
|
|
262
|
-
double(:column, {name: 'name', type: :string}),
|
|
263
|
-
double(:column, {name: 'title', type: :string}),
|
|
264
|
-
double(:column, {name: 'synced_at', type: :datetime}),
|
|
265
|
-
double(:column, {name: 'remote_record_id', type: :string})
|
|
266
|
-
]
|
|
267
|
-
end
|
|
268
|
-
|
|
269
|
-
before do
|
|
270
|
-
allow(Party).to receive(:restricted_alchemy_resource_attributes) do
|
|
271
|
-
[:synced_at, :remote_record_id]
|
|
272
|
-
end
|
|
273
|
-
end
|
|
274
|
-
|
|
275
|
-
it "does not contain restricted attributes" do
|
|
276
|
-
is_expected.to eq([{name: "name", type: :string}, {name: "title", type: :string}])
|
|
277
|
-
end
|
|
278
|
-
end
|
|
279
|
-
|
|
280
|
-
context "when alchemy_resource_relations defined as class method in the model" do
|
|
281
|
-
let(:resource) { Resource.new("admin/events") }
|
|
282
|
-
|
|
283
|
-
before do
|
|
284
|
-
allow(Event).to receive(:alchemy_resource_relations) do
|
|
285
|
-
{
|
|
286
|
-
location: {attr_method: "name", attr_type: :string}
|
|
287
|
-
}
|
|
288
|
-
end
|
|
289
|
-
end
|
|
290
|
-
|
|
291
|
-
describe '#resource_relations' do
|
|
292
|
-
it "should contain model_association from ActiveRecord::Reflections" do
|
|
293
|
-
relation = resource.resource_relations[:location_id]
|
|
294
|
-
expect(relation.keys).to include(:model_association)
|
|
295
|
-
expect(relation[:model_association].class).to be(ActiveRecord::Reflection::BelongsToReflection)
|
|
296
|
-
end
|
|
297
|
-
|
|
298
|
-
it "adds '_id' to relation key" do
|
|
299
|
-
expect(resource.resource_relations[:location_id]).not_to be_nil
|
|
300
|
-
end
|
|
301
|
-
|
|
302
|
-
it "stores the relation name" do
|
|
303
|
-
relation = resource.resource_relations[:location_id]
|
|
304
|
-
expect(relation.keys).to include(:name)
|
|
305
|
-
expect(relation[:name]).to eq('location')
|
|
306
|
-
end
|
|
307
|
-
end
|
|
308
|
-
|
|
309
|
-
describe '#model_associations' do
|
|
310
|
-
it "skip default alchemy model associations" do
|
|
311
|
-
expect(resource.model_associations.collect(&:name)).not_to include(*resource.class.const_get(:DEFAULT_SKIPPED_ASSOCIATIONS).map(&:to_sym))
|
|
312
|
-
end
|
|
313
|
-
end
|
|
314
|
-
|
|
315
|
-
describe '#model_association_names' do
|
|
316
|
-
it 'returns an array of association names' do
|
|
317
|
-
expect(resource.model_association_names).to eq [:location]
|
|
318
|
-
end
|
|
319
|
-
end
|
|
320
|
-
|
|
321
|
-
describe '#attributes' do
|
|
322
|
-
it "contains the attribute of the related model" do
|
|
323
|
-
expect(resource.attributes.detect { |a| a[:name] == 'location_id' }.keys).to include(:relation)
|
|
324
|
-
end
|
|
325
|
-
|
|
326
|
-
it "contains the related model's column type as type" do
|
|
327
|
-
expect(resource.attributes.detect { |a| a[:name] == "location_id" }[:type]).to eq(:string)
|
|
328
|
-
end
|
|
329
|
-
end
|
|
330
|
-
end
|
|
331
|
-
|
|
332
|
-
describe "#engine_name" do
|
|
333
|
-
it "should return the engine name of the module" do
|
|
334
|
-
expect(resource.engine_name).to eq("party_engine")
|
|
335
|
-
end
|
|
336
|
-
end
|
|
337
|
-
|
|
338
|
-
describe "#in_engine?" do
|
|
339
|
-
it "should return true if the module is shipped within an engine" do
|
|
340
|
-
expect(resource.in_engine?).to eq(true)
|
|
341
|
-
end
|
|
342
|
-
end
|
|
343
|
-
end
|
|
344
|
-
end
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/../../lib/alchemy/resource"
|
|
2
|
-
require File.dirname(__FILE__) + "/../../lib/alchemy/resources_helper"
|
|
3
|
-
|
|
4
|
-
module Namespace
|
|
5
|
-
class MyResource
|
|
6
|
-
end
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
module EngineResource
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
class ResourcesController
|
|
13
|
-
include Alchemy::ResourcesHelper
|
|
14
|
-
|
|
15
|
-
def resource_handler
|
|
16
|
-
@resource_handler ||= Alchemy::Resource.new('admin/namespace/my_resources')
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
class ResourcesControllerForEngine
|
|
21
|
-
include Alchemy::ResourcesHelper
|
|
22
|
-
|
|
23
|
-
def resource_handler
|
|
24
|
-
@resource_handler ||= Alchemy::Resource.new('admin/engine_resources', {'engine_name' => 'my_engine'})
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
describe Alchemy::ResourcesHelper do
|
|
29
|
-
let(:controller) { ResourcesController.new }
|
|
30
|
-
let(:resource_item) { double('resource-item') }
|
|
31
|
-
|
|
32
|
-
before {
|
|
33
|
-
allow(controller).to receive(:main_app).and_return 'main_app_proxy'
|
|
34
|
-
controller.instance_variable_set('@my_resource', resource_item)
|
|
35
|
-
controller.instance_variable_set('@my_resources', [resource_item])
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
describe "path-helpers" do
|
|
39
|
-
describe "#resource_url_proxy" do
|
|
40
|
-
it "returns the current proxy for url-helper-methods" do
|
|
41
|
-
expect(controller.resource_url_proxy).to eq('main_app_proxy')
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
context "when resource is in engine" do
|
|
45
|
-
let(:controller_for_engine) { ResourcesControllerForEngine.new }
|
|
46
|
-
before { allow(controller_for_engine).to receive('my_engine').and_return('my_engine_proxy') }
|
|
47
|
-
|
|
48
|
-
it "returns the engine's proxy" do
|
|
49
|
-
expect(controller_for_engine.resource_url_proxy).to eq('my_engine_proxy')
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
describe "#resource_scope" do
|
|
55
|
-
it "returns an array containing a proxy and namespaces for url_for-based helper-methods" do
|
|
56
|
-
expect(controller.resource_scope).to eq(%w[main_app_proxy admin])
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
describe "#resource_path" do
|
|
61
|
-
it "invokes polymorphic-path with correct scope and object" do
|
|
62
|
-
my_resource_item = double
|
|
63
|
-
expect(controller).to receive(:polymorphic_path).with(["main_app_proxy", "admin", my_resource_item], {})
|
|
64
|
-
controller.resource_path(my_resource_item)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it "uses resource_name when no object is given" do
|
|
68
|
-
expect(controller).to receive(:polymorphic_path).with(["main_app_proxy", "admin", "my_resource"], {})
|
|
69
|
-
controller.resource_path
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
describe "#resources_path" do
|
|
74
|
-
it "invokes polymorphic-path with correct scope and resources_name" do
|
|
75
|
-
expect(controller).to receive(:polymorphic_path).with(["main_app_proxy", "admin", "my_resources"], {})
|
|
76
|
-
controller.resources_path
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
describe "#new_resource_path" do
|
|
81
|
-
it "invokes new_polymorphic_path with correct scope and resource_name" do
|
|
82
|
-
expect(controller).to receive(:new_polymorphic_path).with(["main_app_proxy", "admin", "my_resource"], {})
|
|
83
|
-
controller.new_resource_path
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
describe "#edit_resource_path" do
|
|
88
|
-
it "invokes edit_polymorphic_path with correct scope and resource_name" do
|
|
89
|
-
my_resource_item = double
|
|
90
|
-
expect(controller).to receive(:edit_polymorphic_path).with(["main_app_proxy", "admin", my_resource_item], {})
|
|
91
|
-
controller.edit_resource_path(my_resource_item)
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
describe "#resource_instance_variable" do
|
|
97
|
-
it "returns the resource_item" do
|
|
98
|
-
expect(controller.resource_instance_variable).to eq(resource_item)
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
describe "#resources_instance_variable" do
|
|
103
|
-
it "returns a collection of resource_items" do
|
|
104
|
-
expect(controller.resources_instance_variable).to eq([resource_item])
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
describe "#resource_window_size" do
|
|
109
|
-
it "returns overlay size string depending on resource attributes length" do
|
|
110
|
-
allow(controller).to receive(:resource_handler).and_return double(attributes: double(length: 4))
|
|
111
|
-
expect(controller.resource_window_size).to eq("420x260")
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
describe "#render_attribute" do
|
|
116
|
-
subject { controller.render_attribute(resource_item, attributes, options) }
|
|
117
|
-
|
|
118
|
-
let(:options) { {} }
|
|
119
|
-
let(:attributes) { {name: 'name'} }
|
|
120
|
-
|
|
121
|
-
it "should return the value from resource attribute" do
|
|
122
|
-
allow(resource_item).to receive(:name).and_return('my-name')
|
|
123
|
-
is_expected.to eq('my-name')
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
context "resource having a relation" do
|
|
127
|
-
let(:associated_object) { double("location", title: 'Title of related object') }
|
|
128
|
-
let(:associated_klass) { double("klass", find: associated_object) }
|
|
129
|
-
let(:relation) do
|
|
130
|
-
{
|
|
131
|
-
attr_method: 'title',
|
|
132
|
-
model_association: OpenStruct.new(klass: associated_klass)
|
|
133
|
-
}
|
|
134
|
-
end
|
|
135
|
-
let(:attributes) do
|
|
136
|
-
{name: 'name', relation: relation}
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
it "should return the value from the related object attribute" do
|
|
140
|
-
allow(resource_item).to receive(:name).and_return('my-name')
|
|
141
|
-
is_expected.to eq('Title of related object')
|
|
142
|
-
end
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
context 'with long values' do
|
|
146
|
-
before do
|
|
147
|
-
allow(resource_item).to receive(:name).and_return('*' * 51)
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
it 'truncates the values' do
|
|
151
|
-
expect(subject.length).to eq(50)
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
context 'but with options[:truncate] set to 10' do
|
|
155
|
-
let(:options) { {truncate: 10} }
|
|
156
|
-
|
|
157
|
-
it 'does not truncate the values' do
|
|
158
|
-
expect(subject.length).to eq(10)
|
|
159
|
-
end
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
context 'but with options[:truncate] set to false' do
|
|
163
|
-
let(:options) { {truncate: false} }
|
|
164
|
-
|
|
165
|
-
it 'does not truncate the values' do
|
|
166
|
-
expect(subject.length).to eq(51)
|
|
167
|
-
end
|
|
168
|
-
end
|
|
169
|
-
end
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
describe "#resource_name" do
|
|
173
|
-
it "returns resource_handler.resource_name" do
|
|
174
|
-
expect(controller.resource_name).to eq("my_resource")
|
|
175
|
-
end
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
describe '#current_location_params' do
|
|
179
|
-
let(:params) { {q: "some_query", page: 6, action: "some_action"} }
|
|
180
|
-
|
|
181
|
-
before do
|
|
182
|
-
allow(controller).to receive(:params) { params }
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
it 'returns the current location params' do
|
|
186
|
-
expect(controller.current_location_params).to eq({q: "some_query", page: 6})
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
it 'only includes the q and page parameters' do
|
|
190
|
-
expect(controller.current_location_params).not_to have_key(:action)
|
|
191
|
-
end
|
|
192
|
-
end
|
|
193
|
-
end
|