Sha256: e5f8bc2a20affa859c52ed934e8f3a2db63bbde05c097516ecda9595742bdd7e
Contents?: true
Size: 1.32 KB
Versions: 4
Compression:
Stored size: 1.32 KB
Contents
module Tins # Implementation of the null object pattern in Ruby. module Null def method_missing(*) self end def const_missing(*) self end def to_s '' end def to_str nil end def to_f 0.0 end def to_i 0 end def to_int nil end def to_a [] end def to_ary nil end def inspect 'NULL' end def nil? true end def blank? true end def as_json(*) end def to_json(*) 'null' end module Kernel def null(value = nil) value.nil? ? Tins::NULL : value end alias Null null def null_plus(opts = {}) value = opts[:value] opts[:caller] = caller if respond_to?(:caller_locations, true) opts[:caller_locations] = caller_locations end value.nil? ? Tins::NullPlus.new(opts) : value end alias NullPlus null_plus end end class NullClass < Module include Tins::Null end NULL = NullClass.new.freeze class NullPlus include Tins::Null def initialize(opts = {}) class << self; self; end.class_eval do opts.each do |name, value| define_method(name) { value } end end end end end require 'tins/alias'
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
tins-1.3.0 | lib/tins/null.rb |
tins-1.2.0 | lib/tins/null.rb |
tins-1.1.0 | lib/tins/null.rb |
tins-1.0.1 | lib/tins/null.rb |