module Sinja::Sequel::Core

Public Class Methods

included(_) click to toggle source
# File lib/sinja/sequel/core.rb, line 48
def self.included(_)
  abort "You must `prepend' Sinja::Sequel::Core, not `include' it!"
end
prepended(base) click to toggle source
# File lib/sinja/sequel/core.rb, line 13
def self.prepended(base)
  base.sinja.configure do |c|
    c.conflict_exceptions << ::Sequel::ConstraintViolation
    c.not_found_exceptions << ::Sequel::NoMatchingRow
    c.validation_exceptions << ::Sequel::ValidationFailed
    c.validation_formatter = proc do |e|
      e.errors.keys.each do |column|
        if assocs = e.model.class.autoreloading_associations[column]
          # copy errors attached to a FK column to the relevant association
          assocs.each do |assoc|
            e.errors[assoc] = e.errors[column]
          end

          e.errors.delete(column)
        end
      end

      typeof = e.model.class.associations
        .map { |k| [k, :relationships] }.to_h
        .tap { |h| h.default = :attributes }

      e.errors.flat_map do |ee|
        next [[nil, ee]] if ee.is_a?(::Sequel::LiteralString)

        key, messages = *ee
        Array(messages).map do |message|
          [key, "#{key} #{message}", typeof[key]]
        end
      end
    end
  end

  base.prepend(Pagination) if ::Sequel::Model.db.dataset.respond_to?(:paginate)
end

Public Instance Methods

after_create() click to toggle source
# File lib/sinja/sequel/core.rb, line 68
def after_create
  resource.save(:validate=>false)
  resource.pk
end
serialize_linkage(*, **options) click to toggle source
Calls superclass method
# File lib/sinja/sequel/core.rb, line 73
def serialize_linkage(*, **options)
  options[:skip_collection_check] = true
  super
end
serialize_model(*, **options) click to toggle source
Calls superclass method
# File lib/sinja/sequel/core.rb, line 78
def serialize_model(*, **options)
  options[:skip_collection_check] = true
  super
end
sort(collection, fields) click to toggle source
# File lib/sinja/sequel/core.rb, line 58
def sort(collection, fields)
  collection.order(*fields.map { |k, v| ::Sequel.send(v, k) })
end
validate!() click to toggle source
# File lib/sinja/sequel/core.rb, line 64
def validate!
  raise ::Sequel::ValidationFailed, resource unless resource.valid?
end