1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
require 'spec_helper'
describe 'I can define attributes within a module' do
before do
module Examples
module Common
include Virtus
end
module Name
include Common
attribute :name, String
attribute :gamer, Boolean
end
module Age
include Common
attribute :age, Integer
end
class User
include Name
end
class Admin < User
include Age
end
class Moderator; end
end
end
specify 'including a module with attributes into a class' do
expect(Examples::User.attribute_set[:name]).to be_instance_of(Virtus::Attribute)
expect(Examples::User.attribute_set[:gamer]).to be_instance_of(Virtus::Attribute::Boolean)
expect(Examples::Admin.attribute_set[:name]).to be_instance_of(Virtus::Attribute)
expect(Examples::Admin.attribute_set[:age]).to be_instance_of(Virtus::Attribute)
user = Examples::Admin.new(:name => 'Piotr', :age => 29)
expect(user.name).to eql('Piotr')
expect(user.age).to eql(29)
end
specify 'including a module with attributes into an instance' do
moderator = Examples::Moderator.new
moderator.extend(Examples::Name, Examples::Age)
moderator.attributes = { :name => 'John', :age => 21 }
expect(moderator.name).to eql('John')
expect(moderator.age).to eql(21)
end
end
|