st0012/SafeFinder

View on GitHub
lib/safe_finder.rb

Summary

Maintainability
A
0 mins
Test Coverage
require "safe_finder/generators/model_generator"
require "safe_finder/null_object_generator"
require "safe_finder/null_object"
require "safe_finder/class_wrapper"
require "safe_finder/version"

module SafeFinder
  def self.included(base)
    base.extend(ClassMethods)
    base.singleton_class.class_eval do
      attr_accessor :null_object_attributes, :null_object_methods
    end
    base.class_eval do
      self.null_object_attributes = {}
      self.null_object_methods = {}
    end
  end

  module ClassMethods
    def safely
      ClassWrapper.new(self)
    end

    def null_object
      @null_object ||= SafeFinder::NullObjectGenerator.new(self).generate
    end

    def safe_attribute(key, value)
      null_object_attributes[key.to_sym] = value
    end

    def safe_method(method_name, &block)
      null_object_methods[method_name.to_sym] = block
    end
  end
end