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,18 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'rademade_admin/model/configuration/fields'
3
+
4
+ module RademadeAdmin
5
+ module Model
6
+ class Configuration
7
+ class FormFields < Fields
8
+
9
+ protected
10
+
11
+ def field_class
12
+ RademadeAdmin::Model::Configuration::FormField
13
+ end
14
+
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module RademadeAdmin
3
+ module Model
4
+ class Configuration
5
+ class ListField
6
+
7
+ attr_accessor :name
8
+
9
+ def initialize(name, opts = {})
10
+ @name = name
11
+ @opts = opts
12
+ end
13
+
14
+ def preview_accessor
15
+ @opts.has_key?(:method) ? @opts[:method] : nil
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'rademade_admin/model/configuration/fields'
3
+
4
+ module RademadeAdmin
5
+ module Model
6
+ class Configuration
7
+ class ListFields < Fields
8
+
9
+ protected
10
+
11
+ def field_class
12
+ RademadeAdmin::Model::Configuration::ListField
13
+ end
14
+
15
+ end
16
+ end
17
+ end
18
+ end
@@ -5,12 +5,16 @@ module RademadeAdmin
5
5
  include Singleton
6
6
 
7
7
  def add_pair(controller_name, inner)
8
- controller_full_name = ('rademade_admin/' + controller_name + '_controller')
9
- controller = controller_full_name.camelize.constantize
8
+ # Controller includes configuration for mapping model
9
+ controller = LoaderService.const_get("rademade_admin/#{controller_name}_controller")
10
+ controller.configuration.model(controller_name.classify) unless controller.model_name
11
+
10
12
  model = controller.model_class
13
+
11
14
  unless @model_infos[model.to_s]
12
- model_reflection = Reflection.new(model, controller_name, controller_full_name, inner)
13
- @model_infos[model.to_s] = controller.init_model_info(model_reflection)
15
+ model_reflection = RademadeAdmin::Model::Reflection.new(model, controller_name)
16
+ model_info = RademadeAdmin::Model::Info.new(model_reflection, controller.configuration, inner)
17
+ @model_infos[model.to_s] = model_info
14
18
  end
15
19
  end
16
20
 
@@ -19,7 +23,7 @@ module RademadeAdmin
19
23
  end
20
24
 
21
25
  def root_models
22
- @root_models ||= get_root_models
26
+ @root_models ||= @model_infos.select { |_, model_info| not model_info.nested? }.values
23
27
  end
24
28
 
25
29
  private
@@ -28,10 +32,6 @@ module RademadeAdmin
28
32
  @model_infos = {}
29
33
  end
30
34
 
31
- def get_root_models
32
- @model_infos.select { |model_name, model_info| not model_info.nested? }.values
33
- end
34
-
35
35
  end
36
36
  end
37
37
  end
@@ -3,103 +3,88 @@ module RademadeAdmin
3
3
  module Model
4
4
  class Info
5
5
 
6
- UNSAVED_FIELDS = [:id, :_id, :created_at, :deleted_at, :position] # todo
7
-
8
6
  attr_reader :model_reflection
9
-
10
- def initialize(model_reflection, model_configuration)
7
+ attr_writer :nested
8
+
9
+ # Initialization for model info. Model mapper
10
+ #
11
+ # @param model_reflection [RademadeAdmin::Model::Reflection]
12
+ # @param model_configuration [RademadeAdmin::Model::Configuration]
13
+ #
14
+ def initialize(model_reflection, model_configuration, nested)
11
15
  @model_reflection = model_reflection
12
16
  @model_configuration = model_configuration
13
- @initialized = false
17
+ @nested = nested
14
18
  end
15
19
 
16
- def origin_fields
17
- @model_reflection.fields.keys + ['id']
20
+ # Return model class
21
+ #
22
+ # @return [Object]
23
+ #
24
+ def model
25
+ model_reflection.model
18
26
  end
19
27
 
20
- def uploader_fields
21
- @model_reflection.uploader_fields
28
+ def item_name
29
+ @model_configuration.item_name
22
30
  end
23
31
 
24
- def list_fields
25
- @list_fields ||= @model_configuration.list_fields || simple_fields
32
+ def singular_name
33
+ @model_configuration.singular_name
26
34
  end
27
35
 
28
- def default_form_fields
29
- simple_fields + @model_reflection.association_fields
36
+ def controller
37
+ model_reflection.controller
30
38
  end
31
39
 
32
- def save_form_fields
33
- @save_form_fields ||= semantic_form_fields.keys
40
+ def nested?
41
+ @nested
34
42
  end
35
43
 
36
- def semantic_form_fields
37
- @semantic_form_fields ||= collected_form_fields
44
+ # todo extract menu service Info::Menu
45
+ def parent_menu_item
46
+ @model_configuration.parent_menu_item
38
47
  end
39
48
 
40
- def filter_fields
41
- @filter_fields ||= load_filter_fields
49
+ def data_items
50
+ fields.data_items
42
51
  end
43
52
 
44
- def method_missing(name, *arguments)
45
- if arguments.empty? and @model_configuration.respond_to? name
46
- @model_configuration.send(name)
47
- else
48
- @model_reflection.send(name, *arguments)
49
- end
53
+ # Fields data class
54
+ #
55
+ # @return [RademadeAdmin::Model::Info::Fields]
56
+ #
57
+ def fields
58
+ @model_fields ||= RademadeAdmin::Model::Info::Fields.new(
59
+ _data_adapter,
60
+ @model_configuration,
61
+ relations,
62
+ uploaders
63
+ )
50
64
  end
51
65
 
52
- private
53
-
54
- def simple_fields
55
- init_model_fields
56
- @simple_fields
66
+ def query_adapter
67
+ model_reflection.query_adapter
57
68
  end
58
69
 
59
- def init_model_fields
60
- unless @initialized
61
- @fields_data = {}
62
- @simple_fields = []
63
- @model_reflection.fields.each do |name, field|
64
- field_name = name.to_sym
65
- @fields_data[field_name] = field
66
- #!a && !b => !(a || b)
67
- unless (UNSAVED_FIELDS.include?(field_name) || @model_reflection.foreign_key?(field))
68
- @simple_fields << field_name
69
- end
70
- end
71
- @initialized = true
72
- end
70
+ def label_for(name)
71
+ @model_configuration.field_labels.label_for(name)
73
72
  end
74
73
 
75
- def load_filter_fields
76
- init_model_fields
77
- list_fields.select do |field|
78
- @fields_data.has_key?(field) and @fields_data[field].type == String
79
- end
74
+ protected
75
+
76
+ def _data_adapter
77
+ model_reflection.data_adapter
80
78
  end
81
79
 
82
- def collected_form_fields
83
- data = (@model_configuration.form_fields || default_form_fields)
84
- fields = {}
85
- data.each do |field|
86
- if field.is_a? Hash
87
- fields.merge! field
88
- else
89
- fields[field] = default_field_type field
90
- end
91
- end
92
- fields
80
+ # @return [RademadeAdmin::Model::Info::Relations]
81
+ def relations
82
+ @model_relations ||= RademadeAdmin::Model::Info::Relations.new(_data_adapter)
93
83
  end
94
84
 
95
- def default_field_type(field)
96
- if @model_reflection.association_fields.include? field
97
- 'rademade_admin/admin_select'
98
- elsif @model_reflection.uploader_fields.include? field
99
- 'rademade_admin/admin_file'
100
- else
101
- nil
102
- end
85
+ # @return [RademadeAdmin::Model::Info::Uploaders]
86
+ def uploaders
87
+ @model_uploaders ||= RademadeAdmin::Model::Info::Uploaders.new(_data_adapter)
103
88
  end
104
89
 
105
90
  end
@@ -0,0 +1,130 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module RademadeAdmin
3
+ module Model
4
+ class Info
5
+ class DataItem
6
+
7
+ attr_accessor :name,
8
+ :field,
9
+ :relation,
10
+ :label,
11
+ :form_position,
12
+ :list_position,
13
+ :has_uploader
14
+
15
+ attr_writer :in_form,
16
+ :form_params,
17
+ :in_list,
18
+ :preview_accessor
19
+
20
+ #
21
+ # @param name [Symbol]
22
+ # @param field [RademadeAdmin::Model::Info::Field]
23
+ # @param relation [RademadeAdmin::Model::Info::Relation]
24
+ # @param has_uploader [Boolean]
25
+ #
26
+ def initialize(name, field = nil, relation = nil, has_uploader = false)
27
+ @name = name
28
+ @field = field
29
+ @relation = relation
30
+ @has_uploader = has_uploader
31
+ @in_list = false
32
+ @in_form = false
33
+ @form_params = nil
34
+ @preview_accessor = nil
35
+ #rm_todo pry.binding if not has_relation? and @field.nil? create custom notification
36
+ end
37
+
38
+ def has_name?(name)
39
+ (has_relation? and @relation.name == name) or (has_field? and @field.name == name)
40
+ end
41
+
42
+ def has_relation?
43
+ not @relation.nil?
44
+ end
45
+
46
+ def has_field?
47
+ not @field.nil?
48
+ end
49
+
50
+ def has_uploader?
51
+ has_uploader
52
+ end
53
+
54
+ def date_time?
55
+ @field.is_date_time
56
+ end
57
+
58
+ def sortable_relation?
59
+ @relation.sortable?
60
+ end
61
+
62
+ def localizable?(localizable = true)
63
+ if not @form_params.nil? and @form_params.has_key? :localize
64
+ @form_params[:localize] == localizable
65
+ else
66
+ return !localizable unless has_field?
67
+ field.localizable == localizable
68
+ end
69
+ end
70
+
71
+ def label
72
+ @label ||= _default_label
73
+ end
74
+
75
+ def getter
76
+ @getter ||= _getter
77
+ end
78
+
79
+ def setter
80
+ @setter ||= :"#{getter}="
81
+ end
82
+
83
+ def preview_accessor
84
+ @preview_accessor.nil? ? getter : @preview_accessor
85
+ end
86
+
87
+ def sortable_setter
88
+ @sortable_setter ||= :"#{@relation.sortable_field}="
89
+ end
90
+
91
+ def in_list?
92
+ @in_list
93
+ end
94
+
95
+ def in_form?
96
+ @in_form
97
+ end
98
+
99
+ def form_params
100
+ @form_params.nil? ? {} : @form_params
101
+ end
102
+
103
+ def primary_field?
104
+ @field and @field.primary?
105
+ end
106
+
107
+ def string_field?
108
+ @field and @field.type == String
109
+ end
110
+
111
+ def simple_field?
112
+ not(has_uploader? or has_relation?)
113
+ end
114
+
115
+ private
116
+
117
+ def _default_label
118
+ name.to_s.humanize
119
+ end
120
+
121
+ def _getter
122
+ return @relation.name if has_relation?
123
+ return @field.name if has_field?
124
+ name
125
+ end
126
+
127
+ end
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,130 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module RademadeAdmin
3
+ module Model
4
+ class Info
5
+ class DataItems
6
+ include ::Enumerable
7
+ # rm_todo extract mixins
8
+
9
+ UNINFORMATIVE_FIELDS = [:_id, :deleted_at, :position]
10
+
11
+ def initialize
12
+ @data_items = {}
13
+ end
14
+
15
+ def items
16
+ @data_items
17
+ end
18
+
19
+ def each(&block)
20
+ items.each(&block)
21
+ end
22
+
23
+ # @param data_item [RademadeAdmin::Model::Info::DataItem]
24
+ def add_data_item(data_item)
25
+ items[data_item.name] = data_item
26
+ end
27
+
28
+ def data_item(name)
29
+ items[name.to_sym]
30
+ end
31
+
32
+ def has_field?(name)
33
+ items.select{ |_, data_item| data_item.has_name? name }.length > 0
34
+ end
35
+
36
+ def primary_field
37
+ @primary_field ||= find_primary_field
38
+ end
39
+
40
+ def origin_fields
41
+ @origin_fields ||= collect_field_names { |data_item| data_item.simple_field? }
42
+ end
43
+
44
+ def related_fields
45
+ @related_fields ||= items.select { |_, data_item| data_item.has_relation? }
46
+ end
47
+
48
+ def uploader_fields
49
+ @uploader_fields ||= items.select { |_, data_item| data_item.has_uploader? }
50
+ end
51
+
52
+ def localizable_fields
53
+ @localizable_fields ||= items.select { |_, data_item| data_item.localizable? }
54
+ end
55
+
56
+ def list_fields
57
+ @list_fields ||= collect_list_fields
58
+ end
59
+
60
+ def filter_fields
61
+ @autocomplete_fields ||= collect_field_names { |data_item| data_item.string_field? }
62
+ end
63
+
64
+ def form_fields
65
+ @form_fields ||= collect_form_fields
66
+ end
67
+
68
+ def form_fields_without_locale
69
+ @form_fields_without_locale ||= collect_localized_form_fields(false)
70
+ end
71
+
72
+ def form_fields_with_locale
73
+ @form_fields_with_locale ||= collect_localized_form_fields(true)
74
+ end
75
+
76
+ # Get Array of RademadeAdmin::Model::Info::DataItem for saving
77
+ #
78
+ # @return [Array]
79
+ #
80
+ def save_form_fields
81
+ @save_form_fields ||= collect_save_form_fields
82
+ end
83
+
84
+ private
85
+
86
+ def find_primary_field
87
+ items.each do |_, data_item|
88
+ return data_item if data_item.primary_field?
89
+ end
90
+ nil
91
+ end
92
+
93
+ def collect_list_fields
94
+ fields = items.select { |_, data_item| data_item.in_list? }
95
+ fields.empty? ? _default_fields.values : fields.values.sort_by(&:list_position)
96
+ end
97
+
98
+ def collect_form_fields
99
+ fields = items.select { |_, data_item| data_item.in_form? }
100
+ fields.empty? ? _default_fields : fields
101
+ end
102
+
103
+ def collect_localized_form_fields(localizable)
104
+ form_fields.select { |_, data_item|
105
+ data_item.localizable?(localizable)
106
+ }.values.sort_by(&:form_position)
107
+ end
108
+
109
+ def collect_save_form_fields
110
+ fields = form_fields.select { |_, data_item| data_item.simple_field? }
111
+ fields = items.select { |_, data_item| data_item.simple_field? } if fields.empty?
112
+ fields.values.map(&:getter)
113
+ end
114
+
115
+ def _default_fields
116
+ items.reject { |_, data_item| UNINFORMATIVE_FIELDS.include? data_item.name } # todo remove sortable fields
117
+ end
118
+
119
+ def collect_field_names
120
+ field_names = []
121
+ items.each do |_, data_item|
122
+ field_names << data_item.name if yield(data_item)
123
+ end
124
+ field_names
125
+ end
126
+
127
+ end
128
+ end
129
+ end
130
+ end