Sha256: 132393e3540e017d6cf8441f6b4ae144cbd6a1129494426b8d625cc04c24ba6b

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

module RestPack::Serializer::Attributes
  extend ActiveSupport::Concern

  def default_href
    "#{RestPack::Serializer.config.href_prefix}/#{@model.class.table_name}/#{@model.id}.json"
  end

  module ClassMethods
    def serializable_attributes
      @serializable_attributes
    end

    def attributes(*attrs)
      attrs.each { |attr| attribute attr }
    end

    def attribute(name, options={})
      options[:key] ||= name.to_sym

      @serializable_attributes ||= {}
      @serializable_attributes[options[:key]] = name

      define_attribute_method name
      define_include_method name
    end

    def define_attribute_method(name)
      unless method_defined?(name)
        define_method name do
          value = self.default_href if name == :href
          value ||= @model.send(name)
          value = value.to_s if name == :id
          value
        end
      end
    end

    def define_include_method(name)
      method = "include_#{name}?".to_sym

      unless method_defined?(method)
        define_method method do
          @options[method].nil? || @options[method]
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
restpack_serializer-0.2.9 lib/restpack_serializer/serializable/attributes.rb