paulelliott/fabrication

View on GitHub
lib/fabrication/generator/sequel.rb

Summary

Maintainability
A
0 mins
Test Coverage
class Fabrication::Generator::Sequel < Fabrication::Generator::Base

  def initialize(klass)
    super
    load_instance_hooks
  end

  def self.supports?(klass)
    defined?(Sequel) && klass.ancestors.include?(Sequel::Model)
  end

  def set_attributes
    _attributes.each do |key, value|
      if (reflection = _klass.association_reflections[key]) && value.is_a?(Array)
        _instance.associations[key] = value
        _instance.after_save_hook do
          value.each { |o| _instance.send(reflection.add_method, o) }
        end
      else
        _instance.send("#{key}=", value)
      end
    end
  end

  def persist
    _instance.save(raise_on_failure: true)
  end

  private

  def load_instance_hooks
    klass = _klass.respond_to?(:cti_base_model) ? _klass.cti_models.first : _klass
    klass.plugin :instance_hooks unless klass.new.respond_to? :after_save_hook
  end

end