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.
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