enumify 0.0.7 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: afa463a12776e37c4f2051d7fe8b9a4d7e47aa91
4
- data.tar.gz: be3ae8cae94d3b0ec6cf3a4d14e6253d5a1e8f10
3
+ metadata.gz: e186a8d9675c9e5b1959d6bda11d3883329a8b96
4
+ data.tar.gz: 122e5bdcb684221bb5c2d585fa7e79af75506e0e
5
5
  SHA512:
6
- metadata.gz: 282293fed0da633d2f434c84eb3390e3bcb5a5f9bb07a4dc8e09dc4a9c60dfa65ef8191e4cf8045da4ad1a75b7dcef0fad2dd5da6caf4b9334130708b7ccb841
7
- data.tar.gz: cd1e855fba1d4e1a51ce67394c519cb1f2e57464224807b02d17d608007a205658e5c6ac7266a55cfea9cf341bda413790940bdc364ff488fa769223a1c9b36c
6
+ metadata.gz: 9a728aa7bed29637d532075d31611d9224cb55c27fc467594eb4d4a15c632146401b1ea48d647198223c205e0ee5af729bb1a1bc124b6a24ef4f353bc0b2cde3
7
+ data.tar.gz: 674ca49a2f592cd96dcb5abe9d2d6a8129ae025d21d5ceeb66a108b3473722272792e61bbd40fceec74e4aec2d9c82ca0b8eb0af654be958ee3db76c9c455952
data/Gemfile CHANGED
@@ -5,5 +5,11 @@ gem 'rubinius-developer_tools', :platforms => :rbx
5
5
  gem 'sqlite3', '1.3.8', :platforms => [:ruby, :rbx]
6
6
  gem 'activerecord-jdbcsqlite3-adapter', :platforms => :jruby
7
7
 
8
+ group :development do
9
+ gem 'guard'
10
+ gem 'guard-rspec'
11
+ gem 'terminal-notifier-guard'
12
+ end
13
+
8
14
  # Specify your gem's dependencies in enumify.gemspec
9
15
  gemspec
@@ -0,0 +1,20 @@
1
+ guard :rspec, cmd: "bundle exec rspec" do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
4
+ watch('spec/spec_helper.rb') { "spec" }
5
+
6
+ # Rails example
7
+ watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
8
+ watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
9
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
10
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
11
+ watch('config/routes.rb') { "spec/routing" }
12
+ watch('app/controllers/application_controller.rb') { "spec/controllers" }
13
+
14
+ # Capybara features specs
15
+ watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
16
+
17
+ # Turnip features and steps
18
+ watch(%r{^spec/acceptance/(.+)\.feature$})
19
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
20
+ end
data/Readme.md CHANGED
@@ -12,7 +12,7 @@ gem 'enumify'
12
12
 
13
13
  ## How to use
14
14
 
15
- Just call the enum function in any ActiveRecord object, the function accepts the field name as the first variable and the possible values as an array
15
+ Just call the `enum` function in any ActiveRecord object, the function accepts the field name as the first variable and the possible values as an array
16
16
 
17
17
  ```ruby
18
18
  class Event < ActiveRecord::Base
@@ -20,6 +20,19 @@ class Event < ActiveRecord::Base
20
20
  end
21
21
  ```
22
22
 
23
+ ## Rails 4.1+
24
+
25
+ You can also instantiate a _Enumify_ enum by calling the `enumify` method instead of `enum`.
26
+ This is especially helpful when your app is running Rail 4.1 or better which has it's own built in enum (although not as good)
27
+
28
+ ```ruby
29
+ class Event < ActiveRecord::Base
30
+ enumify :status, [:available, :canceled, :completed]
31
+ end
32
+ ```
33
+
34
+ ## Usage
35
+
23
36
  After that you get several autogenerated commands to use with the enum
24
37
 
25
38
  ```ruby
@@ -51,6 +64,20 @@ end
51
64
  Event.create! # Is valid and does not throw an exception.
52
65
  ```
53
66
 
67
+ #### :prefix
68
+ By default all enum values are available as scopes, bang and query methods based on the value.
69
+ You can add a prefix for the enum values in order to differentiate different enums on the same object.
70
+
71
+ ```ruby
72
+ class Event < ActiveRecord::Base
73
+ enum :status, [:available, :canceled, :completed], :prefix => true
74
+ enum :subtype, [:company, :personal], :prefix => 'type'
75
+ end
76
+
77
+ event.available? # Not available anymore
78
+ event.status_available? # when prefix true
79
+ event.type_company? # you can set a specific name for your prefix
80
+ ```
54
81
 
55
82
 
56
83
  ## Callbacks
@@ -2,10 +2,10 @@
2
2
 
3
3
  source "http://rubygems.org"
4
4
 
5
- gem "rubysl", "~> 2.0", :platforms=>:rbx
6
- gem "rubinius-developer_tools", :platforms=>:rbx
7
- gem "sqlite3", "1.3.8", :platforms=>[:ruby, :rbx]
8
- gem "activerecord-jdbcsqlite3-adapter", :platforms=>:jruby
5
+ gem "rubysl", "~> 2.0", :platforms => :rbx
6
+ gem "rubinius-developer_tools", :platforms => :rbx
7
+ gem "sqlite3", "1.3.8", :platforms => [:ruby, :rbx]
8
+ gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
9
9
  gem "activerecord", "~> 3.0.11"
10
10
 
11
- gemspec :path=>"../"
11
+ gemspec :path => "../"
@@ -2,10 +2,10 @@
2
2
 
3
3
  source "http://rubygems.org"
4
4
 
5
- gem "rubysl", "~> 2.0", :platforms=>:rbx
6
- gem "rubinius-developer_tools", :platforms=>:rbx
7
- gem "sqlite3", "1.3.8", :platforms=>[:ruby, :rbx]
8
- gem "activerecord-jdbcsqlite3-adapter", :platforms=>:jruby
5
+ gem "rubysl", "~> 2.0", :platforms => :rbx
6
+ gem "rubinius-developer_tools", :platforms => :rbx
7
+ gem "sqlite3", "1.3.8", :platforms => [:ruby, :rbx]
8
+ gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
9
9
  gem "activerecord", "~> 3.1.12"
10
10
 
11
- gemspec :path=>"../"
11
+ gemspec :path => "../"
@@ -2,10 +2,10 @@
2
2
 
3
3
  source "http://rubygems.org"
4
4
 
5
- gem "rubysl", "~> 2.0", :platforms=>:rbx
6
- gem "rubinius-developer_tools", :platforms=>:rbx
7
- gem "sqlite3", "1.3.8", :platforms=>[:ruby, :rbx]
8
- gem "activerecord-jdbcsqlite3-adapter", :platforms=>:jruby
5
+ gem "rubysl", "~> 2.0", :platforms => :rbx
6
+ gem "rubinius-developer_tools", :platforms => :rbx
7
+ gem "sqlite3", "1.3.8", :platforms => [:ruby, :rbx]
8
+ gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
9
9
  gem "activerecord", "~> 3.2.14"
10
10
 
11
- gemspec :path=>"../"
11
+ gemspec :path => "../"
@@ -2,10 +2,10 @@
2
2
 
3
3
  source "http://rubygems.org"
4
4
 
5
- gem "rubysl", "~> 2.0", :platforms=>:rbx
6
- gem "rubinius-developer_tools", :platforms=>:rbx
7
- gem "sqlite3", "1.3.8", :platforms=>[:ruby, :rbx]
8
- gem "activerecord-jdbcsqlite3-adapter", :platforms=>:jruby
5
+ gem "rubysl", "~> 2.0", :platforms => :rbx
6
+ gem "rubinius-developer_tools", :platforms => :rbx
7
+ gem "sqlite3", "1.3.8", :platforms => [:ruby, :rbx]
8
+ gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
9
9
  gem "activerecord", "~> 4.0.0"
10
10
 
11
- gemspec :path=>"../"
11
+ gemspec :path => "../"
@@ -2,10 +2,10 @@
2
2
 
3
3
  source "http://rubygems.org"
4
4
 
5
- gem "rubysl", "~> 2.0", :platforms=>:rbx
6
- gem "rubinius-developer_tools", :platforms=>:rbx
7
- gem "sqlite3", "1.3.8", :platforms=>[:ruby, :rbx]
8
- gem "activerecord-jdbcsqlite3-adapter", :platforms=>:jruby
5
+ gem "rubysl", "~> 2.0", :platforms => :rbx
6
+ gem "rubinius-developer_tools", :platforms => :rbx
7
+ gem "sqlite3", "1.3.8", :platforms => [:ruby, :rbx]
8
+ gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
9
9
  gem "activerecord", "~> 4.1.0"
10
10
 
11
- gemspec :path=>"../"
11
+ gemspec :path => "../"
@@ -1,62 +1,82 @@
1
1
  module Enumify
2
2
  module Model
3
- def enum(parameter, vals=[], opts={})
4
3
 
5
- validates_inclusion_of parameter, :in => vals, :allow_nil => !!opts[:allow_nil]
6
-
7
- const_set("#{parameter.to_s.pluralize.upcase}", vals)
4
+ def self.included(base)
5
+ base.extend(ClassMethods)
6
+ end
8
7
 
9
- define_method "#{parameter.to_s}" do
10
- attr = read_attribute(parameter)
11
- (attr.nil? || attr.empty?) ? nil : attr.to_sym
12
- end
8
+ module ClassMethods
9
+ def enumify(parameter, vals=[], opts={})
13
10
 
14
- define_method "#{parameter.to_s}=" do |value|
15
- send("_set_#{parameter.to_s}", value, false)
16
- end
11
+ validates_inclusion_of parameter, :in => vals, :allow_nil => !!opts[:allow_nil]
12
+ paramater_string = parameter.to_s
17
13
 
18
- self.class_eval do
14
+ prefix = ''
15
+ if opts[:prefix] == true
16
+ prefix = "#{paramater_string}_"
17
+ elsif opts[:prefix].present?
18
+ prefix = "#{opts[:prefix].to_s}_"
19
+ end
19
20
 
20
- private
21
+ const_set("#{paramater_string.pluralize.upcase}", vals)
21
22
 
22
- define_method "_set_#{parameter.to_s}" do |value, should_save|
23
+ define_method "#{paramater_string}" do
24
+ attr = read_attribute(parameter)
25
+ (attr.nil? || attr.empty?) ? nil : attr.to_sym
26
+ end
23
27
 
24
- value = value and value.to_sym
25
- old = read_attribute(parameter) ? read_attribute(parameter).to_sym : nil
26
- return value if old == value
27
- write_attribute(parameter, (value and value.to_s))
28
- save if should_save
29
- send("#{parameter.to_s}_changed", old, value) if respond_to?("#{parameter.to_s}_changed", true) and !old.nil?
30
- return value
28
+ define_method "#{paramater_string}=" do |value|
29
+ send("_set_#{paramater_string}", value, false)
31
30
  end
32
31
 
33
- end
32
+ self.class_eval do
34
33
 
35
- vals.each do |val|
36
- raise "Collision in enum values method #{val}" if respond_to?("#{val.to_s}?") or respond_to?("#{val.to_s}!") or respond_to?("#{val.to_s}")
34
+ private
37
35
 
38
- define_method "#{val.to_s}?" do
39
- send("#{parameter.to_s}") == val
40
- end
36
+ define_method "_set_#{paramater_string}" do |value, should_save|
37
+
38
+ value = value and value.to_sym
39
+ old = read_attribute(parameter) ? read_attribute(parameter).to_sym : nil
40
+ return value if old == value
41
+ write_attribute(parameter, (value and value.to_s))
42
+ save if should_save
43
+ send("#{paramater_string}_changed", old, value) if respond_to?("#{paramater_string}_changed", true) and !old.nil?
44
+ return value
45
+ end
41
46
 
42
- define_method "#{val.to_s}!" do
43
- send("_set_#{parameter.to_s}", val, true)
44
47
  end
45
48
 
46
- scope val.to_sym, lambda { where(parameter.to_sym => val.to_s) }
47
- end
49
+ vals.each do |val|
50
+ attribute = prefix + val.to_s
51
+ query_method = "#{attribute}?"
52
+ bang_method = "#{attribute}!"
53
+
54
+ raise "Collision in enum values method #{attribute}" if respond_to?(query_method) or respond_to?(bang_method) or respond_to?(attribute)
55
+
56
+ define_method query_method do
57
+ send("#{paramater_string}") == val
58
+ end
48
59
 
49
- # We want to first define all the "positive" scopes and only then define
50
- # the "negation scopes", to make sure they don't override previous scopes
51
- vals.each do |val|
52
- # We need to prefix the field with the table name since if this scope will
53
- # be used in a joined query with other models that have the same enum field then
54
- # it will fail on ambiguous column name.
55
- unless respond_to?("not_#{val}")
56
- scope "not_#{val}", lambda { where("#{self.table_name}.#{parameter} != ?", val.to_s) }
60
+ define_method bang_method do
61
+ send("_set_#{paramater_string}", val, true)
62
+ end
63
+
64
+ scope attribute.to_sym, lambda { where(parameter.to_sym => val.to_s) }
57
65
  end
58
- end
59
66
 
67
+ # We want to first define all the "positive" scopes and only then define
68
+ # the "negation scopes", to make sure they don't override previous scopes
69
+ vals.each do |val|
70
+ # We need to prefix the field with the table name since if this scope will
71
+ # be used in a joined query with other models that have the same enum field then
72
+ # it will fail on ambiguous column name.
73
+ negative_scope = "not_" + prefix + val.to_s
74
+ unless respond_to?(negative_scope)
75
+ scope negative_scope, lambda { where("#{self.table_name}.#{parameter} != ?", val.to_s) }
76
+ end
77
+ end
78
+ end
79
+ alias_method :enum, :enumify
60
80
  end
61
81
 
62
82
  end
@@ -1,8 +1,8 @@
1
- module UrlFormatter
1
+ module Enumify
2
2
  class Railtie < Rails::Railtie
3
3
  initializer 'enumify.model' do
4
4
  ActiveSupport.on_load :active_record do
5
- extend Enumify::Model
5
+ include Enumify::Model
6
6
  end
7
7
  end
8
8
  end
@@ -1,3 +1,3 @@
1
1
  module Enumify
2
- VERSION = '0.0.7'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -1,13 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  class Model < ActiveRecord::Base
4
- extend Enumify::Model
4
+ include Enumify::Model
5
5
 
6
6
  enum :status, [:available, :canceled, :completed]
7
7
  end
8
8
 
9
9
  class OtherModel < ActiveRecord::Base
10
- extend Enumify::Model
10
+ include Enumify::Model
11
11
 
12
12
  belongs_to :model
13
13
 
@@ -15,13 +15,9 @@ class OtherModel < ActiveRecord::Base
15
15
  end
16
16
 
17
17
  class ModelAllowingNil < ActiveRecord::Base
18
+ include Enumify::Model
18
19
  self.table_name = 'models'
19
-
20
- extend Enumify::Model
21
-
22
- belongs_to :model
23
-
24
- enum :status, [:active, :expired, :not_expired], :allow_nil => true
20
+ enum :status, [:available, :canceled, :completed], :allow_nil => true
25
21
  end
26
22
 
27
23
 
@@ -50,7 +46,7 @@ describe :Enumify do
50
46
  describe "model allowing enum value to be nil" do
51
47
  subject { @obj_allowing_nil }
52
48
  it "should be valid" do
53
- subject.should be_valid
49
+ expect(subject).to be_valid
54
50
  end
55
51
 
56
52
  it 'should not raise error when setting value to nil' do
@@ -58,21 +54,21 @@ describe :Enumify do
58
54
  subject.status = nil
59
55
  }.to_not raise_error
60
56
 
61
- subject.status.should be_nil
57
+ expect(subject.status).to be_nil
62
58
  end
63
59
  end
64
60
 
65
61
  describe "model not allowing enum value to be nil" do
66
62
  subject { @obj_not_allowing_nil }
67
63
  it "should be invalid" do
68
- subject.should be_invalid
64
+ expect(subject).to be_invalid
69
65
  end
70
66
 
71
67
  it 'should not raise error when setting value to nil' do
72
68
  expect {
73
69
  subject.status = nil
74
70
  }.to_not raise_error
75
- subject.should be_invalid
71
+ expect(subject).to be_invalid
76
72
  end
77
73
  end
78
74
 
@@ -81,11 +77,11 @@ describe :Enumify do
81
77
  describe "short hand methods" do
82
78
  describe "question mark (?)" do
83
79
  it "should return true if value of enum equals a value" do
84
- @obj.available?.should be_true
80
+ expect(@obj.available?).to be_truthy
85
81
  end
86
82
 
87
83
  it "should return false if value of enum is different " do
88
- @obj.canceled?.should be_false
84
+ expect(@obj.canceled?).to be_falsey
89
85
  end
90
86
 
91
87
  end
@@ -93,13 +89,13 @@ describe :Enumify do
93
89
  describe "exclemation mark (!)" do
94
90
  it "should change the value of the enum to the methods value" do
95
91
  @obj.canceled!
96
- @obj.status.should == :canceled
92
+ expect(@obj).to be_canceled
97
93
  end
98
94
 
99
95
  context 'trying to set the value to the same value' do
100
96
  before { @obj.available! }
101
97
  it 'should not save the object again' do
102
- @obj.should_not_receive(:save)
98
+ expect(@obj).to_not receive(:save)
103
99
  @obj.available!
104
100
  end
105
101
  end
@@ -108,17 +104,19 @@ describe :Enumify do
108
104
 
109
105
  it "should have two shorthand methods for each possible value" do
110
106
  Model::STATUSES.each do |val|
111
- @obj.respond_to?("#{val}?").should be_true
112
- @obj.respond_to?("#{val}!").should be_true
107
+ expect(@obj.respond_to?("#{val}?")).to be_truthy
108
+ expect(@obj.respond_to?("#{val}!")).to be_truthy
113
109
  end
114
110
  end
115
111
  end
116
112
 
117
113
  describe "getting value" do
118
114
  it "should always return the enums value as a symbol" do
119
- @obj.status.should == :available
120
- @obj.status = "canceled"
121
- @obj.status.should == :canceled
115
+ expect {
116
+ @obj.status = "canceled"
117
+ }.to change{
118
+ @obj.status
119
+ }.from(:available).to(:canceled)
122
120
  end
123
121
 
124
122
  end
@@ -126,43 +124,43 @@ describe :Enumify do
126
124
  describe "setting value" do
127
125
  it "should except values as symbol" do
128
126
  @obj.status = :canceled
129
- @obj.canceled?.should be_true
127
+ expect(@obj).to be_canceled
130
128
  end
131
129
 
132
130
  it "should except values as string" do
133
131
  @obj.status = "canceled"
134
- @obj.canceled?.should be_true
132
+ expect(@obj).to be_canceled
135
133
  end
136
134
  end
137
135
 
138
136
  describe "validations" do
137
+ let (:obj) { Model.new(:status => :available) }
138
+
139
139
  it "should not except a value outside the given list" do
140
- @obj = Model.new(:status => :available)
141
- @obj.status = :foobar
142
- @obj.should_not be_valid
140
+ obj.status = :foobar
141
+ expect(obj).to_not be_valid
143
142
  end
144
143
 
145
144
  it "should except value in the list" do
146
- @obj = Model.new(:status => :available)
147
- @obj.status = :canceled
148
- @obj.should be_valid
145
+ obj.status = :canceled
146
+ expect(obj).to be_valid
149
147
  end
150
148
  end
151
149
 
152
150
  describe "callbacks" do
153
151
  it "should receive a callback on change of value" do
154
- @obj.should_receive(:status_changed).with(:available,:canceled)
152
+ expect(@obj).to receive(:status_changed).with(:available,:canceled)
155
153
  @obj.canceled!
156
154
  end
157
155
 
158
156
  it "should not receive a callback on initial value" do
159
157
  @obj = Model.new
160
- @obj.should_not_receive(:status_changed).with(nil, :canceled)
158
+ expect(@obj).to_not receive(:status_changed)
161
159
  @obj.canceled!
162
160
  end
163
161
 
164
162
  it "should not receive a callback on value change to same" do
165
- @obj.should_not_receive(:status_changed).with(:available, :available)
163
+ expect(@obj).to_not receive(:status_changed)
166
164
  @obj.available!
167
165
  end
168
166
 
@@ -170,38 +168,110 @@ describe :Enumify do
170
168
 
171
169
  describe "scopes" do
172
170
  it "should return objects with given value" do
173
- Model.available.should == [@obj]
174
- Model.canceled.should == [@canceled_obj]
171
+ expect(Model.available).to eq [@obj]
172
+ expect(Model.canceled).to eq [@canceled_obj]
175
173
  end
176
174
 
177
175
  it "should return objects with given value when joined with models who have the same enum field" do
178
- OtherModel.joins(:model).active.should == [@active_obj]
176
+ expect(OtherModel.joins(:model).active).to eq [@active_obj]
179
177
  end
180
178
 
181
179
  describe "negation scopes" do
182
180
 
183
181
  it "should return objects that do not have the given value" do
184
- Model.not_available.should include(@canceled_obj, @completed_obj)
182
+ expect(Model.not_available).to include(@canceled_obj, @completed_obj)
185
183
  end
186
184
 
187
185
  it "should return objects that do not have the given value when joined with models who have the same enum field" do
188
- OtherModel.joins(:model).not_active.should include(@expired_obj, @not_expired_obj)
186
+ expect(OtherModel.joins(:model).not_active).to include(@expired_obj, @not_expired_obj)
189
187
  end
190
188
 
191
189
  it "should not override positive scopes" do
192
190
  # We want here to verify that the not_expired scope return only the models with
193
191
  # status == "not_expired" and not all the models with status != "expired",
194
192
  # since negation scopes should not override the "positive" scopes.
195
- OtherModel.not_expired.should == [@not_expired_obj]
193
+ expect(OtherModel.not_expired).to eq [@not_expired_obj]
196
194
  end
197
195
 
198
196
  end
199
197
 
200
198
  end
201
199
 
202
-
203
200
  it "class should have a CONST that holds all the available options of the enum" do
204
- Model::STATUSES.should == [:available, :canceled, :completed]
201
+ expect(Model::STATUSES).to eq [:available, :canceled, :completed]
202
+ end
203
+
204
+ describe 'prefix' do
205
+
206
+
207
+ context 'when prefix set to string' do
208
+
209
+ class ModelWithPrefix < ActiveRecord::Base
210
+ include Enumify::Model
211
+ self.table_name = 'models'
212
+ enum :status, [:available, :canceled, :completed], :prefix => 'foo'
213
+ end
214
+
215
+ subject { ModelWithPrefix.new(:status => :available) }
216
+ it 'does not allow access through unprefixed enum' do
217
+ expect(subject).to_not respond_to(:available?)
218
+ end
219
+
220
+ it 'allows access to the attributes when prefixed by that string' do
221
+ expect(subject).to respond_to(:foo_available?)
222
+ end
223
+
224
+ it 'has a scope available with the prefix' do
225
+ expect(ModelWithPrefix).to respond_to(:foo_available)
226
+ end
227
+
228
+ it 'has no scope for unprefixed methods' do
229
+ expect(ModelWithPrefix).to_not respond_to(:available)
230
+ end
231
+
232
+ it 'has a negative scope available with the prefix' do
233
+ expect(ModelWithPrefix).to respond_to(:not_foo_available)
234
+ end
235
+
236
+ it 'has no negative scope for unprefixed methods' do
237
+ expect(ModelWithPrefix).to_not respond_to(:not_available)
238
+ end
239
+ end
240
+
241
+ context 'when prefix set to true' do
242
+
243
+ class ModelWithPrefixTrue < ActiveRecord::Base
244
+ include Enumify::Model
245
+ self.table_name = 'models'
246
+ enum :status, [:available, :canceled, :completed], :prefix => true
247
+ end
248
+
249
+ subject { ModelWithPrefixTrue.new(:status => :available) }
250
+ it 'does not allow access through unprefixed enum' do
251
+ expect(subject).to_not respond_to(:available?)
252
+ end
253
+
254
+ it 'allows access to the attributes when prefixed by that string' do
255
+ expect(subject).to respond_to(:status_available?)
256
+ end
257
+
258
+ it 'has a scope available with the prefix' do
259
+ expect(ModelWithPrefixTrue).to respond_to(:status_available)
260
+ end
261
+
262
+ it 'has no scope for unprefixed methods' do
263
+ expect(ModelWithPrefixTrue).to_not respond_to(:available)
264
+ end
265
+
266
+ it 'has a negative scope available with the prefix' do
267
+ expect(ModelWithPrefixTrue).to respond_to(:not_status_available)
268
+ end
269
+
270
+ it 'has no negative scope for unprefixed methods' do
271
+ expect(ModelWithPrefixTrue).to_not respond_to(:not_available)
272
+ end
273
+ end
274
+
205
275
  end
206
276
 
207
277
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enumify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - yon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-09 00:00:00.000000000 Z
11
+ date: 2014-09-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -86,6 +86,7 @@ files:
86
86
  - Appraisals
87
87
  - CHANGELOG.md
88
88
  - Gemfile
89
+ - Guardfile
89
90
  - LICENSE
90
91
  - Rakefile
91
92
  - Readme.md
@@ -121,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
122
  version: '0'
122
123
  requirements: []
123
124
  rubyforge_project: enumify
124
- rubygems_version: 2.0.3
125
+ rubygems_version: 2.4.0
125
126
  signing_key:
126
127
  specification_version: 4
127
128
  summary: enumify adds an enum command to all ActiveRecord models which enables you