Sha256: 8e39ba2f68201b45d6cc809238174dc75cd1e96040c58ed6f68be56899262766
Contents?: true
Size: 1.3 KB
Versions: 3
Compression:
Stored size: 1.3 KB
Contents
# Allows a resource to be found by a string-based alternative key # # For example # # module MyClient # module MyResource < Frenetic::Resource # extend Frenetic::Behaviors::AlternateStringIdentifier # # def self.find(id) # super(finder_params(id, :username)) # end # end # end # # Given an Api Schema such as: # # { # _links: { # my_resource: [{ # { href: '/api/my_resource/{id}', rel: 'id' }, # { href: '/api/my_resource/{username}?specific_to=username', rel: 'username' }, # }] # } # } # # MyClient::MyResource.find will choose the alternate link relation based on # the string-based ID passed in. # # MyClient::MyResource.find(1) # # Executes /api/my_resource/1 # # MyClient::MyResource.find('100') # # Executes /api/my_resource/100 # # MyClient::MyResource.find('jdoe') # Executes /api/my_resource/jdoe?specific_to=username # class Frenetic module Behaviors module AlternateStringIdentifier def finder_params(unique_id, alternate_key) return unique_id if unique_id.is_a? Hash params = {} return params if unique_id.blank? key = if unique_id.to_i.to_s == unique_id.to_s :id elsif !unique_id.nil? alternate_key end params[key] = unique_id params end end end end
Version data entries
3 entries across 3 versions & 1 rubygems