Sha256: 10d1275729260bfef1a9a87ee73c06074e4af61b856d5b0bc27741bfce1ae6e5

Contents?: true

Size: 1.32 KB

Versions: 5

Compression:

Stored size: 1.32 KB

Contents

module EnumerateBy
  module Extensions #:nodoc:
    module XmlSerializer #:nodoc:
      # Adds support for xml serialization of enumeration associations as
      # attributes
      module Attribute
        def self.included(base) #:nodoc:
          base.class_eval do
            alias_method_chain :compute_type, :enumerations
            alias_method_chain :compute_value, :enumerations
          end
        end
        
        protected
          # Enumerator types are always strings
          def compute_type_with_enumerations
            enumeration_association? ? :string : compute_type_without_enumerations
          end
          
          # Gets the real value representing the enumerator
          def compute_value_with_enumerations
            if enumeration_association?
              association = @record.send(name)
              association.enumerator if association
            else
              compute_value_without_enumerations
            end
          end
          
          # Is this attribute defined by an enumeration association?
          def enumeration_association?
            @enumeration_association ||= @record.enumeration_associations.value?(name)
          end
      end
    end
  end
end

ActiveRecord::XmlSerializer::Attribute.class_eval do
  include EnumerateBy::Extensions::XmlSerializer::Attribute
end

Version data entries

5 entries across 5 versions & 3 rubygems

Version Path
mschuerig-enumerate_by-0.4.2 lib/enumerate_by/extensions/xml_serializer.rb
pluginaweek-enumerate_by-0.4.2 lib/enumerate_by/extensions/xml_serializer.rb
enumerate_by-0.4.0 lib/enumerate_by/extensions/xml_serializer.rb
enumerate_by-0.4.1 lib/enumerate_by/extensions/xml_serializer.rb
enumerate_by-0.4.2 lib/enumerate_by/extensions/xml_serializer.rb