Sha256: 90fb6184a89002552f7153d534ab8ad4e75c99ea3bf432c43c2289c071f6ae3a
Contents?: true
Size: 1.73 KB
Versions: 3
Compression:
Stored size: 1.73 KB
Contents
require 'sequel/model' module Pathway module Plugins module SequelModels module DSLMethods def transaction(&bl) sequence(-> seq, _ { db.transaction(savepoint: true) do raise Sequel::Rollback if seq.call.failure? end }, &bl) end def after_commit(&bl) sequence(-> seq, _ { db.after_commit do seq.call end }, &bl) end end module InstanceMethods module Finder def self.[](model_class, by: :id) Module.new do include InstanceMethods define_singleton_method :included do |klass| klass.class_eval do result_at Inflecto.underscore(model_class.name.split('::').last).to_sym define_method(:model_class) { model_class } define_method(:field) { by } define_method(:db) { model_class.db } end end end end end extend Forwardable delegate %i[model_class db field] => 'self.class' def fetch_model(state, from: model_class, key: field, column: field, overwrite: false) if state[result_key].nil? || overwrite find_model_with(state[:input][key], from, column) .then { |model| state.update(result_key => model) } else state end end def build_model_with(params) wrap(model_class.new(params)) end def find_model_with(key, dataset = model_class, column = field) wrap_if_present(dataset.first(column => key)) end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
pathway-0.0.15 | lib/pathway/plugins/sequel_models.rb |
pathway-0.0.14 | lib/pathway/plugins/sequel_models.rb |
pathway-0.0.13 | lib/pathway/plugins/sequel_models.rb |