require 'spec_helper' describe Parsable::Parser do describe '#parse' do context "when no variables" do it "returns empty" do parsed = Parsable::Parser.new(:string => "novariables").parse expect(parsed).to be_empty end end context "nil string" do it "returns empty" do parsed = Parsable::Parser.new(:string => nil).parse expect(parsed).to be_empty end end context 'when one variable' do before :each do @parsed = Parsable::Parser.new(:string => %(my+{{location.name}}@email.com)).parse.first end it "parses object name" do expect(@parsed.object).to eql('location') end it "parses attribute" do expect(@parsed.attribute).to eql('name') end end context 'when multiple variables' do before :each do @parsed = Parsable::Parser.new(:string => %(my+{{location.name}}@{{email.domain}}.com)).parse end it "returns multiple strings" do expect(@parsed.size).to eql(2) end it "parses object names" do expect(@parsed.first.object).to eql('location') expect(@parsed.last.object).to eql('email') end it "parses attributes" do expect(@parsed.first.attribute).to eql('name') expect(@parsed.last.attribute).to eql('domain') end end context 'when remote object' do subject { Parsable::Parser.new(:string => %({{remote.http://google.com?query1=q1&query2=q2}}@email.com)).parse.first } it "parses object name" do expect(subject.object).to eql('remote') end it "parses attribute" do expect(subject.attribute).to eql('http://google.com?query1=q1&query2=q2') end end end end