Fix Resource attribute bug

Allow Resources to have the same attribute name
but different attribute values
This commit is contained in:
Mark Lapierre 2019-01-15 15:18:17 -05:00
parent 75b1837da7
commit 1d22498251
2 changed files with 37 additions and 11 deletions

View file

@ -116,23 +116,13 @@ module QA
end end
private_class_method :evaluator private_class_method :evaluator
def self.dynamic_attributes
const_get(:DynamicAttributes)
rescue NameError
mod = const_set(:DynamicAttributes, Module.new)
include mod
mod
end
class DSL class DSL
def initialize(base) def initialize(base)
@base = base @base = base
end end
def attribute(name, &block) def attribute(name, &block)
@base.dynamic_attributes.module_eval do @base.module_eval do
attr_writer(name) attr_writer(name)
define_method(name) do define_method(name) do

View file

@ -213,6 +213,42 @@ describe QA::Resource::Base do
.to raise_error(described_class::NoValueError, "No value was computed for no_block of #{resource.class.name}.") .to raise_error(described_class::NoValueError, "No value was computed for no_block of #{resource.class.name}.")
end end
end end
context 'when multiple resources have the same attribute name' do
let(:base) do
Class.new(QA::Resource::Base) do
def fabricate!
'any'
end
def self.current_url
'http://stub'
end
end
end
let(:first_resource) do
Class.new(base) do
attribute :test do
'first block'
end
end
end
let(:second_resource) do
Class.new(base) do
attribute :test do
'second block'
end
end
end
it 'has unique attribute values' do
first_result = first_resource.fabricate!(resource: first_resource.new)
second_result = second_resource.fabricate!(resource: second_resource.new)
expect(first_result.test).to eq 'first block'
expect(second_result.test).to eq 'second block'
end
end
end end
describe '#web_url' do describe '#web_url' do