Sha256: 78d461680224a19b3d60f1bf500bc17d2e17e81813edbb57ddd4dcaba6fd77a7

Contents?: true

Size: 910 Bytes

Versions: 3

Compression:

Stored size: 910 Bytes

Contents

require 'active_null/version'
require 'active_null/null_model_builder'

module ActiveNull
  def null
    NullModelBuilder.new(self, @null_model_overrides).build.get
  end

  def null_model(&block)
    @null_model_overrides = Module.new
    @null_model_overrides.module_eval(&block)
  end

  def find_by(*args, &block)
    super || null
  end

  def null_associations
    self.reflect_on_all_associations.each do |relation|
      unless relation.collection?
        class_eval <<-CODE
          def #{relation.name}(*args)
            result = association(:#{relation.name}).reader(*args)
            return result if result || !#{relation.klass.name}.respond_to?(:null)
            #{relation.klass.name}.null
          end
        CODE
      end
    end
  end

  def self.extended(klass)
    klass.class_eval <<-CODE
      after_initialize do
        self.class.null_associations
      end
    CODE
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
active_null-0.0.3 lib/active_null.rb
active_null-0.0.2 lib/active_null.rb
active_null-0.0.1 lib/active_null.rb