module LHS::Record::FindBy::ClassMethods

Public Instance Methods

find_by(params = {}, options = nil) click to toggle source

Fetch some record by parameters

# File lib/lhs/concerns/record/find_by.rb, line 12
def find_by(params = {}, options = nil)
  _find_by(params, trace!(options))
rescue LHC::NotFound
  nil
end
find_by!(params = {}, options = nil) click to toggle source

Raise if no record was found

# File lib/lhs/concerns/record/find_by.rb, line 19
def find_by!(params = {}, options = nil)
  _find_by(params, trace!(options))
end

Private Instance Methods

_find_by(params, options = {}) click to toggle source
# File lib/lhs/concerns/record/find_by.rb, line 25
def _find_by(params, options = {})
  raise(LHS::Unprocessable.new, 'Cannot find Record without an ID') if params.any? && params.all? { |_, value| value.blank? }
  options ||= {}
  params = params.dup.merge(limit_key(:parameter) => 1).merge(options.fetch(:params, {}))
  data = request(options.merge(params: params))
  if data && data._proxy.is_a?(LHS::Collection)
    data.first || raise(LHC::NotFound.new('No item was found.', data._request.response))
  elsif data
    data._record.new(data.unwrap_nested_item)
  end
end