module RailsAdmin
  module Adapters
    module Mongoid
      module Extension
        extend ActiveSupport::Concern

        included do
          def self.rails_admin(&block)
            RailsAdmin::Config.model(self, &block)
          end
        end

        def rails_admin_default_object_label_method
          self.new_record? ? "new #{self.class.to_s}" : "#{self.class.to_s} ##{self.id}"
        end

        def safe_send(value)
          if self.attributes.find{ |k,v| k.to_s == value.to_s }
            self.read_attribute(value)
          else
            self.send(value)
          end
        end
      end

      module NestedAttributesExtension
        extend ActiveSupport::Concern

        included do
          attr_reader :nested_attributes_options
          alias_method_chain :accepts_nested_attributes_for, :rails_admin
        end

        # Mongoid accepts_nested_attributes_for does not store options in accessible scope,
        # so we intercept the call and store it in instance variable which can be accessed from outside
        def accepts_nested_attributes_for_with_rails_admin(*args)
          @nested_attributes_options = {}
          options = args.extract_options!
          args.each do |arg|
            @nested_attributes_options[arg.to_sym] = options.reverse_merge(:allow_destroy=>false, :update_only=>false)
          end
          accepts_nested_attributes_for_without_rails_admin(*args, options)
        end
      end
    end
  end
end

module RailsAdmin
  module Adapters
    module Mongoid
      module Extension
        extend ActiveSupport::Concern

        included do
          def self.rails_admin(&block)
            RailsAdmin::Config.model(self, &block)
          end
        end

        def rails_admin_default_object_label_method
          self.new_record? ? "new #{self.class.to_s}" : "#{self.class.to_s} ##{self.id}"
        end

        def safe_send(value)
          if self.attributes.find{ |k,v| k.to_s == value.to_s }
            self.read_attribute(value)
          else
            self.send(value)
          end
        end
      end

      module NestedAttributesExtension
        extend ActiveSupport::Concern

        included do
          attr_reader :nested_attributes_options
          alias_method_chain :accepts_nested_attributes_for, :rails_admin
        end

        # Mongoid accepts_nested_attributes_for does not store options in accessible scope,
        # so we intercept the call and store it in instance variable which can be accessed from outside
        def accepts_nested_attributes_for_with_rails_admin(*args)
          @nested_attributes_options = {}
          options = args.extract_options!
          args.each do |arg|
            @nested_attributes_options[arg.to_sym] = options.reverse_merge(:allow_destroy=>false, :update_only=>false)
          end
          args << options
          accepts_nested_attributes_for_without_rails_admin(*args)
        end
      end
    end
  end
end

Fix syntax error in Ruby1.8
Fix syntax error in Ruby1.8
