Sha256: 3b6b33fc21ee228ca7555a2ef7577f723c07c117996af8f8e9a8238bb8e17572

Contents?: true

Size: 1.24 KB

Versions: 2

Compression:

Stored size: 1.24 KB

Contents

module Sequel::Plugins::LuxBeforeSave
  module InstanceMethods
    def validate
      for field in columns
        schema = db_schema[field]

        # alert, no trim on to big field length
        if schema[:max_length] && self[field] && self[field].length > schema[:max_length]
          msg = 'Field "%s" max length is %s, got %d' % [field, schema[:max_length], self[field].length]
          errors.add(field, msg)
        end
      end
      super
    end

    def before_save
      # basic security
      self[:created_at] = Time.now.utc if ! self[:id] && respond_to?(:created_at)
      self[:updated_at] = Time.now.utc if respond_to?(:updated_at)

      if respond_to?(:created_by) || respond_to?(:updated_by)
        errors.add(:base, 'You have to be registered to save data') unless User.current
      end

      for f in [:created_by, :updated_by]
        if respond_to?(f) && !self[:id] && !self[f]
          raise UnauthorizedError, "Current user not defined, can't set :#{f} on #{self.class}" unless User.current
          self[f] = User.current.id
        end
      end

      Lux.cache.delete(cache_key)
      super
    end


    def before_destroy
      Lux.cache.delete(cache_key)
      super
    end
  end
end

Sequel::Model.plugin :lux_before_save

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
lux-fw-0.1.35 ./lib/plugins/db_helpers/before_save.rb
lux-fw-0.1.17 ./lib/plugins/db_helpers/before_save.rb