Friday, September 20, 2024 5:33:04 AM
> settings

Customize


Authenticate

> hash_spec.rb
# frozen_string_literal: true

describe Hash do
  describe "#map_join" do
    context "when no join_with is provided" do
      it "joins without anything in-between" do
        result = {a: 1, b: 2}.map_join { |k, v| k.to_s + v.to_s }
        expect(result).to eq("a1b2")
      end
    end

    context "when join_with is provided" do
      it "joins with the value in-between" do
        result = {a: 1, b: 2}.map_join(" ") { |k, v| k.to_s + v.to_s }
        expect(result).to eq("a1 b2")
      end
    end
  end

  describe "#to_struct" do
    it "converts to Struct" do
      obj = {foo: "bar"}.to_struct
      expect(obj).not_to be_nil
      expect(obj).to be_a(Struct)
      expect(obj.foo).to eq("bar")
    end

    it "is recursive" do
      obj = {foo: {bar: {baz: true}}}.to_struct
      expect(obj).not_to be_nil
      expect(obj).to be_a(Struct)
      expect(obj.foo).to be_a(Struct)
      expect(obj.foo.bar).to be_a(Struct)
      expect(obj.foo.bar.baz).to be(true)
    end

    it "preserves ruby classes" do
      input = {time: Time.current}
      output = input.to_struct
      expect(output).not_to be_nil
      expect(output).to be_a(Struct)
      expect(output.time).to eq(input[:time])
    end
  end

  describe "#to_ostruct" do
    it "converts to OpenStruct" do
      obj = {foo: "bar"}.to_ostruct
      expect(obj).not_to be_nil
      expect(obj).to be_a(OpenStruct)
      expect(obj.foo).to eq("bar")
    end

    it "is recursive" do
      obj = {foo: {bar: {baz: true}}}.to_ostruct
      expect(obj).not_to be_nil
      expect(obj).to be_a(OpenStruct)
      expect(obj.foo).to be_a(OpenStruct)
      expect(obj.foo.bar).to be_a(OpenStruct)
      expect(obj.foo.bar.baz).to be(true)
    end

    it "preserves ruby classes" do
      input = {time: Time.current}
      output = input.to_ostruct
      expect(output).not_to be_nil
      expect(output).to be_a(OpenStruct)
      expect(output.time).to eq(input[:time])
    end
  end

  describe "#to_istruct" do
    it "converts to Data" do
      obj = {foo: "bar"}.to_istruct
      expect(obj).not_to be_nil
      expect(obj).to be_a(Data)
      expect(obj.foo).to eq("bar")
    end

    it "is recursive" do
      obj = {foo: {bar: {baz: true}}}.to_istruct
      expect(obj).not_to be_nil
      expect(obj).to be_a(Data)
      expect(obj.foo).to be_a(Data)
      expect(obj.foo.bar).to be_a(Data)
      expect(obj.foo.bar.baz).to be(true)
    end

    it "preserves ruby classes" do
      input = {time: Time.current}
      output = input.to_istruct
      expect(output).not_to be_nil
      expect(output).to be_a(Data)
      expect(output.time).to eq(input[:time])
    end
  end
end
All opinions represented herein are my own
- © 2024 itsthedevman
- build 340fbb8