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