File: using_modules_spec.rb

package info (click to toggle)
ruby-virtus 2.0.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 660 kB
  • sloc: ruby: 4,378; makefile: 2
file content (55 lines) | stat: -rw-r--r-- 1,376 bytes parent folder | download | duplicates (3)
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