rademade_admin 0.0.3 → 0.1.0

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 (223) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  3. data/app/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  4. data/app/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  5. data/app/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  6. data/app/assets/images/rademade_admin/ico/btn-attach.png +0 -0
  7. data/app/assets/images/rademade_admin/logos/logo.png +0 -0
  8. data/app/assets/javascripts/rademade_admin.coffee +8 -4
  9. data/app/assets/javascripts/rademade_admin/app/app.coffee +2 -1
  10. data/app/assets/javascripts/rademade_admin/app/common/datetime-picker.coffee +7 -0
  11. data/app/assets/javascripts/rademade_admin/app/common/dnd-sort.coffee +23 -32
  12. data/app/assets/javascripts/rademade_admin/app/common/droplist.coffee +8 -0
  13. data/app/assets/javascripts/rademade_admin/app/common/lang-panel.coffee +6 -0
  14. data/app/assets/javascripts/rademade_admin/app/common/related-index.coffee +6 -9
  15. data/app/assets/javascripts/rademade_admin/app/common/sort-list.coffee +10 -14
  16. data/app/assets/javascripts/rademade_admin/app/common/uploader.coffee +3 -3
  17. data/app/assets/javascripts/rademade_admin/app/form-popup/initializer.coffee +24 -37
  18. data/app/assets/javascripts/rademade_admin/app/form-popup/view.coffee +32 -18
  19. data/app/assets/javascripts/rademade_admin/app/forms/remove.coffee +4 -3
  20. data/app/assets/javascripts/rademade_admin/app/select2/model.coffee +7 -0
  21. data/app/assets/javascripts/rademade_admin/app/select2/related/collection-view.coffee +35 -0
  22. data/app/assets/javascripts/rademade_admin/app/select2/related/collection.coffee +28 -0
  23. data/app/assets/javascripts/rademade_admin/app/select2/related/model.coffee +15 -0
  24. data/app/assets/javascripts/rademade_admin/app/select2/related/view.coffee +40 -0
  25. data/app/assets/javascripts/rademade_admin/app/select2/view.coffee +78 -0
  26. data/app/assets/javascripts/rademade_admin/form/form-ajax.coffee +48 -0
  27. data/app/assets/javascripts/rademade_admin/form/form-initializater.coffee +45 -0
  28. data/app/assets/javascripts/rademade_admin/form/form-validation.coffee +42 -0
  29. data/app/assets/javascripts/rademade_admin/form/form.coffee +62 -0
  30. data/app/assets/javascripts/rademade_admin/library/ckeditor/config.js +14 -12
  31. data/app/assets/stylesheets/{rademade_admin/bootstrap → old/-bootstrap}/bootstrap-overrides.css.erb +0 -0
  32. data/app/assets/stylesheets/{rademade_admin/bootstrap → old/-bootstrap}/main.scss.erb +0 -0
  33. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/chart-showcase.scss.erb +0 -0
  34. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/datatables.scss.erb +0 -0
  35. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/elements.scss.erb +0 -0
  36. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/error.scss.erb +0 -0
  37. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/form-showcase.scss.erb +0 -0
  38. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/form-wizard.scss.erb +0 -0
  39. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/gallery.scss.erb +0 -0
  40. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/grids.scss.erb +0 -0
  41. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/icons.scss.erb +0 -0
  42. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/index.scss.erb +0 -0
  43. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/layout.scss.erb +0 -0
  44. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/new-user.scss.erb +0 -0
  45. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/personal-info.scss.erb +0 -0
  46. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/popup.scss.erb +0 -0
  47. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/signin.scss.erb +0 -0
  48. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/tables.scss.erb +0 -0
  49. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/ui-elements.scss.erb +0 -0
  50. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/user-list.scss.erb +0 -0
  51. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/user-profile.scss.erb +0 -0
  52. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/web-app-icons.scss.erb +0 -0
  53. data/app/assets/stylesheets/{rademade_admin/lib → old/-lib}/bootstrap.datepicker.css.erb +0 -0
  54. data/app/assets/stylesheets/{rademade_admin/lib → old/-lib}/morris.css.erb +0 -0
  55. data/app/assets/stylesheets/{rademade_admin → old}/base.scss.erb +0 -0
  56. data/app/assets/stylesheets/{rademade_admin → old}/edit.css +0 -0
  57. data/app/assets/stylesheets/{rademade_admin → old}/file-upload.scss.erb +0 -0
  58. data/app/assets/stylesheets/{rademade_admin → old}/notifier.custom.css.erb +0 -0
  59. data/app/assets/stylesheets/{rademade_admin → old}/scaffolds.scss.erb +0 -0
  60. data/app/assets/stylesheets/rademade_admin.sass.erb +96 -0
  61. data/app/assets/stylesheets/rademade_admin/base/main.sass +71 -0
  62. data/app/assets/stylesheets/rademade_admin/blocks/buttons/main.sass +81 -0
  63. data/app/assets/stylesheets/rademade_admin/blocks/form/input.sass +29 -0
  64. data/app/assets/stylesheets/rademade_admin/blocks/form/label.sass +31 -0
  65. data/app/assets/stylesheets/rademade_admin/blocks/form/select.sass +26 -0
  66. data/app/assets/stylesheets/rademade_admin/blocks/form/select2.sass +67 -0
  67. data/app/assets/stylesheets/rademade_admin/blocks/form/table.sass +42 -0
  68. data/app/assets/stylesheets/rademade_admin/blocks/form/texarea.sass +20 -0
  69. data/app/assets/stylesheets/rademade_admin/blocks/header/_logo.sass +7 -0
  70. data/app/assets/stylesheets/rademade_admin/blocks/header/_menu.sass +80 -0
  71. data/app/assets/stylesheets/rademade_admin/blocks/header/_search.sass +37 -0
  72. data/app/assets/stylesheets/rademade_admin/blocks/page/content/_main.sass +11 -0
  73. data/app/assets/stylesheets/rademade_admin/blocks/page/headline/main.sass +44 -0
  74. data/app/assets/stylesheets/rademade_admin/blocks/page/menu/_main.sass +31 -0
  75. data/app/assets/stylesheets/rademade_admin/lib/datepicker.sass +373 -0
  76. data/app/assets/stylesheets/rademade_admin/lib/glyphicon.sass.erb +618 -0
  77. data/app/assets/stylesheets/rademade_admin/lib/notifier.css.erb +661 -0
  78. data/app/assets/stylesheets/rademade_admin/lib/uploader.sass +66 -0
  79. data/app/assets/stylesheets/rademade_admin/mixins/clear.sass +5 -0
  80. data/app/assets/stylesheets/rademade_admin/mixins/fonts.sass +8 -0
  81. data/app/assets/stylesheets/rademade_admin/mixins/sprite.sass +7 -0
  82. data/app/assets/stylesheets/rademade_admin/mixins/text-overflow.sass +6 -0
  83. data/app/assets/stylesheets/rademade_admin/mixins/user-select.sass +5 -0
  84. data/app/assets/stylesheets/rademade_admin/modules/breadcrumbs/main.sass +30 -0
  85. data/app/assets/stylesheets/rademade_admin/modules/errors/error.sass.erb +19 -0
  86. data/app/assets/stylesheets/rademade_admin/modules/form/main.sass +15 -0
  87. data/app/assets/stylesheets/rademade_admin/modules/header/main.sass +6 -0
  88. data/app/assets/stylesheets/rademade_admin/modules/login/_main.sass +79 -0
  89. data/app/assets/stylesheets/rademade_admin/modules/main-menu/main.sass +0 -0
  90. data/app/assets/stylesheets/rademade_admin/modules/page/main.sass +16 -0
  91. data/app/assets/stylesheets/rademade_admin/modules/pagination/main.sass +51 -0
  92. data/app/assets/stylesheets/rademade_admin/modules/popup/new.sass +18 -0
  93. data/app/assets/stylesheets/rademade_admin/var/colors.sass +0 -0
  94. data/app/assets/stylesheets/rademade_admin/var/images.sass +2 -0
  95. data/app/assets/stylesheets/rademade_admin/var/width.sass +13 -0
  96. data/app/controllers/rademade_admin/abstract_controller.rb +18 -2
  97. data/app/controllers/rademade_admin/application_controller.rb +1 -1
  98. data/app/controllers/rademade_admin/dashboard_controller.rb +1 -1
  99. data/app/controllers/rademade_admin/file_controller.rb +25 -0
  100. data/app/controllers/rademade_admin/model_controller.rb +66 -47
  101. data/app/controllers/rademade_admin/sessions_controller.rb +3 -3
  102. data/app/helpers/rademade_admin/field_helper.rb +21 -32
  103. data/app/helpers/rademade_admin/form_helper.rb +57 -27
  104. data/app/helpers/rademade_admin/menu_helper.rb +12 -5
  105. data/app/helpers/rademade_admin/uri_helper.rb +50 -62
  106. data/app/inputs/rademade_admin/date_time_input.rb +13 -0
  107. data/app/inputs/rademade_admin/file_input.rb +72 -0
  108. data/app/inputs/rademade_admin/related_select_input.rb +78 -0
  109. data/app/serializers/autocomplete/link_serializer.rb +6 -4
  110. data/app/services/linker.rb +8 -14
  111. data/app/services/login.rb +5 -3
  112. data/app/services/model_controller/breadcrumbs.rb +36 -0
  113. data/app/services/model_controller/instance_options.rb +7 -5
  114. data/app/services/model_controller/model_options.rb +10 -7
  115. data/app/services/model_controller/notifier.rb +10 -6
  116. data/app/services/model_controller/templates.rb +4 -3
  117. data/app/services/relation_service.rb +11 -0
  118. data/app/services/saver.rb +59 -24
  119. data/app/services/search/conditions/abstract.rb +15 -14
  120. data/app/services/search/conditions/autocomplete.rb +11 -9
  121. data/app/services/search/conditions/list.rb +6 -5
  122. data/app/services/search/conditions/related_list.rb +17 -13
  123. data/app/services/search/{conditions/part/where.rb → part/abstract.rb} +7 -9
  124. data/app/services/search/part/order.rb +17 -0
  125. data/app/services/search/part/where.rb +19 -0
  126. data/app/services/sortable_service.rb +27 -27
  127. data/app/services/template_service.rb +68 -0
  128. data/app/services/upload/preview_service.rb +86 -0
  129. data/app/views/layouts/rademade_admin.html.erb +13 -4
  130. data/app/views/rademade_admin/_blocks/_header.html.erb +35 -28
  131. data/app/views/rademade_admin/_blocks/_menu.html.erb +20 -23
  132. data/app/views/rademade_admin/_blocks/_on_page_select.html.erb +15 -0
  133. data/app/views/rademade_admin/_blocks/_pagination.html.erb +1 -18
  134. data/app/views/rademade_admin/_blocks/_sub_menu.html.erb +3 -3
  135. data/app/views/rademade_admin/_blocks/form/_control.html.erb +3 -0
  136. data/app/views/rademade_admin/_blocks/form/_lang_panel.html.erb +19 -0
  137. data/app/views/rademade_admin/_blocks/sub_menu/_link.html.erb +6 -5
  138. data/app/views/rademade_admin/_blocks/table/_head.html.erb +13 -0
  139. data/app/views/rademade_admin/_layouts/inner.html.erb +21 -33
  140. data/app/views/rademade_admin/_layouts/inner/form.html.erb +6 -13
  141. data/app/views/rademade_admin/_layouts/inner/index_table.html.erb +31 -55
  142. data/app/views/rademade_admin/_layouts/inner/related_index_table.html.erb +26 -54
  143. data/app/views/rademade_admin/abstract/_form.html.erb +6 -9
  144. data/app/views/rademade_admin/abstract/edit.html.erb +3 -8
  145. data/app/views/rademade_admin/abstract/index.html.erb +38 -67
  146. data/app/views/rademade_admin/abstract/new.html.erb +3 -8
  147. data/app/views/rademade_admin/abstract/related.html.erb +48 -0
  148. data/app/views/rademade_admin/dashboard/index.html.erb +4 -5
  149. data/app/views/rademade_admin/dashboard/login.html.erb +19 -30
  150. data/config/initializers/carrier_wave/mongoid.rb +48 -0
  151. data/config/initializers/ckeditor.rb +3 -0
  152. data/config/initializers/kaminari_route_proxy.rb +16 -0
  153. data/config/initializers/simple_form.rb +147 -0
  154. data/config/initializers/simple_form/rademade_component.rb +9 -0
  155. data/config/initializers/simple_form/wrappers.rb +28 -0
  156. data/config/locales/rademade_admin.en.yml +28 -0
  157. data/config/locales/simple_form.en.yml +26 -0
  158. data/config/routes.rb +1 -2
  159. data/lib/rademade_admin.rb +7 -5
  160. data/lib/rademade_admin/bower/performer.rb +1 -1
  161. data/lib/rademade_admin/breadcrumbs/render/rademade.rb +31 -0
  162. data/lib/rademade_admin/engine.rb +2 -2
  163. data/lib/rademade_admin/input/related_select_input/model_data.rb +40 -0
  164. data/lib/rademade_admin/input/related_select_input/related_list.rb +60 -0
  165. data/lib/rademade_admin/model/adapter/data.rb +119 -0
  166. data/lib/rademade_admin/model/adapter/data/active_record.rb +109 -0
  167. data/lib/rademade_admin/model/adapter/data/mongoid.rb +77 -0
  168. data/{app/services/search/query_adapter/abstract.rb → lib/rademade_admin/model/adapter/query.rb} +15 -5
  169. data/lib/rademade_admin/model/adapter/query/active_record.rb +50 -0
  170. data/lib/rademade_admin/model/adapter/query/mongoid.rb +57 -0
  171. data/lib/rademade_admin/model/configuration.rb +43 -16
  172. data/lib/rademade_admin/model/configuration/field_label.rb +16 -0
  173. data/lib/rademade_admin/model/configuration/fields.rb +47 -21
  174. data/lib/rademade_admin/model/configuration/fields_labels.rb +31 -0
  175. data/lib/rademade_admin/model/configuration/form_field.rb +27 -0
  176. data/lib/rademade_admin/model/configuration/form_fields.rb +18 -0
  177. data/lib/rademade_admin/model/configuration/list_field.rb +21 -0
  178. data/lib/rademade_admin/model/configuration/list_fields.rb +18 -0
  179. data/lib/rademade_admin/model/graph.rb +9 -9
  180. data/lib/rademade_admin/model/info.rb +53 -68
  181. data/lib/rademade_admin/model/info/data_item.rb +130 -0
  182. data/lib/rademade_admin/model/info/data_items.rb +130 -0
  183. data/lib/rademade_admin/model/info/field.rb +39 -0
  184. data/lib/rademade_admin/model/info/fields.rb +87 -0
  185. data/lib/rademade_admin/model/info/relation.rb +49 -0
  186. data/lib/rademade_admin/model/info/relations.rb +40 -0
  187. data/lib/rademade_admin/model/info/uploader.rb +16 -0
  188. data/lib/rademade_admin/model/info/uploaders.rb +35 -0
  189. data/lib/rademade_admin/model/reflection.rb +38 -9
  190. data/lib/rademade_admin/routing/mapper.rb +9 -5
  191. data/lib/rademade_admin/search/searcher.rb +22 -0
  192. data/lib/rademade_admin/sortable.rb +1 -0
  193. data/lib/rademade_admin/uploader/photo.rb +1 -0
  194. data/lib/rademade_admin/user.rb +7 -6
  195. data/lib/rademade_admin/version.rb +1 -1
  196. data/lib/tasks/rademade_bower_install.rake +10 -2
  197. data/lib/templates/erb/scaffold/_form.html.erb +13 -0
  198. metadata +195 -109
  199. data/app/assets/javascripts/rademade_admin/app/common/relation-list.coffee +0 -109
  200. data/app/assets/javascripts/rademade_admin/app/form-popup/collection.coffee +0 -20
  201. data/app/assets/javascripts/rademade_admin/app/form-popup/model.coffee +0 -4
  202. data/app/assets/javascripts/rademade_admin/detail_admin/theme.js +0 -56
  203. data/app/assets/javascripts/rademade_admin/form/form-ajax-submit.coffee +0 -157
  204. data/app/assets/stylesheets/rademade_admin.scss.erb +0 -19
  205. data/app/helpers/rademade_admin/name_helper.rb +0 -18
  206. data/app/helpers/rademade_admin/upload_preview_helper.rb +0 -60
  207. data/app/inputs/rademade_admin/admin_file_input.rb +0 -71
  208. data/app/inputs/rademade_admin/admin_select_input.rb +0 -82
  209. data/app/inputs/rademade_admin/admin_textarea_input.rb +0 -6
  210. data/app/inputs/rademade_admin/boolean_input.rb +0 -14
  211. data/app/services/form_builder.rb +0 -4
  212. data/app/services/search/query_adapter/active_record.rb +0 -45
  213. data/app/services/search/query_adapter/mongoid.rb +0 -51
  214. data/app/services/search/searcher.rb +0 -20
  215. data/app/views/rademade_admin/_blocks/_form_control.html.erb +0 -5
  216. data/app/views/rademade_admin/abstract/related_index.html.erb +0 -85
  217. data/config/initializers/devise.rb +0 -251
  218. data/config/initializers/formtastic.rb +0 -13
  219. data/lib/rademade_admin/model/data_adapter.rb +0 -64
  220. data/lib/rademade_admin/model/data_adapter/active_record.rb +0 -59
  221. data/lib/rademade_admin/model/data_adapter/mongoid.rb +0 -54
  222. data/lib/rademade_admin/model/reflection/data.rb +0 -48
  223. data/lib/rademade_admin/model/reflection/uploader.rb +0 -18
@@ -0,0 +1,13 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module RademadeAdmin
3
+ class DateTimeInput < SimpleForm::Inputs::DateTimeInput
4
+
5
+ def input
6
+ @builder.text_field(attribute_name, input_html_options.merge({
7
+ :data => { 'date-time-picker' => '' },
8
+ :value => object.send(attribute_name).try(:strftime, '%d.%m.%Y %R')
9
+ }))
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,72 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module RademadeAdmin
3
+ class FileInput < SimpleForm::Inputs::FileInput
4
+
5
+ include UriHelper
6
+
7
+ def input
8
+ template.content_tag(
9
+ :div,
10
+ HtmlBuffer.new([file_html]),
11
+ { :class => 'uploader-block' }
12
+ )
13
+ end
14
+
15
+ private
16
+
17
+ def file_html
18
+ template.content_tag(
19
+ :div,
20
+ HtmlBuffer.new([
21
+ upload_preview_service.preview_html, input_file_html,
22
+ upload_progress_html, upload_button_html, input_hidden_html
23
+ ]),
24
+ { :class => 'uploader-wrapper' }
25
+ )
26
+ end
27
+
28
+ def input_file_html
29
+ @builder.file_field(uploader.mounted_as, {
30
+ :id => nil,
31
+ :class => 'btn yellow-btn uploader-input-file',
32
+ :name => uploader.mounted_as,
33
+ :data => {
34
+ :column => uploader.mounted_as,
35
+ :id => object.id.to_s,
36
+ :saved => object.new_record? ? 0 : 1,
37
+ :model => object.class.to_s,
38
+ :uploader => uploader.class.to_s,
39
+ :url => admin_url_for(:controller => 'file', :action => 'upload')
40
+ }
41
+ })
42
+ end
43
+
44
+ def input_hidden_html
45
+ @builder.hidden_field(attribute_name, {
46
+ :class => 'uploader-input-hidden hidden'
47
+ }.merge(input_html_options))
48
+ end
49
+
50
+ def upload_progress_html
51
+ progress_slider = template.content_tag(:div, '', { :class => 'upload-progress' })
52
+ template.content_tag(:div, progress_slider, {
53
+ :class => 'upload-progress-wrapper'
54
+ })
55
+ end
56
+
57
+ def upload_button_html
58
+ template.content_tag(:span, I18n.t('rademade_admin.upload_file'), {
59
+ :class => 'btn green-btn upload-btn'
60
+ })
61
+ end
62
+
63
+ def upload_preview_service
64
+ @upload_preview_service ||= RademadeAdmin::Upload::PreviewService.new(uploader)
65
+ end
66
+
67
+ def uploader
68
+ @uploader ||= input_html_options[:value] || object.send(attribute_name)
69
+ end
70
+
71
+ end
72
+ end
@@ -0,0 +1,78 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'rademade_admin/input/related_select_input/model_data'
3
+ require 'rademade_admin/input/related_select_input/related_list'
4
+
5
+ module RademadeAdmin
6
+ class RelatedSelectInput < SimpleForm::Inputs::CollectionSelectInput
7
+
8
+ include ::RademadeAdmin::UriHelper
9
+ include ::RademadeAdmin::Input::RelatedSelectInput::ModelData
10
+ include ::RademadeAdmin::Input::RelatedSelectInput::RelatedList
11
+
12
+ def input
13
+ template.content_tag(
14
+ :div,
15
+ RademadeAdmin::HtmlBuffer.new([select_ui_html, add_button_html]),
16
+ html_attributes
17
+ ) + related_html
18
+ end
19
+
20
+ private
21
+
22
+ def select_ui_html
23
+ template.text_field_tag(input_html_options_name, '', html_attributes)
24
+ end
25
+
26
+ def related_html
27
+ if multiple?
28
+ related_list_html
29
+ else
30
+ related_item_html
31
+ end
32
+ end
33
+
34
+ def input_html_options_name
35
+ name = "#{object_name}[#{relation_getter}]"
36
+ name += '[]' if multiple?
37
+ name
38
+ end
39
+
40
+ def html_attributes
41
+ {
42
+ :class => 'select-wrapper',
43
+ :data => reflection_data.merge(:'owner-class' => model.class.to_s),
44
+ :type => 'hidden'
45
+ }
46
+ end
47
+
48
+ def add_button_html
49
+ url = admin_new_form_uri(related_to)
50
+ template.content_tag(:button, I18n.t('rademade_admin.add_new'), {
51
+ :class => 'btn green-btn relation-add-button r-margin fl-l',
52
+ :'data-new' => url,
53
+ :'data-class' => related_to.to_s
54
+ }) if url
55
+ end
56
+
57
+ def reflection_data
58
+ {
59
+ :'rel-multiple' => multiple?,
60
+ :'rel-class' => related_to.to_s,
61
+ :'search-url' => admin_autocomplete_uri(related_to, :format => :json)
62
+ }
63
+ end
64
+
65
+ def related_item_html
66
+ if related_value.nil?
67
+ nil
68
+ else
69
+ serialized_data = Autocomplete::BaseSerializer.new([related_value]).as_json.first
70
+ template.content_tag(:input, '', {
71
+ :type => 'hidden',
72
+ :data => serialized_data
73
+ })
74
+ end
75
+ end
76
+
77
+ end
78
+ end
@@ -2,17 +2,19 @@
2
2
  module Autocomplete
3
3
  class LinkSerializer < BaseSerializer
4
4
 
5
- def initialize(collection, parent, parent_id)
5
+ def initialize(collection, item, relation)
6
6
  super(collection)
7
- @parent = parent
8
- @parent_id = parent_id
7
+ @item = item
8
+ @relation = relation
9
9
  end
10
10
 
11
11
  protected
12
12
 
13
13
  def item_to_json(item)
14
14
  super(item).merge({
15
- :link_url => admin_link_uri(item, @parent, @parent_id)
15
+ :link_url => admin_link_uri(@item, @relation, {
16
+ :related_id => item.id
17
+ })
16
18
  })
17
19
  end
18
20
 
@@ -2,32 +2,26 @@
2
2
  module RademadeAdmin
3
3
  class Linker
4
4
 
5
- def initialize(model_info, parent_model, parent_id)
5
+ def initialize(model_info, item, relation)
6
6
  @model_info = model_info
7
- @parent_model_info = RademadeAdmin::Model::Graph.instance.model_info(parent_model)
8
- @parent = @parent_model_info.model.find(parent_id)
7
+ @item = item
8
+ @related_data_item = model_info.data_items.data_item(relation)
9
9
  end
10
10
 
11
11
  def link(id)
12
- process_link { |old_data| old_data << parse_id(id) }
12
+ process_link { |old_data| old_data << @related_data_item.relation.related_entities(id) }
13
13
  end
14
14
 
15
15
  def unlink(id)
16
- process_link { |old_data| old_data - [parse_id(id)] }
16
+ process_link { |old_data| old_data - [@related_data_item.relation.related_entities(id)] }
17
17
  end
18
18
 
19
19
  private
20
20
 
21
21
  def process_link
22
- related_name = @model_info.model_name.tableize.gsub('/', '_').to_sym # todo extract method or better guessing of related name
23
- association = @parent_model_info.reflect_on_association(related_name)
24
- foreign_key = @parent_model_info.association_foreign_key(association)
25
- @parent.send(foreign_key + '=', yield(@parent.send(foreign_key)))
26
- @parent.save
27
- end
28
-
29
- def parse_id(id)
30
- Integer(id) rescue id.to_s
22
+ old_data = @item.send(@related_data_item.getter).to_a
23
+ @item.send(@related_data_item.setter, yield(old_data))
24
+ @item.save
31
25
  end
32
26
 
33
27
  end
@@ -1,9 +1,10 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module RademadeAdmin
3
3
  class Login
4
+
4
5
  def self.admin(params)
5
- params.require( :data ).permit([:email, :password])
6
- user = RademadeAdmin.user_class.where(:email => params[:data][:email]).first
6
+ params.require(:data).permit([:email, :password])
7
+ user = RademadeAdmin.user_class.get_by_email(params[:data][:email])
7
8
 
8
9
  error('There is no users with such email', :email) unless user.is_a? RademadeAdmin.user_class
9
10
  error('Incorrect password', :password) unless user.valid_password? params[:data][:password]
@@ -13,7 +14,8 @@ module RademadeAdmin
13
14
  end
14
15
 
15
16
  def self.error(message, field)
16
- raise Error.new( message, field )
17
+ raise Error.new(message, field)
17
18
  end
19
+
18
20
  end
19
21
  end
@@ -0,0 +1,36 @@
1
+ module RademadeAdmin
2
+ module Breadcrumbs
3
+
4
+ def root_breadcrumbs
5
+ breadcrumbs.add t('rademade_admin.dashboard'), root_path
6
+ end
7
+
8
+ def list_breadcrumbs(with_url = false)
9
+ breadcrumbs.add model_info.item_name, with_url ? admin_list_uri(model) : nil
10
+ end
11
+
12
+ def new_breadcrumbs
13
+ list_breadcrumbs(true)
14
+ breadcrumbs.add t('rademade_admin.new_record')
15
+ end
16
+
17
+ def edit_breadcrumbs
18
+ list_breadcrumbs(true)
19
+ breadcrumbs.add edit_name
20
+ end
21
+
22
+ def related_breadcrumbs
23
+ list_breadcrumbs(true)
24
+ breadcrumbs.add @item.to_s, admin_edit_uri(@item)
25
+ breadcrumbs.add @related_model_info.item_name
26
+ end
27
+
28
+ private
29
+
30
+ def edit_name
31
+ item_name = @item.to_s
32
+ item_name.empty? ? t('rademade_admin.edit_record') : item_name
33
+ end
34
+
35
+ end
36
+ end
@@ -3,7 +3,8 @@ module RademadeAdmin
3
3
  module InstanceOptions
4
4
 
5
5
  attr_reader :model_info, :model_class, :model_name, :item_name,
6
- :list_fields, :semantic_form_fields
6
+ :list_fields,
7
+ :form_fields_without_locale, :form_fields_with_locale
7
8
 
8
9
  def load_model_options
9
10
  @model_info = self.class.model_info
@@ -13,16 +14,17 @@ module RademadeAdmin
13
14
  end
14
15
 
15
16
  def load_field_options
16
- @list_fields = @model_info.list_fields
17
- @semantic_form_fields = @model_info.semantic_form_fields
17
+ @list_fields = @model_info.data_items.list_fields
18
+ @form_fields_without_locale = @model_info.data_items.form_fields_without_locale
19
+ @form_fields_with_locale = @model_info.data_items.form_fields_with_locale
18
20
  end
19
21
 
20
22
  def origin_fields
21
- @model_info.origin_fields
23
+ @model_info.data_items.origin_fields
22
24
  end
23
25
 
24
26
  def filter_fields
25
- @model_info.filter_fields
27
+ @model_info.data_items.filter_fields
26
28
  end
27
29
 
28
30
  def load_template_options
@@ -2,6 +2,15 @@
2
2
  module RademadeAdmin
3
3
  module ModelOptions
4
4
 
5
+ # Configure admin part of model
6
+ # Support options
7
+ # - model
8
+ # - name
9
+ # - parent_menu (todo extract to menu method)
10
+ # - list
11
+ # - form
12
+ # - labels
13
+ #
5
14
  def options(&options_block)
6
15
  configuration.instance_eval &options_block
7
16
  end
@@ -26,14 +35,8 @@ module RademadeAdmin
26
35
  @model_info ||= Model::Graph.instance.model_info(model_class)
27
36
  end
28
37
 
29
- def init_model_info(model_reflection)
30
- Model::Info.new(model_reflection, configuration)
31
- end
32
-
33
- private
34
-
35
38
  def configuration
36
- @configuration ||= Model::Configuration.new(controller_name)
39
+ @configuration ||= Model::Configuration.new(self)
37
40
  end
38
41
 
39
42
  end
@@ -22,18 +22,22 @@ module RademadeAdmin
22
22
  success_message(item, 'was deleted!')
23
23
  end
24
24
 
25
- def success_unlink(item)
26
- success_message(item, 'was unlinked from entity!')
25
+ def success_unlink
26
+ render :json => {
27
+ :message => 'Entity was unlinked!'
28
+ }
27
29
  end
28
30
 
29
- def success_link(item)
30
- success_message(item, 'was linked to entity!')
31
+ def success_link
32
+ render :json => {
33
+ :message => 'Entity was linked!'
34
+ }
31
35
  end
32
36
 
33
37
  def success_message(item, action_message, additional_data = {})
34
38
  render :json => {
35
- :data => item,
36
- :message => "#{item_name.capitalize} #{action_message}"
39
+ :data => Autocomplete::BaseSerializer.new([item]).as_json.first,
40
+ :message => "#{model_info.singular_name.capitalize} #{action_message}"
37
41
  }.merge(additional_data)
38
42
  end
39
43
 
@@ -14,11 +14,12 @@ module RademadeAdmin
14
14
  end
15
15
 
16
16
  def abstract_template(template)
17
- if template_exists?(template, "rademade_admin/#{native_template_folder}")
18
- "rademade_admin/#{native_template_folder}/#{template}"
17
+ if template_exists?(template, @template_service.template_path(native_template_folder))
18
+ folder = native_template_folder
19
19
  else
20
- "rademade_admin/abstract/#{template}"
20
+ folder = 'abstract'
21
21
  end
22
+ @template_service.template_path(folder, template)
22
23
  end
23
24
 
24
25
  end
@@ -0,0 +1,11 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module RademadeAdmin
3
+ class RelationService
4
+
5
+ def related_model_info(model_info, relation)
6
+ related_model = model_info.data_items.data_item(relation).relation.to
7
+ RademadeAdmin::Model::Graph.instance.model_info(related_model)
8
+ end
9
+
10
+ end
11
+ end
@@ -4,22 +4,28 @@ module RademadeAdmin
4
4
 
5
5
  attr_reader :item
6
6
 
7
+ # Initialization of model saver class
8
+ #
9
+ # @param model_info [RademadeAdmin::Model::Info]
10
+ # @param params [Hash]
11
+ #
7
12
  def initialize(model_info, params)
8
- @model_info = model_info
9
- @params = params
13
+ @model_info, @params = model_info, params
10
14
  end
11
15
 
12
16
  def create_model
13
- @item = @model_info.model.new filter_data_params
17
+ @item = @model_info.model.new
14
18
  end
15
19
 
16
20
  def update_model
17
21
  @item = @model_info.model.find(@params[:id])
18
- item.update filter_data_params
22
+ save_model
19
23
  end
20
24
 
21
25
  def save_model
22
- item.save @params
26
+ item.assign_attributes simple_field_params
27
+ save_localizable_fields
28
+ item.save
23
29
  end
24
30
 
25
31
  def save_aggregated_data
@@ -34,36 +40,65 @@ module RademadeAdmin
34
40
 
35
41
  private
36
42
 
37
- def save_model_relations
43
+ def save_localizable_fields
44
+ current_locale = I18n.locale
45
+ @model_info.data_items.localizable_fields.each do |_, data_item|
46
+ values = @params[:data].try(:[], data_item.getter)
47
+ values.each do |locale, value|
48
+ I18n.locale = locale
49
+ if data_item.has_uploader?
50
+ save_model_upload(data_item, value)
51
+ else
52
+ item.send(data_item.setter, value)
53
+ end
54
+ end if values
55
+ end
56
+ I18n.locale = current_locale
57
+ end
58
+
59
+ def save_model_relations
38
60
  data = @params[:data]
39
- model_reflection = @model_info.model_reflection
40
- model_reflection.relations.each do |name, rel|
41
- assoc_key = model_reflection.association_foreign_key(rel)
42
- if data.has_key? assoc_key
43
- ids = data[assoc_key]
44
- ids.reject! { |id| id.empty? } if ids.kind_of?(Array)
45
- item.send(assoc_key + '=', ids)
61
+ @model_info.data_items.related_fields.each do |_, data_item|
62
+ if data.has_key? data_item.getter
63
+ item.send(data_item.setter, find_entities(data_item, data[data_item.getter]))
46
64
  end
47
65
  end
48
66
  end
49
67
 
50
68
  def save_model_uploads
51
69
  data = @params[:data]
52
- @model_info.model_reflection.uploaders.each do |name, _|
53
- if data.has_key?(name) and not data[name].blank?
54
- image_path = CarrierWave.root + data[name].to_s
55
- setter_method = (name.to_s + '=').to_sym
56
- begin
57
- item.send(setter_method, File.open(image_path))
58
- rescue
59
- #rm_todo clear image
60
- end
70
+ @model_info.data_items.uploader_fields.each do |_, data_item|
71
+ name = data_item.name
72
+ save_model_upload(data_item, data[name]) if data.has_key?(name)
73
+ end
74
+ end
75
+
76
+ def save_model_upload(data_item, image_path)
77
+ unless image_path.blank?
78
+ full_image_path = "#{CarrierWave.root}#{image_path}"
79
+ begin
80
+ (item.try(:translation) || item).send(data_item.setter, File.open(full_image_path))
81
+ rescue
82
+ # rm_todo clear image
61
83
  end
62
84
  end
63
85
  end
64
86
 
65
- def filter_data_params
66
- @params.require(:data).permit(@model_info.save_form_fields)
87
+ def find_entities(data_item, ids)
88
+ if ids.kind_of? Array
89
+ ids.reject! { |id| id.empty? }
90
+ related_entities(data_item, ids)
91
+ else
92
+ ids.empty? ? nil : data_item.relation.related_entities(ids)
93
+ end
94
+ end
95
+
96
+ def simple_field_params
97
+ @params.require(:data).permit(@model_info.data_items.save_form_fields)
98
+ end
99
+
100
+ def related_entities(data_item, ids)
101
+ ids.map { |id| data_item.relation.related_entities(id) }
67
102
  end
68
103
 
69
104
  end