class Smooth::Serializer

Public Class Methods

attribute(attr, options = {}) click to toggle source
Calls superclass method
# File lib/smooth/serializer.rb, line 137
def self.attribute(attr, options = {})
  documented = inline_description

  if documented
    attribute_descriptions[attr.to_sym] = documented
  end

  super
end
belongs_to_resource(resource) click to toggle source
# File lib/smooth/serializer.rb, line 113
def self.belongs_to_resource(resource)
  self.parent_resource = resource
end
computed(*args, &block) click to toggle source
# File lib/smooth/serializer.rb, line 147
def self.computed(*args, &block)
  property_name = args.first
  send(:define_method, property_name, &block)
  send(:attribute, *args)
end
configure(options, resource = nil) click to toggle source
# File lib/smooth/serializer.rb, line 63
def self.configure(options, resource = nil)
  resource ||= Smooth.current_resource
  klass = define_or_open(options, resource)

  Array(options.blocks).each do |blk|
    klass.class_eval(&blk)
  end

  klass
end
define_or_open(options, resource) click to toggle source
# File lib/smooth/serializer.rb, line 74
def self.define_or_open(options, resource)
  resource_name = resource.name
  base          = Smooth.serializer

  name = options.name
  name = nil if name == 'Default'

  klass = "#{ resource.model_class }#{ name }".singularize + 'Serializer'

  klass = klass.gsub(/\s+/, '')

  if serializer_klass = Object.const_get(klass) rescue nil
    return serializer_klass
  end

  parent_klass = Class.new(base)

  parent_klass.belongs_to_resource(resource)

  begin
    Object.const_set(klass, parent_klass)
  rescue => ex
    puts ex.message
    puts "Error setting #{ klass } #{ base }. klass is a #{ klass.class }"
  end

  parent_klass
end
documentation() click to toggle source
# File lib/smooth/serializer.rb, line 129
def self.documentation
  attribute_descriptions.merge(relationship_descriptions).to_mash
end
documentation_for_association(association) click to toggle source
# File lib/smooth/serializer.rb, line 125
def self.documentation_for_association(association)
  relationship_descriptions[association.to_sym]
end
documentation_for_attribute(attribute) click to toggle source
# File lib/smooth/serializer.rb, line 121
def self.documentation_for_attribute(attribute)
  attribute_descriptions[attribute.to_sym]
end
has_many(attr, options = {}) click to toggle source
Calls superclass method
# File lib/smooth/serializer.rb, line 163
def self.has_many(attr, options = {})
  documented = inline_description

  if documented
    relationship_descriptions[attr.to_sym] = documented
  end

  super
end
has_one(attr, options = {}) click to toggle source
Calls superclass method
# File lib/smooth/serializer.rb, line 153
def self.has_one(attr, options = {})
  documented = inline_description

  if documented
    relationship_descriptions[attr.to_sym] = documented
  end

  super
end
interface_documentation() click to toggle source
# File lib/smooth/serializer.rb, line 133
def self.interface_documentation
  documentation
end
method_added(method_name) click to toggle source
# File lib/smooth/serializer.rb, line 49
def self.method_added(method_name)
  if documented = inline_description
    attribute_descriptions[method_name.to_sym] = documented
  end
end
parent_api() click to toggle source
# File lib/smooth/serializer.rb, line 117
def self.parent_api
  parent_resource.api
end
return_ids_for_relationships!() click to toggle source
# File lib/smooth/serializer.rb, line 173
def self.return_ids_for_relationships!
  @returns_ids_for_relationships = true
  embed :ids
end
returns_ids_for_relationships?() click to toggle source
# File lib/smooth/serializer.rb, line 178
def self.returns_ids_for_relationships?
  @returns_ids_for_relationships == true
end
route_variables() click to toggle source
# File lib/smooth/serializer.rb, line 45
def self.route_variables
  @resource_route_variables ||= parent_resource.router.route_patterns_table.map { |p| _, h = p; h[:variables] }.flatten.compact.uniq
end
schema_associations() click to toggle source
# File lib/smooth/serializer.rb, line 59
def self.schema_associations
  schema[:associations]
end
schema_attributes() click to toggle source
# File lib/smooth/serializer.rb, line 55
def self.schema_attributes
  schema[:attributes]
end

Public Instance Methods

expand_routes(*slice) click to toggle source

WIP Need to determine how to access the serialized version as it exists in the context of the serializer instance

# File lib/smooth/serializer.rb, line 15
def expand_routes(*slice)
  expanded = parent_resource.expand_routes(route_variables)

  unless slice.empty?
    expanded = expanded.send(:slice, *slice)
  end

  expanded.transform_keys do |key|
    "#{ key }_url"
  end
end
parent_api() click to toggle source
# File lib/smooth/serializer.rb, line 109
def parent_api
  self.class.parent_api
end
parent_resource() click to toggle source
# File lib/smooth/serializer.rb, line 105
def parent_resource
  self.class.parent_resource
end
route_variables() click to toggle source
# File lib/smooth/serializer.rb, line 27
def route_variables
  serializer = self

  self.class.route_variables.reduce({}) do |memo, var|
    value = case
            when serializer.respond_to?(var)
              serializer.send(var)
            when serializer.object.respond_to?(var)
              serializer.object.send(var)
            else
              serializer.read_attribute_for_serialization(var)
            end

    memo[var] = value
    memo
  end
end