enumify 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,2 +1,6 @@
1
+ ## v0.0.2
2
+ * Added support for not_ scopes
3
+ * Improved the tests
4
+
1
5
  ## v0.0.1
2
6
  * Initial release
data/Readme.md CHANGED
@@ -1,4 +1,5 @@
1
- # Enumify
1
+ # Enumify [![Build Status](https://secure.travis-ci.org/yonbergman/enumify.png)](http://travis-ci.org/yonbergman/enumify)
2
+
2
3
 
3
4
  enumify adds an enum command to all ActiveRecord models which enables you to work with string attributes as if they were enums
4
5
 
@@ -46,6 +47,18 @@ All you need to do is add a x_changed method in your class and the enumify will
46
47
  end
47
48
 
48
49
 
50
+ ## Scopes
51
+ One last thing that the enumify gem does is created scope (formerly nested_scopes) so you can easly query by the enum
52
+
53
+ For example if you want to count all the events that are canceled you can just run
54
+
55
+ Event.canceled.count
56
+
57
+ In addition you can also use a negation scope to retrieve all the records that are not set to the given value.
58
+ For example to count all the events that are not canceled you can run
59
+
60
+ Event.not_canceled.count
61
+
49
62
  ---
50
63
 
51
- Copyright (c) 2011 Yonatan Bergman, released under the MIT license
64
+ Copyright (c) 2011 Yonatan Bergman, released under the MIT license
data/enumify.gemspec CHANGED
@@ -21,5 +21,6 @@ Gem::Specification.new do |s|
21
21
  # specify any dependencies here; for example:
22
22
  s.add_development_dependency "rake"
23
23
  s.add_development_dependency "rspec"
24
- s.add_development_dependency "supermodel"
24
+ s.add_development_dependency "activerecord"
25
+ s.add_development_dependency "sqlite3"
25
26
  end
data/lib/enumify/model.rb CHANGED
@@ -40,7 +40,12 @@ module Enumify
40
40
  send("_set_#{parameter.to_s}", opt, true)
41
41
  end
42
42
 
43
+
43
44
  scope opt.to_sym, where(parameter.to_sym => opt.to_s)
45
+ # We need to prefix the field with the table name since if this scope will
46
+ # be used in a joined query with other models that have the same enum field then
47
+ # it will fail on ambiguous column name.
48
+ scope "not_#{opt}".to_sym, where("#{self.table_name}.#{parameter} != ?", opt.to_s)
44
49
  end
45
50
 
46
51
  end
@@ -1,3 +1,3 @@
1
1
  module Enumify
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,19 +1,31 @@
1
1
  require 'spec_helper'
2
2
 
3
- class Model < SuperModel::Base
4
- include ActiveModel::Validations
3
+ class Model < ActiveRecord::Base
5
4
  extend Enumify::Model
6
- def self.scope(name,hash={}) self end
7
- def self.where(hash={}) self end
8
5
 
9
6
  enum :status, [:available, :canceled, :completed]
10
-
7
+ end
8
+
9
+ class OtherModel < ActiveRecord::Base
10
+ extend Enumify::Model
11
+
12
+ belongs_to :model
13
+
14
+ enum :status, [:active, :expired]
11
15
  end
12
16
 
13
17
  describe :Enumify do
14
18
 
15
19
  before(:each) do
16
- @obj = Model.new(:status => :available)
20
+ Model.delete_all
21
+ OtherModel.delete_all
22
+
23
+ @obj = Model.create!(:status => :available)
24
+ @canceled_obj = Model.create!(:status => :canceled)
25
+ @completed_obj = Model.create!(:status => :completed)
26
+
27
+ @active_obj = OtherModel.create!(:status => :active, :model => @obj)
28
+ @expired_obj = OtherModel.create!(:status => :expired, :model => @canceled_obj)
17
29
  end
18
30
 
19
31
  describe "short hand methods" do
@@ -97,6 +109,30 @@ describe :Enumify do
97
109
 
98
110
  end
99
111
 
112
+ describe "scopes" do
113
+ it "should return objects with given value" do
114
+ Model.available.should == [@obj]
115
+ Model.canceled.should == [@canceled_obj]
116
+ end
117
+
118
+ it "should return objects with given value when joined with models who have the same enum field" do
119
+ OtherModel.joins(:model).active.should == [@active_obj]
120
+ end
121
+
122
+ describe "negation scopes" do
123
+
124
+ it "should return objects that do not have the given value" do
125
+ Model.not_available.should include(@canceled_obj, @completed_obj)
126
+ end
127
+
128
+ it "should return objects that do not have the given value when joined with models who have the same enum field" do
129
+ OtherModel.joins(:model).not_active.should == [@expired_obj]
130
+ end
131
+ end
132
+
133
+ end
134
+
135
+
100
136
  it "class should have a CONST that holds all the available options of the enum" do
101
137
  Model::STATUSES.should == [:available, :canceled, :completed]
102
138
  end
data/spec/spec_helper.rb CHANGED
@@ -1,2 +1,20 @@
1
1
  require 'enumify'
2
- require 'supermodel'
2
+ require 'active_record'
3
+
4
+ def set_database
5
+ db_config = {:adapter => "sqlite3", :database => ":memory:"}
6
+ ActiveRecord::Base.establish_connection(db_config)
7
+ connection = ActiveRecord::Base.connection
8
+
9
+ connection.create_table :models do |t|
10
+ t.string :status
11
+ end
12
+
13
+ connection.create_table :other_models do |t|
14
+ t.string :status
15
+ t.references :model
16
+ end
17
+ end
18
+
19
+ set_database
20
+
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enumify
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - yon
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-12-20 00:00:00 Z
18
+ date: 2012-04-18 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rake
@@ -46,7 +46,7 @@ dependencies:
46
46
  type: :development
47
47
  version_requirements: *id002
48
48
  - !ruby/object:Gem::Dependency
49
- name: supermodel
49
+ name: activerecord
50
50
  prerelease: false
51
51
  requirement: &id003 !ruby/object:Gem::Requirement
52
52
  none: false
@@ -59,6 +59,20 @@ dependencies:
59
59
  version: "0"
60
60
  type: :development
61
61
  version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: sqlite3
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
73
+ version: "0"
74
+ type: :development
75
+ version_requirements: *id004
62
76
  description: enumify adds an enum command to all ActiveRecord models which enables you to work with string attributes as if they were enums
63
77
  email:
64
78
  - yonatanbergman@gmail.com