Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion lib/rules_engine/set.rb
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
class RulesEngine::Set
attr_reader :root, :name
attr_reader :name,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any reason for indenting down? It's not like we're developing using phone screens :P

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks beautiful man!

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lol

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But seriously, I changed it to match the format of RulesEngine::Outcome and RulesEngine::Condition plus I usually switch to a vertical format when the list gets to be 3 or 4 in length so that it makes it easier to scan the list for attributes. Being a converted trailing comma enthusiast, I'd love to hang a comma off the last item in the list but sadly I can't.

:root,
:original

def initialize(options = {})
@root = options.fetch(:root)
@name = options.fetch(:name)
@original = options.fetch(:original, nil)
end
end
86 changes: 73 additions & 13 deletions spec/rules_engine/set_spec.rb
Original file line number Diff line number Diff line change
@@ -1,21 +1,81 @@
require 'spec_helper'

describe 'Set' do
let(:condition) { RulesEngine::Condition.new(name: 'name', condition: '2 > 1') }
context 'Constructing a new instance from a hash' do
describe RulesEngine::Set do
describe '.new' do
subject { described_class.new(options) }

let(:ruleset) { RulesEngine::Set.new(name: 'some set', root: condition) }
let(:root_condition) do
RulesEngine::Condition.new(
name: 'a condition',
condition: '2 > 1',
)
end

specify { expect(ruleset.name).to eq('some set') }
specify { expect(ruleset.root).to eq(condition) }
end
context 'where only required arguments are provided' do
let(:options) do
{
name: 'a rule set',
root: root_condition,
}
end

it 'sets name' do
expect(subject.name).to eq('a rule set')
end

it 'sets root' do
expect(subject.root).to eq(root_condition)
end

it 'does not set original' do
expect(subject.original).to be_nil
end
end

context 'where all available arguments are provided' do
let(:options) do
{
name: 'a rule set',
root: root_condition,
original: 'original rule set',
}
end

context 'Missing required arguments' do
context 'name' do
specify { expect { RulesEngine::Set.new(root: condition) }.to raise_error }
it 'sets name' do
expect(subject.name).to eq('a rule set')
end

it 'sets root' do
expect(subject.root).to eq(root_condition)
end

it 'sets original' do
expect(subject.original).to eq('original rule set')
end
end
context 'root' do
specify { expect { RulesEngine::Set.new(name: 'some set') }.to raise_error }

context 'where name argument is missing' do
let(:options) do
{
root: root_condition,
}
end

specify do
expect { subject }.to raise_error(KeyError)
end
end

context 'where root argument is missing' do
let(:options) do
{
name: 'a rule set',
}
end

specify do
expect { subject }.to raise_error(KeyError)
end
end
end
end
end