Sha256: ece0a40340a16166e2b30e0bb216b84ae04193eea25da282d191ddda2b551b1e
Contents?: true
Size: 1.5 KB
Versions: 2
Compression:
Stored size: 1.5 KB
Contents
require "ensurance/version" require 'active_support' require 'ensurance/date_ensure' require 'ensurance/time_ensure' require 'ensurance/hash_ensure' module Ensurance extend ActiveSupport::Concern class_methods do def ensure_by(*args) @_additional_ensure_by = args @_ensure_by = nil end def ensure(thing = nil) return nil unless thing.present? found = nil if thing.is_a?(self) return thing elsif thing.is_a?(Array) raise ArgumentError.new("Cannot Ensure #{self.name} with an Array: #{thing.inspect}") elsif thing.is_a?(GlobalID) return GlobalID::Locator.locate(thing) elsif thing.is_a?(Hash) && thing['_aj_globalid'] && (found = GlobalID::Locator.locate(thing['_aj_globalid'])) return found elsif thing.is_a?(String) && found = GlobalID::Locator.locate(thing) return found end @_ensure_by ||= [@_additional_ensure_by || self.primary_key].flatten.compact.uniq @_ensure_by.each do |ensure_field| value = thing if thing.is_a?(Hash) value = thing.fetch(ensure_field.to_sym, nil) || thing.fetch(ensure_field.to_s, nil) end found = self.find_by(ensure_field => value) if value.present? && !value.is_a?(Hash) break if found.is_a?(self) end found end def ensure!(thing = nil) result = self.ensure(thing) raise ::ActiveRecord::RecordNotFound.new("#{self}[#{thing ? thing : 'nil'}]") unless result result end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ensurance-0.1.7 | lib/ensurance.rb |
ensurance-0.1.6 | lib/ensurance.rb |