Sha256: ca887ccd8c7f50d068c88864d03ae2465d7db4a24af5798d9453e212b59e53ed
Contents?: true
Size: 1.83 KB
Versions: 2
Compression:
Stored size: 1.83 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 ClassMethods attr_accessor :model_class, :search_field def model(model_class, search_by: :id, set_result_key: true) self.model_class = model_class self.search_field = search_by self.result_key = Inflecto.underscore(model_class.name.split('::').last).to_sym if set_result_key end def inherited(subclass) super subclass.model_class = model_class subclass.search_field = search_field end end module InstanceMethods extend Forwardable delegate %i[model_class search_field] => 'self.class' delegate :db => :model_class def fetch_model(state, from: model_class, key: search_field, column: search_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 = search_field) wrap_if_present(dataset.first(column => key)) end end def self.apply(operation, model: nil, **args) operation.model(model, args) if model end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
pathway-0.0.17 | lib/pathway/plugins/sequel_models.rb |
pathway-0.0.16 | lib/pathway/plugins/sequel_models.rb |