Sha256: b72858a4a3d11519c2dab38ef2463b220fbe2bbb1af41d713a8ee4fd5a53829e
Contents?: true
Size: 1.55 KB
Versions: 1
Compression:
Stored size: 1.55 KB
Contents
require "sequel/enhancements" require "set" require "securerandom" module Sequel module Plugins module Uuid class ExistingModelPrefixError < Sequel::Error; end def self.configure(model, columns, opts={}) columns = Array(columns) set_model_prefix(opts[:prefix], model) if opts[:prefix] model.instance_eval do @uuid_prefix = opts[:prefix] @uuid_fields ||= Set.new columns.each do |c| @uuid_fields << c end end end def self.model_for_prefix(prefix) Hash(@model_prefixes)[prefix] end def self.set_model_prefix(prefix, model) existing = model_for_prefix prefix if existing raise ExistingModelPrefixError.new("The prefix '#{prefix}' is already in use by #{existing}") end @model_prefixes ||= {} @model_prefixes[prefix] = model end module ClassMethods attr_reader :uuid_fields attr_reader :uuid_prefix end module InstanceMethods def _before_validation set_uuids if new? super end def set_uuids model.uuid_fields.each do |field| meth = :"#{field}=" send(meth, generate_uuid) if respond_to?(meth) end end def generate_uuid orig = SecureRandom.uuid if model.uuid_prefix model.uuid_prefix.chars.each_with_index do |c, i| orig[i] = c end end orig end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
sequel-enhancements-0.3.0 | lib/sequel/plugins/uuid.rb |