Sha256: 8e90b9d36ed72938ca946a7ebd50e8d94ee155a8bbeb3c6aaa1c33a941dcddc4

Contents?: true

Size: 789 Bytes

Versions: 47

Compression:

Stored size: 789 Bytes

Contents

class ConstructorStruct
  def self.new(*accessors, &block)
    defaults = {:accessors => true, :strict => false}
    
    accessor_names = accessors.dup
    if accessors.last.is_a? Hash
      accessor_names.pop
      user_opts = accessors.last
      user_opts.delete(:accessors)
      defaults.each do |k,v|
        user_opts[k] ||= v
      end
    else
      accessors << defaults
    end
    
    Class.new do
      constructor *accessors

      class_eval(&block) if block

      comparator_code = accessor_names.map { |fname| "self.#{fname} == o.#{fname}" }.join(" && ")
      eval %|
        def ==(o)
          (self.class == o.class) && #{comparator_code}
        end
        def eql?(o)
          (self.class == o.class) && #{comparator_code}
        end
      |
    end
  end
end

Version data entries

47 entries across 47 versions & 2 rubygems

Version Path
ceedling-0.27.0 vendor/constructor/lib/constructor_struct.rb
ceedling-0.25.0 vendor/constructor/lib/constructor_struct.rb
ceedling-0.24.0 vendor/constructor/lib/constructor_struct.rb
ceedling-0.22.0 vendor/constructor/lib/constructor_struct.rb
ceedling-0.21.0 vendor/constructor/lib/constructor_struct.rb
ceedling-0.20.3 vendor/constructor/lib/constructor_struct.rb
ceedling-0.20.2 vendor/constructor/lib/constructor_struct.rb
ceedling-0.19.0 vendor/constructor/lib/constructor_struct.rb
ceedling-0.18.0 vendor/constructor/lib/constructor_struct.rb
ceedling-0.17.0 vendor/constructor/lib/constructor_struct.rb
ceedling-0.16.0 vendor/constructor/lib/constructor_struct.rb
ceedling-0.15.6 vendor/constructor/lib/constructor_struct.rb
ceedling-0.15.5 vendor/constructor/lib/constructor_struct.rb
ceedling-0.15.4 vendor/constructor/lib/constructor_struct.rb
ceedling-0.15.3 vendor/constructor/lib/constructor_struct.rb
ceedling-0.15.2 vendor/constructor/lib/constructor_struct.rb
ceedling-0.15.1 vendor/constructor/lib/constructor_struct.rb
ceedling-0.15.0 vendor/constructor/lib/constructor_struct.rb
ceedling-0.13.0 vendor/constructor/lib/constructor_struct.rb
ceedling-0.13.0.rc1 vendor/constructor/lib/constructor_struct.rb