enumify 0.0.7 → 0.1.0

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.
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