obitum-rails_admin 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -79,7 +79,7 @@ module RailsAdmin
79
79
  o = a.send(:eval, 'bindings[:object]')
80
80
  content_tag(:li, :class => "#{"active" if current_action?(a, am, o)}") do
81
81
  if a.http_methods.include?(:get)
82
- link_to wording_for(:breadcrumb, a, am, o), { :action => a.action_name, :controller => 'rails_admin/main', :model_name => am.try(:to_param), :id => o.try(:id) }
82
+ link_to wording_for(:breadcrumb, a, am, o), { :action => a.action_name, :controller => 'rails_admin/main', :model_name => am.try(:to_param), :id => (o.try(:persisted?) && o.try(:id) || nil) }
83
83
  else
84
84
  content_tag(:span, wording_for(:breadcrumb, a, am, o))
85
85
  end
@@ -95,7 +95,7 @@ module RailsAdmin
95
95
  wording = wording_for(:menu, action)
96
96
  %{
97
97
  <li data-original-title="#{wording}" rel="#{'tooltip' if only_icon}" class="icon #{action.key}_#{parent}_link #{'active' if current_action?(action)}">
98
- <a href="#{url_for({ :action => action.action_name, :controller => 'rails_admin/main', :model_name => abstract_model.try(:to_param), :id => object.try(:id) })}">
98
+ <a href="#{url_for({ :action => action.action_name, :controller => 'rails_admin/main', :model_name => abstract_model.try(:to_param), :id => (object.try(:persisted?) && object.try(:id) || nil) })}">
99
99
  <i class="#{action.link_icon}"></i>
100
100
  <span#{only_icon ? " style='display:none'" : ""}>#{wording}</span>
101
101
  </a>
@@ -32,7 +32,7 @@
32
32
  = value
33
33
  = breadcrumb
34
34
  %ul.nav.nav-tabs
35
- = menu_for((@abstract_model ? (@object.try(:id) ? :member : :collection) : :root), @abstract_model, @object)
35
+ = menu_for((@abstract_model ? (@object.try(:persisted?) ? :member : :collection) : :root), @abstract_model, @object)
36
36
  = content_for :contextual_tabs
37
37
  = yield
38
38
  %footer
@@ -2,13 +2,15 @@
2
2
  .btn-group
3
3
  %a.btn.btn-info.toggler{:'data-toggle' => "button", :'data-target' => "#{form.jquery_namespace(field)} > .tab-content, #{form.jquery_namespace(field)} > .controls > .nav", :class => (field.active? ? 'active' : '')}
4
4
  %i.icon-white
5
- = form.link_to_add "<i class=\"icon-plus icon-white\"></i> #{wording_for(:link, :new, field.associated_model_config.abstract_model)}".html_safe, field.name, { :class => 'btn btn-info' }
5
+ - unless field.nested_form[:update_only]
6
+ = form.link_to_add "<i class=\"icon-plus icon-white\"></i> #{wording_for(:link, :new, field.associated_model_config.abstract_model)}".html_safe, field.name, { :class => 'btn btn-info' }
6
7
  = form.errors_for(field)
7
8
  = form.help_for(field)
8
9
  %ul.nav.nav-tabs{ :style => 'margin-top:5px' }
9
10
  .tab-content
10
11
  = form.fields_for field.name do |nested_form|
11
- = nested_form.link_to_remove '<span class="btn btn-small btn-danger"><i class="icon-trash icon-white"></i></span>'.html_safe
12
+ - if field.nested_form[:allow_destroy]
13
+ = nested_form.link_to_remove '<span class="btn btn-small btn-danger"><i class="icon-trash icon-white"></i></span>'.html_safe
12
14
  = nested_form.generate({:action => :nested, :model_config => field.associated_model_config, :nested_in => field.name })
13
15
 
14
16
  = form.javascript_for(field) do
@@ -1,4 +1,5 @@
1
1
  if defined?(::Mongoid::Document)
2
2
  require 'rails_admin/adapters/mongoid/extension'
3
3
  Mongoid::Document.send(:include, RailsAdmin::Adapters::Mongoid::Extension)
4
+ Mongoid::NestedAttributes::ClassMethods.send(:include, RailsAdmin::Adapters::Mongoid::NestedAttributesExtension)
4
5
  end
@@ -93,6 +93,14 @@ module RailsAdmin
93
93
  model.serialized_attributes.keys
94
94
  end
95
95
 
96
+ def encoding
97
+ Rails.configuration.database_configuration[Rails.env]['encoding']
98
+ end
99
+
100
+ def embedded?
101
+ false
102
+ end
103
+
96
104
  private
97
105
 
98
106
  def query_conditions(query, fields = config.list.fields.select(&:queryable?))
@@ -70,7 +70,7 @@ module RailsAdmin
70
70
  :polymorphic => association_polymorphic_lookup(association),
71
71
  :inverse_of => association_inverse_of_lookup(association),
72
72
  :read_only => nil,
73
- :nested_form => nil
73
+ :nested_form => association_nested_attributes_options_lookup(association)
74
74
  }
75
75
  end
76
76
  end
@@ -124,6 +124,14 @@ module RailsAdmin
124
124
  []
125
125
  end
126
126
 
127
+ def encoding
128
+ 'UTF-8'
129
+ end
130
+
131
+ def embedded?
132
+ @embedded ||= !!model.associations.values.find{|a| a.macro.to_sym == :embedded_in }
133
+ end
134
+
127
135
  private
128
136
 
129
137
  def query_conditions(query, fields = config.list.fields.select(&:queryable?))
@@ -256,6 +264,10 @@ module RailsAdmin
256
264
  end
257
265
  end
258
266
 
267
+ def association_nested_attributes_options_lookup(association)
268
+ model.nested_attributes_options.try { |o| o[association.name.to_sym] }
269
+ end
270
+
259
271
  def association_as_lookup(association)
260
272
  association.as.try :to_sym
261
273
  end
@@ -22,6 +22,27 @@ module RailsAdmin
22
22
  end
23
23
  end
24
24
  end
25
+
26
+ module NestedAttributesExtension
27
+ extend ActiveSupport::Concern
28
+
29
+ included do
30
+ attr_reader :nested_attributes_options
31
+ alias_method_chain :accepts_nested_attributes_for, :rails_admin
32
+ end
33
+
34
+ # Mongoid accepts_nested_attributes_for does not store options in accessible scope,
35
+ # so we intercept the call and store it in instance variable which can be accessed from outside
36
+ def accepts_nested_attributes_for_with_rails_admin(*args)
37
+ @nested_attributes_options = {}
38
+ options = args.extract_options!
39
+ args.each do |arg|
40
+ @nested_attributes_options[arg.to_sym] = options.reverse_merge(:allow_destroy=>false, :update_only=>false)
41
+ end
42
+ args << options
43
+ accepts_nested_attributes_for_without_rails_admin(*args)
44
+ end
45
+ end
25
46
  end
26
47
  end
27
48
  end
@@ -304,7 +304,7 @@ module RailsAdmin
304
304
  # @see RailsAdmin::Config::Hideable
305
305
 
306
306
  def visible_models(bindings)
307
- models.map{|m| m.with(bindings) }.select{|m| m.visible? && bindings[:controller].authorized?(:index, m.abstract_model)}.sort do |a, b|
307
+ models.map{|m| m.with(bindings) }.select{|m| m.visible? && bindings[:controller].authorized?(:index, m.abstract_model) && !m.abstract_model.embedded?}.sort do |a, b|
308
308
  (weight_order = a.weight <=> b.weight) == 0 ? a.label.downcase <=> b.label.downcase : weight_order
309
309
  end
310
310
  end
@@ -21,7 +21,7 @@ module RailsAdmin
21
21
  amc = polymorphic? ? RailsAdmin::Config.model(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 = v.authorized?(:show, am, associated)
24
+ can_see = v.authorized?(:show, am, associated) && !am.embedded?
25
25
  can_see = can_see && (show_action = RailsAdmin::Config::Actions.find(:show, { :controller => v.controller, :abstract_model => am, :object => associated }))
26
26
  can_see ? v.link_to(wording, v.url_for(:action => show_action.action_name, :model_name => am.to_param, :id => associated.id)) : wording
27
27
  end.to_sentence.html_safe
@@ -42,7 +42,7 @@ module RailsAdmin
42
42
  return '' if @objects.blank?
43
43
 
44
44
  # encoding shenanigans first
45
- @encoding_from = if [nil, '', 'utf8', 'utf-8', 'UTF8', 'UTF-8'].include?(encoding = Rails.configuration.database_configuration[Rails.env]['encoding'])
45
+ @encoding_from = if [nil, '', 'utf8', 'utf-8', 'UTF8', 'UTF-8'].include?(encoding = @abstract_model.encoding)
46
46
  'UTF-8'
47
47
  else
48
48
  encoding
@@ -2,5 +2,5 @@ module RailsAdmin
2
2
  # FIXME: this needs to be manually kept in sync with the gemspec's
3
3
  # s.version until http://jira.codehaus.org/browse/JRUBY-5319 is
4
4
  # fixed
5
- VERSION = "0.0.4"
5
+ VERSION = "0.0.5"
6
6
  end
@@ -6,4 +6,7 @@ class Article
6
6
 
7
7
  referenced_in :author
8
8
  references_and_referenced_in_many :tags
9
+
10
+ embeds_many :notes
11
+ accepts_nested_attributes_for :notes, :allow_destroy => true
9
12
  end
@@ -0,0 +1,7 @@
1
+ class Note
2
+ include Mongoid::Document
3
+
4
+ embedded_in :article
5
+ field :subject, :type => String
6
+ field :description, :type => String
7
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RailsAdmin Mongoid Export" do
4
+
5
+ subject { page }
6
+
7
+ before(:each) do
8
+ @authors = 3.times.map { FactoryGirl.create :author }
9
+ end
10
+
11
+ describe "POST /admin/author/export (prompt)" do
12
+
13
+ it "should allow to export to CSV" do
14
+ visit export_path(:model_name => 'author')
15
+ should have_content 'Select fields to export'
16
+ Rails.configuration.should_not_receive(:database_configuration)
17
+ click_button 'Export to csv'
18
+ should have_content "Name"
19
+ should have_content @authors[0].name
20
+ should have_content @authors[2].name
21
+ end
22
+ end
23
+ end
@@ -814,6 +814,16 @@ describe "RailsAdmin Config DSL Edit Section" do
814
814
  visit new_path(:model_name => "field_test")
815
815
  should have_no_selector('.add_nested_fields')
816
816
  end
817
+
818
+ it 'should work with Mongoid' do
819
+ RailsAdmin::Config.excluded_models = [RelTest]
820
+ @record = Article.create :notes => [{:subject => 'nested'}]
821
+ visit edit_path(:model_name => "article", :id => @record.id)
822
+ fill_in "article_notes_attributes_0_subject", :with => 'note subject 1 edited'
823
+ click_button "Save"
824
+ @record.reload
825
+ @record.notes[0].subject.should == 'note subject 1 edited'
826
+ end
817
827
  end
818
828
 
819
829
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: obitum-rails_admin
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 4
10
- version: 0.0.4
9
+ - 5
10
+ version: 0.0.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Erik Michaels-Ober
@@ -18,7 +18,7 @@ autorequire:
18
18
  bindir: bin
19
19
  cert_chain: []
20
20
 
21
- date: 2012-03-13 00:00:00 Z
21
+ date: 2012-03-17 00:00:00 Z
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
24
24
  name: bbenezech-nested_form
@@ -619,6 +619,7 @@ files:
619
619
  - spec/dummy_app/app/models/league.rb
620
620
  - spec/dummy_app/app/models/mongoid_field_test.rb
621
621
  - spec/dummy_app/app/models/nested_field_test.rb
622
+ - spec/dummy_app/app/models/note.rb
622
623
  - spec/dummy_app/app/models/player.rb
623
624
  - spec/dummy_app/app/models/rel_test.rb
624
625
  - spec/dummy_app/app/models/tag.rb
@@ -717,6 +718,7 @@ files:
717
718
  - spec/integration/basic/destroy/rails_admin_basic_destroy_spec.rb
718
719
  - spec/integration/basic/edit/rails_admin_basic_edit_spec.rb
719
720
  - spec/integration/basic/export/rails_admin_basic_export_spec.rb
721
+ - spec/integration/basic/export/rails_admin_mongoid_export_spec.rb
720
722
  - spec/integration/basic/list/rails_admin_basic_list_spec.rb
721
723
  - spec/integration/basic/new/rails_admin_basic_new_spec.rb
722
724
  - spec/integration/basic/new/rails_admin_namespaced_model_new_spec.rb
@@ -770,7 +772,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
770
772
  requirements: []
771
773
 
772
774
  rubyforge_project:
773
- rubygems_version: 1.8.17
775
+ rubygems_version: 1.8.16
774
776
  signing_key:
775
777
  specification_version: 3
776
778
  summary: Admin for Rails
@@ -803,6 +805,7 @@ test_files:
803
805
  - spec/dummy_app/app/models/league.rb
804
806
  - spec/dummy_app/app/models/mongoid_field_test.rb
805
807
  - spec/dummy_app/app/models/nested_field_test.rb
808
+ - spec/dummy_app/app/models/note.rb
806
809
  - spec/dummy_app/app/models/player.rb
807
810
  - spec/dummy_app/app/models/rel_test.rb
808
811
  - spec/dummy_app/app/models/tag.rb
@@ -901,6 +904,7 @@ test_files:
901
904
  - spec/integration/basic/destroy/rails_admin_basic_destroy_spec.rb
902
905
  - spec/integration/basic/edit/rails_admin_basic_edit_spec.rb
903
906
  - spec/integration/basic/export/rails_admin_basic_export_spec.rb
907
+ - spec/integration/basic/export/rails_admin_mongoid_export_spec.rb
904
908
  - spec/integration/basic/list/rails_admin_basic_list_spec.rb
905
909
  - spec/integration/basic/new/rails_admin_basic_new_spec.rb
906
910
  - spec/integration/basic/new/rails_admin_namespaced_model_new_spec.rb