enumattr 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -21,111 +21,121 @@ Or install it yourself as:
21
21
 
22
22
  ### defining
23
23
 
24
- * `include Enumattr::Base` and declare `enum_attr_for some_attribute do ... end`
25
- * `enum :symbol, value` in block
24
+ 1. `include Enumattr::Base` and declare `enumattr attribute_name do ... end`
25
+ 2. `enum :symbol, value` in `do ... end`
26
26
 
27
+ example:
27
28
 
28
- <pre>
29
- class User
30
- include Enumattr::Base
29
+ class User
30
+ include Enumattr::Base
31
31
 
32
- attr_accessor :status
32
+ attr_accessor :status
33
33
 
34
- enum_attr_for :status do
35
- enum :active, 1
36
- enum :suspend, 2
37
- enum :deleted, 3
38
- end
34
+ enumattr :status do
35
+ enum :active, 1
36
+ enum :inactive, 2
37
+ enum :deleted, 3
38
+ end
39
39
 
40
- def initialize(status)
41
- @status = status
42
- end
43
- end
44
- </pre>
40
+ def initialize(status)
41
+ @status = status
42
+ end
43
+ end
45
44
 
46
45
  ### defined methods
47
46
 
48
47
  #### class methods
49
48
 
50
- * `SomeClass.#{some_attribute}_enums` return enum set
51
- * `SomeClass.#{some_attribute}_keys` return key set
52
- * `SomeClass.#{some_attribute}_values` return value set
49
+ * `#{attribute_name}_enums` return enum set
50
+ * `#{attribute_name}_keys` return key set
51
+ * `#{attribute_name}_values` return value set
53
52
 
54
- <pre>
55
- User.status_enums
56
- #=&gt; #&lt;Set: {#&lt;Enumattr::Enum:0x8a8d13c @key=:active, @value=1&gt;, #&lt;Enumattr::Enum:0x8a8d100 @key=:suspend, @value=2&gt;, #&lt;Enumattr::Enum:0x8a8d0ec @key=:deleted, @value=3&gt;}&gt;
53
+ example:
57
54
 
58
- User.status_keys
59
- #=&gt; #&lt;Set: {:active, :suspend, :deleted}&gt;
55
+ User.status_enums
56
+ #=> #<Set: {#<Enumattr::Enums::Enum:0x8a8d13c @key=:active, @value=1>, #<Enumattr::Enums::Enum:0x8a8d100 @key=:inactive, @value=2>, #<Enumattr::Enums::Enum:0x8a8d0ec @key=:deleted, @value=3>}>
60
57
 
61
- User.status_values
62
- #=&gt; #&lt;Set: {1, 2, 3}&gt;
63
- </pre>
58
+ User.status_keys
59
+ #=> #<Set: {:active, :inactive, :deleted}>
64
60
 
65
- * `SomeClass.#{some_attribute}_enum_by_key(:symbol)` return an enum
66
- * `SomeClass.#{some_attribute}_value_by_key(:symbol)` return a value
61
+ User.status_values
62
+ #=> #<Set: {1, 2, 3}>
67
63
 
68
- <pre>
69
- User.status_enum_by_key :active
70
- #=&gt; #&lt;Enumattr::Enum:0x8a8d13c @key=:active, @value=1&gt;
64
+ * `#{attribute_name}_enum(key)` return an enum
65
+ * `#{attribute_name}_value(key)` return a value
71
66
 
72
- User.status_enum_by_key :suspend
73
- #=&gt; #&lt;Enumattr::Enum:0x8a8d100 @key=:suspend, @value=2&gt;
67
+ example:
74
68
 
75
- User.status_enum_by_key :dummy
76
- #=&gt; nil
77
-
78
- User.status_value_by_key :active
79
- #=&gt; 1
80
-
81
- User.status_value_by_key :suspend
82
- #=&gt; 2
83
-
84
- User.status_value_by_key :dummy
85
- #=&gt; nil
86
- </pre>
69
+ User.status_enum :active
70
+ #=> #<Enumattr::Enums::Enum:0x8a8d13c @key=:active, @value=1>
71
+
72
+ User.status_enum :inactive
73
+ #=> #<Enumattr::Enums::Enum:0x8a8d100 @key=:inactive, @value=2>
74
+
75
+ User.status_enum :dummy
76
+ #=> nil
77
+
78
+ User.status_value :active
79
+ #=> 1
80
+
81
+ User.status_value :inactive
82
+ #=> 2
83
+
84
+ User.status_value :dummy
85
+ #=> nil
87
86
 
88
87
  #### instance methods
89
88
 
90
- * alias `#{some_attribute}_value` `some_attribute`
91
- * `#{some_attribute}_key` return symbol
92
- * `#{some_attribute}_enum` return enum
93
-
94
- <pre>
95
- user = User.new(1)
96
- #=&gt; #&lt;User:0x8e17dac @status=1&gt;
97
-
98
- user.status
99
- #=&gt; 1
100
-
101
- user.status_value # alias
102
- #=&gt; 1
103
-
104
- user.status_key
105
- #=&gt; :active
106
-
107
- user.status_enum
108
- #=&gt; #&lt;Enumattr::Enum:0x8de2e68 @key=:active, @value=1&gt;
109
- </pre>
110
-
111
-
112
- * define query method
113
- * `#{some_attribute}_#{some_symbol}?` return bool
114
-
115
- <pre>
116
- user.status_active?
117
- #=&gt; true
118
-
119
- user.status_suspend?
120
- #=&gt; false
121
-
122
- user.status_deleted?
123
- #=&gt; false
124
-
125
- user.status_dummy?
126
- NoMethodError: undefined method `status_dummy?' for #&lt;User:0x8e17dac @status=1&gt;
127
- </pre>
128
-
89
+ * getters
90
+ * alias `#{attribute_name}_value` `attribute_name`
91
+ * `#{attribute_name}_key` return symbol
92
+ * `#{attribute_name}_enum` return enum
93
+ * setter (if writable)
94
+ * `#{attribute_name}_key=(key)`
95
+
96
+
97
+ getters example:
98
+
99
+ user = User.new(1)
100
+ #=> #<User:0x8e17dac @status=1>
101
+
102
+ user.status
103
+ #=> 1
104
+
105
+ user.status_value # alias
106
+ #=> 1
107
+
108
+ user.status_key
109
+ #=> :active
110
+
111
+ user.status_enum
112
+ #=> #<Enumattr::Enums::Enum:0x8de2e68 @key=:active, @value=1>
113
+
114
+ setter example:
115
+
116
+ user.status_key = :inactive
117
+ #=> :inactive
118
+
119
+ user.status
120
+ #=> 2
121
+
122
+
123
+ * Query Method
124
+ * `#{attribute_name}_#{key}?` return true or false
125
+
126
+ example:
127
+
128
+ user.status_active?
129
+ #=> false
130
+
131
+ user.status_inactive?
132
+ #=> true
133
+
134
+ user.status_deleted?
135
+ #=> false
136
+
137
+ user.status_dummy?
138
+ NoMethodError: undefined method `status_dummy?' for #<User:0x8e17dac @status=1>
129
139
 
130
140
  ## Contributing
131
141
 
data/enumattr.gemspec CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |gem|
6
6
  gem.email = ["aisuiiaisuii@gmail.com"]
7
7
  gem.description = %q{simple enum}
8
8
  gem.summary = %q{manage constants by enum like object}
9
- gem.homepage = ""
9
+ gem.homepage = "https://github.com/aisuii/enumattr"
10
10
 
11
11
  gem.files = `git ls-files`.split($\)
12
12
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ class AdminUser
4
+ include Enumattr::Base
5
+
6
+ attr_accessor :role
7
+
8
+ enumattr :authority, :on => :role do
9
+ enum :super, 1
10
+ enum :approver, 2
11
+ enum :editor, 3
12
+ end
13
+
14
+ def initialize(role)
15
+ @role = role
16
+ end
17
+ end
data/examples/entry.rb ADDED
@@ -0,0 +1,13 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ class Entry
4
+ include Enumattr::Base
5
+
6
+ attr_accessor :show_flag
7
+
8
+ enumattr :show_flag, :enums => {:opened => true, :closed => false}
9
+
10
+ def initialize(show_flag)
11
+ @show_flag = show_flag
12
+ end
13
+ end
data/examples/user.rb CHANGED
@@ -5,10 +5,10 @@ class User
5
5
 
6
6
  attr_accessor :status
7
7
 
8
- enum_attr_for :status do
9
- enum :active, 1
10
- enum :suspend, 2
11
- enum :deleted, 3
8
+ enumattr :status do
9
+ enum :active, 1
10
+ enum :inactive, 2
11
+ enum :deleted, 3
12
12
  end
13
13
 
14
14
  def initialize(status)
data/lib/enumattr/base.rb CHANGED
@@ -8,71 +8,89 @@ module Enumattr
8
8
 
9
9
  module ClassMethods
10
10
  private
11
- def enum_attr_for(enum_attr_name, &block)
12
- enum_attrs[enum_attr_name] = Enums.new(&block)
13
- define_class_methods enum_attr_name
14
- define_instance_methods enum_attr_name
15
- define_instance_query_methods enum_attr_name
11
+ def enumattr(enumattr_name, options = {}, &block)
12
+ if options[:enums]
13
+ closure = Proc.new do
14
+ options[:enums].each{|key, value| enum key, value }
15
+ end
16
+ enumattrs[enumattr_name] = Enums.new(self, &closure)
17
+ else
18
+ enumattrs[enumattr_name] = Enums.new(self, &block)
19
+ end
20
+
21
+ enumattr_bases[enumattr_name] = options[:on] || enumattr_name
22
+
23
+ define_enumattr_class_methods enumattr_name
24
+ define_enumattr_instance_methods enumattr_name
16
25
  end
17
26
 
18
- def enum_attrs
19
- @enum_attrs ||= {}
27
+ def enumattrs
28
+ @enumattrs ||= {}
20
29
  end
21
30
 
22
- def define_class_methods(enum_attr_name)
23
- enums = enum_attrs[enum_attr_name]
24
- method_prefix = "#{enum_attr_name}_"
31
+ def enumattr_bases
32
+ @enumattr_bases ||= {}
33
+ end
25
34
 
26
- mod = Module.new do
35
+ def define_enumattr_class_methods(enumattr_name)
36
+ method_prefix = "#{enumattr_name}_"
37
+
38
+ enumattr_class_methods = Module.new do
27
39
  define_method("#{method_prefix}enums") do
28
- enums.enums
40
+ enumattrs[enumattr_name].enums
29
41
  end
30
42
 
31
43
  define_method("#{method_prefix}keys") do
32
- enums.keys
44
+ enumattrs[enumattr_name].keys
33
45
  end
34
46
 
35
47
  define_method("#{method_prefix}values") do
36
- enums.values
48
+ enumattrs[enumattr_name].values
37
49
  end
38
50
 
39
- define_method("#{method_prefix}enum_by_key") do |key|
40
- enums.enum_by_key(key)
51
+ define_method("#{method_prefix}enum") do |key|
52
+ enumattrs[enumattr_name].enum_by_key(key)
41
53
  end
42
54
 
43
- define_method("#{method_prefix}value_by_key") do |key|
44
- enum = enums.enum_by_key(key)
55
+ define_method("#{method_prefix}value") do |key|
56
+ enum = enumattrs[enumattr_name].enum_by_key(key)
45
57
  enum && enum.value
46
58
  end
47
59
  end
48
60
 
49
- extend mod
61
+ extend enumattr_class_methods
50
62
  end
51
63
 
52
- def define_instance_methods(enum_attr_name)
53
- enums = enum_attrs[enum_attr_name]
54
- method_prefix = "#{enum_attr_name}_"
64
+ def define_enumattr_instance_methods(enumattr_name)
65
+ enums = enumattrs[enumattr_name]
66
+ method_prefix = "#{enumattr_name}_"
67
+ enumattr_base = enumattr_bases[enumattr_name]
55
68
 
56
69
  define_method("#{method_prefix}enum") do
57
- value = __send__ enum_attr_name
70
+ value = send enumattr_base
58
71
  enums.enum_by_value(value)
59
72
  end
60
73
 
61
74
  define_method("#{method_prefix}key") do
62
- enum = __send__ "#{method_prefix}enum"
63
- enum.key
75
+ enum = send "#{method_prefix}enum"
76
+ enum && enum.key
64
77
  end
65
78
 
66
- alias_method :"#{method_prefix}value", enum_attr_name
67
- end
79
+ define_method(:"#{method_prefix}value") do
80
+ send enumattr_base
81
+ end
68
82
 
69
- def define_instance_query_methods(enum_attr_name)
70
- enums = enum_attrs[enum_attr_name]
71
- method_prefix = "#{enum_attr_name}_"
83
+ # setter by key
84
+ define_method("#{method_prefix}key=") do |new_key|
85
+ new_enum = enums.enum_by_key(new_key)
86
+ new_value = new_enum && new_enum.value
87
+ send "#{enumattr_base}=", new_value
88
+ end
72
89
 
90
+ # Query methods
73
91
  enums.enums.each do |enum|
74
92
  define_method("#{method_prefix}#{enum.key}?") do
75
- value = __send__ enum_attr_name
93
+ value = send enumattr_base
76
94
  value == enum.value
77
95
  end
78
96
  end
@@ -3,10 +3,12 @@ require 'set'
3
3
 
4
4
  module Enumattr
5
5
  class Enums
6
- def initialize(&block)
6
+ attr_reader :base
7
+
8
+ def initialize(base, &block)
9
+ @base = base
7
10
  @set = Set.new
8
11
  instance_eval(&block)
9
- freeze
10
12
  end
11
13
 
12
14
  def enums
@@ -31,7 +33,29 @@ module Enumattr
31
33
 
32
34
  private
33
35
  def enum(key, value)
34
- @set.add Enum.new(key, value)
36
+ @set.add Enum.new(key, value, self)
37
+ end
38
+
39
+ class Enum
40
+ attr_reader :key, :value
41
+
42
+ def initialize(key, value, container)
43
+ @key = key.to_sym
44
+ @value = value
45
+ @container = container
46
+ end
47
+
48
+ def enums
49
+ @container.enums
50
+ end
51
+
52
+ def hash
53
+ @key.hash
54
+ end
55
+
56
+ def eql?(other)
57
+ @key == other.key
58
+ end
35
59
  end
36
60
  end
37
61
  end
@@ -1,3 +1,3 @@
1
1
  module Enumattr
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/enumattr.rb CHANGED
@@ -4,5 +4,4 @@ require "enumattr/version"
4
4
  module Enumattr
5
5
  autoload :Base, 'enumattr/base'
6
6
  autoload :Enums, 'enumattr/enums'
7
- autoload :Enum, 'enumattr/enum'
8
7
  end
@@ -2,21 +2,28 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe Enumattr::Enums do
5
+ let(:base) { Object }
6
+
5
7
  let(:enums) do
6
- Enumattr::Enums.new do
8
+ Enumattr::Enums.new(base) do
7
9
  enum :key1, 1
8
10
  enum :key2, 2
9
11
  enum :key3, 3
10
12
  end
11
13
  end
12
14
 
15
+ describe "#base" do
16
+ subject { enums.base }
17
+ it { should == Object }
18
+ end
19
+
13
20
  describe "#enums" do
14
21
  subject { enums.enums }
15
22
  it { should be_a Set }
16
23
  it { should have(3).items }
17
- it "should have Enumattr::Enum instances" do
24
+ it "should have Enumattr::Enums::Enum instances" do
18
25
  should satisfy { |enums|
19
- enums.all?{|item| item.is_a? Enumattr::Enum }
26
+ enums.all?{|item| item.is_a? Enumattr::Enums::Enum }
20
27
  }
21
28
  end
22
29
  end
@@ -45,7 +52,7 @@ describe Enumattr::Enums do
45
52
 
46
53
  describe "find methods" do
47
54
  shared_examples "#enum_by_foo(foo) each items" do
48
- it { should be_a Enumattr::Enum }
55
+ it { should be_a Enumattr::Enums::Enum }
49
56
  its(:key) { should == expects[:key] }
50
57
  its(:value) { should == expects[:value] }
51
58
  end
@@ -81,4 +88,11 @@ describe Enumattr::Enums do
81
88
  end
82
89
  end
83
90
  end
91
+
92
+ describe Enumattr::Enums::Enum do
93
+ subject { enums.enum_by_key(:key1) }
94
+ its(:key) { should == :key1 }
95
+ its(:value) { should == 1 }
96
+ its(:enums) { should == enums.enums }
97
+ end
84
98
  end
@@ -1,22 +1,24 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require 'spec_helper'
3
3
  require 'user'
4
+ require 'admin_user'
5
+ require 'entry'
4
6
 
5
- describe User do
7
+ describe User, 'declare with block' do
6
8
  describe "class methods" do
7
- describe '.status_enums as #{enum_attr_name}_enums' do
9
+ describe '.status_enums as #{enumattr_name}_enums' do
8
10
  subject { described_class.status_enums }
9
11
 
10
12
  it { should be_a Set }
11
13
  it { should have(3).items }
12
14
  it "should have Enum instances" do
13
15
  should satisfy { |enums|
14
- enums.all?{|item| item.is_a? Enumattr::Enum }
16
+ enums.all?{|item| item.is_a? Enumattr::Enums::Enum }
15
17
  }
16
18
  end
17
19
  end
18
20
 
19
- describe '.status_keys as #{enum_attr_name}_keys' do
21
+ describe '.status_keys as #{enumattr_name}_keys' do
20
22
  subject { described_class.status_keys }
21
23
 
22
24
  it { should be_a Set }
@@ -28,7 +30,7 @@ describe User do
28
30
  end
29
31
  end
30
32
 
31
- describe '.status_values as #{enum_attr_name}_values' do
33
+ describe '.status_values as #{enumattr_name}_values' do
32
34
  subject { described_class.status_values }
33
35
 
34
36
  it { should be_a Set }
@@ -40,23 +42,23 @@ describe User do
40
42
  end
41
43
  end
42
44
 
43
- describe '.status_enum_by_key as #{enum_attr_name}_enum_by_key' do
44
- subject { described_class.status_enum_by_key(:active) }
45
+ describe '.status_enum(key) as #{enumattr_name}_enum(key)' do
46
+ subject { described_class.status_enum(:active) }
45
47
 
46
- it { should be_a Enumattr::Enum }
48
+ it { should be_a Enumattr::Enums::Enum }
47
49
  its(:key) { should == :active }
48
50
  its(:value) { should == 1 }
49
51
  end
50
52
 
51
- describe '.status_value_by_key as #{enum_attr_name}_value_by_key' do
53
+ describe '.status_value(key) as #{enumattr_name}_value(key)' do
52
54
  context "present key" do
53
- subject { described_class.status_value_by_key(:active) }
55
+ subject { described_class.status_value(:active) }
54
56
 
55
57
  it { should == 1 }
56
58
  end
57
59
 
58
60
  context "not present key" do
59
- subject { described_class.status_value_by_key(:not_present_key) }
61
+ subject { described_class.status_value(:not_present_key) }
60
62
 
61
63
  it { should be_nil }
62
64
  end
@@ -65,7 +67,7 @@ describe User do
65
67
 
66
68
 
67
69
  describe "instance methods" do
68
- let(:user) { User.new(1) }
70
+ let(:user) { described_class.new(1) }
69
71
 
70
72
  describe "#status" do
71
73
  subject { user.status }
@@ -73,44 +75,312 @@ describe User do
73
75
  it { should == 1 }
74
76
  end
75
77
 
76
- describe '#status_enum as #{enum_attr_name}_enum' do
78
+ describe '#status_enum as #{enumattr_name}_enum' do
77
79
  subject { user.status_enum }
78
80
 
79
- it { should be_a Enumattr::Enum }
81
+ it { should be_a Enumattr::Enums::Enum }
80
82
  its(:key) { should == :active }
81
83
  its(:value) { should == 1 }
82
84
  end
83
85
 
84
- describe '#status_key as #{enum_attr_name}_key' do
86
+ describe '#status_key as #{enumattr_name}_key' do
85
87
  subject { user.status_key }
86
88
 
87
89
  it { should be_a Symbol }
88
90
  it { should == :active }
89
91
  end
90
92
 
91
- describe '#status_value as #{enum_attr_name}_value' do
93
+ describe '#status_key=(key) as #{enumattr_name}_key=(key)' do
94
+ before do
95
+ user.status_key = :inactive
96
+ end
97
+
98
+ subject { user }
99
+
100
+ its(:status) { should == 2 }
101
+ its(:status_key) { should == :inactive }
102
+ end
103
+
104
+ describe '#status_value as #{enumattr_name}_value' do
92
105
  subject { user.status_value }
93
106
 
94
107
  it { should be_a Numeric }
95
108
  it { should == 1 }
96
109
  end
97
110
 
98
- describe '#status_active? as #{enum_attr_name}_#{status_key}?' do
111
+ describe '#status_active? as #{enumattr_name}_#{status_key}?' do
99
112
  subject { user.status_active? }
100
113
 
101
114
  it { should be_true }
102
115
  end
103
116
 
104
- describe '#status_suspend? as #{enum_attr_name}_#{other_status_key}?' do
105
- subject { user.status_suspend? }
117
+ describe '#status_inactive? as #{enumattr_name}_#{other_status_key}?' do
118
+ subject { user.status_inactive? }
106
119
 
107
120
  it { should be_false }
108
121
  end
109
122
 
110
- describe '#status_deleted? as #{enum_attr_name}_#{other_status_key}?' do
123
+ describe '#status_deleted? as #{enumattr_name}_#{other_status_key}?' do
111
124
  subject { user.status_deleted? }
112
125
 
113
126
  it { should be_false }
114
127
  end
128
+
129
+ context "out of range value" do
130
+ subject { user }
131
+ before { user.status = 4 }
132
+ its(:status_enum) { should be_nil }
133
+ its(:status_key) { should be_nil }
134
+ its(:status_value) { should == 4 }
135
+ its(:status_active?) { should be_false }
136
+ its(:status_inactive?) { should be_false }
137
+ its(:status_deleted?) { should be_false }
138
+ end
139
+ end
140
+ end
141
+
142
+
143
+ describe AdminUser,"with :on option" do
144
+ describe 'class methods' do
145
+ describe '.authority_enums as #{enumattr_name}_enums' do
146
+ subject { described_class.authority_enums }
147
+
148
+ it { should be_a Set }
149
+ it { should have(3).items }
150
+ it "should have Enum instances" do
151
+ should satisfy { |enums|
152
+ enums.all?{|item| item.is_a? Enumattr::Enums::Enum }
153
+ }
154
+ end
155
+ end
156
+
157
+ describe '.authority_keys as #{enumattr_name}_keys' do
158
+ subject { described_class.authority_keys }
159
+
160
+ it { should be_a Set }
161
+ it { should have(3).items }
162
+ it "should have Symbol instances" do
163
+ should satisfy { |keys|
164
+ keys.all?{|item| item.is_a? Symbol }
165
+ }
166
+ end
167
+ end
168
+
169
+ describe '.authority_values as #{enumattr_name}_values' do
170
+ subject { described_class.authority_values }
171
+
172
+ it { should be_a Set }
173
+ it { should have(3).items }
174
+ it "should have Numeric instances" do
175
+ should satisfy { |values|
176
+ values.all?{|item| item.is_a? Numeric }
177
+ }
178
+ end
179
+ end
180
+
181
+ describe '.authority_enum(key) as #{enumattr_name}_enum(key)' do
182
+ subject { described_class.authority_enum(:super) }
183
+
184
+ it { should be_a Enumattr::Enums::Enum }
185
+ its(:key) { should == :super }
186
+ its(:value) { should == 1 }
187
+ end
188
+
189
+ describe '.authority_value(key) as #{enumattr_name}_value(key)' do
190
+ context "present key" do
191
+ subject { described_class.authority_value(:super) }
192
+
193
+ it { should == 1 }
194
+ end
195
+
196
+ context "not present key" do
197
+ subject { described_class.authority_value(:not_present_key) }
198
+
199
+ it { should be_nil }
200
+ end
201
+ end
202
+ end
203
+
204
+
205
+ describe "instance methods" do
206
+ let(:user) { described_class.new(1) }
207
+
208
+ describe "#role" do
209
+ subject { user.role }
210
+
211
+ it { should == 1 }
212
+ end
213
+
214
+ describe '#authority_enum as #{enumattr_name}_enum' do
215
+ subject { user.authority_enum }
216
+
217
+ it { should be_a Enumattr::Enums::Enum }
218
+ its(:key) { should == :super }
219
+ its(:value) { should == 1 }
220
+ end
221
+
222
+ describe '#authority_key as #{enumattr_name}_key' do
223
+ subject { user.authority_key }
224
+
225
+ it { should be_a Symbol }
226
+ it { should == :super }
227
+ end
228
+
229
+ describe '#authority_key=(key) as #{enumattr_name}_key=(key)' do
230
+ before do
231
+ user.authority_key = :approver
232
+ end
233
+
234
+ subject { user }
235
+
236
+ its(:role) { should == 2 }
237
+ its(:authority_value) { should == 2 }
238
+ its(:authority_key) { should == :approver }
239
+ end
240
+
241
+ describe '#authority_value as #{enumattr_name}_value' do
242
+ subject { user.authority_value }
243
+
244
+ it { should be_a Numeric }
245
+ it { should == 1 }
246
+ end
247
+
248
+ describe '#authority_super? as #{enumattr_name}_#{authority_key}?' do
249
+ subject { user.authority_super? }
250
+
251
+ it { should be_true }
252
+ end
253
+
254
+ describe '#authority_approver? as #{enumattr_name}_#{other_authority_key}?' do
255
+ subject { user.authority_approver? }
256
+
257
+ it { should be_false }
258
+ end
259
+
260
+ describe '#authority_editor? as #{enumattr_name}_#{other_authority_key}?' do
261
+ subject { user.authority_editor? }
262
+
263
+ it { should be_false }
264
+ end
265
+ end
266
+ end
267
+
268
+
269
+ describe Entry,"with :enums option" do
270
+ describe 'class methods' do
271
+ describe '.show_flag_enums as #{enumattr_name}_enums' do
272
+ subject { described_class.show_flag_enums }
273
+
274
+ it { should be_a Set }
275
+ it { should have(2).items }
276
+ it "should have Enum instances" do
277
+ should satisfy { |enums|
278
+ enums.all?{|item| item.is_a? Enumattr::Enums::Enum }
279
+ }
280
+ end
281
+ end
282
+
283
+ describe '.show_flag_keys as #{enumattr_name}_keys' do
284
+ subject { described_class.show_flag_keys }
285
+
286
+ it { should be_a Set }
287
+ it { should have(2).items }
288
+ it "should have Symbol instances" do
289
+ should satisfy { |keys|
290
+ keys.all?{|item| item.is_a? Symbol }
291
+ }
292
+ end
293
+ end
294
+
295
+ describe '.show_flag_values as #{enumattr_name}_values' do
296
+ subject { described_class.show_flag_values }
297
+
298
+ it { should be_a Set }
299
+ it { should have(2).items }
300
+ it "should have TrueClass or FalseClass instances" do
301
+ should satisfy { |values|
302
+ values.all?{|item| item.is_a? TrueClass or item.is_a? FalseClass }
303
+ }
304
+ end
305
+ end
306
+
307
+ describe '.show_flag_enum(key) as #{enumattr_name}_enum(key)' do
308
+ subject { described_class.show_flag_enum(:opened) }
309
+
310
+ it { should be_a Enumattr::Enums::Enum }
311
+ its(:key) { should == :opened }
312
+ its(:value) { should == true }
313
+ end
314
+
315
+ describe '.show_flag_value(key) as #{enumattr_name}_value(key)' do
316
+ context "present key" do
317
+ subject { described_class.show_flag_value(:opened) }
318
+
319
+ it { should == true }
320
+ end
321
+
322
+ context "not present key" do
323
+ subject { described_class.show_flag_value(:not_present_key) }
324
+
325
+ it { should be_nil }
326
+ end
327
+ end
328
+ end
329
+
330
+
331
+ describe "instance methods" do
332
+ let(:entry) { described_class.new(true) }
333
+
334
+ describe "#show_flag" do
335
+ subject { entry.show_flag }
336
+
337
+ it { should == true }
338
+ end
339
+
340
+ describe '#show_flag_enum as #{enumattr_name}_enum' do
341
+ subject { entry.show_flag_enum }
342
+
343
+ it { should be_a Enumattr::Enums::Enum }
344
+ its(:key) { should == :opened }
345
+ its(:value) { should == true }
346
+ end
347
+
348
+ describe '#show_flag_key as #{enumattr_name}_key' do
349
+ subject { entry.show_flag_key }
350
+
351
+ it { should be_a Symbol }
352
+ it { should == :opened }
353
+ end
354
+
355
+ describe '#show_flag_key=(key) as #{enumattr_name}_key=(key)' do
356
+ before do
357
+ entry.show_flag_key = :closed
358
+ end
359
+
360
+ subject { entry }
361
+
362
+ its(:show_flag) { should == false }
363
+ its(:show_flag_value) { should == false }
364
+ its(:show_flag_key) { should == :closed }
365
+ end
366
+
367
+ describe '#show_flag_value as #{enumattr_name}_value' do
368
+ subject { entry.show_flag_value }
369
+
370
+ it { should be_a TrueClass }
371
+ it { should == true }
372
+ end
373
+
374
+ describe '#show_flag_opened? as #{enumattr_name}_#{show_flag_key}?' do
375
+ subject { entry.show_flag_opened? }
376
+
377
+ it { should be_true }
378
+ end
379
+
380
+ describe '#show_flag_closed? as #{enumattr_name}_#{other_show_flag_key}?' do
381
+ subject { entry.show_flag_closed? }
382
+
383
+ it { should be_false }
384
+ end
115
385
  end
116
386
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enumattr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-27 00:00:00.000000000 Z
12
+ date: 2012-04-29 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: simple enum
15
15
  email:
@@ -25,17 +25,17 @@ files:
25
25
  - README.md
26
26
  - Rakefile
27
27
  - enumattr.gemspec
28
+ - examples/admin_user.rb
29
+ - examples/entry.rb
28
30
  - examples/user.rb
29
31
  - lib/enumattr.rb
30
32
  - lib/enumattr/base.rb
31
- - lib/enumattr/enum.rb
32
33
  - lib/enumattr/enums.rb
33
34
  - lib/enumattr/version.rb
34
- - spec/enumattr/enum_spec.rb
35
35
  - spec/enumattr/enums_spec.rb
36
36
  - spec/enumattr/included_spec.rb
37
37
  - spec/spec_helper.rb
38
- homepage: ''
38
+ homepage: https://github.com/aisuii/enumattr
39
39
  licenses: []
40
40
  post_install_message:
41
41
  rdoc_options: []
@@ -55,12 +55,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
55
  version: '0'
56
56
  requirements: []
57
57
  rubyforge_project:
58
- rubygems_version: 1.8.21
58
+ rubygems_version: 1.8.17
59
59
  signing_key:
60
60
  specification_version: 3
61
61
  summary: manage constants by enum like object
62
62
  test_files:
63
- - spec/enumattr/enum_spec.rb
64
63
  - spec/enumattr/enums_spec.rb
65
64
  - spec/enumattr/included_spec.rb
66
65
  - spec/spec_helper.rb
data/lib/enumattr/enum.rb DELETED
@@ -1,20 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Enumattr
4
- class Enum
5
- attr_reader :key, :value
6
-
7
- def initialize(key, value)
8
- @key = key.to_sym
9
- @value = value
10
- end
11
-
12
- def hash
13
- @key.hash
14
- end
15
-
16
- def eql?(other)
17
- @key == other.key
18
- end
19
- end
20
- end
@@ -1,38 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require 'spec_helper'
3
-
4
- describe Enumattr::Enum do
5
- let(:one_enum) { Enumattr::Enum.new(:my_key, 1) }
6
- let(:same_key_enum) { Enumattr::Enum.new(:my_key, 2) }
7
- let(:another_enum) { Enumattr::Enum.new(:another, 3) }
8
-
9
- describe "getters" do
10
- subject { one_enum }
11
- its(:key) { should == :my_key }
12
- its(:value) { should == 1 }
13
- end
14
-
15
- describe "in hash key" do
16
- context "when hash has same key enum as hash key" do
17
- subject do
18
- hash = {}
19
- hash[one_enum] = 1
20
- hash[same_key_enum] = 2 # only value overrided
21
- hash[another_enum] = 3
22
- hash
23
- end
24
-
25
- its(:keys) { should include one_enum }
26
- its(:keys) { should_not include same_key_enum }
27
- its(:keys) { should include another_enum }
28
-
29
- its(:values) { should_not include 1 }
30
- its(:values) { should include 2 }
31
- its(:values) { should include 3 }
32
-
33
- it "should have 2 items" do
34
- subject.should have(2).items
35
- end
36
- end
37
- end
38
- end