Sha256: a66c5b5a724de4e4252ae7f125df33647d1defa3d9915cd944c204631ec2479d

Contents?: true

Size: 1.68 KB

Versions: 3

Compression:

Stored size: 1.68 KB

Contents

require 'spec_helper'

describe WrapIt::DerivedAttributes, type: :wrapped do
  describe '::get_derived' do
    it 'retrieves nil by default' do
      expect(wrapper_class.get_derived(:@var)).to be_nil
    end

    it 'retrieves var, defined in class' do
      wrapper_class.class_eval { @var = 1 }
      sub1 = Class.new(wrapper_class) { @var = 2 }
      sub2 = Class.new(sub1)
      expect(wrapper_class.get_derived(:@var)).to eq 1
      expect(sub1.get_derived(:@var)).to eq 2
      expect(sub2.get_derived(:@var)).to eq 2
    end
  end

  describe '::collect_derived' do
    it 'collects in array by default' do
      expect(wrapper_class.collect_derived(:@var)).to eq []
    end

    it 'collects vars in correct order' do
      wrapper_class.class_eval { @var = '1' }
      sub1 = Class.new(wrapper_class) { @var = '2' }
      sub2 = Class.new(sub1)
      expect(wrapper_class.collect_derived(:@var, [], :push)).to eq %w(1)
      expect(sub1.collect_derived(:@var, [], :push)).to eq %w(2 1)
      expect(sub2.collect_derived(:@var, [], :push)).to eq %w(2 1)
    end

    it 'collects arrays by default' do
      wrapper_class.class_eval { @var = %w(1 2) }
      sub1 = Class.new(wrapper_class) { @var = %w(2 3) }
      expect(wrapper_class.collect_derived(:@var)).to eq %w(1 2)
      expect(sub1.collect_derived(:@var)).to eq %w(2 3 1 2)
    end

    it 'collects hashes' do
      wrapper_class.class_eval { @var = { one: 1, two: 2 } }
      sub1 = Class.new(wrapper_class) { @var = { three: 3 } }
      expect(
        wrapper_class.collect_derived(:@var, {}, :merge)
      ).to eq(one: 1, two: 2)
      expect(
        sub1.collect_derived(:@var, {}, :merge)
      ).to eq(one: 1, two: 2, three: 3)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
wrap_it-1.0.2 spec/lib/derived_attributes_spec.rb
wrap_it-1.0.1 spec/lib/derived_attributes_spec.rb
wrap_it-1.0.0 spec/lib/derived_attributes_spec.rb