releaf-core 0.2.1 → 1.0.3

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 (256) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +19 -21
  3. data/app/assets/javascripts/releaf/application.js +1 -2
  4. data/app/assets/javascripts/releaf/include/field.type_date_or_datetime_or_time.js +19 -21
  5. data/app/assets/javascripts/releaf/include/field.type_richtext.js +31 -9
  6. data/app/assets/javascripts/releaf/include/localization.js +3 -8
  7. data/app/assets/javascripts/releaf/include/nested_fields.js +1 -1
  8. data/app/assets/javascripts/releaf/include/remote_validator.js +7 -4
  9. data/app/assets/javascripts/releaf/include/sortable.js +1 -1
  10. data/app/assets/javascripts/releaf/include/{profile_settings.js → store_settings.js} +4 -10
  11. data/app/assets/javascripts/releaf/include/toolbox.js +7 -11
  12. data/app/assets/stylesheets/releaf/layout/fields.scss +1 -0
  13. data/app/assets/stylesheets/releaf/layout/header.scss +1 -0
  14. data/app/assets/stylesheets/releaf/layout/search.scss +15 -0
  15. data/app/builders/releaf/builders/base.rb +11 -9
  16. data/app/builders/releaf/builders/confirm_destroy_dialog_builder.rb +2 -2
  17. data/app/builders/releaf/builders/confirm_dialog_builder.rb +3 -3
  18. data/app/builders/releaf/builders/edit_builder.rb +51 -6
  19. data/app/builders/releaf/builders/form_builder/associated_set_field.rb +37 -0
  20. data/app/builders/releaf/builders/form_builder/associations.rb +153 -0
  21. data/app/builders/releaf/builders/form_builder/boolean_fields.rb +12 -0
  22. data/app/builders/releaf/builders/form_builder/date_fields.rb +30 -0
  23. data/app/builders/releaf/builders/form_builder/fields.rb +10 -0
  24. data/app/builders/releaf/builders/form_builder/file_fields.rb +47 -0
  25. data/app/builders/releaf/builders/form_builder/i18n_fields.rb +75 -0
  26. data/app/builders/releaf/builders/form_builder/label.rb +34 -0
  27. data/app/builders/releaf/builders/form_builder/number_fields.rb +13 -0
  28. data/app/builders/releaf/builders/form_builder/richtext_fields.rb +28 -0
  29. data/app/builders/releaf/builders/form_builder/text_fields.rb +43 -0
  30. data/app/builders/releaf/builders/form_builder.rb +8 -489
  31. data/app/builders/releaf/builders/index_builder.rb +10 -3
  32. data/app/builders/releaf/builders/page/header_builder.rb +23 -59
  33. data/app/builders/releaf/builders/page/layout_builder.rb +125 -115
  34. data/app/builders/releaf/builders/page/menu_builder.rb +96 -106
  35. data/app/builders/releaf/builders/refused_destroy_dialog_builder.rb +7 -12
  36. data/app/builders/releaf/builders/resource_view.rb +4 -4
  37. data/app/builders/releaf/builders/table_builder.rb +20 -30
  38. data/app/builders/releaf/builders/toolbox_builder.rb +1 -1
  39. data/app/builders/releaf/builders/utilities/date_fields.rb +100 -0
  40. data/app/builders/releaf/builders/utilities/resolve_attribute_field_method_name.rb +80 -0
  41. data/app/builders/releaf/builders/view.rb +5 -2
  42. data/app/builders/releaf/settings/form_builder.rb +18 -0
  43. data/app/builders/releaf/settings/table_builder.rb +9 -0
  44. data/app/controllers/releaf/action_controller.rb +174 -0
  45. data/app/controllers/releaf/{core/errors_controller.rb → errors_controller.rb} +1 -1
  46. data/app/controllers/releaf/root_controller.rb +23 -0
  47. data/app/controllers/releaf/settings_controller.rb +22 -0
  48. data/app/helpers/releaf/application_helper.rb +1 -1
  49. data/app/lib/releaf/action_controller/ajax.rb +24 -0
  50. data/app/lib/releaf/action_controller/breadcrumbs.rb +26 -0
  51. data/app/lib/releaf/action_controller/builders.rb +34 -0
  52. data/app/lib/releaf/action_controller/features.rb +47 -0
  53. data/app/lib/releaf/action_controller/notifications.rb +28 -0
  54. data/app/lib/releaf/action_controller/resources.rb +59 -0
  55. data/app/{controllers/concerns/releaf → lib/releaf/action_controller}/richtext_attachments.rb +1 -1
  56. data/app/lib/releaf/action_controller/search.rb +22 -0
  57. data/app/lib/releaf/action_controller/urls.rb +49 -0
  58. data/app/lib/releaf/action_controller/views.rb +29 -0
  59. data/app/lib/releaf/assets_resolver.rb +51 -0
  60. data/app/lib/releaf/build_errors_hash.rb +81 -0
  61. data/app/lib/releaf/controller_definition.rb +22 -0
  62. data/app/lib/releaf/controller_group_definition.rb +12 -0
  63. data/app/lib/releaf/{core/default_searchable_fields.rb → default_searchable_fields.rb} +1 -1
  64. data/app/lib/releaf/{core/resource_base.rb → resource_base.rb} +14 -6
  65. data/app/lib/releaf/{core/resource_fields.rb → resource_fields.rb} +1 -1
  66. data/app/lib/releaf/{core/resource_params.rb → resource_params.rb} +3 -3
  67. data/app/lib/releaf/resource_table_fields.rb +10 -0
  68. data/app/lib/releaf/{core/resource_utilities.rb → resource_utilities.rb} +2 -2
  69. data/app/lib/releaf/{core/responders → responders}/access_denied_responder.rb +2 -2
  70. data/app/lib/releaf/{core/responders → responders}/after_save_responder.rb +3 -3
  71. data/app/lib/releaf/{core/responders → responders}/confirm_destroy_responder.rb +1 -1
  72. data/app/lib/releaf/{core/responders → responders}/destroy_responder.rb +1 -1
  73. data/app/lib/releaf/{core/responders → responders}/error_responder.rb +1 -1
  74. data/app/lib/releaf/{core/responders → responders}/feature_disabled_responder.rb +2 -2
  75. data/app/lib/releaf/{core/responders → responders}/page_not_found_responder.rb +2 -2
  76. data/app/lib/releaf/responders.rb +31 -0
  77. data/app/lib/releaf/{core/search.rb → search.rb} +1 -1
  78. data/app/lib/releaf/settings/normalize_value.rb +45 -0
  79. data/app/lib/releaf/settings/register.rb +45 -0
  80. data/app/models/releaf/settings.rb +25 -13
  81. data/app/services/array/reorder.rb +82 -0
  82. data/app/views/releaf/{base → action}/confirm_destroy.ruby +0 -0
  83. data/app/views/releaf/{base → action}/create_releaf_richtext_attachment.haml +0 -0
  84. data/app/views/releaf/{base → action}/edit.ruby +0 -0
  85. data/app/views/releaf/{base → action}/index.ruby +0 -0
  86. data/app/views/releaf/{base → action}/new.ruby +0 -0
  87. data/app/views/releaf/{base → action}/refused_destroy.ruby +0 -0
  88. data/app/views/releaf/{base → action}/show.ruby +0 -0
  89. data/app/views/releaf/{base → action}/toolbox.ruby +0 -0
  90. data/lib/generators/dummy/install_generator.rb +5 -0
  91. data/lib/generators/dummy/templates/assets/javascripts/controllers/admin/books.js +23 -0
  92. data/lib/generators/dummy/templates/assets/javascripts/controllers/admin/nodes.js +1 -0
  93. data/lib/generators/dummy/templates/assets/javascripts/controllers/admin/other_site/other_nodes.js +1 -0
  94. data/lib/generators/dummy/templates/assets/stylesheets/controllers/admin/nodes.scss +1 -0
  95. data/lib/generators/dummy/templates/assets/stylesheets/controllers/admin/other_site/other_nodes.scss +1 -0
  96. data/lib/generators/dummy/templates/builders/admin/books/form_builder.rb +11 -1
  97. data/lib/generators/dummy/templates/config/routes.rb +31 -7
  98. data/lib/generators/dummy/templates/controllers/admin/authors_controller.rb +3 -6
  99. data/lib/generators/dummy/templates/controllers/admin/books_controller.rb +1 -1
  100. data/lib/generators/dummy/templates/controllers/admin/chapters_controller.rb +1 -1
  101. data/lib/generators/dummy/templates/controllers/admin/nodes_controller.rb +3 -0
  102. data/lib/generators/dummy/templates/controllers/admin/other_site/other_nodes_controller.rb +3 -0
  103. data/lib/generators/dummy/templates/controllers/admin/publishers_controller.rb +1 -1
  104. data/lib/generators/dummy/templates/controllers/application_controller.rb +27 -5
  105. data/lib/generators/dummy/templates/controllers/concerns/node_controller.rb +13 -3
  106. data/lib/generators/dummy/templates/controllers/contacts_controller.rb +3 -1
  107. data/lib/generators/dummy/templates/initializers/releaf.rb +31 -25
  108. data/lib/generators/dummy/templates/migrations/create_home_pages.rb +1 -0
  109. data/lib/generators/dummy/templates/migrations/create_other_nodes.rb +29 -0
  110. data/lib/generators/dummy/templates/models/author.rb +2 -2
  111. data/lib/generators/dummy/templates/models/book.rb +0 -2
  112. data/lib/generators/dummy/templates/models/chapter.rb +0 -2
  113. data/lib/generators/dummy/templates/models/home_page.rb +1 -0
  114. data/lib/generators/dummy/templates/models/other_site/other_node.rb +7 -0
  115. data/lib/generators/dummy/templates/models/publisher.rb +0 -5
  116. data/lib/generators/dummy/templates/models/text_page.rb +0 -1
  117. data/lib/generators/dummy/templates/views/contacts/show.html.haml +1 -1
  118. data/lib/generators/dummy/templates/views/layouts/application.html.haml +9 -1
  119. data/lib/generators/dummy/templates/views/text_pages/show.haml +1 -1
  120. data/lib/generators/releaf/templates/initializers/releaf.rb +6 -17
  121. data/lib/generators/releaf/templates/migrations/create_releaf_translations.rb +13 -14
  122. data/lib/generators/releaf/templates/seeds/seeds.rb +28 -32
  123. data/lib/releaf/{core/application.rb → application.rb} +5 -4
  124. data/lib/releaf/{core/component.rb → component.rb} +6 -2
  125. data/lib/releaf/configuration.rb +95 -0
  126. data/lib/releaf/core_ext/array/reorder.rb +5 -0
  127. data/lib/releaf/engine.rb +12 -0
  128. data/lib/releaf/exceptions.rb +5 -0
  129. data/lib/releaf/instance_cache.rb +72 -0
  130. data/lib/releaf/{core → rails_ext}/validation_error_codes.rb +1 -1
  131. data/lib/releaf/root/configuration.rb +6 -0
  132. data/lib/releaf/root/default_controller_resolver.rb +37 -0
  133. data/lib/releaf/root/settings_manager.rb +12 -0
  134. data/lib/releaf/root.rb +17 -0
  135. data/lib/releaf/{core/route_mapper.rb → route_mapper.rb} +6 -6
  136. data/lib/releaf/service.rb +11 -0
  137. data/lib/releaf/settings_ui.rb +7 -0
  138. data/lib/releaf/version.rb +1 -1
  139. data/lib/releaf-core.rb +38 -9
  140. data/spec/builders/{builders → releaf/builders}/association_reflector_spec.rb +0 -0
  141. data/spec/builders/{builders → releaf/builders}/base_spec.rb +17 -21
  142. data/spec/builders/{builders → releaf/builders}/collection_spec.rb +0 -0
  143. data/spec/builders/{builders → releaf/builders}/confirm_destroy_dialog_builder_spec.rb +5 -5
  144. data/spec/builders/{builders → releaf/builders}/confirm_dialog_builder_spec.rb +9 -7
  145. data/spec/builders/{builders → releaf/builders}/edit_builder_spec.rb +127 -20
  146. data/spec/builders/releaf/builders/form_builder/associations_spec.rb +129 -0
  147. data/spec/builders/releaf/builders/form_builder/date_fields_spec.rb +86 -0
  148. data/spec/builders/releaf/builders/form_builder/i18n_fields_spec.rb +48 -0
  149. data/spec/builders/releaf/builders/form_builder/label_spec.rb +106 -0
  150. data/spec/builders/releaf/builders/form_builder/number_fields_spec.rb +37 -0
  151. data/spec/builders/releaf/builders/form_builder_spec.rb +228 -0
  152. data/spec/builders/{builders → releaf/builders}/index_builder_spec.rb +29 -10
  153. data/spec/builders/releaf/builders/page/header_builder_spec.rb +65 -0
  154. data/spec/builders/releaf/builders/page/layout_builder_spec.rb +170 -0
  155. data/spec/builders/releaf/builders/page/menu_builder_spec.rb +345 -0
  156. data/spec/builders/{builders → releaf/builders}/pagination_builder_spec.rb +0 -0
  157. data/spec/builders/{builders → releaf/builders}/resource_dialog_spec.rb +0 -0
  158. data/spec/builders/{builders → releaf/builders}/resource_view_spec.rb +8 -8
  159. data/spec/builders/{builders → releaf/builders}/show_builder_spec.rb +0 -0
  160. data/spec/builders/{builders → releaf/builders}/table_builder_spec.rb +31 -75
  161. data/spec/builders/{builders → releaf/builders}/template_spec.rb +0 -0
  162. data/spec/builders/{builders → releaf/builders}/toolbox_builder_spec.rb +4 -4
  163. data/spec/builders/{builders → releaf/builders}/toolbox_spec.rb +0 -0
  164. data/spec/builders/releaf/builders/utilities/date_fields_spec.rb +125 -0
  165. data/spec/builders/releaf/builders/utilities/resolve_attribute_field_method_name_spec.rb +318 -0
  166. data/spec/builders/{builders → releaf/builders}/view_spec.rb +1 -1
  167. data/spec/builders/{builders_spec.rb → releaf/builders_spec.rb} +0 -0
  168. data/spec/builders/releaf/settings/form_builder_spec.rb +48 -0
  169. data/spec/builders/{core → releaf}/settings/table_builder_spec.rb +6 -4
  170. data/spec/controllers/concerns/releaf/richtext_attachments_spec.rb +1 -1
  171. data/spec/controllers/releaf/{base_controller_spec.rb → action_controller_spec.rb} +132 -161
  172. data/spec/controllers/releaf/root_controller_spec.rb +40 -0
  173. data/spec/controllers/releaf/settings_controller_spec.rb +52 -0
  174. data/spec/error_hash_builder_spec.rb +83 -0
  175. data/spec/ext/array_reorder_spec.rb +12 -0
  176. data/spec/features/ajaxbox_spec.rb +6 -6
  177. data/spec/features/errors_spec.rb +2 -1
  178. data/spec/features/index_table_spec.rb +6 -3
  179. data/spec/features/richtext_attachments_spec.rb +2 -2
  180. data/spec/features/richtext_custom_config_spec.rb +28 -0
  181. data/spec/features/richtext_embed_spec.rb +1 -1
  182. data/spec/features/richtext_spec.rb +10 -1
  183. data/spec/features/search_spec.rb +1 -1
  184. data/spec/features/settings_spec.rb +10 -5
  185. data/spec/helpers/application_helper_spec.rb +4 -6
  186. data/spec/lib/releaf/action_controller/features_spec.rb +171 -0
  187. data/spec/lib/releaf/action_controller/search_spec.rb +84 -0
  188. data/spec/lib/releaf/{core/application_spec.rb → application_spec.rb} +7 -6
  189. data/spec/lib/releaf/assets_resolver_spec.rb +130 -0
  190. data/spec/lib/releaf/build_errors_hash_spec.rb +141 -0
  191. data/spec/lib/releaf/configuration_spec.rb +205 -0
  192. data/spec/lib/releaf/controller_definition_spec.rb +49 -0
  193. data/spec/lib/releaf/controller_group_definition_spec.rb +27 -0
  194. data/spec/lib/releaf/{core/default_searchable_fields_spec.rb → default_searchable_fields_spec.rb} +1 -1
  195. data/spec/lib/releaf/instance_cache_spec.rb +98 -0
  196. data/spec/lib/releaf/{core/resource_base_spec.rb → resource_base_spec.rb} +59 -21
  197. data/spec/lib/releaf/{core/resource_fields_spec.rb → resource_fields_spec.rb} +1 -1
  198. data/spec/lib/releaf/{core/resource_params_spec.rb → resource_params_spec.rb} +3 -5
  199. data/spec/lib/releaf/resource_table_fields_spec.rb +20 -0
  200. data/spec/lib/releaf/{core/resource_utilities_spec.rb → resource_utilities_spec.rb} +1 -1
  201. data/spec/lib/releaf/{core/responders → responders}/access_denied_responder_spec.rb +1 -1
  202. data/spec/lib/releaf/{core/responders → responders}/after_save_responder_spec.rb +9 -8
  203. data/spec/lib/releaf/{core/responders → responders}/confirm_destroy_responder_spec.rb +2 -2
  204. data/spec/lib/releaf/{core/responders → responders}/destroy_responder_spec.rb +2 -2
  205. data/spec/lib/releaf/{core/responders → responders}/error_responder_spec.rb +4 -4
  206. data/spec/lib/releaf/{core/responders → responders}/feature_disabled_responder_spec.rb +1 -1
  207. data/spec/lib/releaf/{core/responders → responders}/page_not_found_responder_spec.rb +1 -1
  208. data/spec/lib/releaf/{core/responders_spec.rb → responders_spec.rb} +14 -14
  209. data/spec/lib/releaf/root/configuration_spec.rb +9 -0
  210. data/spec/lib/releaf/root/default_controller_resolver_spec.rb +108 -0
  211. data/spec/lib/releaf/root_spec.rb +13 -0
  212. data/spec/lib/releaf/service_spec.rb +20 -0
  213. data/spec/lib/releaf/settings/normalize_value_spec.rb +103 -0
  214. data/spec/lib/releaf/settings/register_spec.rb +135 -0
  215. data/spec/lib/releaf/settings_manager_spec.rb +22 -0
  216. data/spec/lib/validation_error_codes_spec.rb +1 -1
  217. data/spec/misc/factories_spec.rb +0 -12
  218. data/spec/models/settings_spec.rb +74 -32
  219. data/spec/routing/route_mapper_spec.rb +5 -5
  220. data/spec/rspec_helpers/test_helpers_spec.rb +1 -1
  221. data/spec/rspec_helpers/test_spec.rb +14 -0
  222. data/spec/{lib/releaf/core/item_orderer_spec.rb → services/array/reorder_spec.rb} +32 -53
  223. metadata +299 -224
  224. data/app/builders/releaf/builders/orderer.rb +0 -5
  225. data/app/builders/releaf/builders/tags/releaf_associated_set_field.rb +0 -40
  226. data/app/builders/releaf/core/settings/form_builder.rb +0 -21
  227. data/app/builders/releaf/core/settings/table_builder.rb +0 -11
  228. data/app/controllers/concerns/releaf/breadcrumbs.rb +0 -42
  229. data/app/controllers/releaf/base_controller.rb +0 -458
  230. data/app/controllers/releaf/core/settings_controller.rb +0 -50
  231. data/app/helpers/releaf/javascript_helper.rb +0 -75
  232. data/app/lib/releaf/core/assets_resolver.rb +0 -58
  233. data/app/lib/releaf/core/error_formatter.rb +0 -103
  234. data/app/lib/releaf/core/item_orderer.rb +0 -102
  235. data/app/lib/releaf/core/resource_table_fields.rb +0 -10
  236. data/app/lib/releaf/core/responders.rb +0 -31
  237. data/app/lib/releaf/core/template_field_type_mapper.rb +0 -127
  238. data/lib/generators/dummy/templates/controllers/concerns/.keep +0 -0
  239. data/lib/releaf/core/builders_autoload.rb +0 -27
  240. data/lib/releaf/core/configuration.rb +0 -101
  241. data/lib/releaf/core/engine.rb +0 -35
  242. data/lib/releaf/core/exceptions.rb +0 -38
  243. data/lib/releaf/core/settings_ui_component.rb +0 -7
  244. data/releaf-core.gemspec +0 -35
  245. data/spec/builders/builders/form_builder_spec.rb +0 -562
  246. data/spec/builders/builders/orderer_spec.rb +0 -22
  247. data/spec/builders/builders/page/header_builder_spec.rb +0 -143
  248. data/spec/builders/builders/page/layout_builder_spec.rb +0 -73
  249. data/spec/builders/builders/page/menu_builder_spec.rb +0 -160
  250. data/spec/builders/core/settings/form_builder_spec.rb +0 -69
  251. data/spec/controllers/releaf/core/settings_controller_spec.rb +0 -31
  252. data/spec/lib/releaf/core/assets_resolver_spec.rb +0 -113
  253. data/spec/lib/releaf/core/configuration_spec.rb +0 -230
  254. data/spec/lib/releaf/core/error_formatter_spec.rb +0 -242
  255. data/spec/lib/releaf/core/resource_table_fields_spec.rb +0 -18
  256. data/spec/lib/releaf/core/template_field_type_mapper_spec.rb +0 -311
@@ -1,5 +0,0 @@
1
- module Releaf::Builders::Orderer
2
- def orderer(items)
3
- Releaf::Core::ItemOrderer.new(*items.to_a)
4
- end
5
- end
@@ -1,40 +0,0 @@
1
- module Releaf::Tags
2
- module AssociatedSetField
3
- def releaf_associated_set_field(name, input: {}, label: {}, field: {}, options: {}, &block)
4
- options = {field: {type: "associated-set"}}.deep_merge(options)
5
- content = releaf_associated_set_content(name, input: input, options: options)
6
- input_wrapper_with_label(name, content, label: label, field: field, options: options, &block)
7
- end
8
-
9
- def releaf_associated_set_content(name, input: {}, options: {})
10
- association_options = options[:association]
11
- association = object.send(name)
12
- key_field = association_options[:field]
13
-
14
- list = []
15
-
16
- association_options[:items].each_pair do|value, label_text|
17
- item = association.find_by(key_field => value) || association.build(key_field => value)
18
-
19
- list << fields_for(name, item, relation_name: name, builder: self.class) do |builder|
20
- builder.releaf_associated_set_item(association_options, label_text)
21
- end
22
- end
23
-
24
- safe_join do
25
- list
26
- end
27
- end
28
-
29
-
30
- def releaf_associated_set_item(association_options, label_text)
31
- wrapper(class: "type-associated-set-item") do
32
- [hidden_field(:_destroy, value: object.new_record?, class: "destroy"),
33
- check_box(association_options[:field], {class: "keep", name: "keep"}, (object.send(association_options[:field]) if object.persisted?)),
34
- label(association_options[:field], label_text),
35
- hidden_field(association_options[:field])
36
- ]
37
- end
38
- end
39
- end
40
- end
@@ -1,21 +0,0 @@
1
- module Releaf::Core::Settings
2
- class FormBuilder < Releaf::Builders::FormBuilder
3
- def field_names
4
- [:value]
5
- end
6
-
7
- def render_value
8
- method_name = "releaf_#{settings_field_type}_field"
9
- send(method_name, :value, options: { label: { label_text: settings_field_label_text }})
10
- end
11
-
12
- def settings_field_label_text
13
- label_text = Releaf::Settings.registry[object.var][:description]
14
- label_text.present? ? t(label_text, scope: "settings") : "Value"
15
- end
16
-
17
- def settings_field_type
18
- Releaf::Settings.registry[object.var].fetch(:type, :text)
19
- end
20
- end
21
- end
@@ -1,11 +0,0 @@
1
- module Releaf::Core::Settings
2
- class TableBuilder < Releaf::Builders::TableBuilder
3
- def column_names
4
- [:var, :value, :updated_at]
5
- end
6
-
7
- def value_content(resource)
8
- resource.value.to_s
9
- end
10
- end
11
- end
@@ -1,42 +0,0 @@
1
- module Releaf
2
- module Breadcrumbs
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- before_filter :build_breadcrumbs
7
- end
8
-
9
- def build_breadcrumbs
10
- @breadcrumbs = [home_breadcrumb, controller_breadcrumb].compact
11
- end
12
-
13
- def home_breadcrumb
14
- { name: I18n.t('Home', scope: 'admin.breadcrumbs'), url: releaf_root_path }
15
- end
16
-
17
- def controller_breadcrumb
18
- controller_params = Releaf.application.config.controllers[self.class.name.sub(/Controller$/, '').underscore]
19
- if controller_params
20
- {
21
- name: I18n.t(controller_params[:name], scope: "admin.controllers"),
22
- url: send("#{controller_params[:url_helper]}_path")
23
- }
24
- end
25
- end
26
-
27
- def add_resource_breadcrumb resource, url = nil
28
- if resource.new_record?
29
- name= I18n.t('New record', scope: 'admin.breadcrumbs')
30
- url = url_for(action: :new, only_path: true) if url.nil?
31
- else
32
- if resource.respond_to?(:to_text)
33
- name = resource.send(:to_text)
34
- else
35
- name = I18n.t('Edit record', scope: 'admin.breadcrumbs')
36
- end
37
- url = url_for(action: :edit, id: resource.id, only_path: true) if url.nil?
38
- end
39
- @breadcrumbs << { name: name, url: url }
40
- end
41
- end
42
- end
@@ -1,458 +0,0 @@
1
- module Releaf
2
- class FeatureDisabled < StandardError; end
3
-
4
- class BaseController < ActionController::Base
5
- respond_to :html
6
- respond_to :json, only: [:create, :update]
7
- protect_from_forgery
8
- include Releaf.application.config.access_control_module
9
- include Releaf::Breadcrumbs
10
- include Releaf::RichtextAttachments
11
- include Releaf::Core::Responders
12
-
13
- before_filter :manage_ajax, :setup, :verify_feature_availability!
14
-
15
- rescue_from Releaf::Core::AccessDenied, with: :access_denied
16
- rescue_from Releaf::FeatureDisabled, with: :feature_disabled
17
-
18
- layout :layout
19
-
20
- helper_method \
21
- :form_options,
22
- :table_options,
23
- :ajax?,
24
- :controller_scope_name,
25
- :current_url,
26
- :active_view,
27
- :index_url,
28
- :page_title,
29
- :resource_class,
30
- :feature_available?,
31
- :builder_class,
32
- :searchable_fields
33
-
34
- def search(text)
35
- return if text.blank?
36
- return if searchable_fields.blank?
37
- @collection = searcher_class.prepare(relation: @collection, fields: searchable_fields, text: text)
38
- end
39
-
40
- def searcher_class
41
- Releaf::Core::Search
42
- end
43
-
44
- def index
45
- prepare_index
46
- respond_with(@collection)
47
- end
48
-
49
- def new
50
- prepare_new
51
- respond_with(@resource)
52
- end
53
-
54
- def show
55
- if feature_available?(:show)
56
- prepare_show
57
- else
58
- redirect_to url_for(action: 'edit', id: params[:id])
59
- end
60
- end
61
-
62
- def edit
63
- prepare_edit
64
- respond_with(@resource)
65
- end
66
-
67
- def create
68
- prepare_create
69
- @resource.save
70
- respond_with(@resource, location: (success_url if @resource.persisted?), redirect: true)
71
- end
72
-
73
- def update
74
- prepare_update
75
- @resource.update_attributes(resource_params)
76
- respond_with(@resource, location: success_url)
77
- end
78
-
79
- def confirm_destroy
80
- prepare_destroy
81
- @restricted_relations = Releaf::Core::ResourceUtilities.restricted_relations(@resource)
82
- respond_with(@resource, destroyable: destroyable?)
83
- end
84
-
85
- def toolbox
86
- prepare_toolbox
87
- respond_with(@resource)
88
- end
89
-
90
- def destroy
91
- prepare_destroy
92
- @resource.destroy if destroyable?
93
- respond_with(@resource, location: index_url)
94
- end
95
-
96
- # Check if @resource has existing restrict relation and it can be deleted
97
- #
98
- # @return boolean true or false
99
- def destroyable?
100
- Releaf::Core::ResourceUtilities.destroyable?(@resource)
101
- end
102
-
103
- # Helper methods ##############################################################################
104
-
105
- # Returns current url without internal params
106
- #
107
- # @return String
108
- def current_url
109
- @current_url ||= [request.path, (request.query_parameters.to_query if request.query_parameters.present?)].compact.join("?")
110
- end
111
-
112
- # Returns index url for current request
113
- #
114
- # @return String
115
- def index_url
116
- if @index_url.nil?
117
- # use current url
118
- if action_name == "index"
119
- @index_url = current_url
120
- # use from get params
121
- elsif params[:index_url].present?
122
- @index_url = params[:index_url]
123
- # fallback to index view
124
- else
125
- @index_url = url_for(action: 'index')
126
- end
127
- end
128
-
129
- @index_url
130
- end
131
-
132
- # Tries to return resource class.
133
- #
134
- # If it fails to return proper resource class for your controller, or your
135
- # controllers name has no relation to resource class name, then simply
136
- # override this method to return class that you want.
137
- #
138
- # @return class
139
- def self.resource_class
140
- self.name.split('::', 2).last.sub(/Controller$/, '').classify.constantize
141
- end
142
-
143
- # Tries to return resource class.
144
- #
145
- # If it fails to return proper resource class for your controller, or your
146
- # controllers name has no relation to resource class name, then simply
147
- # override this method to return class that you want.
148
- #
149
- # @return class
150
- def resource_class
151
- @resource_class ||= self.class.resource_class
152
- end
153
-
154
- # Returns action > view translation hash
155
- # @return Hash
156
- def action_views
157
- {
158
- new: :edit,
159
- update: :edit,
160
- create: :edit,
161
- }
162
- end
163
-
164
- # Returns generic view name for given action
165
- # @return String
166
- def action_view(_action_name)
167
- action_views[_action_name.to_sym] || _action_name
168
- end
169
-
170
- # Returns generic view name for current action
171
- # @return String
172
- def active_view
173
- action_view(action_name)
174
- end
175
-
176
- def form_url(form_type, object)
177
- url_for(action: object.new_record? ? 'create' : 'update', id: object.id)
178
- end
179
-
180
- def form_attributes(form_type, object, object_name)
181
- action = object.respond_to?(:persisted?) && object.persisted? ? :edit : :new
182
- action_object_name = "#{action}-#{object_name}"
183
- classes = [ action_object_name ]
184
- classes << "has-error" if object.errors.any?
185
- {
186
- multipart: true,
187
- id: action_object_name,
188
- class: classes,
189
- data: {
190
- "remote" => true,
191
- "remote-validation" => true,
192
- "type" => :json,
193
- },
194
- novalidate: ''
195
- }
196
- end
197
-
198
-
199
-
200
- def builder_class(builder_type)
201
- Releaf::Builders.builder_class(builder_scopes, builder_type)
202
- end
203
-
204
- def application_builder_scope
205
- [application_scope, "Builders"].reject(&:blank?).join("::")
206
- end
207
-
208
- def application_scope
209
- scope = Releaf.application.config.mount_location.capitalize
210
- scope if scope.present? && Releaf::Builders.constant_defined_at_scope?(scope, Object)
211
- end
212
-
213
- def builder_scopes
214
- [self.class.name.gsub(/Controller$/, ""), application_builder_scope]
215
- end
216
-
217
- def form_options(form_type, object, object_name)
218
- {
219
- builder: builder_class(:form),
220
- as: object_name,
221
- url: form_url(form_type, object),
222
- html: form_attributes(form_type, object, object_name)
223
- }
224
- end
225
-
226
- def table_options
227
- {
228
- builder: builder_class(:table),
229
- toolbox: feature_available?(:toolbox)
230
- }
231
- end
232
-
233
- # return contoller translation scope name for using
234
- # with I18.translation call within hash params
235
- # ex. t("save", scope: controller_scope_name)
236
- def controller_scope_name
237
- @controller_scope_name ||= 'admin.' + self.class.name.sub(/Controller$/, '').underscore.gsub('/', '_')
238
- end
239
-
240
- def feature_available? feature
241
- @features[feature].present?
242
- end
243
-
244
- def page_title
245
- I18n.t(params[:controller], scope: "admin.controllers") + " - " + Rails.application.class.parent_name
246
- end
247
-
248
- def render_notification(status, success_message_key: "#{params[:action]} succeeded", failure_message_key: "#{params[:action]} failed", now: false)
249
- if now == true
250
- flash_target = flash.now
251
- else
252
- flash_target = flash
253
- end
254
-
255
- if status
256
- flash_target["success"] = { "id" => "resource_status", "message" => I18n.t(success_message_key, scope: notice_scope_name) }
257
- else
258
- flash_target["error"] = { "id" => "resource_status", "message" => I18n.t(failure_message_key, scope: notice_scope_name) }
259
- end
260
- end
261
-
262
- def prepare_index
263
- # load resource only if they are not loaded yet
264
- @collection = resources unless collection_given?
265
-
266
- search(params[:search])
267
-
268
- unless @resources_per_page.nil?
269
- @collection = @collection.page( params[:page] ).per_page( @resources_per_page )
270
- end
271
- end
272
-
273
- def prepare_new
274
- # load resource only if is not initialized yet
275
- new_resource unless resource_given?
276
- add_resource_breadcrumb(@resource)
277
- end
278
-
279
- def prepare_create
280
- # load resource only if is not initialized yet
281
- new_resource unless resource_given?
282
- @resource.assign_attributes(resource_params)
283
- end
284
-
285
- def prepare_show
286
- prepare_resource_view
287
- end
288
-
289
- def prepare_edit
290
- prepare_resource_view
291
- end
292
-
293
- def prepare_resource_view
294
- # load resource only if is not loaded yet
295
- load_resource unless resource_given?
296
- add_resource_breadcrumb(@resource)
297
- end
298
-
299
- def prepare_update
300
- # load resource only if is not loaded yet
301
- load_resource unless resource_given?
302
- end
303
-
304
- def prepare_destroy
305
- load_resource
306
- end
307
-
308
- def prepare_toolbox
309
- load_resource
310
- end
311
-
312
- def new_resource
313
- @resource = resource_class.new
314
- end
315
-
316
- def load_resource
317
- @resource = resource_class.find(params[:id])
318
- end
319
-
320
- def verify_feature_availability!
321
- feature = action_feature(params[:action])
322
- raise FeatureDisabled, feature.to_s if (feature.present? && !feature_available?(feature))
323
- end
324
-
325
- def action_feature action
326
- action_features[action]
327
- end
328
-
329
- def action_features
330
- {
331
- index: :index,
332
- new: :create,
333
- create: :create,
334
- show: (feature_available?(:show) ? :show : :edit),
335
- edit: :edit,
336
- update: :edit,
337
- confirm_destroy: :destroy,
338
- destroy: :destroy
339
- }.with_indifferent_access
340
- end
341
-
342
- # Returns true if @resource is assigned (even if it's nil)
343
- def resource_given?
344
- !!defined? @resource
345
- end
346
-
347
- # Returns true if @collection is assigned (even if it's nil)
348
- def collection_given?
349
- !!defined? @collection
350
- end
351
-
352
- # Returns notice scope name
353
- def notice_scope_name
354
- 'notices.' + controller_scope_name
355
- end
356
-
357
- # Return ActiveRecord::Relation used in index
358
- #
359
- # @return ActiveRecord::Relation
360
- def resources
361
- resource_class.all
362
- end
363
-
364
- def required_params
365
- params.require(:resource)
366
- end
367
-
368
- # Called before each request by before_filter.
369
- # It sets various instance variables, that are later used in views and # controllers
370
- #
371
- # == Defines
372
- # @features::
373
- # Hash with symbol keys and boolean values. Each key represents action
374
- # (currently only `:edit`, `:create`, `:destroy` are supported). If one
375
- # of features is disabled, then routing to it will raise <tt>Releaf::FeatureDisabled</tt>
376
- # error
377
- #
378
- # @resources_per_page::
379
- # Integer - sets the number of resources to display on `#index` view
380
- #
381
- # To change controller settings `setup` method should be overriden like this
382
- #
383
- # @example
384
- # def setup
385
- # super
386
- # @features[:edit] = false
387
- # @resources_per_page = 20
388
- # end
389
- def setup
390
- @features = {
391
- show: false,
392
- edit: true,
393
- create: true,
394
- create_another: true,
395
- destroy: true,
396
- index: true,
397
- toolbox: true
398
- }
399
- @panel_layout = true
400
- @resources_per_page = 40
401
- end
402
-
403
- def searchable_fields
404
- @searchable_fields ||= Releaf::Core::DefaultSearchableFields.new(resource_class).find
405
- end
406
-
407
- def resource_params
408
- required_params.permit(*permitted_params)
409
- end
410
-
411
- # Returns which resource attributes can be updated with mass assignment.
412
- #
413
- # The resulting array will be passed to strong_parameters ``permit``
414
- def permitted_params
415
- Releaf::Core::ResourceParams.new(resource_class).values
416
- end
417
-
418
- # Returns url to redirect after successul resource create/update actions
419
- #
420
- # @return [String] url
421
- def success_url
422
- if create_another?
423
- url_for(action: 'new')
424
- else
425
- url_for(action: 'edit', id: @resource.id, index_url: index_url)
426
- end
427
- end
428
-
429
- def create_another?
430
- params[:after_save] == "create_another" && feature_available?(:create_another)
431
- end
432
-
433
- def feature_disabled exception
434
- @feature = exception.message
435
- respond_with(nil, responder: action_responder(:feature_disabled))
436
- end
437
-
438
- def access_denied
439
- respond_with(nil, responder: action_responder(:access_denied))
440
- end
441
-
442
- def ajax?
443
- @_ajax || false
444
- end
445
-
446
- def layout
447
- ajax? ? false : "releaf/admin"
448
- end
449
-
450
- def manage_ajax
451
- @_ajax = params.has_key? :ajax
452
- if @_ajax
453
- request.query_parameters.delete(:ajax)
454
- params.delete(:ajax)
455
- end
456
- end
457
- end
458
- end
@@ -1,50 +0,0 @@
1
- class Releaf::Core::SettingsController < ::Releaf::BaseController
2
-
3
- def self.resource_class
4
- ::Releaf::Settings
5
- end
6
-
7
- def resources
8
- super.where(thing_type: nil, var: resource_class.registered_keys)
9
- end
10
-
11
- def normalize_value(value)
12
- case resource_class.registry[@resource.var][:type]
13
- when :boolean
14
- value == '1'
15
- when :date
16
- Date.parse(value)
17
- when :time
18
- Time.parse(value)
19
- when :datetime
20
- DateTime.parse(value)
21
- when :integer
22
- value.to_i
23
- when :float
24
- value.to_s.sub(",", ".").to_f
25
- when :decimal
26
- value.to_s.sub(",", ".").to_d
27
- else
28
- value
29
- end
30
- end
31
-
32
- def searchable_fields
33
- [:var]
34
- end
35
-
36
- protected
37
-
38
- def prepare_update
39
- @resource = resource_class.find(params[:id]) unless resource_given?
40
- params[:resource][:value] = normalize_value(params[:resource][:value])
41
- end
42
-
43
- def setup
44
- super
45
- @features = {
46
- edit: true,
47
- index: true,
48
- }
49
- end
50
- end
@@ -1,75 +0,0 @@
1
- module Releaf
2
- module JavascriptHelper
3
-
4
- # converts date format used by ruby to dateformat used by jquery (when possible)
5
- #
6
- # references:
7
- # http://www.ruby-doc.org/core-2.0/Time.html#strftime-method
8
- # http://api.jqueryui.com/datepicker/#utility-formatDate
9
- # http://trentrichardson.com/examples/timepicker/#tp-formatting
10
- def jquery_date_format date_format
11
-
12
- raise ArgumentError, "date_format is not a string" unless date_format.is_a? String
13
-
14
- ruby2jquery = {
15
- '%' => '%',
16
- '-d' => 'd',
17
- '-j' => 'o',
18
- '-m' => 'm',
19
- '3N' => 'l',
20
- ':z' => 'Z',
21
- 'A' => nil,
22
- 'B' => 'MM',
23
- 'C' => nil,
24
- 'D' => 'mm/dd/y',
25
- 'F' => 'yy-mm-dd',
26
- 'G' => nil,
27
- 'H' => 'HH',
28
- 'I' => 'h',
29
- 'L' => 'l',
30
- 'M' => 'mm',
31
- 'P' => 'tt',
32
- 'R' => 'HH:mm',
33
- 'S' => 'ss',
34
- 'T' => 'HH:mm:ss',
35
- 'U' => nil,
36
- 'V' => nil,
37
- 'W' => nil,
38
- 'X' => 'HH:mm:ss',
39
- 'Y' => 'yy',
40
- 'Z' => nil,
41
- '_m' => 'm',
42
- 'a' => nil,
43
- 'b' => 'M',
44
- 'c' => 'M d HH:mm:ss yy', # not exact translation
45
- 'd' => 'dd',
46
- 'e' => 'd',
47
- 'g' => nil,
48
- 'h' => 'M',
49
- 'j' => 'oo',
50
- 'k' => 'H',
51
- 'l' => 'hh',
52
- 'm' => 'mm',
53
- 'n' => nil,
54
- 'p' => 'TT',
55
- 'r' => 'h:mm:ss TT',
56
- 's' => '@',
57
- 't' => nil,
58
- 'u' => nil,
59
- 'v' => nil,
60
- 'w' => nil,
61
- 'x' => 'mm/dd/y',
62
- 'y' => 'y',
63
- 'z' => nil
64
- }
65
-
66
- match_regexp = Regexp.new "%( #{ruby2jquery.reject { |k,v| v.nil? }.keys.join('|') })"
67
- jquery_date_format = date_format.gsub(match_regexp) do |match|
68
- ruby2jquery[match[1..-1]]
69
- end
70
-
71
- return jquery_date_format
72
- end
73
-
74
- end
75
- end