Sha256: faf067266df4267404154b6af5b7cdf8aa4afee9ae72337567d1e85d0e858de2

Contents?: true

Size: 1.1 KB

Versions: 2

Compression:

Stored size: 1.1 KB

Contents

require "spec_helper"

module RenderWithView
  RSpec.describe HalfOpenStruct do
    it "can be initialized with a hash, and values read and written" do
      s = HalfOpenStruct.new(name: "Joe")
      expect(s.name).to eq("Joe")

      s.age = 42
      expect(s.age).to eq(42)
    end

    it "raises trying to read an unknown value" do
      s = HalfOpenStruct.new

      expect { s.age }.to raise_error("Unknown key: age")

      s.age = 42
      expect(s.age).to eq(42)
    end

    it "raises for unknown methods" do
      s = HalfOpenStruct.new

      expect { s.foo("bar") }.to raise_error(NoMethodError)
    end

    # Considered an API like "s.age?" but that's ambiguous with undefined vs. falsy values.
    it "lets you query for values being defined" do
      s = HalfOpenStruct.new
      expect(s.include?(:age)).to be(false)

      s.age = 42
      expect(s.include?(:age)).to be(true)
    end

    it "lets you fetch values with a fallback" do
      s = HalfOpenStruct.new
      expect(s.fetch(:age, :fallback)).to eq(:fallback)

      s.age = 42
      expect(s.fetch(:age, :fallback)).to eq(42)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
render_with_view-0.2.1 spec/render_with_view/half_open_struct_spec.rb
render_with_view-0.2.0 spec/render_with_view/half_open_struct_spec.rb