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.
Files changed (87) hide show
  1. data/Gemfile +5 -30
  2. data/README.md +20 -2
  3. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +2 -2
  4. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +1 -1
  5. data/app/assets/javascripts/rails_admin/ra.remote-form.js +1 -1
  6. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +43 -3
  7. data/app/assets/javascripts/rails_admin/ui.js.coffee +2 -0
  8. data/app/assets/stylesheets/rails_admin/imports.css.scss.erb +3 -0
  9. data/app/assets/stylesheets/rails_admin/ra.widgets.css.scss +8 -0
  10. data/app/controllers/rails_admin/main_controller.rb +3 -3
  11. data/app/helpers/rails_admin/application_helper.rb +15 -4
  12. data/app/helpers/rails_admin/form_builder.rb +35 -35
  13. data/app/views/layouts/rails_admin/application.html.haml +2 -1
  14. data/app/views/rails_admin/main/_delete_notice.html.haml +9 -8
  15. data/app/views/rails_admin/main/_form_datetime.html.haml +1 -1
  16. data/app/views/rails_admin/main/_form_enumeration.html.haml +18 -1
  17. data/app/views/rails_admin/main/_form_file_upload.html.haml +2 -2
  18. data/app/views/rails_admin/main/_form_text.html.haml +7 -1
  19. data/app/views/rails_admin/main/dashboard.html.haml +26 -25
  20. data/app/views/rails_admin/main/index.html.haml +1 -1
  21. data/config/initializers/active_record_extensions.rb +2 -2
  22. data/config/locales/rails_admin.en.yml +1 -0
  23. data/lib/generators/rails_admin/install_generator.rb +1 -1
  24. data/lib/generators/rails_admin/templates/initializer.erb +66 -67
  25. data/lib/rails_admin/abstract_model.rb +7 -7
  26. data/lib/rails_admin/adapters/active_record.rb +17 -8
  27. data/lib/rails_admin/adapters/mongoid.rb +38 -42
  28. data/lib/rails_admin/adapters/mongoid/extension.rb +1 -1
  29. data/lib/rails_admin/config.rb +15 -1
  30. data/lib/rails_admin/config/actions/base.rb +16 -2
  31. data/lib/rails_admin/config/actions/dashboard.rb +17 -11
  32. data/lib/rails_admin/config/fields.rb +0 -1
  33. data/lib/rails_admin/config/fields/association.rb +2 -3
  34. data/lib/rails_admin/config/fields/base.rb +18 -6
  35. data/lib/rails_admin/config/fields/types/enum.rb +4 -0
  36. data/lib/rails_admin/config/fields/types/string.rb +6 -4
  37. data/lib/rails_admin/config/fields/types/text.rb +19 -2
  38. data/lib/rails_admin/config/model.rb +17 -0
  39. data/lib/rails_admin/config/sections/base.rb +17 -0
  40. data/lib/rails_admin/engine.rb +4 -0
  41. data/lib/rails_admin/extensions/history/auditing_adapter.rb +1 -1
  42. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +4 -4
  43. data/lib/rails_admin/support/csv_converter.rb +3 -3
  44. data/lib/rails_admin/version.rb +2 -2
  45. data/lib/tasks/rails_admin.rake +36 -6
  46. data/spec/controllers/main_controller_spec.rb +52 -9
  47. data/spec/dummy_app/Gemfile +7 -16
  48. data/spec/dummy_app/app/active_record/another_field_test.rb +4 -0
  49. data/spec/dummy_app/app/active_record/ball.rb +1 -1
  50. data/spec/dummy_app/app/active_record/nested_field_test.rb +2 -1
  51. data/spec/dummy_app/app/active_record/team.rb +3 -2
  52. data/spec/dummy_app/app/active_record/user.rb +6 -2
  53. data/spec/dummy_app/app/mongoid/another_field_test.rb +6 -0
  54. data/spec/dummy_app/app/mongoid/ball.rb +1 -1
  55. data/spec/dummy_app/app/mongoid/nested_field_test.rb +2 -1
  56. data/spec/dummy_app/app/mongoid/team.rb +1 -1
  57. data/spec/dummy_app/config/environments/development.rb +2 -2
  58. data/spec/dummy_app/db/migrate/20120720075608_create_another_field_tests.rb +8 -0
  59. data/spec/dummy_app/db/seeds.rb +3 -3
  60. data/spec/dummy_app/db/test.sqlite3 +0 -0
  61. data/spec/dummy_app/log/test.log +53792 -0
  62. data/spec/helpers/application_helper_spec.rb +37 -0
  63. data/spec/helpers/form_builder_spec.rb +17 -0
  64. data/spec/integration/authorization/cancan_spec.rb +21 -13
  65. data/spec/integration/basic/create/rails_admin_namespaced_model_create_spec.rb +1 -8
  66. data/spec/integration/basic/delete/rails_admin_basic_delete_spec.rb +15 -4
  67. data/spec/integration/basic/list/rails_admin_basic_list_spec.rb +9 -12
  68. data/spec/integration/basic/show/rails_admin_basic_show_spec.rb +2 -10
  69. data/spec/integration/basic/update/rails_admin_basic_update_spec.rb +6 -0
  70. data/spec/integration/config/edit/rails_admin_config_edit_spec.rb +241 -300
  71. data/spec/integration/config/list/rails_admin_config_list_spec.rb +3 -81
  72. data/spec/integration/config/show/rails_admin_config_show_spec.rb +2 -2
  73. data/spec/spec_helper.rb +1 -0
  74. data/spec/unit/active_record_extension_spec.rb +16 -0
  75. data/spec/unit/adapters/active_record_spec.rb +11 -9
  76. data/spec/unit/adapters/mongoid_spec.rb +4 -4
  77. data/spec/unit/config/actions/base_spec.rb +32 -0
  78. data/spec/unit/config/fields/base_spec.rb +56 -0
  79. data/spec/unit/config/fields/date_spec.rb +53 -0
  80. data/spec/unit/config/fields/datetime_spec.rb +55 -0
  81. data/spec/unit/config/fields/time_spec.rb +39 -0
  82. data/spec/unit/config/fields/timestamp_spec.rb +20 -0
  83. data/spec/unit/config_spec.rb +1 -1
  84. data/spec/unit/support/csv_converter_spec.rb +16 -0
  85. metadata +44 -35
  86. data/lib/rails_admin/config/fields/factories/serialized.rb +0 -17
  87. data/lib/tasks/prepare_ci_env.rake +0 -27
@@ -28,18 +28,6 @@ describe "RailsAdmin Config DSL List Section" do
28
28
  end
29
29
  end
30
30
 
31
- it "should be configurable" do
32
- RailsAdmin::Config.models do
33
- list do
34
- items_per_page 1
35
- end
36
- end
37
- visit index_path(:model_name => "league")
38
- should have_selector("tbody tr", :count => 1)
39
- visit index_path(:model_name => "player")
40
- should have_selector("tbody tr", :count => 1)
41
- end
42
-
43
31
  it "should be configurable per model" do
44
32
  RailsAdmin.config League do
45
33
  list do
@@ -51,23 +39,6 @@ describe "RailsAdmin Config DSL List Section" do
51
39
  visit index_path(:model_name => "player")
52
40
  should have_selector("tbody tr", :count => 2)
53
41
  end
54
-
55
- it "should be globally configurable and overrideable per model" do
56
- RailsAdmin::Config.models do
57
- list do
58
- items_per_page 20
59
- end
60
- end
61
- RailsAdmin.config League do
62
- list do
63
- items_per_page 1
64
- end
65
- end
66
- visit index_path(:model_name => "league")
67
- should have_selector("tbody tr", :count => 1)
68
- visit index_path(:model_name => "player")
69
- should have_selector("tbody tr", :count => 2)
70
- end
71
42
  end
72
43
 
73
44
  describe "items' fields" do
@@ -211,7 +182,7 @@ describe "RailsAdmin Config DSL List Section" do
211
182
  end
212
183
 
213
184
  it "should be globally renameable by type" do
214
- RailsAdmin::Config.models do
185
+ RailsAdmin.config 'Fan' do
215
186
  list do
216
187
  fields_of_type :datetime do
217
188
  label { "#{label} (datetime)" }
@@ -265,7 +236,7 @@ describe "RailsAdmin Config DSL List Section" do
265
236
  end
266
237
 
267
238
  it "should have option to disable sortability by type globally" do
268
- RailsAdmin::Config.models do
239
+ RailsAdmin.config 'Fan' do
269
240
  list do
270
241
  fields_of_type :datetime do
271
242
  sortable false
@@ -297,7 +268,7 @@ describe "RailsAdmin Config DSL List Section" do
297
268
  end
298
269
 
299
270
  it "should have option to hide fields by type globally" do
300
- RailsAdmin::Config.models do
271
+ RailsAdmin.config 'Fan' do
301
272
  list do
302
273
  fields_of_type :datetime do
303
274
  hide
@@ -415,21 +386,6 @@ describe "RailsAdmin Config DSL List Section" do
415
386
  before(:each) { @players = players.map{|h| Player.create(h) }}
416
387
 
417
388
  context "should be configurable" do
418
- it "globaly" do
419
- RailsAdmin.config do |config|
420
- config.models do
421
- list do
422
- sort_by :created_at
423
- sort_reverse true
424
- end
425
- end
426
- end
427
- visit index_path(:model_name => "player")
428
- player_names_by_date.reverse.each_with_index do |name, i|
429
- find("tbody tr:nth-child(#{i + 1})").should have_content(name)
430
- end
431
- end
432
-
433
389
  it "per model" do
434
390
  RailsAdmin.config Player do
435
391
  list do
@@ -442,40 +398,6 @@ describe "RailsAdmin Config DSL List Section" do
442
398
  find("tbody tr:nth-child(#{i + 1})").should have_content(name)
443
399
  end
444
400
  end
445
-
446
- it "globaly and overrideable per model" do
447
- leagues.map{|h| League.create(h) }
448
-
449
- RailsAdmin::Config.models do
450
- list do
451
- sort_by :created_at
452
- sort_reverse true
453
- end
454
- end
455
-
456
- RailsAdmin.config Player do
457
- list do
458
- sort_by PK_COLUMN
459
- sort_reverse true
460
- end
461
- end
462
-
463
- visit index_path(:model_name => "league")
464
- league_names_by_date.reverse.each_with_index do |name, i|
465
- find("tbody tr:nth-child(#{i + 1})").should have_content(name)
466
- end
467
-
468
- visit index_path(:model_name => "player")
469
- @players.sort_by do |p|
470
- if p[PK_COLUMN].is_a?(Integer)
471
- p[PK_COLUMN]
472
- else
473
- p[PK_COLUMN].to_s
474
- end
475
- end.map{|p| p[:name]}.reverse.each_with_index do |name, i|
476
- find("tbody tr:nth-child(#{i + 1})").should have_content(name)
477
- end
478
- end
479
401
  end
480
402
 
481
403
  it "should have reverse direction by default" do
@@ -242,7 +242,7 @@ describe "RailsAdmin Config DSL Show Section" do
242
242
  end
243
243
 
244
244
  it "should be globally renameable by type" do
245
- RailsAdmin::Config.models do
245
+ RailsAdmin.config 'Team' do
246
246
  show do
247
247
  fields_of_type :string do
248
248
  label { "#{label} (STRING)" }
@@ -298,7 +298,7 @@ describe "RailsAdmin Config DSL Show Section" do
298
298
  end
299
299
 
300
300
  it "should be globally hideable by type" do
301
- RailsAdmin::Config.models do
301
+ RailsAdmin.config 'Team' do
302
302
  show do
303
303
  fields_of_type :string do
304
304
  hide
data/spec/spec_helper.rb CHANGED
@@ -58,6 +58,7 @@ RSpec.configure do |config|
58
58
  RailsAdmin::Config.reset
59
59
  RailsAdmin::AbstractModel.reset
60
60
  RailsAdmin::Config.audit_with(:history) if CI_ORM == :active_record
61
+ RailsAdmin::Config.yell_for_non_accessible_fields = false
61
62
  login_as User.create(
62
63
  :email => "username@example.com",
63
64
  :password => "password"
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+ require File.expand_path('../../../config/initializers/active_record_extensions', __FILE__)
3
+
4
+ describe 'ActiveRecord::Base', :active_record => true do
5
+ describe '#safe_send' do
6
+ it "only calls #read_attribute once" do
7
+ @player = Player.new
8
+ @player.number = 23
9
+ original_method = @player.method(:read_attribute)
10
+ @player.should_receive(:read_attribute).exactly(1).times do |*args|
11
+ original_method.call(*args)
12
+ end
13
+ @player.safe_send(:number).should == 23
14
+ end
15
+ end
16
+ end
@@ -151,14 +151,15 @@ describe 'RailsAdmin::Adapters::ActiveRecord', :active_record => true do
151
151
 
152
152
 
153
153
  describe "#properties" do
154
- before do
155
- @abstract_model = RailsAdmin::AbstractModel.new('Player')
156
- end
157
-
158
154
  it "returns parameters of string-type field" do
159
- @abstract_model.properties.select{|f| f[:name] == :name}.should ==
155
+ RailsAdmin::AbstractModel.new('Player').properties.select{|f| f[:name] == :name}.should ==
160
156
  [{:name => :name, :pretty_name => "Name", :type => :string, :length => 100, :nullable? => false, :serial? => false}]
161
157
  end
158
+
159
+ it "maps serialized attribute to :serialized field type" do
160
+ RailsAdmin::AbstractModel.new('User').properties.find{|f| f[:name] == :roles}.should ==
161
+ {:name => :roles, :pretty_name => "Roles", :length => 255, :nullable? => true, :serial? => false, :type => :serialized}
162
+ end
162
163
  end
163
164
 
164
165
  describe "data access method" do
@@ -323,6 +324,11 @@ describe 'RailsAdmin::Adapters::ActiveRecord', :active_record => true do
323
324
  @abstract_model.send(:build_statement, :field, :integer, 'word', nil).should be_nil
324
325
  end
325
326
 
327
+ it "supports decimal type query" do
328
+ @abstract_model.send(:build_statement, :field, :decimal, "1.1", nil).should == ["(field = ?)", 1.1]
329
+ @abstract_model.send(:build_statement, :field, :decimal, 'word', nil).should be_nil
330
+ end
331
+
326
332
  it "supports string type query" do
327
333
  @abstract_model.send(:build_statement, :field, :string, "", nil).should be_nil
328
334
  @abstract_model.send(:build_statement, :field, :string, "foo", "was").should be_nil
@@ -365,9 +371,5 @@ describe 'RailsAdmin::Adapters::ActiveRecord', :active_record => true do
365
371
  it "#table_name works" do
366
372
  @abstract_model.table_name.should == 'players'
367
373
  end
368
-
369
- it "#serialized_attributes works" do
370
- RailsAdmin::AbstractModel.new('User').serialized_attributes.should == ["roles"]
371
- end
372
374
  end
373
375
  end
@@ -686,10 +686,10 @@ describe 'RailsAdmin::Adapters::Mongoid', :mongoid => true do
686
686
  it "supports string type query" do
687
687
  @abstract_model.send(:build_statement, :field, :string, "", nil).should be_nil
688
688
  @abstract_model.send(:build_statement, :field, :string, "foo", "was").should be_nil
689
- @abstract_model.send(:build_statement, :field, :string, "foo", "default").should == {:field=>/foo/}
690
- @abstract_model.send(:build_statement, :field, :string, "foo", "like").should == {:field=>/foo/}
691
- @abstract_model.send(:build_statement, :field, :string, "foo", "starts_with").should == {:field=>/^foo/}
692
- @abstract_model.send(:build_statement, :field, :string, "foo", "ends_with").should == {:field=>/foo$/}
689
+ @abstract_model.send(:build_statement, :field, :string, "foo", "default").should == {:field=>/foo/i}
690
+ @abstract_model.send(:build_statement, :field, :string, "foo", "like").should == {:field=>/foo/i}
691
+ @abstract_model.send(:build_statement, :field, :string, "foo", "starts_with").should == {:field=>/^foo/i}
692
+ @abstract_model.send(:build_statement, :field, :string, "foo", "ends_with").should == {:field=>/foo$/i}
693
693
  @abstract_model.send(:build_statement, :field, :string, "foo", "is").should == {:field=>'foo'}
694
694
  end
695
695
 
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe RailsAdmin::Config::Actions::Base do
4
+
5
+ describe "#visible?" do
6
+ it 'should exclude models not referenced in the only array' do
7
+ RailsAdmin.config do |config|
8
+ config.actions do
9
+ index do
10
+ only [Player, Cms::BasicPage]
11
+ end
12
+ end
13
+ end
14
+ RailsAdmin::Config::Actions.find(:index, {:controller => double(:authorized? => true), :abstract_model => RailsAdmin::AbstractModel.new(Player)}).should be_visible
15
+ RailsAdmin::Config::Actions.find(:index, {:controller => double(:authorized? => true), :abstract_model => RailsAdmin::AbstractModel.new(Team)}).should be_nil
16
+ RailsAdmin::Config::Actions.find(:index, {:controller => double(:authorized? => true), :abstract_model => RailsAdmin::AbstractModel.new(Cms::BasicPage)}).should be_visible
17
+ end
18
+
19
+ it 'should exclude models referenced in the except array' do
20
+ RailsAdmin.config do |config|
21
+ config.actions do
22
+ index do
23
+ except [Player, Cms::BasicPage]
24
+ end
25
+ end
26
+ end
27
+ RailsAdmin::Config::Actions.find(:index, {:controller => double(:authorized? => true), :abstract_model => RailsAdmin::AbstractModel.new(Player)}).should be_nil
28
+ RailsAdmin::Config::Actions.find(:index, {:controller => double(:authorized? => true), :abstract_model => RailsAdmin::AbstractModel.new(Team)}).should be_visible
29
+ RailsAdmin::Config::Actions.find(:index, {:controller => double(:authorized? => true), :abstract_model => RailsAdmin::AbstractModel.new(Cms::BasicPage)}).should be_nil
30
+ end
31
+ end
32
+ end
@@ -2,6 +2,17 @@ require 'spec_helper'
2
2
 
3
3
  describe RailsAdmin::Config::Fields::Base do
4
4
 
5
+ describe "#required" do
6
+ it "should read the :on => :create/:update validate option" do
7
+ RailsAdmin.config Ball do
8
+ field 'color'
9
+ end
10
+
11
+ RailsAdmin.config('Ball').fields.first.with(:object => Ball.new).should be_required
12
+ RailsAdmin.config('Ball').fields.first.with(:object => FactoryGirl.create(:ball)).should_not be_required
13
+ end
14
+ end
15
+
5
16
  describe "#name" do
6
17
  it 'should be normalized to Symbol' do
7
18
  RailsAdmin.config Team do
@@ -92,6 +103,21 @@ describe RailsAdmin::Config::Fields::Base do
92
103
  end
93
104
  end
94
105
 
106
+ describe "#hint" do
107
+ it "should be user customizable" do
108
+ RailsAdmin.config Team do
109
+ list do
110
+ field :division do
111
+ hint "Great Division"
112
+ end
113
+ field :name
114
+ end
115
+ end
116
+ RailsAdmin.config('Team').list.fields.find{|f| f.name == :division}.hint.should == "Great Division" # custom
117
+ RailsAdmin.config('Team').list.fields.find{|f| f.name == :name}.hint.should == "" # default
118
+ end
119
+ end
120
+
95
121
  describe "#css_class" do
96
122
  it "should have a default and be user customizable" do
97
123
  RailsAdmin.config Team do
@@ -345,4 +371,34 @@ describe RailsAdmin::Config::Fields::Base do
345
371
  RailsAdmin.config(FieldVisibilityTest).show.fields.select{|f| f.visible? }.map(&:name).should =~ [:name]
346
372
  end
347
373
  end
374
+
375
+ describe '#editable?' do
376
+ before do
377
+ Moped.logger.stub!(:debug) if defined?(Moped)
378
+ end
379
+
380
+ it 'should yell for non attr_accessible fields if config.yell_for_non_accessible_fields is true' do
381
+ RailsAdmin.config do |config|
382
+ config.yell_for_non_accessible_fields = true
383
+ config.model FieldTest do
384
+ field :protected_field
385
+ end
386
+ end
387
+ Rails.logger.should_receive(:debug).with {|msg| msg =~ /Please add 'attr_accessible :protected_field'/ }
388
+ editable = RailsAdmin.config(FieldTest).field(:protected_field).with(:object => FactoryGirl.create(:field_test), :view => double(:controller => double(:_attr_accessible_role => :default))).editable?
389
+ editable.should == false
390
+ end
391
+
392
+ it 'should not yell for non attr_accessible fields if config.yell_for_non_accessible_fields is false' do
393
+ RailsAdmin.config do |config|
394
+ config.yell_for_non_accessible_fields = false
395
+ config.model FieldTest do
396
+ field :protected_field
397
+ end
398
+ end
399
+ Rails.logger.should_not_receive(:debug).with {|msg| msg =~ /Please add 'attr_accessible :protected_field'/ }
400
+ editable = RailsAdmin.config(FieldTest).field(:protected_field).with(:object => FactoryGirl.create(:field_test), :view => double(:controller => double(:_attr_accessible_role => :default))).editable?
401
+ editable.should == false
402
+ end
403
+ end
348
404
  end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe RailsAdmin::Config::Fields::Types::Date do
4
+ describe "#parse_input" do
5
+ before :each do
6
+ @object = FactoryGirl.create(:field_test)
7
+ @time = ::Time.now.getutc
8
+ @field = RailsAdmin.config(FieldTest).fields.find{ |f| f.name == :date_field }
9
+ end
10
+
11
+ after :each do
12
+ Time.zone = 'UTC'
13
+ end
14
+
15
+ it "should read %B %d, %Y by default" do
16
+ @object.date_field = @field.parse_input({ :date_field => @time.strftime("%B %d, %Y") })
17
+ @object.date_field.should eql(::Date.parse(@time.to_s))
18
+ end
19
+
20
+ it "should cover a timezone lag even if in UTC+n:00 timezone." do
21
+ Time.zone = 'Tokyo' # +09:00
22
+
23
+ @object.date_field = @field.parse_input({ :date_field => @time.strftime("%B %d, %Y") })
24
+ @object.date_field.should eql(::Date.parse(@time.to_s))
25
+ end
26
+
27
+ it "should have a simple customization option" do
28
+ RailsAdmin.config FieldTest do
29
+ edit do
30
+ field :date_field do
31
+ date_format :default
32
+ end
33
+ end
34
+ end
35
+
36
+ @object.date_field = @field.parse_input({ :date_field => @time.strftime("%Y-%m-%d") })
37
+ @object.date_field.should eql(::Date.parse(@time.to_s))
38
+ end
39
+
40
+ it "should have a customization option" do
41
+ RailsAdmin.config FieldTest do
42
+ edit do
43
+ field :date_field do
44
+ strftime_format "%Y/%m/%d"
45
+ end
46
+ end
47
+ end
48
+
49
+ @object.date_field = @field.parse_input({ :date_field => @time.strftime("%Y/%m/%d") })
50
+ @object.date_field.should eql(::Date.parse(@time.to_s))
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe RailsAdmin::Config::Fields::Types::Datetime do
4
+ describe "#parse_input" do
5
+ before :each do
6
+ @field = RailsAdmin.config(FieldTest).fields.find{ |f| f.name == :datetime_field }
7
+ @object = FactoryGirl.create(:field_test)
8
+ @time = ::Time.now.getutc
9
+ end
10
+
11
+ after :each do
12
+ Time.zone = 'UTC'
13
+ end
14
+
15
+ it "should be able to read %B %d, %Y %H:%M" do
16
+ @object = FactoryGirl.create(:field_test)
17
+ @object.datetime_field = @field.parse_input({ :datetime_field => @time.strftime("%B %d, %Y %H:%M") })
18
+ @object.datetime_field.strftime("%Y-%m-%d %H:%M").should eql(@time.strftime("%Y-%m-%d %H:%M"))
19
+ end
20
+
21
+ it "should be able to read %a, %d %b %Y %H:%M:%S" do
22
+ RailsAdmin.config FieldTest do
23
+ edit do
24
+ field :datetime_field do
25
+ date_format :default
26
+ end
27
+ end
28
+ end
29
+ @object = FactoryGirl.create(:field_test)
30
+ @object.datetime_field = @field.parse_input({ :datetime_field => @time.strftime("%a, %d %b %Y %H:%M:%S") })
31
+ @object.datetime_field.to_s(:rfc822).should eql(@time.to_s(:rfc822))
32
+ end
33
+
34
+ it "should have a customization option" do
35
+ RailsAdmin.config FieldTest do
36
+ list do
37
+ field :datetime_field do
38
+ strftime_format "%Y-%m-%d %H:%M:%S"
39
+ end
40
+ end
41
+ end
42
+ @object = FactoryGirl.create(:field_test)
43
+ @object.datetime_field = @field.parse_input({ :datetime_field => @time.strftime("%Y-%m-%d %H:%M:%S") })
44
+ @object.datetime_field.to_s(:rfc822).should eql(@time.to_s(:rfc822))
45
+ end
46
+
47
+ it "should do round-trip saving properly with non-UTC timezones" do
48
+ Time.zone = 'Vienna'
49
+ @object = FactoryGirl.create(:field_test)
50
+ @object.datetime_field = @field.parse_input({ :datetime_field => '2012-09-01 12:00:00 +02:00' })
51
+ @object.datetime_field.should == Time.zone.parse('2012-09-01 12:00:00 +02:00')
52
+ end
53
+ end
54
+ end
55
+