Sha256: 913fbc991803d07e1ffdb35336397f31cf1a0b16bcd1a9322be2117a74221fe7

Contents?: true

Size: 1.32 KB

Versions: 4

Compression:

Stored size: 1.32 KB

Contents

module ActsAsUser
  module UserDelegate
    def self.included(base)
      base.has_one :user, :as => :userable, :dependent => :destroy, :autosave => true
      base.validate :user_must_be_valid
      base.alias_method_chain :user, :autobuild
      base.extend ClassMethods
      base.define_user_accessors
    end

    def user_with_autobuild
      user_without_autobuild || build_user
    end

    def method_missing(meth, *args, &blk)
      user.send(meth, *args, &blk)
    rescue NoMethodError
      super
    end


    protected

    def user_must_be_valid
      unless user.valid?
        user.errors.each do |attr, message|
          errors.add(attr, message)
        end
      end
    end

    module ClassMethods

      def define_user_accessors
        #We check the user columns to declare them as attributes to delegate
        all_attributes = User.columns.map(&:name)

        attributes_to_delegate = all_attributes - ActsAsUser.ignored_attributes

        #User method delegation
        attributes_to_delegate.each do |attrib|
          class_eval <<-RUBY
          def #{attrib}
            user.#{attrib}
          end

          def #{attrib}=(value)
            self.user.#{attrib} = value
          end

          def #{attrib}?
            self.user.#{attrib}?
          end
            RUBY
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
acts_as_user-1.2.4 lib/acts_as_user/user_delegate.rb
acts_as_user-1.2.3 lib/acts_as_user/user_delegate.rb
acts_as_user-1.2.2 lib/acts_as_user/user_delegate.rb
acts_as_user-1.2.1 lib/acts_as_user/user_delegate.rb