Sha256: 45cec64e7b3ad8e512ce8dab1add15e8c0724230717fd437e576c67643dbabb4

Contents?: true

Size: 1.82 KB

Versions: 9

Compression:

Stored size: 1.82 KB

Contents

require 'virtus'
module SuperProcess
  class Core
    include ActiveModel::Validations
    include ActiveSupport::Callbacks
    include Virtus.model

    ValidError = Class.new(StandardError)

    define_callbacks :validations, :task

    def self.before_call(method_name)
      set_callback :validations, :before, method_name
    end

    def self.after_call(method_name)
      set_callback :validations, :after, method_name
    end

    def self.before_task(method_name)
      set_callback :task, :before, method_name
    end

    def self.after_task(method_name)
      set_callback :task, :after, method_name
    end

    def self.init(model_name, &block)
      attr_accessor model_name

      class_eval(&block) if block_given?

      define_method :initialize do |model|
        self.send("#{model_name}=", model)
      end
    end

    def self.callable(&block)
      define_method :call! do |params={}|
        params.each do |attr, value|
          public_send("#{attr}=", value) if respond_to?("#{attr}=")
        end
        run_callbacks :validations do
          raise ValidError, "Validation Error" if valid? == false

          run_callbacks :task do
            instance_eval(&block)
          end
        end
      end

      define_method :call do |params={}|
        begin
          @result = call!(params)
          true
        rescue ValidError
          false
        end
      end
    end

    def result
      @result
    end

    def error_messages
      if errors.messages.values.present?
        errors.messages.values.first.first
      else
        ""
      end
    end

    def self.method_missing(m, *args, &block)
      puts "Missing: #{m} -> Context: #{self.inspect}" if Rails.env.development?
      if block_given?
        new.public_send(m, *args, &block)
      else
        new.public_send(m, *args)
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
super_tools-0.0.9 lib/super_process/core.rb
super_tools-0.0.8 lib/super_process/core.rb
super_tools-0.0.7 lib/super_process/core.rb
super_tools-0.0.6 lib/super_process/core.rb
super_tools-0.0.5 lib/super_process/core.rb
super_tools-0.0.4 lib/super_process/core.rb
super_tools-0.0.3 lib/super_process/core.rb
super_tools-0.0.2 lib/super_process/core.rb
super_tools-0.0.1 lib/super_process/core.rb