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,143 +0,0 @@
1
- require "rails_helper"
2
-
3
- describe Releaf::Builders::Page::HeaderBuilder, type: :class do
4
- class PageHeaderBuilderTestHelper < ActionView::Base
5
- include Rails.application.routes.url_helpers
6
- include FontAwesome::Rails::IconHelper
7
-
8
- def protect_against_forgery?
9
- true
10
- end
11
-
12
- def form_authenticity_token
13
- "xxx"
14
- end
15
-
16
- def request_forgery_protection_token
17
- "yyy"
18
- end
19
- end
20
-
21
- subject { described_class.new(template) }
22
- let(:template){ PageHeaderBuilderTestHelper.new }
23
-
24
- describe "#output" do
25
- it "returns safely joined items" do
26
- allow(subject).to receive(:items).and_return([ '<', ActiveSupport::SafeBuffer.new(">")])
27
- expect(subject.output).to eq("&lt;>")
28
- end
29
- end
30
-
31
- describe "#items" do
32
- it "returns array of home link, profile block and logout form content" do
33
- allow(subject).to receive(:home_link).and_return("a")
34
- allow(subject).to receive(:profile_block).and_return("b")
35
- allow(subject).to receive(:sign_out_form).and_return("c")
36
- expect(subject.items).to eq(["a", "b", "c"])
37
- end
38
- end
39
-
40
- describe "#home_link" do
41
- it "returns home link with a logo" do
42
- allow(subject).to receive(:home_url).and_return("www.xxx")
43
- allow(subject).to receive(:home_text).and_return("Rrr")
44
- allow(subject).to receive(:home_image_path).and_return("releaf/foo.png")
45
- content = '<a class="home" href="www.xxx"><img alt="Rrr" src="/images/releaf/foo.png" /></a>'
46
- expect(subject.home_link).to eq(content)
47
- end
48
- end
49
-
50
- describe "#home_url" do
51
- it "returns home url" do
52
- expect(subject.home_url).to eq("/admin")
53
- end
54
- end
55
-
56
- describe "#home_image_path" do
57
- it "returns image to the logo image asset" do
58
- expect(subject.home_image_path).to eq("releaf/logo.png")
59
- end
60
- end
61
-
62
- describe "#home_text" do
63
- it "returns releaf home link text" do
64
- expect(subject.home_text).to eq("Releaf")
65
- end
66
- end
67
-
68
-
69
- describe "#profile_url" do
70
- it "returns profile edit url for defined profile controller" do
71
- expect(subject.profile_url).to eq("/admin/profile")
72
-
73
- allow(subject).to receive(:profile_controller).and_return("/releaf/home")
74
- expect{ subject.profile_url }
75
- .to raise_error(ActionController::UrlGenerationError, 'No route matches {:action=>"edit", :controller=>"releaf/home"}')
76
- end
77
- end
78
-
79
- describe "#profile_settings_url" do
80
- it "returns profile edit url for defined profile controller" do
81
- expect(subject.profile_settings_url).to eq("/admin/profile/settings")
82
-
83
- allow(subject).to receive(:profile_controller).and_return("/releaf/home")
84
- expect{ subject.profile_settings_url }
85
- .to raise_error(ActionController::UrlGenerationError, 'No route matches {:action=>"settings", :controller=>"releaf/home"}')
86
- end
87
- end
88
-
89
- describe "#profile_controller" do
90
- it "returns releaf permissions profile controller" do
91
- expect(subject.profile_controller).to eq("/releaf/permissions/profile")
92
- end
93
- end
94
-
95
- describe "#profile_block" do
96
- it "returns profile block with content" do
97
- allow(subject).to receive(:profile_user_name).and_return("neim")
98
- allow(subject).to receive(:profile_settings_url).and_return("url_a")
99
- allow(subject).to receive(:profile_url).and_return("url_b")
100
- content = '<a class="button profile" href="url_b" data-settings-url="url_a"><span class="name">neim</span></a>'
101
- expect(subject.profile_block).to eq(content)
102
- end
103
- end
104
-
105
- describe "#user" do
106
- it "returns permissions manager user" do
107
- access_control = double(Releaf::Permissions::AccessControl)
108
- allow(subject).to receive(:access_control).and_return(access_control)
109
- allow(access_control).to receive(:user).and_return("x")
110
- expect(subject.user).to eq("x")
111
- end
112
- end
113
-
114
- describe "#profile_user_name" do
115
- it "returns profile user name" do
116
- admin = Releaf::Permissions::User.new(name: "a", surname: "b")
117
- allow(subject).to receive(:user).and_return(admin)
118
- expect(subject.profile_user_name).to eq("a b")
119
- end
120
- end
121
-
122
- describe "#sign_out_url" do
123
- it "returns sign out url" do
124
- expect(subject.sign_out_url).to eq("/admin/sign_out")
125
- end
126
- end
127
-
128
- describe "#sign_out_form" do
129
- it "returns sign out form" do
130
- allow(subject).to receive(:sign_out_url).and_return("url_a")
131
- content = %Q[
132
- <form class="sign-out" action="url_a" accept-charset="UTF-8" method="post">
133
- <input name="utf8" type="hidden" value="&#x2713;" />
134
- <input type="hidden" name="_method" value="delete" />
135
- <input type="hidden" name="yyy" value="xxx" />
136
- <button class="button only-icon" type="submit" title="Sign out">
137
- <i class="fa fa-power-off fa-icon-header"></i>
138
- </button>
139
- </form>]
140
- expect(subject.sign_out_form).to match_html( content )
141
- end
142
- end
143
- end
@@ -1,73 +0,0 @@
1
- require "rails_helper"
2
-
3
- describe Releaf::Builders::Page::LayoutBuilder, type: :class do
4
- class PageHeaderBuilderTestHelper < ActionView::Base
5
- include Rails.application.routes.url_helpers
6
- include FontAwesome::Rails::IconHelper
7
-
8
- def protect_against_forgery?
9
- true
10
- end
11
-
12
- def form_authenticity_token
13
- "xxx"
14
- end
15
-
16
- def request_forgery_protection_token
17
- "yyy"
18
- end
19
- end
20
-
21
- class NewRolesController < Releaf::Permissions::RolesController
22
- end
23
-
24
- subject { described_class.new(template) }
25
- let(:template){ PageHeaderBuilderTestHelper.new }
26
-
27
- describe "#controller_classes" do
28
- it "returns array of ignorable ancester classes" do
29
- allow(subject).to receive(:controller).and_return(NewRolesController.new)
30
- expect(subject.controller_classes).to eq([Releaf::Permissions::RolesController, NewRolesController])
31
-
32
- allow(subject).to receive(:controller).and_return(Releaf::Permissions::RolesController.new)
33
- expect(subject.controller_classes).to eq([Releaf::Permissions::RolesController])
34
-
35
- allow(subject).to receive(:controller).and_return(Releaf::Permissions::SessionsController.new)
36
- expect(subject.controller_classes).to eq([Releaf::Permissions::SessionsController])
37
- end
38
- end
39
-
40
- describe "#controller_body_classes" do
41
- it "returns normalized html classes from controller classes" do
42
- allow(subject).to receive(:controller_classes).and_return([Releaf::BaseController, Releaf::Permissions::RolesController])
43
- expect(subject.controller_body_classes).to eq(["controller-releaf-base", "controller-releaf-permissions-roles"])
44
- end
45
- end
46
-
47
- describe "#head_blocks" do
48
- it "returns array" do
49
- {
50
- title: :title_sym,
51
- meta: :meta_sym,
52
- favicons: :favicon_sym,
53
- ms_tile: :ms_tile_sym,
54
- assets: :assets_sym,
55
- csrf: :csrf_sym,
56
- }.each_pair do |method, stub_answer|
57
- allow(subject).to receive(method).and_return stub_answer
58
- end
59
-
60
- expect(subject.head_blocks).to match_array(
61
- [
62
- :title_sym,
63
- :meta_sym,
64
- :favicon_sym,
65
- :ms_tile_sym,
66
- :assets_sym,
67
- :csrf_sym,
68
- ]
69
- )
70
- end
71
- end
72
- end
73
-
@@ -1,160 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Releaf::Builders::Page::MenuBuilder, type: :class do
4
- class MenuBuilderTestHelper < ActionView::Base
5
- include FontAwesome::Rails::IconHelper
6
- end
7
-
8
- let(:controller){ Releaf::BaseController.new }
9
- let(:template){ MenuBuilderTestHelper.new }
10
- subject { described_class.new(template) }
11
-
12
- before do
13
- allow(template).to receive(:controller).and_return(controller)
14
- end
15
-
16
- it "includes Releaf::Builders::Base" do
17
- expect(described_class.ancestors).to include(Releaf::Builders::Base)
18
- end
19
-
20
- it "includes Releaf::Builders::Template" do
21
- expect(described_class.ancestors).to include(Releaf::Builders::Template)
22
- end
23
-
24
- describe "#output" do
25
- pending
26
- end
27
-
28
- describe "#menu_level" do
29
- pending
30
- end
31
-
32
- describe "#menu_item" do
33
- pending
34
- end
35
-
36
- describe "#collapsed_item?" do
37
- pending
38
- end
39
-
40
- describe "#item_attributes" do
41
- pending
42
- end
43
-
44
- describe "#item_name_content" do
45
- let(:item) { { name: :item_name } }
46
-
47
- it "returns abbreviation and full name elements" do
48
- allow(subject).to receive(:t).with( :item_name, scope: "admin.controllers" ).and_return('Item full name')
49
- allow(subject).to receive(:item_name_abbreviation).with('Item full name').and_return('Item abbreviation')
50
- expect( subject.item_name_content( item ) ).to eq('<abbr title="Item full name">Item abbreviation</abbr><span class="name">Item full name</span>')
51
- end
52
-
53
- end
54
-
55
- describe "#item_name_abbreviation" do
56
-
57
- it "returns first two letters of given text string" do
58
- expect( subject.item_name_abbreviation( "Foo bar" )).to eq("Fo")
59
- end
60
-
61
- context "when the first two letters are lowercase" do
62
- it "capitalizes the first letter" do
63
- expect( subject.item_name_abbreviation( "foo bar" )).to eq("Fo")
64
- end
65
- end
66
-
67
- context "when the first two letters are uppercase" do
68
- it "makes the second letter lowercase" do
69
- expect( subject.item_name_abbreviation( "FOO BAR" )).to eq("Fo")
70
- end
71
- end
72
-
73
- context "when the string contains slashes" do
74
-
75
- it "uses the first word after the last slash" do
76
- expect( subject.item_name_abbreviation( "Releaf/core/settings" )).to eq("Se")
77
- end
78
-
79
- it "ignores slashes surrounded by spaces" do
80
- expect( subject.item_name_abbreviation( "Inputs / Outputs" )).to eq("In")
81
- end
82
-
83
- it "ignores trailing slashes" do
84
- expect( subject.item_name_abbreviation( "Releaf/core/settings/" )).to eq("Se")
85
- end
86
-
87
- context "when string consists of a single slash" do
88
- it "returns an empty string" do
89
- expect( subject.item_name_abbreviation( "/" )).to eq("")
90
- end
91
- end
92
- end
93
-
94
- it "works with non-latin characters" do
95
- expect( subject.item_name_abbreviation( "žņ" )).to eq("Žņ")
96
- end
97
-
98
- context "when given an empty string value" do
99
- it "returns an empty string" do
100
- expect( subject.item_name_abbreviation( "" )).to eq("")
101
- end
102
- end
103
-
104
- context "when given nil" do
105
- it "returns an empty string" do
106
- expect( subject.item_name_abbreviation( nil )).to eq("")
107
- end
108
- end
109
- end
110
-
111
- describe "#item_collapser" do
112
-
113
- it "returns a collapser span with a button and collapser icon" do
114
- allow(subject).to receive(:item_collapser_icon).with(:foo).and_return(subject.icon('dummy'))
115
- expect(subject.item_collapser(:foo)).to eq '<span class="collapser"><button type="button"><i class="fa fa-dummy"></i></button></span>'
116
- end
117
-
118
- end
119
-
120
- describe "#item_collapser_icon" do
121
-
122
- before do
123
- allow(subject).to receive(:layout_settings).with('releaf.side.compact').and_return(false)
124
- end
125
-
126
- let(:item) { {} }
127
-
128
- context "when side is compacted in layout settings" do
129
- it "returns a beak pointing right" do
130
- allow(subject).to receive(:layout_settings).with('releaf.side.compact').and_return(true)
131
- allow(subject).to receive(:icon).with('chevron-right').and_return("icon ok")
132
- expect(subject.item_collapser_icon(item)).to eq "icon ok"
133
- end
134
- end
135
-
136
- context "when side is not compacted in layout settings" do
137
- context "when the given item is collapsed" do
138
- it "returns a beak pointing down" do
139
- allow(subject).to receive(:collapsed_item?).with(item).and_return(true)
140
- allow(subject).to receive(:icon).with('chevron-down').and_return("icon ok")
141
- expect(subject.item_collapser_icon(item)).to eq "icon ok"
142
- end
143
- end
144
- context "when the given item is expanded" do
145
- it "returns a beak pointing up" do
146
- allow(subject).to receive(:collapsed_item?).with(item).and_return(false)
147
- allow(subject).to receive(:icon).with('chevron-up').and_return("icon ok")
148
- expect(subject.item_collapser_icon(item)).to eq "icon ok"
149
- end
150
- end
151
- end
152
-
153
- end
154
-
155
-
156
- describe "#compacter" do
157
- pending
158
- end
159
-
160
- end
@@ -1,69 +0,0 @@
1
- require "rails_helper"
2
-
3
- describe Releaf::Core::Settings::FormBuilder, type: :class do
4
- class FormBuilderTestHelper < ActionView::Base; end
5
- before do
6
- Releaf::Settings.register([
7
- { key: "myapp.rating", default: 5.65, description: "x", type: :decimal },
8
- { key: "myapp.confirmed", default: true, type: :boolean },
9
- { key: "myapp.intro" }
10
- ])
11
- end
12
-
13
- let(:template){ FormBuilderTestHelper.new }
14
-
15
- describe "#field_names" do
16
- let(:subject){ described_class.new(:resource, Releaf::Settings.first, template, {}) }
17
-
18
- it "returns :value as only editable field within array" do
19
- expect(subject.field_names).to eq([:value])
20
- end
21
- end
22
-
23
- describe "#render_value" do
24
- let(:subject){ described_class.new(:resource, Releaf::Settings.first, template, {}) }
25
-
26
- it "renders text field for value" do
27
- allow(subject).to receive(:settings_field_label_text).and_return("x")
28
- allow(subject).to receive(:settings_field_type).and_return("text")
29
- allow(subject).to receive(:releaf_text_field).with(:value, { options: { label: { label_text: "x" }}}).and_return("y")
30
- expect(subject.render_value).to eq("y")
31
- end
32
- end
33
-
34
- describe "#settings_field_label_text" do
35
- context "when description is available" do
36
- let(:subject){ described_class.new(:resource, Releaf::Settings.first, template, {}) }
37
-
38
- it "returns translated description text" do
39
- allow(subject).to receive(:t).with("x", { scope: "settings"}).and_return("y")
40
- expect(subject.settings_field_label_text).to eq("y")
41
- end
42
- end
43
-
44
- context "when description is not available" do
45
- let(:subject){ described_class.new(:resource, Releaf::Settings.last, template, {}) }
46
-
47
- it "returns 'Value'" do
48
- expect(subject.settings_field_label_text).to eq("Value")
49
- end
50
- end
51
- end
52
-
53
- describe "#settings_field_type" do
54
- it "returns correct field type for the first setting" do
55
- subject = described_class.new(:resource, Releaf::Settings.first, template, {})
56
- expect(subject.settings_field_type).to eq(:decimal)
57
- end
58
-
59
- it "returns correct field type for the second setting" do
60
- subject = described_class.new(:resource, Releaf::Settings.second, template, {})
61
- expect(subject.settings_field_type).to eq(:boolean)
62
- end
63
-
64
- it "returns correct default field type" do
65
- subject = described_class.new(:resource, Releaf::Settings.last, template, {})
66
- expect(subject.settings_field_type).to eq(:text)
67
- end
68
- end
69
- end
@@ -1,31 +0,0 @@
1
- require 'rails_helper'
2
-
3
- describe Releaf::Core::SettingsController do
4
- login_as_user :user
5
-
6
- describe "GET index" do
7
- login_as_user :user
8
- it "lists only settings that not scoped to any object and exists within `Releaf::Settings.registry`" do
9
- Releaf::Settings.destroy_all
10
- Releaf::Settings.registry = {}
11
-
12
- Releaf::Settings.create(var: "a", value: "1")
13
- Releaf::Settings.create(var: "b", value: "2")
14
- Releaf::Settings.create(var: "c", value: "2")
15
- Releaf::Settings.create(var: "a", value: "3", thing_type: "User", thing_id: "1")
16
-
17
- Releaf::Settings.register(key: "a", default: "x", description: "some setting")
18
- Releaf::Settings.register(key: "b", default: "xxxx", description: "some other setting")
19
-
20
- get :index
21
- expect(assigns(:collection).size).to eq(2)
22
- end
23
- end
24
-
25
- describe "GET new" do
26
- it "creation of new records is disabled" do
27
- get :new
28
- expect(response.status).to eq(403)
29
- end
30
- end
31
- end
@@ -1,113 +0,0 @@
1
- require "rails_helper"
2
-
3
- describe Releaf::Core::AssetsResolver do
4
- describe ".base_assets" do
5
- it "returns array with `releaf/application`" do
6
- expect(described_class.base_assets).to eq(["releaf/application"])
7
- end
8
- end
9
-
10
- describe ".controller_assets" do
11
- before do
12
- allow(described_class).to receive(:base_assets).and_return(["a", "b"])
13
- end
14
-
15
- it "returns array with controller specific asset alognside base assets" do
16
- allow(described_class).to receive(:assets).and_return(
17
- "releaf/i18n_database/translations" => {
18
- javascripts: ["c"],
19
- stylesheets: ["d", "e"],
20
- }
21
- )
22
- expect(described_class.controller_assets("releaf/i18n_database/translations", :javascripts))
23
- .to eq(["a", "b", "c"])
24
- expect(described_class.controller_assets("releaf/i18n_database/translations", :stylesheets))
25
- .to eq(["a", "b", "d", "e"])
26
- end
27
-
28
- context "when no controller specific assets exists" do
29
- it "returns only base assets" do
30
- allow(described_class).to receive(:assets).and_return({})
31
- expect(described_class.controller_assets("releaf/i18n_database/translations", :stylesheets))
32
- .to eq(["a", "b"])
33
- end
34
- end
35
- end
36
-
37
- describe ".compiled_assets" do
38
- it "returns array with controller scoped stylesheets and javascripts" do
39
- allow(Rails.application.assets_manifest).to receive(:files).and_return(
40
- "releaf/controllers/releaf/content/nodes-72ac849dd467fe827933f15c45ea77a2b7beac55379147f3be4a21779787f484.js"=>{"logical_path"=>"releaf/controllers/releaf/content/nodes.js", "mtime"=>"2015-12-01T13:55:41+02:00", "size"=>1530, "digest"=>"72ac849dd467fe827933f15c45ea77a2b7beac55379147f3be4a21779787f484", "integrity"=>"sha256-cqyEndRn/oJ5M/FcRep3ore+rFU3kUfzvkohd5eH9IQ="},
41
- "releaf/controllers/releaf/content/nodes-2ac6b38702a01d9e0918f058f923b39c8320cdfa61f41c7494752b648a45e746.css"=>{"logical_path"=>"releaf/controllers/releaf/content/nodes.css", "mtime"=>"2016-01-18T13:36:15+02:00", "size"=>5919, "digest"=>"2ac6b38702a01d9e0918f058f923b39c8320cdfa61f41c7494752b648a45e746", "integrity"=>"sha256-KsazhwKgHZ4JGPBY+SOznIMgzfph9Bx0lHUrZIpF50Y="},
42
- "releaf/controllers/releaf/permissions/sessions-9eb2f3275ea7578a6a95ca413d318a9984ef93c0d6645f11cf77fe82a2639cf0.css"=>{"logical_path"=>"releaf/controllers/releaf/permissions/sessions.css", "mtime"=>"2016-01-18T13:36:15+02:00", "size"=>2205, "digest"=>"9eb2f3275ea7578a6a95ca413d318a9984ef93c0d6645f11cf77fe82a2639cf0", "integrity"=>"sha256-nrLzJ16nV4pqlcpBPTGKmYTvk8DWZF8Rz3f+gqJjnPA="}
43
- )
44
-
45
- list = {
46
- "releaf/content/nodes"=>{:stylesheets=>["releaf/controllers/releaf/content/nodes.css"],
47
- :javascripts=>["releaf/controllers/releaf/content/nodes.js"]},
48
- "releaf/permissions/sessions" => {:stylesheets=>["releaf/controllers/releaf/permissions/sessions.css"], :javascripts=>[]}
49
- }
50
- expect(described_class.compiled_assets).to eq(list)
51
- end
52
- end
53
-
54
- describe ".noncompiled_assets" do
55
- it "returns array with controller scoped stylesheets and javascripts" do
56
- list = {
57
- "releaf/content/nodes"=>{:stylesheets=>["releaf/controllers/releaf/content/nodes"],
58
- :javascripts=>["releaf/controllers/releaf/content/nodes"]},
59
- "releaf/i18n_database/translations"=>{:stylesheets=>["releaf/controllers/releaf/i18n_database/translations"],
60
- :javascripts=>["releaf/controllers/releaf/i18n_database/translations"]},
61
- "releaf/permissions/sessions" => {:stylesheets=>["releaf/controllers/releaf/permissions/sessions"], :javascripts=>[]}
62
- }
63
- expect(described_class.noncompiled_assets).to eq(list)
64
- end
65
- end
66
-
67
- describe ".compiled_assets?" do
68
- context "when `Rails.application.assets` is not nil" do
69
- it "returns true" do
70
- allow(Rails.application).to receive(:assets).and_return(nil)
71
- expect(described_class.compiled_assets?).to be true
72
- end
73
- end
74
-
75
- context "when `Rails.application.assets` is nil" do
76
- it "returns false" do
77
- allow(Rails.application).to receive(:assets).and_return("x")
78
- expect(described_class.compiled_assets?).to be false
79
- end
80
- end
81
- end
82
-
83
- describe ".assets" do
84
- before do
85
- described_class.class_variable_set(:@@compiled_assets, nil)
86
- allow(described_class).to receive(:compiled_assets).and_return("a")
87
- allow(described_class).to receive(:noncompiled_assets).and_return("b")
88
- end
89
-
90
- context "when compiled assets is not available" do
91
- it "returns non compiled assets" do
92
- allow(described_class).to receive(:compiled_assets?).and_return(false)
93
- expect(described_class.assets).to eq("b")
94
- end
95
- end
96
-
97
- context "when compiled assets available" do
98
- before do
99
- allow(described_class).to receive(:compiled_assets?).and_return(true)
100
- end
101
-
102
- it "caches compiled assets list" do
103
- expect(described_class).to receive(:compiled_assets).once.and_return("a")
104
- described_class.assets
105
- described_class.assets
106
- end
107
-
108
- it "returns compiled assets" do
109
- expect(described_class.assets).to eq("a")
110
- end
111
- end
112
- end
113
- end