uniqueable 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -22,59 +22,90 @@ Or install it yourself as:
22
22
 
23
23
  Uniqueable adds a uniqueable method and validator to your models. Uniqueable is most useful when validating uniqueness across multiple Models and fields.
24
24
 
25
- class User < ActiveRecord::Base
26
- include Uniqueable
27
- uniquable :username
28
- validates :username, :uniqueable => true
29
- end
30
-
31
- class Organsation < ActiveRecord::Base
32
- include Uniqueable
33
- uniquable :alias
34
- validates :alias, :uniqueable => true
35
- end
36
-
37
- user = User.create(:username => "gazler") # Works
38
- organisation = Organisation.create(:alias => "gazler") # Does not work
39
- organisation.errors.messages # {:alias => ["has already been taken"]}
25
+ ```ruby
26
+ class User < ActiveRecord::Base
27
+ include Uniqueable
28
+ uniquable :username
29
+ validates :username, :uniqueable => true
30
+ end
31
+
32
+ class Organsation < ActiveRecord::Base
33
+ include Uniqueable
34
+ uniquable :alias
35
+ validates :alias, :uniqueable => true
36
+ end
37
+
38
+ user = User.create(:username => "gazler") # Works
39
+ organisation = Organisation.create(:alias => "gazler") # Does not work
40
+ organisation.errors.messages # {:alias => ["has already been taken"]}
41
+ ```
40
42
 
41
43
  ### Groups
42
44
  In a large application, you may want to check uniqueness for multiple groups of things. Uniqueable includes groups for this:
43
45
 
44
- class User < ActiveRecord::Base
45
- include Uniqueable
46
- uniquable :username, :group => :names_for_stuff
47
- validates :username, :uniqueable => {:group => :names_for_stuff}
48
- end
46
+ ```ruby
47
+ class User < ActiveRecord::Base
48
+ include Uniqueable
49
+ uniquable :username, :group => :names_for_stuff
50
+ validates :username, :uniqueable => {:group => :names_for_stuff}
51
+ end
52
+
53
+ class Organsation < ActiveRecord::Base
54
+ include Uniqueable
55
+ uniquable :alias, :group => :names_for_stuff
56
+ validates :alias, :uniqueable => {:group => :names_for_stuff}
57
+ end
58
+
59
+ class AdminUser < ActiveRecord::Base
60
+ include Uniqueable
61
+ uniquable :alias, :group => :names_for_stuff
62
+ uniquable :alias
63
+ validates :uniquable
64
+ end
65
+
66
+
67
+ admin_user = AdminUser.create(:alias => "gazler") # Works
68
+ user = User.create(:username => "gazler") # Does not work
69
+ organisation = Organisation.create(:alias => "gazler") # Does not work
70
+ admin_user = AdminUser.create(:alias => "gazler") # Does not work
71
+ ```
72
+
73
+ ### Conditions
74
+
75
+ Sometimes you will only want a field to be checked if certain conditions are satisfied. Let's say we only want public Organisations to be validated against with a user.
76
+
77
+ ```ruby
78
+ class User < ActiveRecord::Base
79
+ include Uniqueable
80
+ uniquable :username, :group => :names_for_stuff
81
+ validates :username, :uniqueable => {:group => :names_for_stuff}
82
+ end
83
+
84
+ class Organsation < ActiveRecord::Base
85
+ include Uniqueable
86
+ uniquable :alias, :group => :names_for_stuff, :conditions => ["public = ?", true]
87
+ validates :alias, :uniqueable => {:group => :names_for_stuff}
88
+ end
89
+
90
+ Organisation.create(:alias => "gazler", :public => true) # Works
91
+ Organisation.create(:alias => "powershift", :public => false) # Works
92
+ User.create(:username => "powershift") # Works
93
+ User.create(:username => "gazler") # Does Not Work
94
+ ```
49
95
 
50
- class Organsation < ActiveRecord::Base
51
- include Uniqueable
52
- uniquable :alias, :group => :names_for_stuff
53
- validates :alias, :uniqueable => {:group => :names_for_stuff}
54
- end
55
96
 
56
- class Organsation < ActiveRecord::Base
57
- include Uniqueable
58
- uniquable :alias, :group => :names_for_stuff
59
- uniquable :alias
60
- validates :uniquable
61
- end
62
-
63
-
64
- admin_user = AdminUser.create(:alias => "gazler") # Works
65
- user = User.create(:username => "gazler") # Does not work
66
- organisation = Organisation.create(:alias => "gazler") # Does not work
67
- admin_user = AdminUser.create(:alias => "gazler") # Does not work
68
97
 
69
98
  ### Other options
70
99
 
71
100
  The `case_sensitive` option can be sent through with the validator. It defaults to true.
72
101
 
73
- class User < ActiveRecord::Base
74
- include Uniqueable
75
- uniquable :username, :group => :names_for_stuff
76
- validates :username, :uniqueable => {:group => :names_for_stuff, :case_sensitive => false}
77
- end
102
+ ```ruby
103
+ class User < ActiveRecord::Base
104
+ include Uniqueable
105
+ uniquable :username, :group => :names_for_stuff
106
+ validates :username, :uniqueable => {:group => :names_for_stuff, :case_sensitive => false}
107
+ end
108
+ ```
78
109
 
79
110
  ### Notes
80
111
 
@@ -6,7 +6,7 @@ module Uniqueable
6
6
 
7
7
  def validate_each(record, attribute, value)
8
8
  checks = record.class.uniqueable_checks[options[:group]]
9
- #Make the check atomic
9
+ #TODO: Make the check atomic
10
10
  return unless checks
11
11
  checks.each do |klass, keys|
12
12
  keys.each do |key|
@@ -25,7 +25,7 @@ module Uniqueable
25
25
 
26
26
  unless result.empty?
27
27
  #Check that the result isn't the record we are validating
28
- unless result.first == record
28
+ unless result.first.attributes.except(:updated_at) == record.attributes.except(:updated_at)
29
29
  return record.errors.add(attribute, :taken)
30
30
  end
31
31
  end
@@ -1,3 +1,3 @@
1
1
  module Uniqueable
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uniqueable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
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-10-03 00:00:00.000000000 Z
12
+ date: 2012-10-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -127,7 +127,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
127
127
  version: '0'
128
128
  segments:
129
129
  - 0
130
- hash: -2704558754954571647
130
+ hash: -2060387812442946570
131
131
  required_rubygems_version: !ruby/object:Gem::Requirement
132
132
  none: false
133
133
  requirements:
@@ -136,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
136
  version: '0'
137
137
  segments:
138
138
  - 0
139
- hash: -2704558754954571647
139
+ hash: -2060387812442946570
140
140
  requirements: []
141
141
  rubyforge_project:
142
142
  rubygems_version: 1.8.24