class StrongResources::StrongResource
Attributes
attributes[RW]
customized_actions[R]
destroy[RW]
disassociate[RW]
except[RW]
jsonapi_type[R]
name[R]
only[RW]
relation_type[RW]
relations[RW]
Public Class Methods
from(name, opts = {}, &blk)
click to toggle source
# File lib/strong_resources/strong_resource.rb, line 12 def self.from(name, opts = {}, &blk) config = StrongResources.find(name) resource = new(name) resource.instance_eval(&config[:base]) resource.instance_eval(&blk) if blk resource end
new(name)
click to toggle source
# File lib/strong_resources/strong_resource.rb, line 20 def initialize(name) @name = name @jsonapi_type = name.to_s.pluralize @customized_actions = {} self.attributes = {} self.relations = {} end
Public Instance Methods
attribute(name, type, opts = {})
click to toggle source
# File lib/strong_resources/strong_resource.rb, line 44 def attribute(name, type, opts = {}) self.attributes[name] = { type: type, if: opts[:if] } end
belongs_to(name, resource: nil, only: nil, except: nil, disassociate: false, destroy: false, &blk)
click to toggle source
# File lib/strong_resources/strong_resource.rb, line 78 def belongs_to(name, resource: nil, only: nil, except: nil, disassociate: false, destroy: false, &blk) resource_name = resource || name related_resource = self.class.from(resource_name, &blk) add_relation(name, related_resource, only, except, disassociate, destroy) end
destroy?()
click to toggle source
# File lib/strong_resources/strong_resource.rb, line 40 def destroy? !!@destroy end
disassociate?()
click to toggle source
# File lib/strong_resources/strong_resource.rb, line 36 def disassociate? !!@disassociate end
has_many(name, resource: nil, only: nil, except: nil, disassociate: false, destroy: false, &blk)
click to toggle source
# File lib/strong_resources/strong_resource.rb, line 64 def has_many(name, resource: nil, only: nil, except: nil, disassociate: false, destroy: false, &blk) resource_name = resource || name.to_s.singularize.to_sym related_resource = self.class.from(resource_name) related_resource.instance_eval(&blk) if block_given? related_resource.relation_type = :has_many add_relation(name, related_resource, only, except, disassociate, destroy) end
has_many?()
click to toggle source
# File lib/strong_resources/strong_resource.rb, line 60 def has_many? relation_type == :has_many end
has_one(*args, &blk)
click to toggle source
# File lib/strong_resources/strong_resource.rb, line 90 def has_one(*args, &blk) belongs_to(*args, &blk) end
on(action_name, &blk)
click to toggle source
# File lib/strong_resources/strong_resource.rb, line 56 def on(action_name, &blk) self.customized_actions[action_name] = blk end
permits(controller)
click to toggle source
# File lib/strong_resources/strong_resource.rb, line 94 def permits(controller) base_permits(self, controller).tap do |permits| permits[:relationships] ||= {} self.relations.each_pair do |relation_name, opts| related_resource = opts[:resource] related = related_permits(related_resource, controller) permits[:relationships][relation_name] = related permits end end end
remove_attribute(name)
click to toggle source
# File lib/strong_resources/strong_resource.rb, line 48 def remove_attribute(name) self.attributes.delete(name) end
remove_relationship(name)
click to toggle source
# File lib/strong_resources/strong_resource.rb, line 52 def remove_relationship(name) self.relations.delete(name) end
Private Instance Methods
add_relation(name, resource, only, except, disassociate, destroy)
click to toggle source
# File lib/strong_resources/strong_resource.rb, line 139 def add_relation(name, resource, only, except, disassociate, destroy) resource.only = only resource.except = except resource.disassociate = disassociate resource.destroy = destroy self.relations[name] = { resource: resource } end
base_permits(resource, controller)
click to toggle source
# File lib/strong_resources/strong_resource.rb, line 109 def base_permits(resource, controller) permits = {} permits.merge!(id: StrongResources.type_for_param(:id)) resource.attributes.each_pair do |name, opts| next if (opts[:if] and opts[:if].call(controller) == false) permits.merge!(name => StrongResources.type_for_param(opts[:type])) end permits = permits.slice(*resource.only) if resource.only permits = permits.except(*resource.except) if resource.except permits end
merge_disassociate_destroy(related_resource, permits)
click to toggle source
# File lib/strong_resources/strong_resource.rb, line 129 def merge_disassociate_destroy(related_resource, permits) if related_resource.disassociate? permits.merge!(_disassociate: true) end if related_resource.destroy? permits.merge!(_destroy: true) end end