rails_admin 0.0.5 → 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.
- data/Gemfile +5 -30
- data/README.md +20 -2
- data/app/assets/javascripts/rails_admin/ra.filtering-select.js +2 -2
- data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +1 -1
- data/app/assets/javascripts/rails_admin/ra.remote-form.js +1 -1
- data/app/assets/javascripts/rails_admin/ra.widgets.coffee +43 -3
- data/app/assets/javascripts/rails_admin/ui.js.coffee +2 -0
- data/app/assets/stylesheets/rails_admin/imports.css.scss.erb +3 -0
- data/app/assets/stylesheets/rails_admin/ra.widgets.css.scss +8 -0
- data/app/controllers/rails_admin/main_controller.rb +3 -3
- data/app/helpers/rails_admin/application_helper.rb +15 -4
- data/app/helpers/rails_admin/form_builder.rb +35 -35
- data/app/views/layouts/rails_admin/application.html.haml +2 -1
- data/app/views/rails_admin/main/_delete_notice.html.haml +9 -8
- data/app/views/rails_admin/main/_form_datetime.html.haml +1 -1
- data/app/views/rails_admin/main/_form_enumeration.html.haml +18 -1
- data/app/views/rails_admin/main/_form_file_upload.html.haml +2 -2
- data/app/views/rails_admin/main/_form_text.html.haml +7 -1
- data/app/views/rails_admin/main/dashboard.html.haml +26 -25
- data/app/views/rails_admin/main/index.html.haml +1 -1
- data/config/initializers/active_record_extensions.rb +2 -2
- data/config/locales/rails_admin.en.yml +1 -0
- data/lib/generators/rails_admin/install_generator.rb +1 -1
- data/lib/generators/rails_admin/templates/initializer.erb +66 -67
- data/lib/rails_admin/abstract_model.rb +7 -7
- data/lib/rails_admin/adapters/active_record.rb +17 -8
- data/lib/rails_admin/adapters/mongoid.rb +38 -42
- data/lib/rails_admin/adapters/mongoid/extension.rb +1 -1
- data/lib/rails_admin/config.rb +15 -1
- data/lib/rails_admin/config/actions/base.rb +16 -2
- data/lib/rails_admin/config/actions/dashboard.rb +17 -11
- data/lib/rails_admin/config/fields.rb +0 -1
- data/lib/rails_admin/config/fields/association.rb +2 -3
- data/lib/rails_admin/config/fields/base.rb +18 -6
- data/lib/rails_admin/config/fields/types/enum.rb +4 -0
- data/lib/rails_admin/config/fields/types/string.rb +6 -4
- data/lib/rails_admin/config/fields/types/text.rb +19 -2
- data/lib/rails_admin/config/model.rb +17 -0
- data/lib/rails_admin/config/sections/base.rb +17 -0
- data/lib/rails_admin/engine.rb +4 -0
- data/lib/rails_admin/extensions/history/auditing_adapter.rb +1 -1
- data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +4 -4
- data/lib/rails_admin/support/csv_converter.rb +3 -3
- data/lib/rails_admin/version.rb +2 -2
- data/lib/tasks/rails_admin.rake +36 -6
- data/spec/controllers/main_controller_spec.rb +52 -9
- data/spec/dummy_app/Gemfile +7 -16
- data/spec/dummy_app/app/active_record/another_field_test.rb +4 -0
- data/spec/dummy_app/app/active_record/ball.rb +1 -1
- data/spec/dummy_app/app/active_record/nested_field_test.rb +2 -1
- data/spec/dummy_app/app/active_record/team.rb +3 -2
- data/spec/dummy_app/app/active_record/user.rb +6 -2
- data/spec/dummy_app/app/mongoid/another_field_test.rb +6 -0
- data/spec/dummy_app/app/mongoid/ball.rb +1 -1
- data/spec/dummy_app/app/mongoid/nested_field_test.rb +2 -1
- data/spec/dummy_app/app/mongoid/team.rb +1 -1
- data/spec/dummy_app/config/environments/development.rb +2 -2
- data/spec/dummy_app/db/migrate/20120720075608_create_another_field_tests.rb +8 -0
- data/spec/dummy_app/db/seeds.rb +3 -3
- data/spec/dummy_app/db/test.sqlite3 +0 -0
- data/spec/dummy_app/log/test.log +53792 -0
- data/spec/helpers/application_helper_spec.rb +37 -0
- data/spec/helpers/form_builder_spec.rb +17 -0
- data/spec/integration/authorization/cancan_spec.rb +21 -13
- data/spec/integration/basic/create/rails_admin_namespaced_model_create_spec.rb +1 -8
- data/spec/integration/basic/delete/rails_admin_basic_delete_spec.rb +15 -4
- data/spec/integration/basic/list/rails_admin_basic_list_spec.rb +9 -12
- data/spec/integration/basic/show/rails_admin_basic_show_spec.rb +2 -10
- data/spec/integration/basic/update/rails_admin_basic_update_spec.rb +6 -0
- data/spec/integration/config/edit/rails_admin_config_edit_spec.rb +241 -300
- data/spec/integration/config/list/rails_admin_config_list_spec.rb +3 -81
- data/spec/integration/config/show/rails_admin_config_show_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -0
- data/spec/unit/active_record_extension_spec.rb +16 -0
- data/spec/unit/adapters/active_record_spec.rb +11 -9
- data/spec/unit/adapters/mongoid_spec.rb +4 -4
- data/spec/unit/config/actions/base_spec.rb +32 -0
- data/spec/unit/config/fields/base_spec.rb +56 -0
- data/spec/unit/config/fields/date_spec.rb +53 -0
- data/spec/unit/config/fields/datetime_spec.rb +55 -0
- data/spec/unit/config/fields/time_spec.rb +39 -0
- data/spec/unit/config/fields/timestamp_spec.rb +20 -0
- data/spec/unit/config_spec.rb +1 -1
- data/spec/unit/support/csv_converter_spec.rb +16 -0
- metadata +44 -35
- data/lib/rails_admin/config/fields/factories/serialized.rb +0 -17
- data/lib/tasks/prepare_ci_env.rake +0 -27
|
@@ -36,7 +36,7 @@ module RailsAdmin
|
|
|
36
36
|
|
|
37
37
|
def all(options = {},scope=nil)
|
|
38
38
|
scope ||= self.scoped
|
|
39
|
-
scope = scope.includes(options[:include]) if options[:include]
|
|
39
|
+
scope = scope.includes(*options[:include]) if options[:include]
|
|
40
40
|
scope = scope.limit(options[:limit]) if options[:limit]
|
|
41
41
|
scope = scope.any_in(:_id => options[:bulk_ids]) if options[:bulk_ids]
|
|
42
42
|
scope = scope.where(query_conditions(options[:query])) if options[:query]
|
|
@@ -83,44 +83,13 @@ module RailsAdmin
|
|
|
83
83
|
def properties
|
|
84
84
|
fields = model.fields.reject{|name, field| DISABLED_COLUMN_TYPES.include?(field.type.to_s) }
|
|
85
85
|
fields.map do |name,field|
|
|
86
|
-
ar_type = {
|
|
87
|
-
"Array" => { :type => :serialized },
|
|
88
|
-
"BigDecimal" => { :type => :decimal },
|
|
89
|
-
"Boolean" => { :type => :boolean },
|
|
90
|
-
"BSON::ObjectId" => { :type => :bson_object_id, :serial? => (name == primary_key) },
|
|
91
|
-
"Moped::BSON::ObjectId" => { :type => :bson_object_id, :serial? => (name == primary_key) },
|
|
92
|
-
"Date" => { :type => :date },
|
|
93
|
-
"DateTime" => { :type => :datetime },
|
|
94
|
-
"Float" => { :type => :float },
|
|
95
|
-
"Hash" => { :type => :serialized },
|
|
96
|
-
"Integer" => { :type => :integer },
|
|
97
|
-
"Object" => (
|
|
98
|
-
if associations.find{|a| a[:type] == :belongs_to && a[:foreign_key] == name.to_sym}
|
|
99
|
-
{ :type => :bson_object_id }
|
|
100
|
-
else
|
|
101
|
-
{ :type => :string, :length => 255 }
|
|
102
|
-
end
|
|
103
|
-
),
|
|
104
|
-
"String" => (
|
|
105
|
-
if (length = length_validation_lookup(name)) && length < 256
|
|
106
|
-
{ :type => :string, :length => length }
|
|
107
|
-
elsif STRING_TYPE_COLUMN_NAMES.include?(name.to_sym)
|
|
108
|
-
{ :type => :string, :length => 255 }
|
|
109
|
-
else
|
|
110
|
-
{ :type => :text }
|
|
111
|
-
end
|
|
112
|
-
),
|
|
113
|
-
"Symbol" => { :type => :string, :length => 255 },
|
|
114
|
-
"Time" => { :type => :datetime },
|
|
115
|
-
}[field.type.to_s] or raise "Need to map field #{field.type.to_s} for field name #{name} in #{model.inspect}"
|
|
116
|
-
|
|
117
86
|
{
|
|
118
87
|
:name => field.name.to_sym,
|
|
119
88
|
:length => nil,
|
|
120
89
|
:pretty_name => field.name.to_s.gsub('_', ' ').strip.capitalize,
|
|
121
90
|
:nullable? => true,
|
|
122
91
|
:serial? => false,
|
|
123
|
-
}.merge(
|
|
92
|
+
}.merge(type_lookup(name, field))
|
|
124
93
|
end
|
|
125
94
|
end
|
|
126
95
|
|
|
@@ -128,12 +97,6 @@ module RailsAdmin
|
|
|
128
97
|
model.collection_name.to_s
|
|
129
98
|
end
|
|
130
99
|
|
|
131
|
-
def serialized_attributes
|
|
132
|
-
# Mongoid Array and Hash type columns are mapped to RA serialized type
|
|
133
|
-
# through type detection in self#properties.
|
|
134
|
-
[]
|
|
135
|
-
end
|
|
136
|
-
|
|
137
100
|
def encoding
|
|
138
101
|
'UTF-8'
|
|
139
102
|
end
|
|
@@ -237,11 +200,11 @@ module RailsAdmin
|
|
|
237
200
|
return if value.blank?
|
|
238
201
|
value = case operator
|
|
239
202
|
when 'default', 'like'
|
|
240
|
-
Regexp.compile(Regexp.escape(value))
|
|
203
|
+
Regexp.compile(Regexp.escape(value), Regexp::IGNORECASE)
|
|
241
204
|
when 'starts_with'
|
|
242
|
-
Regexp.compile("^#{Regexp.escape(value)}")
|
|
205
|
+
Regexp.compile("^#{Regexp.escape(value)}", Regexp::IGNORECASE)
|
|
243
206
|
when 'ends_with'
|
|
244
|
-
Regexp.compile("#{Regexp.escape(value)}$")
|
|
207
|
+
Regexp.compile("#{Regexp.escape(value)}$", Regexp::IGNORECASE)
|
|
245
208
|
when 'is', '='
|
|
246
209
|
value.to_s
|
|
247
210
|
else
|
|
@@ -277,6 +240,39 @@ module RailsAdmin
|
|
|
277
240
|
end
|
|
278
241
|
end
|
|
279
242
|
|
|
243
|
+
def type_lookup(name, field)
|
|
244
|
+
{
|
|
245
|
+
"Array" => { :type => :serialized },
|
|
246
|
+
"BigDecimal" => { :type => :decimal },
|
|
247
|
+
"Boolean" => { :type => :boolean },
|
|
248
|
+
"BSON::ObjectId" => { :type => :bson_object_id, :serial? => (name == primary_key) },
|
|
249
|
+
"Moped::BSON::ObjectId" => { :type => :bson_object_id, :serial? => (name == primary_key) },
|
|
250
|
+
"Date" => { :type => :date },
|
|
251
|
+
"DateTime" => { :type => :datetime },
|
|
252
|
+
"Float" => { :type => :float },
|
|
253
|
+
"Hash" => { :type => :serialized },
|
|
254
|
+
"Integer" => { :type => :integer },
|
|
255
|
+
"Object" => (
|
|
256
|
+
if associations.find{|a| a[:type] == :belongs_to && a[:foreign_key] == name.to_sym}
|
|
257
|
+
{ :type => :bson_object_id }
|
|
258
|
+
else
|
|
259
|
+
{ :type => :string, :length => 255 }
|
|
260
|
+
end
|
|
261
|
+
),
|
|
262
|
+
"String" => (
|
|
263
|
+
if (length = length_validation_lookup(name)) && length < 256
|
|
264
|
+
{ :type => :string, :length => length }
|
|
265
|
+
elsif STRING_TYPE_COLUMN_NAMES.include?(name.to_sym)
|
|
266
|
+
{ :type => :string, :length => 255 }
|
|
267
|
+
else
|
|
268
|
+
{ :type => :text }
|
|
269
|
+
end
|
|
270
|
+
),
|
|
271
|
+
"Symbol" => { :type => :string, :length => 255 },
|
|
272
|
+
"Time" => { :type => :datetime },
|
|
273
|
+
}[field.type.to_s] or raise "Need to map field #{field.type.to_s} for field name #{name} in #{model.inspect}"
|
|
274
|
+
end
|
|
275
|
+
|
|
280
276
|
def association_model_proc_lookup(association)
|
|
281
277
|
if association.polymorphic? && [:referenced_in, :belongs_to].include?(association.macro)
|
|
282
278
|
RailsAdmin::AbstractModel.polymorphic_parents(:mongoid, association.name) || []
|
data/lib/rails_admin/config.rb
CHANGED
|
@@ -63,9 +63,16 @@ module RailsAdmin
|
|
|
63
63
|
# Stores model configuration objects in a hash identified by model's class
|
|
64
64
|
# name.
|
|
65
65
|
#
|
|
66
|
-
# @see RailsAdmin
|
|
66
|
+
# @see RailsAdmin.config
|
|
67
67
|
attr_reader :registry
|
|
68
68
|
|
|
69
|
+
# accepts a hash of static links to be shown below the main navigation
|
|
70
|
+
attr_accessor :navigation_static_links
|
|
71
|
+
attr_accessor :navigation_static_label
|
|
72
|
+
|
|
73
|
+
# yell about fields that are not marked as accessible
|
|
74
|
+
attr_accessor :yell_for_non_accessible_fields
|
|
75
|
+
|
|
69
76
|
# Setup authentication to be run as a before filter
|
|
70
77
|
# This is run inside the controller instance so you can setup any authentication you need to
|
|
71
78
|
#
|
|
@@ -264,6 +271,10 @@ module RailsAdmin
|
|
|
264
271
|
#
|
|
265
272
|
# @see RailsAdmin::Config.registry
|
|
266
273
|
def models(&block)
|
|
274
|
+
if block
|
|
275
|
+
raise 'coucou'
|
|
276
|
+
ActiveSupport::Deprecation.warn("'config.models do ... end' is deprecated for performance reasons and will be removed in next major release, please duplicate to every concerned model instead.")
|
|
277
|
+
end
|
|
267
278
|
RailsAdmin::AbstractModel.all.map{|m| model(m, &block)}
|
|
268
279
|
end
|
|
269
280
|
|
|
@@ -272,6 +283,7 @@ module RailsAdmin
|
|
|
272
283
|
# @see RailsAdmin::Config.registry
|
|
273
284
|
def reset
|
|
274
285
|
@compact_show_view = true
|
|
286
|
+
@yell_for_non_accessible_fields = true
|
|
275
287
|
@authenticate = nil
|
|
276
288
|
@authorize = nil
|
|
277
289
|
@audit = nil
|
|
@@ -289,6 +301,8 @@ module RailsAdmin
|
|
|
289
301
|
@label_methods = [:name, :title]
|
|
290
302
|
@main_app_name = Proc.new { [Rails.application.engine_name.titleize.chomp(' Application'), 'Admin'] }
|
|
291
303
|
@registry = {}
|
|
304
|
+
@navigation_static_links = {}
|
|
305
|
+
@navigation_static_label = nil
|
|
292
306
|
RailsAdmin::Config::Actions.reset
|
|
293
307
|
end
|
|
294
308
|
|
|
@@ -9,6 +9,14 @@ module RailsAdmin
|
|
|
9
9
|
include RailsAdmin::Config::Proxyable
|
|
10
10
|
include RailsAdmin::Config::Configurable
|
|
11
11
|
include RailsAdmin::Config::Hideable
|
|
12
|
+
|
|
13
|
+
register_instance_option :only do
|
|
14
|
+
nil
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
register_instance_option :except do
|
|
18
|
+
[]
|
|
19
|
+
end
|
|
12
20
|
|
|
13
21
|
# http://twitter.github.com/bootstrap/base-css.html#icons
|
|
14
22
|
register_instance_option :link_icon do
|
|
@@ -17,11 +25,17 @@ module RailsAdmin
|
|
|
17
25
|
|
|
18
26
|
# Should the action be visible
|
|
19
27
|
register_instance_option :visible? do
|
|
20
|
-
authorized?
|
|
28
|
+
authorized?
|
|
21
29
|
end
|
|
22
30
|
|
|
23
31
|
register_instance_option :authorized? do
|
|
24
|
-
|
|
32
|
+
(
|
|
33
|
+
bindings[:controller].nil? or bindings[:controller].authorized?(self.authorization_key, bindings[:abstract_model], bindings[:object])) and (
|
|
34
|
+
bindings[:abstract_model].nil? or (
|
|
35
|
+
(only.nil? or [only].flatten.map(&:to_s).include?(bindings[:abstract_model].model.to_s)) and
|
|
36
|
+
![except].flatten.map(&:to_s).include?(bindings[:abstract_model].model.to_s) and
|
|
37
|
+
bindings[:abstract_model].config.with(bindings).visible?
|
|
38
|
+
))
|
|
25
39
|
end
|
|
26
40
|
|
|
27
41
|
# Is the action acting on the root level (Example: /admin/contact)
|
|
@@ -15,18 +15,20 @@ module RailsAdmin
|
|
|
15
15
|
register_instance_option :controller do
|
|
16
16
|
Proc.new do
|
|
17
17
|
@history = @auditing_adapter && @auditing_adapter.latest || []
|
|
18
|
-
@
|
|
18
|
+
if @action.statistics?
|
|
19
|
+
@abstract_models = RailsAdmin::Config.visible_models(:controller => self).map(&:abstract_model)
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
21
|
+
@most_recent_changes = {}
|
|
22
|
+
@count = {}
|
|
23
|
+
@max = 0
|
|
24
|
+
@abstract_models.each do |t|
|
|
25
|
+
scope = @authorization_adapter && @authorization_adapter.query(:index, t)
|
|
26
|
+
current_count = t.count({}, scope)
|
|
27
|
+
@max = current_count > @max ? current_count : @max
|
|
28
|
+
@count[t.pretty_name] = current_count
|
|
29
|
+
if t.properties.find{|c| c[:name] == :updated_at }
|
|
30
|
+
@most_recent_changes[t.pretty_name] = t.first(:sort => :updated_at).try(:updated_at)
|
|
31
|
+
end
|
|
30
32
|
end
|
|
31
33
|
end
|
|
32
34
|
render @action.template_name, :status => (flash[:error].present? ? :not_found : 200)
|
|
@@ -40,6 +42,10 @@ module RailsAdmin
|
|
|
40
42
|
register_instance_option :link_icon do
|
|
41
43
|
'icon-home'
|
|
42
44
|
end
|
|
45
|
+
|
|
46
|
+
register_instance_option :statistics? do
|
|
47
|
+
true
|
|
48
|
+
end
|
|
43
49
|
end
|
|
44
50
|
end
|
|
45
51
|
end
|
|
@@ -85,4 +85,3 @@ require 'rails_admin/config/fields/factories/paperclip'
|
|
|
85
85
|
require 'rails_admin/config/fields/factories/dragonfly'
|
|
86
86
|
require 'rails_admin/config/fields/factories/carrierwave'
|
|
87
87
|
require 'rails_admin/config/fields/factories/association'
|
|
88
|
-
require 'rails_admin/config/fields/factories/serialized'
|
|
@@ -18,11 +18,10 @@ module RailsAdmin
|
|
|
18
18
|
register_instance_option(:pretty_value) do
|
|
19
19
|
v = bindings[:view]
|
|
20
20
|
[value].flatten.select(&:present?).map do |associated|
|
|
21
|
-
amc = polymorphic? ? RailsAdmin
|
|
21
|
+
amc = polymorphic? ? RailsAdmin.config(associated) : associated_model_config # perf optimization for non-polymorphic associations
|
|
22
22
|
am = amc.abstract_model
|
|
23
23
|
wording = associated.send(amc.object_label_method)
|
|
24
|
-
can_see =
|
|
25
|
-
can_see = can_see && (show_action = RailsAdmin::Config::Actions.find(:show, { :controller => v.controller, :abstract_model => am, :object => associated }))
|
|
24
|
+
can_see = !am.embedded? && (show_action = v.action(:show, am, associated))
|
|
26
25
|
can_see ? v.link_to(wording, v.url_for(:action => show_action.action_name, :model_name => am.to_param, :id => associated.id), :class => 'pjax') : wording
|
|
27
26
|
end.to_sentence.html_safe
|
|
28
27
|
end
|
|
@@ -138,6 +138,10 @@ module RailsAdmin
|
|
|
138
138
|
(@label ||= {})[::I18n.locale] ||= abstract_model.model.human_attribute_name name
|
|
139
139
|
end
|
|
140
140
|
|
|
141
|
+
register_instance_option :hint do
|
|
142
|
+
(@hint ||= "")
|
|
143
|
+
end
|
|
144
|
+
|
|
141
145
|
# Accessor for field's maximum length per database.
|
|
142
146
|
#
|
|
143
147
|
# @see RailsAdmin::AbstractModel.properties
|
|
@@ -160,10 +164,12 @@ module RailsAdmin
|
|
|
160
164
|
#
|
|
161
165
|
# @see RailsAdmin::AbstractModel.properties
|
|
162
166
|
register_instance_option :required? do
|
|
163
|
-
|
|
167
|
+
context = (bindings && bindings[:object] ? (bindings[:object].persisted? ? :update : :create) : :nil)
|
|
168
|
+
(@required ||= {})[context] ||= !!([name] + children_fields).uniq.find do |column_name|
|
|
164
169
|
!!abstract_model.model.validators_on(column_name).find do |v|
|
|
165
|
-
|
|
166
|
-
|
|
170
|
+
!v.options[:allow_nil] and
|
|
171
|
+
[:presence, :numericality].include?(v.kind) and
|
|
172
|
+
(v.options[:on] == context or v.options[:on].blank?)
|
|
167
173
|
end
|
|
168
174
|
end
|
|
169
175
|
end
|
|
@@ -204,12 +210,17 @@ module RailsAdmin
|
|
|
204
210
|
end
|
|
205
211
|
|
|
206
212
|
register_instance_option :render do
|
|
207
|
-
bindings[:view].render :partial => partial
|
|
213
|
+
bindings[:view].render :partial => "rails_admin/main/#{partial}", :locals => {:field => self, :form => bindings[:form] }
|
|
208
214
|
end
|
|
209
215
|
|
|
210
216
|
def editable?
|
|
211
217
|
return false if @properties && @properties[:read_only]
|
|
212
|
-
!bindings[:object].class.active_authorizer[bindings[:view].controller.send(:_attr_accessible_role)].deny?(self.method_name)
|
|
218
|
+
active_model_attr_accessible = !bindings[:object].class.active_authorizer[bindings[:view].controller.send(:_attr_accessible_role)].deny?(self.method_name)
|
|
219
|
+
return true if active_model_attr_accessible
|
|
220
|
+
if RailsAdmin::Config.yell_for_non_accessible_fields
|
|
221
|
+
Rails.logger.debug "\n\n[RailsAdmin] Please add 'attr_accessible :#{self.method_name}' in your '#{bindings[:object].class}' model definition if you want to make it editable.\nYou can also explicitely mark this field as read-only: \n\nconfig.model #{bindings[:object].class} do\n field :#{self.name} do\n read_only true\n end\nend\n\nAdd 'config.yell_for_non_accessible_fields = false' in your 'rails_admin.rb' initializer if you do not want to see these warnings\n\n"
|
|
222
|
+
end
|
|
223
|
+
false
|
|
213
224
|
end
|
|
214
225
|
|
|
215
226
|
# Is this an association
|
|
@@ -280,7 +291,8 @@ module RailsAdmin
|
|
|
280
291
|
"#<#{self.class.name}[#{name}] #{
|
|
281
292
|
instance_variables.map do |v|
|
|
282
293
|
value = instance_variable_get(v)
|
|
283
|
-
if [:@parent, :@root, :@section
|
|
294
|
+
if [:@parent, :@root, :@section, :@children_fields_registered,
|
|
295
|
+
:@associated_model_config, :@group, :@bindings].include? v
|
|
284
296
|
if value.respond_to? :name
|
|
285
297
|
"#{v}=#{value.name.inspect}"
|
|
286
298
|
else
|
|
@@ -22,10 +22,12 @@ module RailsAdmin
|
|
|
22
22
|
else
|
|
23
23
|
max_length = [length, valid_length[:maximum] || nil].compact.min
|
|
24
24
|
min_length = [0, valid_length[:minimum] || nil].compact.max
|
|
25
|
-
if
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
if max_length
|
|
26
|
+
if min_length == 0
|
|
27
|
+
text += "#{I18n.translate("admin.form.char_length_up_to").capitalize} #{max_length}."
|
|
28
|
+
else
|
|
29
|
+
text += "#{I18n.translate("admin.form.char_length_of").capitalize} #{min_length}-#{max_length}."
|
|
30
|
+
end
|
|
29
31
|
end
|
|
30
32
|
end
|
|
31
33
|
text
|
|
@@ -7,7 +7,7 @@ module RailsAdmin
|
|
|
7
7
|
class Text < RailsAdmin::Config::Fields::Base
|
|
8
8
|
# Register field type for the type loader
|
|
9
9
|
RailsAdmin::Config::Fields::Types::register(self)
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
# CKEditor is disabled by default
|
|
12
12
|
register_instance_option(:ckeditor) do
|
|
13
13
|
false
|
|
@@ -45,7 +45,7 @@ module RailsAdmin
|
|
|
45
45
|
#Pass the location of the theme and mode for Codemirror
|
|
46
46
|
register_instance_option(:codemirror_assets) do
|
|
47
47
|
{
|
|
48
|
-
:mode => '/assets/codemirror/modes/css.js',
|
|
48
|
+
:mode => '/assets/codemirror/modes/css.js',
|
|
49
49
|
:theme => '/assets/codemirror/themes/night.css'
|
|
50
50
|
}
|
|
51
51
|
end
|
|
@@ -60,6 +60,19 @@ module RailsAdmin
|
|
|
60
60
|
'/assets/codemirror.css'
|
|
61
61
|
end
|
|
62
62
|
|
|
63
|
+
# bootstrap_wysihtml5
|
|
64
|
+
register_instance_option(:bootstrap_wysihtml5) do
|
|
65
|
+
false
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
register_instance_option(:bootstrap_wysihtml5_css_location) do
|
|
69
|
+
'/assets/bootstrap-wysihtml5.css'
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
register_instance_option(:bootstrap_wysihtml5_js_location) do
|
|
73
|
+
'/assets/bootstrap-wysihtml5-all.js'
|
|
74
|
+
end
|
|
75
|
+
|
|
63
76
|
register_instance_option(:html_attributes) do
|
|
64
77
|
{
|
|
65
78
|
:cols => '48',
|
|
@@ -70,6 +83,10 @@ module RailsAdmin
|
|
|
70
83
|
register_instance_option(:partial) do
|
|
71
84
|
:form_text
|
|
72
85
|
end
|
|
86
|
+
|
|
87
|
+
register_instance_option :formatted_value do
|
|
88
|
+
value.to_s.html_safe
|
|
89
|
+
end
|
|
73
90
|
end
|
|
74
91
|
end
|
|
75
92
|
end
|
|
@@ -83,6 +83,23 @@ module RailsAdmin
|
|
|
83
83
|
def method_missing(m, *args, &block)
|
|
84
84
|
self.send(:base).send(m, *args, &block)
|
|
85
85
|
end
|
|
86
|
+
|
|
87
|
+
def inspect
|
|
88
|
+
"#<#{self.class.name}[#{abstract_model.model.name}] #{
|
|
89
|
+
instance_variables.map do |v|
|
|
90
|
+
value = instance_variable_get(v)
|
|
91
|
+
if [:@parent, :@root].include? v
|
|
92
|
+
if value.respond_to? :name
|
|
93
|
+
"#{v}=#{value.name.inspect}"
|
|
94
|
+
else
|
|
95
|
+
"#{v}=#{value.class.name}"
|
|
96
|
+
end
|
|
97
|
+
else
|
|
98
|
+
"#{v}=#{value.inspect}"
|
|
99
|
+
end
|
|
100
|
+
end.join(", ")
|
|
101
|
+
}>"
|
|
102
|
+
end
|
|
86
103
|
end
|
|
87
104
|
end
|
|
88
105
|
end
|
|
@@ -23,6 +23,23 @@ module RailsAdmin
|
|
|
23
23
|
|
|
24
24
|
@abstract_model = root.abstract_model
|
|
25
25
|
end
|
|
26
|
+
|
|
27
|
+
def inspect
|
|
28
|
+
"#<#{self.class.name} #{
|
|
29
|
+
instance_variables.map do |v|
|
|
30
|
+
value = instance_variable_get(v)
|
|
31
|
+
if [:@parent, :@root, :@abstract_model].include? v
|
|
32
|
+
if value.respond_to? :name
|
|
33
|
+
"#{v}=#{value.name.inspect}"
|
|
34
|
+
else
|
|
35
|
+
"#{v}=#{value.class.name}"
|
|
36
|
+
end
|
|
37
|
+
else
|
|
38
|
+
"#{v}=#{value.inspect}"
|
|
39
|
+
end
|
|
40
|
+
end.join(", ")
|
|
41
|
+
}>"
|
|
42
|
+
end
|
|
26
43
|
end
|
|
27
44
|
end
|
|
28
45
|
end
|