obitum-rails_admin 0.0.1 → 0.0.2

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 (232) hide show
  1. data/Gemfile +1 -8
  2. data/README.md +6 -2
  3. data/app/assets/javascripts/rails_admin/custom/ui.js +5 -5
  4. data/app/assets/javascripts/rails_admin/jquery-ui-1.8.16.custom.js +4727 -4727
  5. data/app/assets/javascripts/rails_admin/jquery.colorpicker.js +484 -484
  6. data/app/assets/javascripts/rails_admin/jquery.pjax.js +250 -85
  7. data/app/assets/javascripts/rails_admin/jquery.ui.timepicker.js +1371 -1219
  8. data/app/assets/javascripts/rails_admin/ra.filter-box.js +30 -30
  9. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +11 -11
  10. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +40 -0
  11. data/app/assets/javascripts/rails_admin/ra.remote-form.js +41 -39
  12. data/app/assets/javascripts/rails_admin/rails_admin.js.erb +4 -3
  13. data/app/assets/javascripts/rails_admin/themes/default/ui.js +6 -6
  14. data/app/assets/javascripts/rails_admin/ui.js.coffee +44 -16
  15. data/app/assets/stylesheets/rails_admin/base/README +2 -2
  16. data/app/assets/stylesheets/rails_admin/base/theming.css.scss +226 -113
  17. data/app/assets/stylesheets/rails_admin/custom/mixins.css.scss +1 -1
  18. data/app/assets/stylesheets/rails_admin/custom/theming.css.scss +2 -2
  19. data/app/assets/stylesheets/rails_admin/custom/variables.css.scss +3 -3
  20. data/app/assets/stylesheets/rails_admin/imports.css.scss.erb +36 -1
  21. data/app/assets/stylesheets/rails_admin/jquery.ui.timepicker.css.scss +16 -0
  22. data/app/assets/stylesheets/rails_admin/ra.filtering-multiselect.css.scss +2 -2
  23. data/app/assets/stylesheets/rails_admin/themes/default/mixins.css.scss +1 -1
  24. data/app/assets/stylesheets/rails_admin/themes/default/theming.css.scss +2 -2
  25. data/app/assets/stylesheets/rails_admin/themes/default/variables.css.scss +3 -3
  26. data/app/controllers/rails_admin/application_controller.rb +13 -18
  27. data/app/controllers/rails_admin/main_controller.rb +15 -16
  28. data/app/helpers/rails_admin/application_helper.rb +67 -41
  29. data/app/helpers/rails_admin/form_builder.rb +31 -29
  30. data/app/helpers/rails_admin/main_helper.rb +4 -4
  31. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +12 -11
  32. data/app/views/layouts/rails_admin/application.html.haml +29 -29
  33. data/app/views/rails_admin/main/_dashboard_history.html.haml +1 -1
  34. data/app/views/rails_admin/main/_delete_notice.html.haml +4 -5
  35. data/app/views/rails_admin/main/_form_colorpicker.html.haml +2 -1
  36. data/app/views/rails_admin/main/_form_datetime.html.haml +1 -1
  37. data/app/views/rails_admin/main/_form_enumeration.html.haml +1 -1
  38. data/app/views/rails_admin/main/_form_field.html.haml +1 -1
  39. data/app/views/rails_admin/main/_form_file_upload.html.haml +3 -2
  40. data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +6 -4
  41. data/app/views/rails_admin/main/_form_filtering_select.html.haml +6 -5
  42. data/app/views/rails_admin/main/_form_nested_many.html.haml +41 -6
  43. data/app/views/rails_admin/main/_form_nested_one.html.haml +34 -5
  44. data/app/views/rails_admin/main/_form_text.html.haml +3 -3
  45. data/app/views/rails_admin/main/_submit_buttons.html.haml +6 -4
  46. data/app/views/rails_admin/main/bulk_delete.html.haml +7 -3
  47. data/app/views/rails_admin/main/dashboard.html.haml +4 -4
  48. data/app/views/rails_admin/main/delete.html.haml +7 -3
  49. data/app/views/rails_admin/main/edit.html.haml +1 -1
  50. data/app/views/rails_admin/main/export.html.haml +57 -53
  51. data/app/views/rails_admin/main/history.html.haml +8 -8
  52. data/app/views/rails_admin/main/index.html.haml +22 -21
  53. data/app/views/rails_admin/main/new.html.haml +1 -1
  54. data/app/views/rails_admin/main/show.html.haml +2 -2
  55. data/config/initializers/active_record_extensions.rb +2 -2
  56. data/config/initializers/haml.rb +0 -1
  57. data/config/locales/rails_admin.en.yml +5 -5
  58. data/lib/generators/rails_admin/templates/initializer.erb +7 -7
  59. data/lib/rails_admin/abstract_model.rb +36 -53
  60. data/lib/rails_admin/adapters/active_record/abstract_object.rb +32 -0
  61. data/lib/rails_admin/adapters/active_record.rb +56 -137
  62. data/lib/rails_admin/config/actions/base.rb +40 -28
  63. data/lib/rails_admin/config/actions/bulk_delete.rb +10 -11
  64. data/lib/rails_admin/config/actions/dashboard.rb +9 -5
  65. data/lib/rails_admin/config/actions/delete.rb +12 -9
  66. data/lib/rails_admin/config/actions/edit.rb +13 -9
  67. data/lib/rails_admin/config/actions/export.rb +9 -6
  68. data/lib/rails_admin/config/actions/history_index.rb +9 -5
  69. data/lib/rails_admin/config/actions/history_show.rb +9 -5
  70. data/lib/rails_admin/config/actions/index.rb +23 -13
  71. data/lib/rails_admin/config/actions/new.rb +14 -10
  72. data/lib/rails_admin/config/actions/show.rb +10 -5
  73. data/lib/rails_admin/config/actions/show_in_app.rb +9 -4
  74. data/lib/rails_admin/config/actions.rb +16 -16
  75. data/lib/rails_admin/config/configurable.rb +92 -0
  76. data/lib/rails_admin/config/fields/association.rb +6 -23
  77. data/lib/rails_admin/config/fields/base.rb +58 -40
  78. data/lib/rails_admin/config/fields/factories/belongs_to_association.rb +26 -0
  79. data/lib/rails_admin/config/fields/factories/carrierwave.rb +21 -2
  80. data/lib/rails_admin/config/fields/factories/devise.rb +9 -12
  81. data/lib/rails_admin/config/fields/factories/dragonfly.rb +13 -7
  82. data/lib/rails_admin/config/fields/factories/paperclip.rb +14 -15
  83. data/lib/rails_admin/config/fields/group.rb +16 -3
  84. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +2 -2
  85. data/lib/rails_admin/config/fields/types/carrierwave.rb +0 -9
  86. data/lib/rails_admin/config/fields/types/color.rb +3 -3
  87. data/lib/rails_admin/config/fields/types/dragonfly.rb +1 -19
  88. data/lib/rails_admin/config/fields/types/file_upload.rb +7 -11
  89. data/lib/rails_admin/config/fields/types/has_many_association.rb +1 -6
  90. data/lib/rails_admin/config/fields/types/has_one_association.rb +4 -4
  91. data/lib/rails_admin/config/fields/types/paperclip.rb +0 -18
  92. data/lib/rails_admin/config/fields/types/password.rb +2 -2
  93. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +2 -2
  94. data/lib/rails_admin/config/fields/types/text.rb +2 -2
  95. data/lib/rails_admin/config/fields.rb +7 -17
  96. data/lib/rails_admin/config/has_fields.rb +9 -9
  97. data/lib/rails_admin/config/has_groups.rb +2 -2
  98. data/lib/rails_admin/config/hideable.rb +2 -2
  99. data/lib/rails_admin/config/model.rb +23 -17
  100. data/lib/rails_admin/config/proxyable/proxy.rb +43 -0
  101. data/lib/rails_admin/config/proxyable.rb +12 -0
  102. data/lib/rails_admin/config/sections/base.rb +14 -4
  103. data/lib/rails_admin/config.rb +38 -9
  104. data/lib/rails_admin/extension.rb +1 -1
  105. data/lib/rails_admin/extensions/history/auditing_adapter.rb +6 -6
  106. data/lib/rails_admin/extensions/history/history.rb +2 -1
  107. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +13 -13
  108. data/lib/rails_admin/support/csv_converter.rb +6 -6
  109. data/lib/rails_admin/version.rb +1 -1
  110. data/lib/rails_admin.rb +0 -5
  111. data/spec/controllers/main_controller_spec.rb +7 -7
  112. data/spec/dummy_app/Gemfile +10 -7
  113. data/spec/dummy_app/Rakefile +1 -1
  114. data/spec/dummy_app/app/assets/images/rails.png +0 -0
  115. data/spec/dummy_app/app/assets/javascripts/application.js +15 -0
  116. data/spec/dummy_app/app/assets/stylesheets/application.css +13 -0
  117. data/spec/dummy_app/app/controllers/players_controller.rb +1 -1
  118. data/spec/dummy_app/app/models/cms/basic_page.rb +1 -1
  119. data/spec/dummy_app/app/models/division.rb +5 -1
  120. data/spec/dummy_app/app/models/field_test.rb +4 -4
  121. data/spec/dummy_app/app/models/nested_field_test.rb +3 -0
  122. data/spec/dummy_app/app/models/player.rb +3 -3
  123. data/spec/dummy_app/app/views/layouts/application.html.erb +3 -2
  124. data/spec/dummy_app/app/views/players/show.html.haml +1 -1
  125. data/spec/dummy_app/config/application.rb +20 -5
  126. data/spec/dummy_app/config/database.yml +5 -2
  127. data/spec/dummy_app/config/environments/development.rb +11 -1
  128. data/spec/dummy_app/config/environments/production.rb +19 -3
  129. data/spec/dummy_app/config/environments/test.rb +5 -7
  130. data/spec/dummy_app/config/initializers/devise.rb +6 -0
  131. data/spec/dummy_app/config/initializers/inflections.rb +5 -0
  132. data/spec/dummy_app/config/initializers/secret_token.rb +1 -1
  133. data/spec/dummy_app/{foo/test/dummy/config → config}/initializers/wrap_parameters.rb +1 -1
  134. data/spec/dummy_app/config/routes.rb +1 -1
  135. data/spec/dummy_app/db/migrate/00000000000006_devise_create_users.rb +35 -5
  136. data/spec/dummy_app/db/migrate/20120118122004_add_categories.rb +1 -1
  137. data/spec/dummy_app/doc/README_FOR_APP +2 -0
  138. data/spec/dummy_app/public/404.html +26 -0
  139. data/spec/dummy_app/{foo/test/dummy/public → public}/422.html +0 -0
  140. data/spec/dummy_app/{foo/test/dummy/public → public}/500.html +0 -1
  141. data/spec/dummy_app/public/favicon.ico +0 -0
  142. data/spec/dummy_app/public/robots.txt +5 -0
  143. data/spec/helpers/application_helper_spec.rb +107 -42
  144. data/spec/{requests → integration}/authorization/cancan_spec.rb +4 -5
  145. data/spec/{requests → integration}/basic/bulk_action/rails_admin_basic_bulk_action_spec.rb +0 -0
  146. data/spec/{requests → integration}/basic/bulk_destroy/rails_admin_basic_bulk_destroy_spec.rb +3 -16
  147. data/spec/{requests → integration}/basic/create/rails_admin_basic_create_spec.rb +0 -2
  148. data/spec/{requests → integration}/basic/create/rails_admin_namespaced_model_create_spec.rb +0 -16
  149. data/spec/{requests → integration}/basic/delete/rails_admin_basic_delete_spec.rb +0 -0
  150. data/spec/{requests → integration}/basic/destroy/rails_admin_basic_destroy_spec.rb +0 -0
  151. data/spec/{requests → integration}/basic/edit/rails_admin_basic_edit_spec.rb +2 -2
  152. data/spec/{requests → integration}/basic/export/rails_admin_basic_export_spec.rb +1 -1
  153. data/spec/{requests → integration}/basic/list/rails_admin_basic_list_spec.rb +12 -38
  154. data/spec/{requests → integration}/basic/new/rails_admin_basic_new_spec.rb +0 -0
  155. data/spec/{requests → integration}/basic/new/rails_admin_namespaced_model_new_spec.rb +0 -0
  156. data/spec/{requests → integration}/basic/show/rails_admin_basic_show_spec.rb +1 -2
  157. data/spec/{requests → integration}/basic/update/rails_admin_basic_update_spec.rb +2 -2
  158. data/spec/{requests → integration}/config/edit/rails_admin_config_edit_spec.rb +65 -24
  159. data/spec/{requests → integration}/config/list/rails_admin_config_list_spec.rb +2 -2
  160. data/spec/{requests → integration}/config/show/rails_admin_config_show_spec.rb +20 -0
  161. data/spec/{requests → integration}/history/rails_admin_history_spec.rb +3 -3
  162. data/spec/{requests → integration}/rails_admin_spec.rb +8 -41
  163. data/spec/{requests → integration}/relation_spec.rb +0 -0
  164. data/spec/spec_helper.rb +13 -31
  165. data/spec/{lib → unit/adapters/active_record}/abstract_object_spec.rb +17 -5
  166. data/spec/unit/adapters/active_record_spec.rb +53 -0
  167. data/spec/{requests/actions.rb → unit/config/actions_spec.rb} +47 -31
  168. data/spec/unit/config/fields/base_spec.rb +291 -0
  169. data/spec/unit/config/model_spec.rb +75 -0
  170. data/spec/unit/config/sections_spec.rb +123 -0
  171. data/spec/{lib/rails_admin_spec.rb → unit/config_spec.rb} +65 -93
  172. metadata +127 -223
  173. data/app/assets/javascripts/rails_admin/jquery_nested_form.js +0 -58
  174. data/app/views/layouts/rails_admin/_navigation.html.haml +0 -17
  175. data/lib/rails_admin/abstract_object.rb +0 -28
  176. data/lib/rails_admin/config/base.rb +0 -111
  177. data/lib/rails_admin/config/proxy.rb +0 -40
  178. data/lib/rails_admin/generic_support.rb +0 -18
  179. data/spec/dummy_app/config/initializers/quiet_assets.rb +0 -10
  180. data/spec/dummy_app/foo/Gemfile +0 -17
  181. data/spec/dummy_app/foo/MIT-LICENSE +0 -20
  182. data/spec/dummy_app/foo/README.rdoc +0 -3
  183. data/spec/dummy_app/foo/Rakefile +0 -39
  184. data/spec/dummy_app/foo/app/assets/javascripts/foo/application.js +0 -9
  185. data/spec/dummy_app/foo/app/assets/stylesheets/foo/application.css +0 -7
  186. data/spec/dummy_app/foo/app/controllers/foo/application_controller.rb +0 -4
  187. data/spec/dummy_app/foo/app/helpers/foo/application_helper.rb +0 -4
  188. data/spec/dummy_app/foo/app/models/foo/bar.rb +0 -4
  189. data/spec/dummy_app/foo/app/views/layouts/foo/application.html.erb +0 -14
  190. data/spec/dummy_app/foo/config/routes.rb +0 -2
  191. data/spec/dummy_app/foo/foo.gemspec +0 -23
  192. data/spec/dummy_app/foo/lib/foo/engine.rb +0 -5
  193. data/spec/dummy_app/foo/lib/foo/version.rb +0 -3
  194. data/spec/dummy_app/foo/lib/foo.rb +0 -4
  195. data/spec/dummy_app/foo/lib/tasks/foo_tasks.rake +0 -4
  196. data/spec/dummy_app/foo/script/rails +0 -6
  197. data/spec/dummy_app/foo/test/dummy/Rakefile +0 -7
  198. data/spec/dummy_app/foo/test/dummy/app/assets/javascripts/application.js +0 -9
  199. data/spec/dummy_app/foo/test/dummy/app/assets/stylesheets/application.css +0 -7
  200. data/spec/dummy_app/foo/test/dummy/app/controllers/application_controller.rb +0 -3
  201. data/spec/dummy_app/foo/test/dummy/app/helpers/application_helper.rb +0 -2
  202. data/spec/dummy_app/foo/test/dummy/app/views/layouts/application.html.erb +0 -14
  203. data/spec/dummy_app/foo/test/dummy/config/application.rb +0 -45
  204. data/spec/dummy_app/foo/test/dummy/config/boot.rb +0 -10
  205. data/spec/dummy_app/foo/test/dummy/config/database.yml +0 -25
  206. data/spec/dummy_app/foo/test/dummy/config/environment.rb +0 -5
  207. data/spec/dummy_app/foo/test/dummy/config/environments/development.rb +0 -30
  208. data/spec/dummy_app/foo/test/dummy/config/environments/production.rb +0 -60
  209. data/spec/dummy_app/foo/test/dummy/config/environments/test.rb +0 -39
  210. data/spec/dummy_app/foo/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  211. data/spec/dummy_app/foo/test/dummy/config/initializers/inflections.rb +0 -10
  212. data/spec/dummy_app/foo/test/dummy/config/initializers/mime_types.rb +0 -5
  213. data/spec/dummy_app/foo/test/dummy/config/initializers/secret_token.rb +0 -7
  214. data/spec/dummy_app/foo/test/dummy/config/initializers/session_store.rb +0 -8
  215. data/spec/dummy_app/foo/test/dummy/config/locales/en.yml +0 -5
  216. data/spec/dummy_app/foo/test/dummy/config/routes.rb +0 -4
  217. data/spec/dummy_app/foo/test/dummy/config.ru +0 -4
  218. data/spec/dummy_app/foo/test/dummy/db/schema.rb +0 -21
  219. data/spec/dummy_app/foo/test/dummy/public/404.html +0 -26
  220. data/spec/dummy_app/foo/test/dummy/public/favicon.ico +0 -0
  221. data/spec/dummy_app/foo/test/dummy/script/rails +0 -6
  222. data/spec/dummy_app/foo/test/fixtures/foo/bars.yml +0 -11
  223. data/spec/dummy_app/foo/test/foo_test.rb +0 -7
  224. data/spec/dummy_app/foo/test/integration/navigation_test.rb +0 -10
  225. data/spec/dummy_app/foo/test/test_helper.rb +0 -10
  226. data/spec/dummy_app/foo/test/unit/foo/bar_test.rb +0 -9
  227. data/spec/generator_helpers.rb +0 -30
  228. data/spec/generators/install_generator_spec.rb +0 -85
  229. data/spec/generators/uninstall_generator_spec.rb +0 -35
  230. data/spec/lib/custom_field.rb +0 -7
  231. data/spec/requests/config/navigation/rails_admin_config_navigation_spec.rb +0 -107
  232. data/spec/requests/config/rails_admin_config_spec.rb +0 -227
@@ -1,44 +1,51 @@
1
1
  require 'active_support/core_ext/string/inflections'
2
- require 'rails_admin/config/base'
2
+ require 'active_model/mass_assignment_security'
3
+
4
+ require 'rails_admin/config/proxyable'
5
+ require 'rails_admin/config/configurable'
3
6
  require 'rails_admin/config/hideable'
4
7
  require 'rails_admin/config/fields'
5
8
  require 'rails_admin/config/fields/association'
6
9
  require 'rails_admin/config/fields/groupable'
7
10
 
8
-
9
11
  module RailsAdmin
10
12
  module Config
11
13
  module Fields
12
- class Base < RailsAdmin::Config::Base
13
- attr_reader :name, :properties
14
+ class Base
15
+ include RailsAdmin::Config::Proxyable
16
+ include RailsAdmin::Config::Configurable
17
+ include RailsAdmin::Config::Hideable
18
+
19
+ attr_reader :name, :properties, :abstract_model
14
20
  attr_accessor :defined, :order, :section
21
+ attr_reader :parent, :root
15
22
 
16
23
  def self.inherited(klass)
17
24
  klass.instance_variable_set("@view_helper", :text_field)
18
25
  end
19
26
 
20
- include RailsAdmin::Config::Hideable
21
-
22
27
  def initialize(parent, name, properties)
23
- super(parent)
24
-
28
+ @parent = parent
29
+ @root = parent.root
30
+
31
+ @abstract_model = parent.abstract_model
25
32
  @defined = false
26
33
  @name = name
27
34
  @order = 0
28
35
  @properties = properties
29
36
  @section = parent
30
-
37
+
31
38
  extend RailsAdmin::Config::Fields::Groupable
32
39
  end
33
40
 
34
41
  register_instance_option(:css_class) do
35
42
  "#{self.name}_field"
36
43
  end
37
-
44
+
38
45
  def type_css_class
39
46
  "#{type}_type"
40
47
  end
41
-
48
+
42
49
  def virtual?
43
50
  properties.blank?
44
51
  end
@@ -46,17 +53,17 @@ module RailsAdmin
46
53
  register_instance_option(:column_width) do
47
54
  nil
48
55
  end
49
-
56
+
50
57
  register_instance_option(:sortable) do
51
- !virtual?
58
+ !virtual? || children_fields.first || false
52
59
  end
53
60
 
54
61
  register_instance_option(:searchable) do
55
- !virtual?
62
+ !virtual? || children_fields.first || false
56
63
  end
57
64
 
58
65
  register_instance_option(:queryable?) do
59
- !!searchable
66
+ !virtual?
60
67
  end
61
68
 
62
69
  register_instance_option(:filterable?) do
@@ -88,7 +95,7 @@ module RailsAdmin
88
95
  table_name, column = f.split '.'
89
96
  type = nil
90
97
  elsif f.is_a?(Hash) # <Model|table_name> => <attribute|column>
91
- am = AbstractModel.new(f.keys.first.to_s.classify)
98
+ am = f.keys.first.is_a?(Class) && AbstractModel.new(f.keys.first)
92
99
  table_name = am && am.model.table_name || f.keys.first
93
100
  column = f.values.first
94
101
  property = am && am.properties.find{ |p| p[:name] == f.values.first.to_sym }
@@ -129,7 +136,7 @@ module RailsAdmin
129
136
  register_instance_option(:html_attributes) do
130
137
  {}
131
138
  end
132
-
139
+
133
140
  register_instance_option :default_value do
134
141
  nil
135
142
  end
@@ -155,7 +162,7 @@ module RailsAdmin
155
162
  v.is_a?(ActiveModel::Validations::LengthValidator)}.try{|v| v.options} || {}
156
163
  end
157
164
 
158
- register_instance_option(:partial) do
165
+ register_instance_option :partial do
159
166
  :form_field
160
167
  end
161
168
 
@@ -163,9 +170,11 @@ module RailsAdmin
163
170
  #
164
171
  # @see RailsAdmin::AbstractModel.properties
165
172
  register_instance_option(:required?) do
166
- @required ||= !!abstract_model.model.validators_on(name).find do |v|
167
- v.is_a?(ActiveModel::Validations::PresenceValidator) && !v.options[:allow_nil] ||
168
- v.is_a?(ActiveModel::Validations::NumericalityValidator) && !v.options[:allow_nil]
173
+ @required ||= !!([name] + children_fields).uniq.find do |column_name|
174
+ !!abstract_model.model.validators_on(column_name).find do |v|
175
+ v.is_a?(ActiveModel::Validations::PresenceValidator) && !v.options[:allow_nil] ||
176
+ v.is_a?(ActiveModel::Validations::NumericalityValidator) && !v.options[:allow_nil]
177
+ end
169
178
  end
170
179
  end
171
180
 
@@ -179,11 +188,16 @@ module RailsAdmin
179
188
  register_instance_option(:view_helper) do
180
189
  @view_helper ||= self.class.instance_variable_get("@view_helper")
181
190
  end
182
-
191
+
183
192
  register_instance_option :read_only do
184
193
  not editable
185
194
  end
186
-
195
+
196
+ # init status in the view
197
+ register_instance_option :active? do
198
+ false
199
+ end
200
+
187
201
  register_instance_option :visible? do
188
202
  returned = true
189
203
  (RailsAdmin.config.default_hidden_fields || {}).each do |section, fields|
@@ -193,20 +207,22 @@ module RailsAdmin
193
207
  end
194
208
  returned
195
209
  end
196
-
210
+
211
+ # columns mapped (belongs_to, paperclip, etc.). First one is used for searching/sorting by default
212
+ register_instance_option :children_fields do
213
+ []
214
+ end
215
+
216
+ register_instance_option :render do
217
+ bindings[:view].render :partial => partial.to_s, :locals => {:field => self, :form => bindings[:form] }
218
+ end
219
+
197
220
  def editable
198
221
  return false if @properties && @properties[:read_only]
199
- role = bindings[:view].controller.send(:_attr_accessible_role)
200
- klass = bindings[:object].class
201
- whitelist = klass.accessible_attributes(role).map(&:to_s)
202
- blacklist = klass.protected_attributes(role).map(&:to_s)
203
- !self.method_name.to_s.in?(blacklist) && (whitelist.any? ? self.method_name.to_s.in?(whitelist) : true)
204
- end
205
-
206
- def render
207
- bindings[:view].render :partial => partial.to_s, :locals => {:field => self, :form => bindings[:form] }
222
+ !bindings[:object].class.active_authorizer[bindings[:view].controller.send(:_attr_accessible_role)].deny?(self.method_name)
208
223
  end
209
224
 
225
+
210
226
  # Is this an association
211
227
  def association?
212
228
  kind_of?(RailsAdmin::Config::Fields::Association)
@@ -214,7 +230,9 @@ module RailsAdmin
214
230
 
215
231
  # Reader for validation errors of the bound object
216
232
  def errors
217
- bindings[:object].errors[name]
233
+ ([name] + children_fields).uniq.map do |column_name|
234
+ bindings[:object].errors[column_name]
235
+ end.uniq.flatten
218
236
  end
219
237
 
220
238
  # Reader whether field is optional.
@@ -251,12 +269,12 @@ module RailsAdmin
251
269
  def value
252
270
  bindings[:object].safe_send(name)
253
271
  end
254
-
272
+
255
273
  # Reader for nested attributes
256
- def nested_form
274
+ register_instance_option :nested_form do
257
275
  false
258
276
  end
259
-
277
+
260
278
  def inverse_of
261
279
  nil
262
280
  end
@@ -264,9 +282,9 @@ module RailsAdmin
264
282
  def method_name
265
283
  name
266
284
  end
267
-
268
- def _html_attributes
269
- html_attributes.merge(!default_value.nil? ? { :value => default_value } : {})
285
+
286
+ def html_default_value
287
+ bindings[:object].new_record? && self.value.nil? && !self.default_value.nil? ? self.default_value : nil
270
288
  end
271
289
  end
272
290
  end
@@ -0,0 +1,26 @@
1
+ require 'rails_admin/config/fields'
2
+ require 'rails_admin/config/fields/types'
3
+ require 'rails_admin/config/fields/types/belongs_to_association'
4
+
5
+ RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
6
+ if association = parent.abstract_model.associations.find {|a| a[:child_key] == properties[:name] }
7
+ field = RailsAdmin::Config::Fields::Types.load("#{association[:polymorphic] ? :polymorphic : :belongs_to}_association").new(parent, association[:name], association)
8
+ fields << field
9
+
10
+ child_columns = []
11
+ id_column = parent.abstract_model.properties.find {|p| p[:name].to_s == association[:child_key].to_s }
12
+ child_columns << RailsAdmin::Config::Fields.default_factory.call(parent, id_column, fields)
13
+
14
+ if association[:polymorphic]
15
+ type_colum = parent.abstract_model.properties.find {|p| p[:name].to_s == association[:foreign_type].to_s }
16
+ child_columns << RailsAdmin::Config::Fields.default_factory.call(parent, type_colum, fields)
17
+ end
18
+
19
+ child_columns.each do |child_column|
20
+ child_column.hide
21
+ child_column.filterable(false)
22
+ end
23
+
24
+ field.children_fields child_columns.map(&:name)
25
+ end
26
+ end
@@ -3,8 +3,27 @@ require 'rails_admin/config/fields/types'
3
3
  require 'rails_admin/config/fields/types/file_upload'
4
4
 
5
5
  RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
6
- if defined?(::CarrierWave) && (model = parent.abstract_model.model).kind_of?(CarrierWave::Mount) && model.uploaders.include?(properties[:name])
7
- fields << RailsAdmin::Config::Fields::Types.load(:carrierwave).new(parent, properties[:name], properties)
6
+ extensions = [nil, :file_name, ]
7
+ model = parent.abstract_model.model
8
+
9
+ if defined?(::CarrierWave) && (model = parent.abstract_model.model).kind_of?(CarrierWave::Mount) && model.uploaders.include?(attachment_name = properties[:name].to_s.chomp('_file_name').to_sym)
10
+
11
+
12
+ columns = [model.uploader_options[attachment_name][:mount_on] || attachment_name, "#{attachment_name}_content_type".to_sym, "#{attachment_name}_file_size".to_sym]
13
+
14
+ field = RailsAdmin::Config::Fields::Types.load(:carrierwave).new(parent, attachment_name, properties)
15
+ fields << field
16
+ children_fields = []
17
+ columns.each do |children_column_name|
18
+ if child_properties = parent.abstract_model.properties.find {|p| p[:name].to_s == children_column_name.to_s }
19
+ children_field = fields.find{ |f| f.name == children_column_name } || RailsAdmin::Config::Fields.default_factory.call(parent, child_properties, fields)
20
+ children_field.hide unless field == children_field
21
+ children_field.filterable(false) unless field == children_field
22
+ children_fields << children_field.name
23
+ end
24
+ end
25
+ field.children_fields(children_fields)
26
+
8
27
  true
9
28
  else
10
29
  false
@@ -4,23 +4,20 @@ require 'rails_admin/config/fields/types/password'
4
4
 
5
5
  # Register a custom field factory for devise model
6
6
  RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
7
- if :encrypted_password == properties[:name]
7
+ if properties[:name] == :encrypted_password
8
+ extensions = [:password_salt, :reset_password_token, :remember_token]
9
+ model = parent.abstract_model.model
10
+
8
11
  fields << RailsAdmin::Config::Fields::Types.load(:password).new(parent, :password, properties)
9
12
  fields << RailsAdmin::Config::Fields::Types.load(:password).new(parent, :password_confirmation, properties)
10
- [:password_salt, :reset_password_token, :remember_token].each do |name|
11
- properties = parent.abstract_model.properties.find {|p| name == p[:name]}
13
+ extensions.each do |ext|
14
+ properties = parent.abstract_model.properties.find {|p| ext == p[:name]}
12
15
  if properties
13
- RailsAdmin::Config::Fields.default_factory.call(parent, properties, fields)
14
- fields.last.hide
15
- end
16
- end
17
- if parent.kind_of?(RailsAdmin::Config::Sections::Update)
18
- [:remember_created_at, :sign_in_count, :current_sign_in_at, :last_sign_in_at, :current_sign_in_ip, :last_sign_in_ip].each do |name|
19
- properties = parent.abstract_model.properties.find {|p| name == p[:name]}
20
- if properties
16
+ unless field = fields.find{ |f| f.name == ext }
21
17
  RailsAdmin::Config::Fields.default_factory.call(parent, properties, fields)
22
- fields.last.hide
18
+ field = fields.last
23
19
  end
20
+ field.hide
24
21
  end
25
22
  end
26
23
  true
@@ -3,17 +3,23 @@ require 'rails_admin/config/fields/types'
3
3
  require 'rails_admin/config/fields/types/file_upload'
4
4
 
5
5
  RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
6
+ extensions = [:name, :uid]
7
+ model = parent.abstract_model.model
6
8
 
7
9
  if (properties[:name].to_s =~ /^(.+)_uid$/) && defined?(::Dragonfly) && parent.abstract_model.model.dragonfly_attachment_classes.map(&:attribute).include?(attachment_name = $1.to_sym)
8
- additionnal_dragonfly_columns = [:name]
9
- additionnal_dragonfly_columns.each do |it|
10
- if props = parent.abstract_model.properties.find {|p| "#{attachment_name}_#{it}" == p[:name].to_s }
11
- RailsAdmin::Config::Fields.default_factory.call(parent, props, fields)
12
- fields.last.hide
13
- fields.last.filterable(false)
10
+ field = RailsAdmin::Config::Fields::Types.load(:dragonfly).new(parent, attachment_name, properties)
11
+ children_fields = []
12
+ extensions.each do |ext|
13
+ children_column_name = "#{attachment_name}_#{ext}".to_sym
14
+ if child_properties = parent.abstract_model.properties.find {|p| p[:name].to_s == children_column_name.to_s }
15
+ children_field = fields.find{ |f| f.name == children_column_name } || RailsAdmin::Config::Fields.default_factory.call(parent, child_properties, fields)
16
+ children_field.hide
17
+ children_field.filterable(false)
18
+ children_fields << children_field.name
14
19
  end
15
20
  end
16
- fields << RailsAdmin::Config::Fields::Types::Dragonfly.new(parent, attachment_name, properties)
21
+ field.children_fields(children_fields)
22
+ fields << field
17
23
  true
18
24
  else
19
25
  false
@@ -2,25 +2,24 @@ require 'rails_admin/config/fields'
2
2
  require 'rails_admin/config/fields/types'
3
3
  require 'rails_admin/config/fields/types/file_upload'
4
4
 
5
- # Register a custom field factory
6
5
  RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
7
- paperclip_columns = [:file_name, :content_type, :file_size, :updated_at]
6
+ extensions = [:file_name, :content_type, :file_size, :updated_at]
8
7
  model = parent.abstract_model.model
9
- if defined?(::Paperclip) and model.kind_of?(Paperclip::ClassMethods)
10
- if part = paperclip_columns.detect {|it| properties[:name].to_s.strip =~ /^(.+)_#{it}$/ }
11
- attachment_name = properties[:name].to_s.scan(/^(.+)_#{part}$/).first.first.to_sym
12
- if model.attachment_definitions && model.attachment_definitions.has_key?(attachment_name) && fields.find{|f| attachment_name == f.name}.nil?
13
- paperclip_columns.each do |it|
14
- if props = parent.abstract_model.properties.find {|p| "#{attachment_name}_#{it}" == p[:name].to_s }
15
- RailsAdmin::Config::Fields.default_factory.call(parent, props, fields)
16
- fields.last.hide
17
- fields.last.filterable(false)
18
- end
19
- end
20
- fields << RailsAdmin::Config::Fields::Types::Paperclip.new(parent, attachment_name, properties)
21
- true
8
+ if (properties[:name].to_s =~ /^(.+)_file_name$/) and defined?(::Paperclip) and model.attachment_definitions and model.attachment_definitions.has_key?(attachment_name = $1.to_sym)
9
+ field = RailsAdmin::Config::Fields::Types.load(:paperclip).new(parent, attachment_name, properties)
10
+ children_fields = []
11
+ extensions.each do |ext|
12
+ children_column_name = "#{attachment_name}_#{ext}".to_sym
13
+ if child_properties = parent.abstract_model.properties.find {|p| p[:name].to_s == children_column_name.to_s }
14
+ children_field = fields.find{ |f| f.name == children_column_name } || RailsAdmin::Config::Fields.default_factory.call(parent, child_properties, fields)
15
+ children_field.hide
16
+ children_field.filterable(false)
17
+ children_fields << children_field.name
22
18
  end
23
19
  end
20
+ field.children_fields(children_fields)
21
+ fields << field
22
+ true
24
23
  else
25
24
  false
26
25
  end
@@ -1,18 +1,26 @@
1
1
  require 'active_support/core_ext/string/inflections'
2
+ require 'rails_admin/config/proxyable'
3
+ require 'rails_admin/config/configurable'
2
4
  require 'rails_admin/config/hideable'
3
5
 
4
6
  module RailsAdmin
5
7
  module Config
6
8
  module Fields
7
9
  # A container for groups of fields in edit views
8
- class Group < RailsAdmin::Config::Base
10
+ class Group
11
+ include RailsAdmin::Config::Proxyable
12
+ include RailsAdmin::Config::Configurable
9
13
  include RailsAdmin::Config::Hideable
10
14
 
11
- attr_reader :name
15
+ attr_reader :name, :abstract_model
12
16
  attr_accessor :section
17
+ attr_reader :parent, :root
13
18
 
14
19
  def initialize(parent, name)
15
- super(parent)
20
+ @parent = parent
21
+ @root = parent.root
22
+
23
+ @abstract_model = parent.abstract_model
16
24
  @section = parent
17
25
  @name = name.to_s.tr(' ', '_').downcase.to_sym
18
26
  end
@@ -50,6 +58,11 @@ module RailsAdmin
50
58
  section.with(bindings).visible_fields.select {|f| self == f.group }
51
59
  end
52
60
 
61
+ # Should it open by default
62
+ register_instance_option :active? do
63
+ true
64
+ end
65
+
53
66
  # Configurable group label which by default is group's name humanized.
54
67
  register_instance_option :label do
55
68
  (@label ||= {})[::I18n.locale] ||= (parent.fields.find{|f|f.name == self.name}.try(:label) || name.to_s.humanize)
@@ -18,7 +18,7 @@ module RailsAdmin
18
18
  end
19
19
 
20
20
  register_instance_option :searchable do
21
- @searchable ||= associated_model_config.abstract_model.properties.map{ |p| p[:name] }.include?(associated_model_config.object_label_method) ? [associated_model_config.object_label_method, {self.abstract_model.model.name => self.method_name}] : {self.abstract_model.model.name => self.method_name}
21
+ @searchable ||= associated_model_config.abstract_model.properties.map{ |p| p[:name] }.include?(associated_model_config.object_label_method) ? [associated_model_config.object_label_method, {self.abstract_model.model => self.method_name}] : {self.abstract_model.model => self.method_name}
22
22
  end
23
23
 
24
24
  register_instance_option :partial do
@@ -26,7 +26,7 @@ module RailsAdmin
26
26
  end
27
27
 
28
28
  def associated_model_config
29
- @config ||= RailsAdmin.config(association[:parent_model])
29
+ @config ||= RailsAdmin.config(association[:parent_model_proc].call)
30
30
  end
31
31
 
32
32
  def selected_id
@@ -5,7 +5,6 @@ module RailsAdmin
5
5
  module Config
6
6
  module Fields
7
7
  module Types
8
- # Field type that supports Paperclip file uploads
9
8
  class Carrierwave < RailsAdmin::Config::Fields::Types::FileUpload
10
9
  RailsAdmin::Config::Fields::Types.register(self)
11
10
 
@@ -20,14 +19,6 @@ module RailsAdmin
20
19
  register_instance_option(:cache_method) do
21
20
  "#{name}_cache"
22
21
  end
23
-
24
- register_instance_option(:sortable) do
25
- name
26
- end
27
-
28
- register_instance_option(:searchable) do
29
- name
30
- end
31
22
 
32
23
  def resource_url(thumb = false)
33
24
  return nil unless (uploader = bindings[:object].send(name)).present?
@@ -6,7 +6,7 @@ module RailsAdmin
6
6
  module Types
7
7
  class Color < RailsAdmin::Config::Fields::Base
8
8
  RailsAdmin::Config::Fields::Types::register(self)
9
-
9
+
10
10
  register_instance_option :pretty_value do
11
11
  bindings[:view].content_tag :strong, (value.presence || ' - '), :style => "color: #{color}"
12
12
  end
@@ -14,7 +14,7 @@ module RailsAdmin
14
14
  register_instance_option :partial do
15
15
  :form_colorpicker
16
16
  end
17
-
17
+
18
18
  register_instance_option :color do
19
19
  if value.present?
20
20
  if value =~ /^[0-9a-fA-F]{3,6}$/
@@ -26,7 +26,7 @@ module RailsAdmin
26
26
  'white'
27
27
  end
28
28
  end
29
-
29
+
30
30
  register_instance_option :export_value do
31
31
  formatted_value
32
32
  end
@@ -9,10 +9,6 @@ module RailsAdmin
9
9
  class Dragonfly < RailsAdmin::Config::Fields::Types::FileUpload
10
10
  RailsAdmin::Config::Fields::Types.register(self)
11
11
 
12
- def errors
13
- bindings[:object].errors["#{name}_uid"] + bindings[:object].errors["#{name}_name"]
14
- end
15
-
16
12
  register_instance_option :image? do
17
13
  false unless value
18
14
  if abstract_model.model.new.respond_to?("#{name}_name")
@@ -22,12 +18,6 @@ module RailsAdmin
22
18
  end
23
19
  end
24
20
 
25
- register_instance_option :required? do
26
- @required ||= !!abstract_model.model.validators_on("#{name}_uid").find do |v|
27
- v.is_a?(ActiveModel::Validations::PresenceValidator) && !v.options[:allow_nil]
28
- end
29
- end
30
-
31
21
  register_instance_option :delete_method do
32
22
  "remove_#{name}"
33
23
  end
@@ -39,15 +29,7 @@ module RailsAdmin
39
29
  register_instance_option :thumb_method do
40
30
  "100x100>"
41
31
  end
42
-
43
- register_instance_option :sortable do
44
- "#{name}_name" if abstract_model.model.new.respond_to?("#{name}_name")
45
- end
46
-
47
- register_instance_option :searchable do
48
- "#{name}_name" if abstract_model.model.new.respond_to?("#{name}_name")
49
- end
50
-
32
+
51
33
  def resource_url thumb = false
52
34
  return nil unless (v = value)
53
35
  thumb ? v.thumb(thumb).try(:url) : v.url
@@ -26,14 +26,6 @@ module RailsAdmin
26
26
  register_instance_option(:export_value) do
27
27
  resource_url.to_s
28
28
  end
29
-
30
- register_instance_option(:searchable) do
31
- false
32
- end
33
-
34
- register_instance_option(:sortable) do
35
- false
36
- end
37
29
 
38
30
  register_instance_option(:pretty_value) do
39
31
  if value.presence
@@ -41,23 +33,27 @@ module RailsAdmin
41
33
  url = resource_url
42
34
  if self.image
43
35
  thumb_url = resource_url(thumb_method)
44
- (url != thumb_url) ? v.link_to(v.image_tag(thumb_url), url, :target => 'blank') : v.image_tag(thumb_url)
36
+ (url != thumb_url) ? v.link_to(v.image_tag(thumb_url), url, :class => 'thumbnail', :target => 'blank') : v.image_tag(thumb_url)
45
37
  else
46
38
  v.link_to(nil, url, :target => 'blank')
47
39
  end
48
40
  else
49
- ' - '
41
+ nil
50
42
  end
51
43
  end
52
44
 
53
45
  register_instance_option :image? do
54
46
  (url = resource_url.to_s) && url.split('.').last =~ /jpg|jpeg|png|gif/i
55
47
  end
56
-
48
+
57
49
  # virtual class
58
50
  def resource_url
59
51
  raise 'not implemented'
60
52
  end
53
+
54
+ def virtual?
55
+ true
56
+ end
61
57
  end
62
58
  end
63
59
  end
@@ -8,11 +8,6 @@ module RailsAdmin
8
8
  # Register field type for the type loader
9
9
  RailsAdmin::Config::Fields::Types::register(self)
10
10
 
11
- # Accessor for field's help text displayed below input field.
12
- register_instance_option :help do
13
- ""
14
- end
15
-
16
11
  register_instance_option :partial do
17
12
  nested_form ? :form_nested_many : :form_filtering_multiselect
18
13
  end
@@ -21,7 +16,7 @@ module RailsAdmin
21
16
  register_instance_option :orderable do
22
17
  false
23
18
  end
24
-
19
+
25
20
  def method_name
26
21
  nested_form ? "#{super}_attributes" : "#{super.to_s.singularize}_ids" # name_ids
27
22
  end
@@ -7,7 +7,7 @@ module RailsAdmin
7
7
  class HasOneAssociation < RailsAdmin::Config::Fields::Association
8
8
  # Register field type for the type loader
9
9
  RailsAdmin::Config::Fields::Types::register(self)
10
-
10
+
11
11
  register_instance_option :partial do
12
12
  nested_form ? :form_nested_one : :form_filtering_select
13
13
  end
@@ -16,15 +16,15 @@ module RailsAdmin
16
16
  register_instance_option(:formatted_value) do
17
17
  (o = value) && o.send(associated_model_config.object_label_method)
18
18
  end
19
-
19
+
20
20
  def editable
21
21
  (nested_form || abstract_model.model.new.respond_to?("#{self.name}_id=")) && super
22
22
  end
23
-
23
+
24
24
  def selected_id
25
25
  value.try :id
26
26
  end
27
-
27
+
28
28
  def method_name
29
29
  nested_form ? "#{self.name}_attributes" : "#{self.name}_id"
30
30
  end
@@ -18,27 +18,9 @@ module RailsAdmin
18
18
  @thumb_method ||= @styles.find{|s| [:thumb, 'thumb', :thumbnail, 'thumbnail'].include?(s)} || @styles.first || :original
19
19
  end
20
20
 
21
- register_instance_option(:required?) do
22
- @required ||= !!abstract_model.model.validators_on("#{name}_file_name").find do |v|
23
- v.is_a?(ActiveModel::Validations::PresenceValidator) && !v.options[:allow_nil]
24
- end
25
- end
26
-
27
- register_instance_option(:sortable) do
28
- "#{name}_file_name"
29
- end
30
-
31
- register_instance_option(:searchable) do
32
- "#{name}_file_name"
33
- end
34
-
35
21
  def resource_url(thumb = false)
36
22
  value.try(:url, (thumb || :original))
37
23
  end
38
-
39
- def errors
40
- bindings[:object].errors["#{name}_file_name"] + bindings[:object].errors["#{name}_content_type"] + bindings[:object].errors["#{name}_file_size"]
41
- end
42
24
  end
43
25
  end
44
26
  end