releaf-core 0.2.1 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +19 -21
- data/app/assets/javascripts/releaf/application.js +1 -2
- data/app/assets/javascripts/releaf/include/field.type_date_or_datetime_or_time.js +19 -21
- data/app/assets/javascripts/releaf/include/field.type_richtext.js +31 -9
- data/app/assets/javascripts/releaf/include/localization.js +3 -8
- data/app/assets/javascripts/releaf/include/nested_fields.js +1 -1
- data/app/assets/javascripts/releaf/include/remote_validator.js +7 -4
- data/app/assets/javascripts/releaf/include/sortable.js +1 -1
- data/app/assets/javascripts/releaf/include/{profile_settings.js → store_settings.js} +4 -10
- data/app/assets/javascripts/releaf/include/toolbox.js +7 -11
- data/app/assets/stylesheets/releaf/layout/fields.scss +1 -0
- data/app/assets/stylesheets/releaf/layout/header.scss +1 -0
- data/app/assets/stylesheets/releaf/layout/search.scss +15 -0
- data/app/builders/releaf/builders/base.rb +11 -9
- data/app/builders/releaf/builders/confirm_destroy_dialog_builder.rb +2 -2
- data/app/builders/releaf/builders/confirm_dialog_builder.rb +3 -3
- data/app/builders/releaf/builders/edit_builder.rb +51 -6
- data/app/builders/releaf/builders/form_builder/associated_set_field.rb +37 -0
- data/app/builders/releaf/builders/form_builder/associations.rb +153 -0
- data/app/builders/releaf/builders/form_builder/boolean_fields.rb +12 -0
- data/app/builders/releaf/builders/form_builder/date_fields.rb +30 -0
- data/app/builders/releaf/builders/form_builder/fields.rb +10 -0
- data/app/builders/releaf/builders/form_builder/file_fields.rb +47 -0
- data/app/builders/releaf/builders/form_builder/i18n_fields.rb +75 -0
- data/app/builders/releaf/builders/form_builder/label.rb +34 -0
- data/app/builders/releaf/builders/form_builder/number_fields.rb +13 -0
- data/app/builders/releaf/builders/form_builder/richtext_fields.rb +28 -0
- data/app/builders/releaf/builders/form_builder/text_fields.rb +43 -0
- data/app/builders/releaf/builders/form_builder.rb +8 -489
- data/app/builders/releaf/builders/index_builder.rb +10 -3
- data/app/builders/releaf/builders/page/header_builder.rb +23 -59
- data/app/builders/releaf/builders/page/layout_builder.rb +125 -115
- data/app/builders/releaf/builders/page/menu_builder.rb +96 -106
- data/app/builders/releaf/builders/refused_destroy_dialog_builder.rb +7 -12
- data/app/builders/releaf/builders/resource_view.rb +4 -4
- data/app/builders/releaf/builders/table_builder.rb +20 -30
- data/app/builders/releaf/builders/toolbox_builder.rb +1 -1
- data/app/builders/releaf/builders/utilities/date_fields.rb +100 -0
- data/app/builders/releaf/builders/utilities/resolve_attribute_field_method_name.rb +80 -0
- data/app/builders/releaf/builders/view.rb +5 -2
- data/app/builders/releaf/settings/form_builder.rb +18 -0
- data/app/builders/releaf/settings/table_builder.rb +9 -0
- data/app/controllers/releaf/action_controller.rb +174 -0
- data/app/controllers/releaf/{core/errors_controller.rb → errors_controller.rb} +1 -1
- data/app/controllers/releaf/root_controller.rb +23 -0
- data/app/controllers/releaf/settings_controller.rb +22 -0
- data/app/helpers/releaf/application_helper.rb +1 -1
- data/app/lib/releaf/action_controller/ajax.rb +24 -0
- data/app/lib/releaf/action_controller/breadcrumbs.rb +26 -0
- data/app/lib/releaf/action_controller/builders.rb +34 -0
- data/app/lib/releaf/action_controller/features.rb +47 -0
- data/app/lib/releaf/action_controller/notifications.rb +28 -0
- data/app/lib/releaf/action_controller/resources.rb +59 -0
- data/app/{controllers/concerns/releaf → lib/releaf/action_controller}/richtext_attachments.rb +1 -1
- data/app/lib/releaf/action_controller/search.rb +22 -0
- data/app/lib/releaf/action_controller/urls.rb +49 -0
- data/app/lib/releaf/action_controller/views.rb +29 -0
- data/app/lib/releaf/assets_resolver.rb +51 -0
- data/app/lib/releaf/build_errors_hash.rb +81 -0
- data/app/lib/releaf/controller_definition.rb +22 -0
- data/app/lib/releaf/controller_group_definition.rb +12 -0
- data/app/lib/releaf/{core/default_searchable_fields.rb → default_searchable_fields.rb} +1 -1
- data/app/lib/releaf/{core/resource_base.rb → resource_base.rb} +14 -6
- data/app/lib/releaf/{core/resource_fields.rb → resource_fields.rb} +1 -1
- data/app/lib/releaf/{core/resource_params.rb → resource_params.rb} +3 -3
- data/app/lib/releaf/resource_table_fields.rb +10 -0
- data/app/lib/releaf/{core/resource_utilities.rb → resource_utilities.rb} +2 -2
- data/app/lib/releaf/{core/responders → responders}/access_denied_responder.rb +2 -2
- data/app/lib/releaf/{core/responders → responders}/after_save_responder.rb +3 -3
- data/app/lib/releaf/{core/responders → responders}/confirm_destroy_responder.rb +1 -1
- data/app/lib/releaf/{core/responders → responders}/destroy_responder.rb +1 -1
- data/app/lib/releaf/{core/responders → responders}/error_responder.rb +1 -1
- data/app/lib/releaf/{core/responders → responders}/feature_disabled_responder.rb +2 -2
- data/app/lib/releaf/{core/responders → responders}/page_not_found_responder.rb +2 -2
- data/app/lib/releaf/responders.rb +31 -0
- data/app/lib/releaf/{core/search.rb → search.rb} +1 -1
- data/app/lib/releaf/settings/normalize_value.rb +45 -0
- data/app/lib/releaf/settings/register.rb +45 -0
- data/app/models/releaf/settings.rb +25 -13
- data/app/services/array/reorder.rb +82 -0
- data/app/views/releaf/{base → action}/confirm_destroy.ruby +0 -0
- data/app/views/releaf/{base → action}/create_releaf_richtext_attachment.haml +0 -0
- data/app/views/releaf/{base → action}/edit.ruby +0 -0
- data/app/views/releaf/{base → action}/index.ruby +0 -0
- data/app/views/releaf/{base → action}/new.ruby +0 -0
- data/app/views/releaf/{base → action}/refused_destroy.ruby +0 -0
- data/app/views/releaf/{base → action}/show.ruby +0 -0
- data/app/views/releaf/{base → action}/toolbox.ruby +0 -0
- data/lib/generators/dummy/install_generator.rb +5 -0
- data/lib/generators/dummy/templates/assets/javascripts/controllers/admin/books.js +23 -0
- data/lib/generators/dummy/templates/assets/javascripts/controllers/admin/nodes.js +1 -0
- data/lib/generators/dummy/templates/assets/javascripts/controllers/admin/other_site/other_nodes.js +1 -0
- data/lib/generators/dummy/templates/assets/stylesheets/controllers/admin/nodes.scss +1 -0
- data/lib/generators/dummy/templates/assets/stylesheets/controllers/admin/other_site/other_nodes.scss +1 -0
- data/lib/generators/dummy/templates/builders/admin/books/form_builder.rb +11 -1
- data/lib/generators/dummy/templates/config/routes.rb +31 -7
- data/lib/generators/dummy/templates/controllers/admin/authors_controller.rb +3 -6
- data/lib/generators/dummy/templates/controllers/admin/books_controller.rb +1 -1
- data/lib/generators/dummy/templates/controllers/admin/chapters_controller.rb +1 -1
- data/lib/generators/dummy/templates/controllers/admin/nodes_controller.rb +3 -0
- data/lib/generators/dummy/templates/controllers/admin/other_site/other_nodes_controller.rb +3 -0
- data/lib/generators/dummy/templates/controllers/admin/publishers_controller.rb +1 -1
- data/lib/generators/dummy/templates/controllers/application_controller.rb +27 -5
- data/lib/generators/dummy/templates/controllers/concerns/node_controller.rb +13 -3
- data/lib/generators/dummy/templates/controllers/contacts_controller.rb +3 -1
- data/lib/generators/dummy/templates/initializers/releaf.rb +31 -25
- data/lib/generators/dummy/templates/migrations/create_home_pages.rb +1 -0
- data/lib/generators/dummy/templates/migrations/create_other_nodes.rb +29 -0
- data/lib/generators/dummy/templates/models/author.rb +2 -2
- data/lib/generators/dummy/templates/models/book.rb +0 -2
- data/lib/generators/dummy/templates/models/chapter.rb +0 -2
- data/lib/generators/dummy/templates/models/home_page.rb +1 -0
- data/lib/generators/dummy/templates/models/other_site/other_node.rb +7 -0
- data/lib/generators/dummy/templates/models/publisher.rb +0 -5
- data/lib/generators/dummy/templates/models/text_page.rb +0 -1
- data/lib/generators/dummy/templates/views/contacts/show.html.haml +1 -1
- data/lib/generators/dummy/templates/views/layouts/application.html.haml +9 -1
- data/lib/generators/dummy/templates/views/text_pages/show.haml +1 -1
- data/lib/generators/releaf/templates/initializers/releaf.rb +6 -17
- data/lib/generators/releaf/templates/migrations/create_releaf_translations.rb +13 -14
- data/lib/generators/releaf/templates/seeds/seeds.rb +28 -32
- data/lib/releaf/{core/application.rb → application.rb} +5 -4
- data/lib/releaf/{core/component.rb → component.rb} +6 -2
- data/lib/releaf/configuration.rb +95 -0
- data/lib/releaf/core_ext/array/reorder.rb +5 -0
- data/lib/releaf/engine.rb +12 -0
- data/lib/releaf/exceptions.rb +5 -0
- data/lib/releaf/instance_cache.rb +72 -0
- data/lib/releaf/{core → rails_ext}/validation_error_codes.rb +1 -1
- data/lib/releaf/root/configuration.rb +6 -0
- data/lib/releaf/root/default_controller_resolver.rb +37 -0
- data/lib/releaf/root/settings_manager.rb +12 -0
- data/lib/releaf/root.rb +17 -0
- data/lib/releaf/{core/route_mapper.rb → route_mapper.rb} +6 -6
- data/lib/releaf/service.rb +11 -0
- data/lib/releaf/settings_ui.rb +7 -0
- data/lib/releaf/version.rb +1 -1
- data/lib/releaf-core.rb +38 -9
- data/spec/builders/{builders → releaf/builders}/association_reflector_spec.rb +0 -0
- data/spec/builders/{builders → releaf/builders}/base_spec.rb +17 -21
- data/spec/builders/{builders → releaf/builders}/collection_spec.rb +0 -0
- data/spec/builders/{builders → releaf/builders}/confirm_destroy_dialog_builder_spec.rb +5 -5
- data/spec/builders/{builders → releaf/builders}/confirm_dialog_builder_spec.rb +9 -7
- data/spec/builders/{builders → releaf/builders}/edit_builder_spec.rb +127 -20
- data/spec/builders/releaf/builders/form_builder/associations_spec.rb +129 -0
- data/spec/builders/releaf/builders/form_builder/date_fields_spec.rb +86 -0
- data/spec/builders/releaf/builders/form_builder/i18n_fields_spec.rb +48 -0
- data/spec/builders/releaf/builders/form_builder/label_spec.rb +106 -0
- data/spec/builders/releaf/builders/form_builder/number_fields_spec.rb +37 -0
- data/spec/builders/releaf/builders/form_builder_spec.rb +228 -0
- data/spec/builders/{builders → releaf/builders}/index_builder_spec.rb +29 -10
- data/spec/builders/releaf/builders/page/header_builder_spec.rb +65 -0
- data/spec/builders/releaf/builders/page/layout_builder_spec.rb +170 -0
- data/spec/builders/releaf/builders/page/menu_builder_spec.rb +345 -0
- data/spec/builders/{builders → releaf/builders}/pagination_builder_spec.rb +0 -0
- data/spec/builders/{builders → releaf/builders}/resource_dialog_spec.rb +0 -0
- data/spec/builders/{builders → releaf/builders}/resource_view_spec.rb +8 -8
- data/spec/builders/{builders → releaf/builders}/show_builder_spec.rb +0 -0
- data/spec/builders/{builders → releaf/builders}/table_builder_spec.rb +31 -75
- data/spec/builders/{builders → releaf/builders}/template_spec.rb +0 -0
- data/spec/builders/{builders → releaf/builders}/toolbox_builder_spec.rb +4 -4
- data/spec/builders/{builders → releaf/builders}/toolbox_spec.rb +0 -0
- data/spec/builders/releaf/builders/utilities/date_fields_spec.rb +125 -0
- data/spec/builders/releaf/builders/utilities/resolve_attribute_field_method_name_spec.rb +318 -0
- data/spec/builders/{builders → releaf/builders}/view_spec.rb +1 -1
- data/spec/builders/{builders_spec.rb → releaf/builders_spec.rb} +0 -0
- data/spec/builders/releaf/settings/form_builder_spec.rb +48 -0
- data/spec/builders/{core → releaf}/settings/table_builder_spec.rb +6 -4
- data/spec/controllers/concerns/releaf/richtext_attachments_spec.rb +1 -1
- data/spec/controllers/releaf/{base_controller_spec.rb → action_controller_spec.rb} +132 -161
- data/spec/controllers/releaf/root_controller_spec.rb +40 -0
- data/spec/controllers/releaf/settings_controller_spec.rb +52 -0
- data/spec/error_hash_builder_spec.rb +83 -0
- data/spec/ext/array_reorder_spec.rb +12 -0
- data/spec/features/ajaxbox_spec.rb +6 -6
- data/spec/features/errors_spec.rb +2 -1
- data/spec/features/index_table_spec.rb +6 -3
- data/spec/features/richtext_attachments_spec.rb +2 -2
- data/spec/features/richtext_custom_config_spec.rb +28 -0
- data/spec/features/richtext_embed_spec.rb +1 -1
- data/spec/features/richtext_spec.rb +10 -1
- data/spec/features/search_spec.rb +1 -1
- data/spec/features/settings_spec.rb +10 -5
- data/spec/helpers/application_helper_spec.rb +4 -6
- data/spec/lib/releaf/action_controller/features_spec.rb +171 -0
- data/spec/lib/releaf/action_controller/search_spec.rb +84 -0
- data/spec/lib/releaf/{core/application_spec.rb → application_spec.rb} +7 -6
- data/spec/lib/releaf/assets_resolver_spec.rb +130 -0
- data/spec/lib/releaf/build_errors_hash_spec.rb +141 -0
- data/spec/lib/releaf/configuration_spec.rb +205 -0
- data/spec/lib/releaf/controller_definition_spec.rb +49 -0
- data/spec/lib/releaf/controller_group_definition_spec.rb +27 -0
- data/spec/lib/releaf/{core/default_searchable_fields_spec.rb → default_searchable_fields_spec.rb} +1 -1
- data/spec/lib/releaf/instance_cache_spec.rb +98 -0
- data/spec/lib/releaf/{core/resource_base_spec.rb → resource_base_spec.rb} +59 -21
- data/spec/lib/releaf/{core/resource_fields_spec.rb → resource_fields_spec.rb} +1 -1
- data/spec/lib/releaf/{core/resource_params_spec.rb → resource_params_spec.rb} +3 -5
- data/spec/lib/releaf/resource_table_fields_spec.rb +20 -0
- data/spec/lib/releaf/{core/resource_utilities_spec.rb → resource_utilities_spec.rb} +1 -1
- data/spec/lib/releaf/{core/responders → responders}/access_denied_responder_spec.rb +1 -1
- data/spec/lib/releaf/{core/responders → responders}/after_save_responder_spec.rb +9 -8
- data/spec/lib/releaf/{core/responders → responders}/confirm_destroy_responder_spec.rb +2 -2
- data/spec/lib/releaf/{core/responders → responders}/destroy_responder_spec.rb +2 -2
- data/spec/lib/releaf/{core/responders → responders}/error_responder_spec.rb +4 -4
- data/spec/lib/releaf/{core/responders → responders}/feature_disabled_responder_spec.rb +1 -1
- data/spec/lib/releaf/{core/responders → responders}/page_not_found_responder_spec.rb +1 -1
- data/spec/lib/releaf/{core/responders_spec.rb → responders_spec.rb} +14 -14
- data/spec/lib/releaf/root/configuration_spec.rb +9 -0
- data/spec/lib/releaf/root/default_controller_resolver_spec.rb +108 -0
- data/spec/lib/releaf/root_spec.rb +13 -0
- data/spec/lib/releaf/service_spec.rb +20 -0
- data/spec/lib/releaf/settings/normalize_value_spec.rb +103 -0
- data/spec/lib/releaf/settings/register_spec.rb +135 -0
- data/spec/lib/releaf/settings_manager_spec.rb +22 -0
- data/spec/lib/validation_error_codes_spec.rb +1 -1
- data/spec/misc/factories_spec.rb +0 -12
- data/spec/models/settings_spec.rb +74 -32
- data/spec/routing/route_mapper_spec.rb +5 -5
- data/spec/rspec_helpers/test_helpers_spec.rb +1 -1
- data/spec/rspec_helpers/test_spec.rb +14 -0
- data/spec/{lib/releaf/core/item_orderer_spec.rb → services/array/reorder_spec.rb} +32 -53
- metadata +299 -224
- data/app/builders/releaf/builders/orderer.rb +0 -5
- data/app/builders/releaf/builders/tags/releaf_associated_set_field.rb +0 -40
- data/app/builders/releaf/core/settings/form_builder.rb +0 -21
- data/app/builders/releaf/core/settings/table_builder.rb +0 -11
- data/app/controllers/concerns/releaf/breadcrumbs.rb +0 -42
- data/app/controllers/releaf/base_controller.rb +0 -458
- data/app/controllers/releaf/core/settings_controller.rb +0 -50
- data/app/helpers/releaf/javascript_helper.rb +0 -75
- data/app/lib/releaf/core/assets_resolver.rb +0 -58
- data/app/lib/releaf/core/error_formatter.rb +0 -103
- data/app/lib/releaf/core/item_orderer.rb +0 -102
- data/app/lib/releaf/core/resource_table_fields.rb +0 -10
- data/app/lib/releaf/core/responders.rb +0 -31
- data/app/lib/releaf/core/template_field_type_mapper.rb +0 -127
- data/lib/generators/dummy/templates/controllers/concerns/.keep +0 -0
- data/lib/releaf/core/builders_autoload.rb +0 -27
- data/lib/releaf/core/configuration.rb +0 -101
- data/lib/releaf/core/engine.rb +0 -35
- data/lib/releaf/core/exceptions.rb +0 -38
- data/lib/releaf/core/settings_ui_component.rb +0 -7
- data/releaf-core.gemspec +0 -35
- data/spec/builders/builders/form_builder_spec.rb +0 -562
- data/spec/builders/builders/orderer_spec.rb +0 -22
- data/spec/builders/builders/page/header_builder_spec.rb +0 -143
- data/spec/builders/builders/page/layout_builder_spec.rb +0 -73
- data/spec/builders/builders/page/menu_builder_spec.rb +0 -160
- data/spec/builders/core/settings/form_builder_spec.rb +0 -69
- data/spec/controllers/releaf/core/settings_controller_spec.rb +0 -31
- data/spec/lib/releaf/core/assets_resolver_spec.rb +0 -113
- data/spec/lib/releaf/core/configuration_spec.rb +0 -230
- data/spec/lib/releaf/core/error_formatter_spec.rb +0 -242
- data/spec/lib/releaf/core/resource_table_fields_spec.rb +0 -18
- data/spec/lib/releaf/core/template_field_type_mapper_spec.rb +0 -311
@@ -1,58 +0,0 @@
|
|
1
|
-
module Releaf::Core
|
2
|
-
class AssetsResolver
|
3
|
-
NONCOMPILED_PATTERN = /app\/assets\/(javascripts|stylesheets)\/((releaf\/)?controllers\/(.*?))\..*/
|
4
|
-
COMPILED_PATTERN = /(releaf\/)?controllers\/(.*?)\.(js|css)$/
|
5
|
-
|
6
|
-
def self.base_assets
|
7
|
-
["releaf/application"]
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.controller_assets(controller, type)
|
11
|
-
base_assets + assets.fetch(controller, {}).fetch(type, [])
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.noncompiled_assets
|
15
|
-
list = {}
|
16
|
-
|
17
|
-
Rails.application.assets.each_file do|file|
|
18
|
-
match = file.to_s.match(NONCOMPILED_PATTERN)
|
19
|
-
if match
|
20
|
-
controller = match[4]
|
21
|
-
asset_type = match[1].to_sym
|
22
|
-
list[controller] ||= {stylesheets: [], javascripts: []}
|
23
|
-
list[controller][asset_type] << match[2]
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
list
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.compiled_assets
|
31
|
-
list = {}
|
32
|
-
|
33
|
-
Rails.application.assets_manifest.files.each_pair do|asset_path, asset|
|
34
|
-
match = asset["logical_path"].match(COMPILED_PATTERN)
|
35
|
-
if match
|
36
|
-
controller = match[2]
|
37
|
-
asset_type = match[3] == "css" ? :stylesheets : :javascripts
|
38
|
-
list[controller] ||= {stylesheets: [], javascripts: []}
|
39
|
-
list[controller][asset_type] << asset["logical_path"]
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
list
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.compiled_assets?
|
47
|
-
Rails.application.assets.nil?
|
48
|
-
end
|
49
|
-
|
50
|
-
def self.assets
|
51
|
-
if compiled_assets?
|
52
|
-
@@compiled_assets ||= compiled_assets
|
53
|
-
else
|
54
|
-
noncompiled_assets
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,103 +0,0 @@
|
|
1
|
-
module Releaf::Core
|
2
|
-
class ErrorFormatter
|
3
|
-
attr_reader :errors
|
4
|
-
|
5
|
-
def self.format_errors(resource, field_name_prefix = "resource")
|
6
|
-
validator = new(resource, field_name_prefix)
|
7
|
-
validator.errors
|
8
|
-
end
|
9
|
-
|
10
|
-
def initialize(resource, field_name_prefix)
|
11
|
-
@resource = resource
|
12
|
-
@klass = @resource.class
|
13
|
-
@field_name_prefix = field_name_prefix
|
14
|
-
@errors = {}
|
15
|
-
@error_message_i18n_scope = "activerecord.errors.messages.#{@klass.name.underscore}"
|
16
|
-
format_errors
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def format_errors
|
22
|
-
@resource.errors.each do |attribute, message|
|
23
|
-
if models_attribute? attribute
|
24
|
-
add_error attribute, message
|
25
|
-
else
|
26
|
-
process_nested_resource_errors attribute
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def process_nested_resource_errors(attribute)
|
32
|
-
association_name = attribute.to_s.split('.', 2).first
|
33
|
-
if single_association? association_name
|
34
|
-
prefix_template = "#{@field_name_prefix}[#{association_name}_attributes]"
|
35
|
-
nested_resources = [@resource.send(association_name)]
|
36
|
-
else
|
37
|
-
prefix_template = "#{@field_name_prefix}[#{association_name}_attributes][%d]"
|
38
|
-
nested_resources = @resource.send(association_name)
|
39
|
-
end
|
40
|
-
|
41
|
-
nested_resources.each_with_index do |resource, i|
|
42
|
-
prefix = prefix_template % i
|
43
|
-
resource_errors = ErrorFormatter.format_errors(resource, prefix)
|
44
|
-
@errors.merge!(resource_errors)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def models_attribute?(attribute)
|
49
|
-
attribute !~ /\./
|
50
|
-
end
|
51
|
-
|
52
|
-
def add_error(attribute, message)
|
53
|
-
@errors[field_id(attribute)] ||= []
|
54
|
-
@errors[field_id(attribute)] << error_hash(attribute, message)
|
55
|
-
end
|
56
|
-
|
57
|
-
def error_hash(attribute, message)
|
58
|
-
h = {
|
59
|
-
error_code: message.error_code,
|
60
|
-
message: I18n.t(message, scope: @error_message_i18n_scope),
|
61
|
-
full_message: full_error_message(attribute, message)
|
62
|
-
}
|
63
|
-
h[:data] = message.data unless message.data.nil?
|
64
|
-
h
|
65
|
-
end
|
66
|
-
|
67
|
-
def full_error_message(attribute, message)
|
68
|
-
template = "%{class} with id %{id} has error \"#{message}\""
|
69
|
-
template += ' on attribute "%{attribute}"' unless attribute.to_sym == :base
|
70
|
-
options = {
|
71
|
-
default: template,
|
72
|
-
attribute: attribute,
|
73
|
-
class: @resource.class.name,
|
74
|
-
id: @resource.id ? @resource.id.to_s : 'null',
|
75
|
-
scope: @error_message_i18n_scope
|
76
|
-
}
|
77
|
-
I18n.t(template, options)
|
78
|
-
end
|
79
|
-
|
80
|
-
def field_id(attribute)
|
81
|
-
return @field_name_prefix if attribute.to_sym == :base
|
82
|
-
field = attribute
|
83
|
-
if association(attribute).present?
|
84
|
-
field = association(attribute).foreign_key.to_s
|
85
|
-
end
|
86
|
-
|
87
|
-
"#{@field_name_prefix}[#{field}]"
|
88
|
-
end
|
89
|
-
|
90
|
-
def single_association?(association_name)
|
91
|
-
[:belongs_to, :has_one].include? association_type(association_name)
|
92
|
-
end
|
93
|
-
|
94
|
-
def association_type(association_name)
|
95
|
-
association(association_name).macro
|
96
|
-
end
|
97
|
-
|
98
|
-
def association(association_name)
|
99
|
-
@klass.reflect_on_association(association_name.to_sym)
|
100
|
-
end
|
101
|
-
|
102
|
-
end
|
103
|
-
end
|
@@ -1,102 +0,0 @@
|
|
1
|
-
module Releaf::Core
|
2
|
-
# Utility class for array items reordering.
|
3
|
-
#
|
4
|
-
# There are 4 possible reordering options: <code>:first, :last, :before and :after</code>.
|
5
|
-
#
|
6
|
-
# All reorder methods are chainable, so:
|
7
|
-
# Releaf::Core::ItemOrderer.new(:a, :b, :c, :d, :e, :f).reorder(:c, :last).reorder([:a, :b], after: :d).result
|
8
|
-
# will return
|
9
|
-
# [:d, :a, :b, :e, :f, :c]
|
10
|
-
#
|
11
|
-
# For reordering with <code>`first`</code> and <code>`last`</code> options you must give this option as symbols.
|
12
|
-
# Example:
|
13
|
-
# Releaf::Core::ItemOrderer.new(:a, :b, :c).reorder(:c, :first)
|
14
|
-
#
|
15
|
-
# For reorderind with <code>`before`</code> and <code>`after`</code> options you must give option together with target value as hash.
|
16
|
-
# Example:
|
17
|
-
# Releaf::Core::ItemOrderer.new(:a, :b, :c).reorder(:a, after: :b)
|
18
|
-
class ItemOrderer
|
19
|
-
|
20
|
-
attr_accessor :list
|
21
|
-
|
22
|
-
def initialize(*args)
|
23
|
-
self.list = args
|
24
|
-
end
|
25
|
-
|
26
|
-
def result
|
27
|
-
list
|
28
|
-
end
|
29
|
-
|
30
|
-
def to_a
|
31
|
-
result
|
32
|
-
end
|
33
|
-
|
34
|
-
def reorder(values, options)
|
35
|
-
values = [values] unless values.is_a? Array
|
36
|
-
deleted_values = delete(values)
|
37
|
-
index = reorder_index(options)
|
38
|
-
|
39
|
-
values.reverse.each do|value|
|
40
|
-
list.insert(index, deleted_values[value])
|
41
|
-
end
|
42
|
-
|
43
|
-
self
|
44
|
-
end
|
45
|
-
|
46
|
-
def reorder_index(options)
|
47
|
-
if options == :first
|
48
|
-
index = 0
|
49
|
-
elsif options == :last
|
50
|
-
index = list.length
|
51
|
-
elsif options[:after]
|
52
|
-
index = index(options[:after]) + 1
|
53
|
-
elsif options[:before]
|
54
|
-
index = index(options[:before])
|
55
|
-
else
|
56
|
-
raise ArgumentError, "unknown reorder option"
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def delete(values)
|
61
|
-
deleted = {}
|
62
|
-
|
63
|
-
values.each do|value|
|
64
|
-
index = index(value)
|
65
|
-
deleted[value] = list[index]
|
66
|
-
list.delete_at(index)
|
67
|
-
end
|
68
|
-
|
69
|
-
deleted
|
70
|
-
end
|
71
|
-
|
72
|
-
def index(value)
|
73
|
-
value = value.to_s
|
74
|
-
list.index do |existing_value|
|
75
|
-
if existing_value.is_a? Hash
|
76
|
-
existing_value.keys.first.to_s == value
|
77
|
-
else
|
78
|
-
existing_value.to_s == value
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
# Shortcut for creating new ItemOrderer class, ordering and result retrieving.
|
84
|
-
#
|
85
|
-
# Releaf::Core::ItemOrderer.reorder([:a, :b, :c, :d, :e, :f], c: :last, [:a, :b] => {after: :d})
|
86
|
-
# is same as
|
87
|
-
# Releaf::Core::ItemOrderer.new(:a, :b, :c, :d, :e, :f).reorder(:c, :last).reorder([:a, :b], after: :d).result
|
88
|
-
#
|
89
|
-
# @param list [Array] array to reorder
|
90
|
-
# @param options_list [Hash] hash with reorder options
|
91
|
-
# @return [Array] reordered array
|
92
|
-
def self.reorder(list, options_list)
|
93
|
-
orderer = new(*list)
|
94
|
-
|
95
|
-
options_list.each_pair do|values, options|
|
96
|
-
orderer.reorder(values, options)
|
97
|
-
end
|
98
|
-
|
99
|
-
orderer.result
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
module Releaf::Core::Responders
|
2
|
-
|
3
|
-
def respond_with(resource = nil, options = {}, &block)
|
4
|
-
options[:responder] = active_responder unless options.has_key? :responder
|
5
|
-
super
|
6
|
-
end
|
7
|
-
|
8
|
-
def action_responders
|
9
|
-
{
|
10
|
-
create: Releaf::Core::Responders::AfterSaveResponder,
|
11
|
-
update: Releaf::Core::Responders::AfterSaveResponder,
|
12
|
-
confirm_destroy: Releaf::Core::Responders::ConfirmDestroyResponder,
|
13
|
-
destroy: Releaf::Core::Responders::DestroyResponder,
|
14
|
-
access_denied: Releaf::Core::Responders::AccessDeniedResponder,
|
15
|
-
feature_disabled: Releaf::Core::Responders::FeatureDisabledResponder,
|
16
|
-
page_not_found: Releaf::Core::Responders::PageNotFoundResponder,
|
17
|
-
}
|
18
|
-
end
|
19
|
-
|
20
|
-
# Returns generic view name for given action
|
21
|
-
# @return String
|
22
|
-
def action_responder(_action_name)
|
23
|
-
action_responders[_action_name.to_sym]
|
24
|
-
end
|
25
|
-
|
26
|
-
# Returns generic view name for current action
|
27
|
-
# @return String
|
28
|
-
def active_responder
|
29
|
-
action_responder(action_name)
|
30
|
-
end
|
31
|
-
end
|
@@ -1,127 +0,0 @@
|
|
1
|
-
module Releaf::Core
|
2
|
-
module TemplateFieldTypeMapper
|
3
|
-
|
4
|
-
# Helps to determinate which template to render in :edit feature
|
5
|
-
# for given objects attribute.
|
6
|
-
#
|
7
|
-
# @return field_type
|
8
|
-
#
|
9
|
-
# where field_type is a string representing field type
|
10
|
-
# and use_i18n is a `true` or `false`. If use_i18n is true, then template
|
11
|
-
# with localization features should be used (if exists)
|
12
|
-
#
|
13
|
-
# This helper is used by views.
|
14
|
-
#
|
15
|
-
# @todo document rendering conventions
|
16
|
-
def self.field_type_name obj, attribute_name
|
17
|
-
field_type = nil
|
18
|
-
column_type = nil
|
19
|
-
|
20
|
-
if use_i18n?(obj, attribute_name)
|
21
|
-
begin
|
22
|
-
column_type = obj.class::Translation.columns_hash[attribute_name.to_s].try(:type)
|
23
|
-
rescue
|
24
|
-
end
|
25
|
-
else
|
26
|
-
column_type = obj.class.columns_hash[attribute_name.to_s].try(:type)
|
27
|
-
end
|
28
|
-
|
29
|
-
column_type ||= 'string'
|
30
|
-
|
31
|
-
if respond_to?("field_type_name_for_#{column_type}")
|
32
|
-
field_type = send("field_type_name_for_#{column_type}", attribute_name, obj)
|
33
|
-
end
|
34
|
-
|
35
|
-
return field_type || 'text'
|
36
|
-
end
|
37
|
-
|
38
|
-
# should localized template be preffered?
|
39
|
-
def self.use_i18n? obj, attribute_name
|
40
|
-
return false unless obj.class.respond_to? :translates?
|
41
|
-
return false unless obj.class.translates?
|
42
|
-
return obj.class.translated_attribute_names.include?(attribute_name.to_sym)
|
43
|
-
end
|
44
|
-
|
45
|
-
protected
|
46
|
-
|
47
|
-
def self.image_or_error attribute_name, obj
|
48
|
-
field_type_or_error 'image', attribute_name, obj
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.file_or_error attribute_name, obj
|
52
|
-
field_type_or_error 'file', attribute_name, obj
|
53
|
-
end
|
54
|
-
|
55
|
-
def self.field_type_or_error type, attribute_name, obj
|
56
|
-
raise ArgumentError, 'attribute_name must end with _uid' unless attribute_name =~ /_uid$/
|
57
|
-
file_method_name = attribute_name.to_s.sub(/_uid$/, '')
|
58
|
-
if obj.respond_to? file_method_name
|
59
|
-
return type
|
60
|
-
else
|
61
|
-
raise "object doesn't respond to `#{file_method_name}` method. Did you forgot to add `#{type}_accessor :#{file_method_name}` to `#{obj.class.name}` model?"
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def self.field_type_name_for_string attribute_name, obj
|
66
|
-
case attribute_name.to_s
|
67
|
-
when /(thumbnail|image|photo(graphy)?|picture|avatar|logo|banner|icon)_uid$/
|
68
|
-
return image_or_error attribute_name, obj
|
69
|
-
|
70
|
-
when /_uid$/
|
71
|
-
return file_or_error attribute_name, obj
|
72
|
-
|
73
|
-
when /password/, 'pin'
|
74
|
-
return 'password'
|
75
|
-
|
76
|
-
when /_email$/, 'email'
|
77
|
-
return 'email'
|
78
|
-
|
79
|
-
when /_link$/, 'link'
|
80
|
-
return 'link'
|
81
|
-
|
82
|
-
else
|
83
|
-
return 'text'
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def self.field_type_name_for_text attribute_name, obj
|
88
|
-
case attribute_name.to_s
|
89
|
-
when /_(url|homepage|link)$/, 'homepage', 'url'
|
90
|
-
'link'
|
91
|
-
when /_html$/, 'html'
|
92
|
-
'richtext'
|
93
|
-
else
|
94
|
-
'textarea'
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
def self.field_type_name_for_datetime attribute_name, obj
|
99
|
-
'datetime'
|
100
|
-
end
|
101
|
-
|
102
|
-
def self.field_type_name_for_date attribute_name, obj
|
103
|
-
'date'
|
104
|
-
end
|
105
|
-
|
106
|
-
def self.field_type_name_for_time attribute_name, obj
|
107
|
-
'time'
|
108
|
-
end
|
109
|
-
|
110
|
-
def self.field_type_name_for_float attribute_name, obj
|
111
|
-
'float'
|
112
|
-
end
|
113
|
-
|
114
|
-
def self.field_type_name_for_decimal attribute_name, obj
|
115
|
-
'decimal'
|
116
|
-
end
|
117
|
-
|
118
|
-
def self.field_type_name_for_integer attribute_name, obj
|
119
|
-
return 'item' if attribute_name.to_s =~ /_id$/ && obj.class.reflect_on_association(attribute_name[0..-4].to_sym)
|
120
|
-
return 'integer'
|
121
|
-
end
|
122
|
-
|
123
|
-
def self.field_type_name_for_boolean attribute_name, obj
|
124
|
-
return 'boolean'
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
File without changes
|
@@ -1,27 +0,0 @@
|
|
1
|
-
root_path = File.expand_path('../..', File.dirname(__dir__))
|
2
|
-
files = %w(
|
3
|
-
builders/tags/releaf_associated_set_field
|
4
|
-
builders
|
5
|
-
builders/base
|
6
|
-
builders/orderer
|
7
|
-
builders/template
|
8
|
-
builders/toolbox
|
9
|
-
builders/view
|
10
|
-
builders/collection
|
11
|
-
builders/resource
|
12
|
-
builders/resource_dialog
|
13
|
-
builders/resource_view
|
14
|
-
builders/confirm_dialog_builder
|
15
|
-
builders/confirm_destroy_dialog_builder
|
16
|
-
builders/edit_builder
|
17
|
-
builders/form_builder
|
18
|
-
builders/index_builder
|
19
|
-
builders/refused_destroy_dialog_builder
|
20
|
-
builders/table_builder
|
21
|
-
builders/toolbox_builder
|
22
|
-
core/settings/form_builder
|
23
|
-
core/settings/table_builder
|
24
|
-
)
|
25
|
-
files.each do|file|
|
26
|
-
require "#{root_path}/app/builders/releaf/#{file}"
|
27
|
-
end
|
@@ -1,101 +0,0 @@
|
|
1
|
-
module Releaf::Core
|
2
|
-
class Configuration
|
3
|
-
attr_accessor :available_locales, :available_admin_locales, :all_locales
|
4
|
-
attr_accessor :access_control_module_name, :assets_resolver_class_name, :layout_builder_class_name
|
5
|
-
attr_accessor :menu, :devise_for, :mount_location, :components,
|
6
|
-
:available_controllers, :additional_controllers, :controllers
|
7
|
-
|
8
|
-
def configure
|
9
|
-
initialize_defaults
|
10
|
-
initialize_locales
|
11
|
-
initialize_controllers
|
12
|
-
initialize_components
|
13
|
-
end
|
14
|
-
|
15
|
-
def assets_resolver
|
16
|
-
assets_resolver_class_name.constantize
|
17
|
-
end
|
18
|
-
|
19
|
-
def access_control_module
|
20
|
-
access_control_module_name.constantize
|
21
|
-
end
|
22
|
-
|
23
|
-
def initialize_defaults
|
24
|
-
default_values.each_pair do|key, value|
|
25
|
-
send("#{key}=", value) if send(key).nil?
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def initialize_locales
|
30
|
-
::I18n.available_locales = available_locales
|
31
|
-
self.available_admin_locales = available_locales if available_admin_locales.nil?
|
32
|
-
self.all_locales = (available_locales + available_admin_locales).map(&:to_s).uniq
|
33
|
-
end
|
34
|
-
|
35
|
-
def initialize_components
|
36
|
-
self.components = flatten_components(components)
|
37
|
-
components.each do|component_class|
|
38
|
-
component_class.initialize_component if component_class.respond_to? :initialize_component
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def flatten_components(raw_components)
|
43
|
-
raw_components.each.inject([]) do |list, component_class|
|
44
|
-
list += flatten_components(component_class.components) if component_class.respond_to? :components
|
45
|
-
list << component_class # add component itself latter as there can be dependancy to be loadable first
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def initialize_controllers
|
50
|
-
self.menu = normalize_controllers(menu)
|
51
|
-
self.additional_controllers = normalize_controllers(additional_controllers)
|
52
|
-
self.controllers = extract_controllers(menu + additional_controllers)
|
53
|
-
self.available_controllers = controllers.keys
|
54
|
-
end
|
55
|
-
|
56
|
-
def extract_controllers(list)
|
57
|
-
list.each.inject({}) do |controller_list, item|
|
58
|
-
controller_list[item[:controller]] = item if item.has_key? :controller
|
59
|
-
controller_list.merge!(extract_controllers(item[:items])) if item.has_key? :items
|
60
|
-
controller_list
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def normalize_controllers(list)
|
65
|
-
list.map{|item| normalize_controller_item(item)}
|
66
|
-
end
|
67
|
-
|
68
|
-
def normalize_controller_item(item_data)
|
69
|
-
if item_data.is_a? String
|
70
|
-
item = {controller: item_data}
|
71
|
-
elsif item_data.is_a? Hash
|
72
|
-
item = item_data
|
73
|
-
end
|
74
|
-
|
75
|
-
item[:name] = item[:controller] unless item.has_key? :name
|
76
|
-
|
77
|
-
if item.has_key? :helper
|
78
|
-
item[:url_helper] = item[:helper].to_sym
|
79
|
-
elsif item.has_key? :controller
|
80
|
-
item[:url_helper] = item[:controller].gsub('/', '_').to_sym
|
81
|
-
end
|
82
|
-
|
83
|
-
item[:items] = normalize_controllers(item[:items]) if item.has_key?(:items)
|
84
|
-
|
85
|
-
item
|
86
|
-
end
|
87
|
-
|
88
|
-
def default_values
|
89
|
-
{
|
90
|
-
menu: [],
|
91
|
-
devise_for: 'releaf/permissions/user',
|
92
|
-
additional_controllers: [],
|
93
|
-
controllers: {},
|
94
|
-
components: [],
|
95
|
-
assets_resolver_class_name: 'Releaf::Core::AssetsResolver',
|
96
|
-
layout_builder_class_name: 'Releaf::Builders::Page::LayoutBuilder',
|
97
|
-
access_control_module_name: 'Releaf::Permissions'
|
98
|
-
}
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
data/lib/releaf/core/engine.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'jquery-cookie-rails'
|
2
|
-
require 'rails-settings-cached'
|
3
|
-
require 'ckeditor_rails'
|
4
|
-
require 'will_paginate'
|
5
|
-
require 'font-awesome-rails'
|
6
|
-
require 'haml'
|
7
|
-
require 'haml-rails'
|
8
|
-
require 'jquery-rails'
|
9
|
-
require 'jquery-ui-rails'
|
10
|
-
require 'acts_as_list'
|
11
|
-
require 'dragonfly'
|
12
|
-
require 'globalize'
|
13
|
-
require 'globalize-accessors'
|
14
|
-
|
15
|
-
module Releaf::Core
|
16
|
-
require 'releaf/core/component'
|
17
|
-
require 'releaf/core/settings_ui_component'
|
18
|
-
require 'releaf/core/route_mapper'
|
19
|
-
require 'releaf/core/builders_autoload'
|
20
|
-
|
21
|
-
def self.components
|
22
|
-
[Releaf::Core::SettingsUIComponent]
|
23
|
-
end
|
24
|
-
|
25
|
-
class Engine < ::Rails::Engine
|
26
|
-
initializer 'precompile', group: :all do |app|
|
27
|
-
app.config.assets.precompile += %w(ckeditor/*)
|
28
|
-
app.config.assets.precompile += %w(releaf/application.css releaf/controllers/*.css releaf/*.js releaf/*.png releaf/*.gif releaf/*.ico)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
ActiveSupport.on_load :action_controller do
|
33
|
-
ActionDispatch::Routing::Mapper.send(:include, Releaf::Core::RouteMapper)
|
34
|
-
end
|
35
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
module Releaf::Core
|
2
|
-
# A general Releaf exception
|
3
|
-
class Error < StandardError; end
|
4
|
-
|
5
|
-
# This error is raised when a user isn't allowed to access a given controller action.
|
6
|
-
# This usually happens within a call to ControllerAdditions#authorize! but can be
|
7
|
-
# raised manually.
|
8
|
-
#
|
9
|
-
# raise Releaf::AccessDenied.new("Not authorized!", AdminArticles, :read)
|
10
|
-
#
|
11
|
-
# The passed message, action, and subject are optional and can later be retrieved when
|
12
|
-
# rescuing from the exception.
|
13
|
-
#
|
14
|
-
# exception.message # => "Not authorized!"
|
15
|
-
# exception.action # => :read
|
16
|
-
# exception.subject # => Article
|
17
|
-
#
|
18
|
-
# If the message is not specified (or is nil) it will default to "You are not authorized
|
19
|
-
# to access this page." This default can be overridden by setting default_message.
|
20
|
-
#
|
21
|
-
# exception.default_message = "Default error message"
|
22
|
-
# exception.message # => "Default error message"
|
23
|
-
#
|
24
|
-
# See ControllerAdditions#authorized! for more information on rescuing from this exception
|
25
|
-
# and customizing the message using I18n.
|
26
|
-
class AccessDenied < Error
|
27
|
-
attr_reader :action, :subject
|
28
|
-
attr_writer :default_message
|
29
|
-
|
30
|
-
def initialize(controller = nil, action = nil, message = nil)
|
31
|
-
@message = message
|
32
|
-
@controller = controller
|
33
|
-
@action = action
|
34
|
-
@default_message = I18n.t(:"unauthorized.default", :default => "You are not authorized to access this page.")
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
end
|
data/releaf-core.gemspec
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require File.expand_path('../lib/releaf/version', __FILE__)
|
2
|
-
|
3
|
-
Gem::Specification.new do |s|
|
4
|
-
s.name = "releaf-core"
|
5
|
-
s.version = Releaf::VERSION
|
6
|
-
|
7
|
-
s.summary = "core gem for releaf"
|
8
|
-
s.description = "Admin interface for RubyOnRails projects inspired by Leaf CMS"
|
9
|
-
s.authors = ["CubeSystems"]
|
10
|
-
s.email = 'info@cubesystems.lv'
|
11
|
-
s.homepage = 'https://github.com/cubesystems/releaf'
|
12
|
-
|
13
|
-
s.files = `git ls-files`.split("\n")
|
14
|
-
s.test_files = Dir["spec/**/*"]
|
15
|
-
|
16
|
-
s.add_dependency 'rails', '~> 4.2', '>= 4.2.0'
|
17
|
-
s.add_dependency 'i18n', '~> 0.7', '>= 0.7.0'
|
18
|
-
s.add_dependency 'sprockets-rails', '~> 3.0', '>= 3.0.0'
|
19
|
-
s.add_dependency 'sass-rails'
|
20
|
-
s.add_dependency 'jquery-rails'
|
21
|
-
s.add_dependency 'jquery-ui-rails'
|
22
|
-
s.add_dependency 'railties'
|
23
|
-
s.add_dependency 'haml-rails'
|
24
|
-
s.add_dependency 'dragonfly'
|
25
|
-
s.add_dependency 'rails-settings-cached', '>= 0.4.5'
|
26
|
-
s.add_dependency 'ckeditor_rails'
|
27
|
-
s.add_dependency 'acts_as_list'
|
28
|
-
s.add_dependency 'will_paginate'
|
29
|
-
s.add_dependency 'font-awesome-rails'
|
30
|
-
s.add_dependency 'jquery-cookie-rails'
|
31
|
-
s.add_dependency 'globalize-accessors'
|
32
|
-
s.add_dependency 'rack-cache'
|
33
|
-
|
34
|
-
s.required_ruby_version = '>= 2.2.0'
|
35
|
-
end
|