Class: Nested::One

Inherits:
Resource show all
Includes:
WithMany
Defined in:
lib/nested/one.rb

Constant Summary collapse

MODEL_BLOCK =
Proc.new do
  if @__resource.parent
    parent_model = instance_variable_get("@#{@__resource.parent.instance_variable_name}")

    if parent_model.respond_to?(:where)
      parent_model
        .where(id: params[:"#{@__resource.parent.name.to_s.singularize.to_sym}_id"])
        .first
    elsif parent_model.respond_to?(:detect)
      res = parent_model.detect do |r|
        (r.is_a?(Hash) ? HashWithIndifferentAccess.new(r)[:id] : r.id).to_s == params[:"#{@__resource.parent.name.to_s.singularize.to_sym}_id"]
      end
      res.is_a?(Hash) ? HashWithIndifferentAccess.new(res) : res
    else
      nil
    end
  else
    nil
  end
end

Instance Attribute Summary

Attributes inherited from Resource

#actions, #after_blocks, #before_blocks, #model_block, #name, #parent, #resources, #serializer, #sinatra

Instance Method Summary collapse

Methods included from WithMany

#many, #many_if

Methods inherited from Resource

#after, #before, #behave, #child_resource, #create_sinatra_route, #initialize, #parents, #route, #route_replace, #self_and_parents, #serialize, #serialize_exclude_if, #serialize_include_if, #sinatra_errors_to_hash, #sinatra_exec_delete_block, #sinatra_exec_get_block, #sinatra_exec_post_block, #sinatra_exec_put_block, #sinatra_init, #sinatra_init_after, #sinatra_init_before, #sinatra_init_data, #sinatra_init_data_extract_body, #sinatra_init_set_model, #sinatra_init_set_resource, #sinatra_response, #sinatra_response_create_data, #sinatra_response_create_error, #sinatra_response_create_redirect, #sinatra_response_type, #sinatra_set_instance_variable

Methods included from WithSingleton

#singleton, #singleton_if

Constructor Details

This class inherits a constructor from Nested::Resource

Instance Method Details

#default_model_blockObject



31
32
33
# File 'lib/nested/one.rb', line 31

def default_model_block
  MODEL_BLOCK
end

#initialize_serializer_factoryObject



27
28
29
# File 'lib/nested/one.rb', line 27

def initialize_serializer_factory
  Serializer.new(parent.serializer.includes)
end

#instance_variable_nameObject



39
40
41
# File 'lib/nested/one.rb', line 39

def instance_variable_name
  parent.name.to_s.singularize.to_sym
end

#to_route_partObject



35
36
37
# File 'lib/nested/one.rb', line 35

def to_route_part
  "/:#{@name}_id"
end