devise_couch 0.1.1 → 0.1.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/Gemfile +3 -3
- data/README.markdown +2 -23
- data/Rakefile +2 -1
- data/lib/devise/orm/couchrest_model/compatibility.rb +1 -51
- data/lib/devise/orm/couchrest_model.rb +9 -8
- data/lib/devise_couch/version.rb +1 -1
- metadata +3 -7
- data/lib/devise/orm/couchrest_model/couch_validations.rb +0 -88
- data/lib/devise/orm/couchrest_model/date_time.rb +0 -14
- data/lib/devise/orm/couchrest_model/schema.rb +0 -85
- data/lib/devise/orm/couchrest_model_active_model.rb +0 -66
data/Gemfile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
source 'http://rubygems.org'
|
2
2
|
|
3
|
-
|
4
|
-
gem 'rails', :git => 'git://github.com/rails/rails.git'
|
3
|
+
gem 'rails', '3.0.0'
|
4
|
+
#gem 'rails', :git => 'git://github.com/rails/rails.git'
|
5
5
|
|
6
6
|
gem 'warden'
|
7
7
|
gem 'devise', :git => 'git://github.com/plataformatec/devise.git'
|
@@ -16,4 +16,4 @@ gem 'rails3-generators', :git => 'git://github.com/shenoudab/rails3-generators.g
|
|
16
16
|
|
17
17
|
gem 'webrat', '0.7.0'
|
18
18
|
gem 'mocha', :require => false
|
19
|
-
gem 'bcrypt-ruby', :require => 'bcrypt'
|
19
|
+
gem 'bcrypt-ruby', :require => 'bcrypt'
|
data/README.markdown
CHANGED
@@ -2,25 +2,6 @@
|
|
2
2
|
|
3
3
|
*devise_couch* will let you use [devise](http://github.com/plataformatec/devise) with [CocuhrestModel](http://github.com/couchrest/couchrest_model).
|
4
4
|
|
5
|
-
*devise_couch* is intended for use with *Rails 3* and *Devise 1.1.1*. It may work with earlier versions of devise, but it's not been tested.
|
6
|
-
|
7
|
-
This README only covers *devise_couch* specifics. Make sure to read the [devise README](http://github.com/plataformatec/devise/blob/master/README.rdoc)
|
8
|
-
|
9
|
-
## Usage options
|
10
|
-
|
11
|
-
The gem gives you the options of 2 ORM setups depending on what library you wish to use for validations:
|
12
|
-
|
13
|
-
* *couchrest_model* - Uses CocuhrestModel validations
|
14
|
-
* *couchrest_model_active_model* - Uses ActiveModel::Validations
|
15
|
-
|
16
|
-
The advantage to this is ActiveModel's I18n support for error messages, and it uses the same validations lib as devise does by default.
|
17
|
-
|
18
|
-
## ActiveModel compatibility
|
19
|
-
|
20
|
-
Currently only the <code>couchrest_model</code> option has been tested.
|
21
|
-
There should be full ActiveModel support in a future version of CocuhrestModel, after Rails 3 is released.
|
22
|
-
ActiveModel support will likely be part of *CocuhrestModel 1.0* (as mentioned by jnunemaker in a post).
|
23
|
-
|
24
5
|
## Installation
|
25
6
|
|
26
7
|
Add *devise*, *devise_couch* and *couchrest_model* gems to your Gemfile (your Rails app Gemfile). The following gems are required
|
@@ -33,10 +14,8 @@ Add *devise*, *devise_couch* and *couchrest_model* gems to your Gemfile (your Ra
|
|
33
14
|
gem 'devise_couch'
|
34
15
|
gem 'rails3-generators', :git => 'git://github.com/shenoudab/rails3-generators.git'
|
35
16
|
</pre>
|
36
|
-
|
37
|
-
<pre>gem install rails3-generators</pre>
|
38
17
|
|
39
|
-
|
18
|
+
Use bundler to install all required gems in your Rails 3 app
|
40
19
|
|
41
20
|
<pre>bundle install</pre>
|
42
21
|
|
@@ -46,7 +25,7 @@ Run the generator:
|
|
46
25
|
|
47
26
|
The generator will install an initializer which describes ALL Devise's
|
48
27
|
configuration options and you MUST take a look at it. Make sure to specify
|
49
|
-
either <code>
|
28
|
+
either <code>couchrest_model</code> (ActiveModel::Validations)
|
50
29
|
as the orm in the configuration file.
|
51
30
|
|
52
31
|
To add Devise to any of your models using the generator:
|
data/Rakefile
CHANGED
@@ -49,6 +49,7 @@ spec = Gem::Specification.new do |s|
|
|
49
49
|
s.email = "sbertel@mobithought.com"
|
50
50
|
s.homepage = "http://github.com/shenoudab/devise_couch"
|
51
51
|
s.author = 'Shenouda Bertel'
|
52
|
+
s.require_path = 'lib'
|
52
53
|
end
|
53
54
|
|
54
55
|
Rake::GemPackageTask.new(spec) do |pkg|
|
@@ -57,4 +58,4 @@ end
|
|
57
58
|
desc "Install the gem #{spec.name}-#{spec.version}.gem"
|
58
59
|
task :install do
|
59
60
|
system("gem install pkg/#{spec.name}-#{spec.version}.gem --no-ri --no-rdoc")
|
60
|
-
end
|
61
|
+
end
|
@@ -2,25 +2,9 @@ module Devise
|
|
2
2
|
module Orm
|
3
3
|
module CouchrestModel
|
4
4
|
module Compatibility
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
|
7
5
|
extend ActiveSupport::Concern
|
8
6
|
extend ActiveModel::Naming
|
9
7
|
|
10
|
-
include ActiveModel::Serializers::Xml
|
11
|
-
include ActiveModel::Serializers::JSON
|
12
|
-
|
13
|
-
def to_xml(options = {}, &block)
|
14
|
-
options[:except] ||= []
|
15
|
-
options[:except] << :_id
|
16
|
-
|
17
|
-
super options do |b|
|
18
|
-
b.id self.id
|
19
|
-
block.call(b) if block_given?
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
8
|
module ClassMethods
|
25
9
|
# Hooks for confirmable
|
26
10
|
def before_create(*args)
|
@@ -48,42 +32,8 @@ module Devise
|
|
48
32
|
METHOD
|
49
33
|
end
|
50
34
|
end
|
51
|
-
|
52
|
-
# Add ActiveRecord like finder
|
53
|
-
def find(*args)
|
54
|
-
case args.first
|
55
|
-
when :first, :all
|
56
|
-
send(args.shift, *args)
|
57
|
-
else
|
58
|
-
where(:'_id' => args.first).first
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
# def changed?
|
64
|
-
# dirty?
|
65
|
-
# end
|
66
|
-
|
67
|
-
def save(options=nil)
|
68
|
-
if options.is_a?(Hash) && options[:validate] == false
|
69
|
-
save!
|
70
|
-
else
|
71
|
-
super()
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def update_attribute(name, value)
|
76
|
-
update_attributes(name => value)
|
77
|
-
end
|
78
|
-
#
|
79
|
-
# def update_attributes(*args)
|
80
|
-
# update(*args)
|
81
|
-
# end
|
82
|
-
|
83
|
-
def invalid?
|
84
|
-
!valid?
|
85
35
|
end
|
86
36
|
end
|
87
37
|
end
|
88
38
|
end
|
89
|
-
end
|
39
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
require
|
1
|
+
require 'couchrest/model/base'
|
2
|
+
require 'devise/orm/couchrest_model/compatibility'
|
2
3
|
|
3
4
|
module Devise
|
4
5
|
module Orm
|
@@ -6,24 +7,24 @@ module Devise
|
|
6
7
|
module Hook
|
7
8
|
def devise_modules_hook!
|
8
9
|
extend Schema
|
9
|
-
#
|
10
|
+
#include Compatibility
|
10
11
|
yield
|
11
12
|
return unless Devise.apply_schema
|
12
13
|
devise_modules.each { |m| send(m) if respond_to?(m, true) }
|
13
14
|
end
|
14
|
-
end
|
15
|
+
end
|
15
16
|
|
16
17
|
module Schema
|
17
18
|
include Devise::Schema
|
18
19
|
# Tell how to apply schema methods.
|
19
20
|
def apply_devise_schema(name, type, options={})
|
20
21
|
return unless Devise.apply_schema
|
21
|
-
property name,
|
22
|
+
property name, type, options
|
22
23
|
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
27
28
|
|
28
29
|
module CouchRest
|
29
30
|
module Model
|
data/lib/devise_couch/version.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 2
|
9
|
+
version: 0.1.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Shenouda Bertel
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-09-07 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|
@@ -33,11 +33,7 @@ files:
|
|
33
33
|
- Rakefile
|
34
34
|
- README.markdown
|
35
35
|
- lib/devise_couch/version.rb
|
36
|
-
- lib/devise/orm/couchrest_model/date_time.rb
|
37
|
-
- lib/devise/orm/couchrest_model/schema.rb
|
38
|
-
- lib/devise/orm/couchrest_model/couch_validations.rb
|
39
36
|
- lib/devise/orm/couchrest_model/compatibility.rb
|
40
|
-
- lib/devise/orm/couchrest_model_active_model.rb
|
41
37
|
- lib/devise/orm/couchrest_model.rb
|
42
38
|
- lib/generators/couchrest_model/devise_generator.rb
|
43
39
|
has_rdoc: true
|
@@ -1,88 +0,0 @@
|
|
1
|
-
module Validatable
|
2
|
-
# Monkey-patch Validatable::Errors to support generation of error message from a Symbol.
|
3
|
-
class Errors
|
4
|
-
@@default_error_messages = {}
|
5
|
-
|
6
|
-
# Holds a hash with all the default error messages that can be replaced by your own copy or localizations.
|
7
|
-
def self.default_error_messages=(default_error_messages)
|
8
|
-
@@default_error_messages = default_error_messages
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.default_error_message(key, field, *values)
|
12
|
-
field = field.to_s.humanize
|
13
|
-
@@default_error_messages[key] % [field, *values].flatten
|
14
|
-
end
|
15
|
-
|
16
|
-
# original add before monkey-patch
|
17
|
-
# def add(attribute, message) #:nodoc:
|
18
|
-
# errors[attribute.to_sym] = [] if errors[attribute.to_sym].nil?
|
19
|
-
# errors[attribute.to_sym] << message
|
20
|
-
# end
|
21
|
-
|
22
|
-
alias_method :original_add, :add
|
23
|
-
|
24
|
-
# If the message is a Symbol, allow +default_error_message+ to generate
|
25
|
-
# the message, including translation.
|
26
|
-
def add(field_name, message)
|
27
|
-
if message.kind_of?(Symbol)
|
28
|
-
message = self.class.default_error_message(message, field_name)
|
29
|
-
end
|
30
|
-
fld_name = field_name.to_sym
|
31
|
-
errors[fld_name] = [] if errors[fld_name].nil?
|
32
|
-
original_add(fld_name, message) unless errors[fld_name].include?(message)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
module Validatable
|
38
|
-
class ValidatesPresenceOf < ValidationBase #:nodoc:
|
39
|
-
def message(instance)
|
40
|
-
super || "can't be blank"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
module Validatable
|
46
|
-
class ValidatesLengthOf < ValidationBase #:nodoc:
|
47
|
-
def message(instance)
|
48
|
-
min = !within.nil? ? within.first : minimum
|
49
|
-
max = !within.nil? ? within.last : maximum
|
50
|
-
super || "must be between #{min} and #{max} characters long"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
|
56
|
-
# Default error messages consistent with ActiveModel messages and devise
|
57
|
-
# expectations.
|
58
|
-
Validatable::Errors.default_error_messages = {
|
59
|
-
:absent => 'must be absent',
|
60
|
-
:inclusion => 'is not included in the list',
|
61
|
-
:exclusion => 'is reserved',
|
62
|
-
:invalid => 'is invalid',
|
63
|
-
:confirmation => " doesn't match confirmation",
|
64
|
-
:accepted => 'must be accepted',
|
65
|
-
:nil => 'must not be nil',
|
66
|
-
:empty => "can't be empty",
|
67
|
-
:blank => "can't be blank",
|
68
|
-
:length_between => 'must be between %s and %s characters long',
|
69
|
-
:too_long => 'is too long (maximum is %s characters)',
|
70
|
-
:too_short => 'is too short (minimum is %s characters)',
|
71
|
-
:wrong_length => 'is the wrong length (should be %s characters)',
|
72
|
-
:taken => 'has already been taken',
|
73
|
-
:not_a_number => 'is not a number',
|
74
|
-
:not_an_integer => 'must be an integer',
|
75
|
-
:greater_than => 'must be greater than %s',
|
76
|
-
:greater_than_or_equal_to => 'must be greater than or equal to ',
|
77
|
-
:equal_to => 'must be equal to %s',
|
78
|
-
:not_equal_to => 'must not be equal to %s',
|
79
|
-
:less_than => 'must be less than %s',
|
80
|
-
:less_than_or_equal_to => 'must be less than or equal to %s',
|
81
|
-
:value_between => 'must be between %s and %s',
|
82
|
-
:odd => 'must be odd',
|
83
|
-
:even => 'must be even',
|
84
|
-
:primitive => 'must be of type %s',
|
85
|
-
:not_found => 'not found',
|
86
|
-
:already_confirmed => 'was already confirmed',
|
87
|
-
:not_locked => 'was not locked'
|
88
|
-
}
|
@@ -1,85 +0,0 @@
|
|
1
|
-
module CouchrestModel
|
2
|
-
class ValidationUtil
|
3
|
-
class << self
|
4
|
-
attr_accessor :counter
|
5
|
-
|
6
|
-
def inc_counter
|
7
|
-
@counter ||= 0
|
8
|
-
@counter += 1
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
module Devise
|
14
|
-
module Orm
|
15
|
-
module CouchrestModel
|
16
|
-
module Schema
|
17
|
-
include Devise::Schema
|
18
|
-
|
19
|
-
SCHEMA_OPTIONS = {
|
20
|
-
:null => :required,
|
21
|
-
:limit => :length
|
22
|
-
}
|
23
|
-
|
24
|
-
# Tell how to apply schema methods. This automatically maps :limit to
|
25
|
-
# :length and :null to :required.
|
26
|
-
def apply_devise_schema(name, type, options={})
|
27
|
-
SCHEMA_OPTIONS.each do |old_key, new_key|
|
28
|
-
next unless options.key?(old_key)
|
29
|
-
if :null == old_key
|
30
|
-
# :required is opposite of :null
|
31
|
-
options[new_key] = !options.delete(old_key)
|
32
|
-
else
|
33
|
-
options[new_key] = options.delete(old_key)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
options.delete(:default) if options[:default].nil?
|
38
|
-
required_option = options.delete(:required)
|
39
|
-
length_option = options.delete(:length)
|
40
|
-
|
41
|
-
type = Time if type == DateTime
|
42
|
-
|
43
|
-
key name, type, options
|
44
|
-
|
45
|
-
counter = ::CouchrestModel::ValidationUtil.inc_counter
|
46
|
-
|
47
|
-
handle_email(name, counter) if name == :email
|
48
|
-
handle_length(name, counter, length_option) if length_option
|
49
|
-
handle_required(name, counter) if required_option
|
50
|
-
end
|
51
|
-
|
52
|
-
protected
|
53
|
-
|
54
|
-
def make_key prefix, name, counter
|
55
|
-
"#{prefix}_#{name}_#{counter}"
|
56
|
-
end
|
57
|
-
|
58
|
-
def handle_required name, counter
|
59
|
-
key = make_key :presence, name, counter
|
60
|
-
validates_presence_of name.to_sym, :key => key
|
61
|
-
end
|
62
|
-
|
63
|
-
def handle_email name, counter
|
64
|
-
key = make_key :unique, name, counter
|
65
|
-
validates_uniqueness_of name.to_sym, :key => key
|
66
|
-
end
|
67
|
-
|
68
|
-
def handle_length name, counter, length_option
|
69
|
-
key = make_key :length, name, counter
|
70
|
-
options = case length_option
|
71
|
-
when Fixnum
|
72
|
-
{:maximum => length_option}
|
73
|
-
when Hash
|
74
|
-
length_option
|
75
|
-
else
|
76
|
-
raise ArgumentError, "length validation option must be either a Fixnum or Hash"
|
77
|
-
end
|
78
|
-
options[:key] = key
|
79
|
-
|
80
|
-
validates_length_of name.to_sym, options
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
@@ -1,66 +0,0 @@
|
|
1
|
-
require 'devise/orm/couchrest_model/compatibility'
|
2
|
-
require 'devise/orm/couchrest_model/schema'
|
3
|
-
require 'devise/orm/couchrest_model/date_time'
|
4
|
-
|
5
|
-
module Devise
|
6
|
-
module Orm
|
7
|
-
module CouchrestModel
|
8
|
-
module Hook
|
9
|
-
def devise_modules_hook!
|
10
|
-
extend Schema
|
11
|
-
include ActiveModel::Validations
|
12
|
-
include ActiveModelCompatibility
|
13
|
-
include Compatibility
|
14
|
-
class << self; attr_reader :descendants; end;
|
15
|
-
|
16
|
-
def self.validates_uniqueness_of(*fields)
|
17
|
-
validates_with UniquenessValidator, _merge_attributes(fields)
|
18
|
-
end
|
19
|
-
|
20
|
-
yield
|
21
|
-
|
22
|
-
return unless Devise.apply_schema
|
23
|
-
devise_modules.each { |m| send(m) if respond_to?(m, true) }
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
# http://github.com/jkaramon/CouchrestModel/blob/rails3/lib/couchrest_model/plugins/validations.rb
|
28
|
-
# ==============================================================
|
29
|
-
# validates_each in couchrest_model should work just fine!
|
30
|
-
# ==============================================================
|
31
|
-
|
32
|
-
# class UniquenessValidator < ActiveModel::EachValidator
|
33
|
-
# def validate_each(target, attribute, value)
|
34
|
-
# resource = ::DataMapper.repository(target.repository.name) { target.model.first(attribute => value) }
|
35
|
-
# if resource.nil? || (target.saved? && resource.key == target.key)
|
36
|
-
# return true
|
37
|
-
# else
|
38
|
-
# target.errors.add(attribute, :taken)
|
39
|
-
# return false
|
40
|
-
# end
|
41
|
-
# end
|
42
|
-
# end
|
43
|
-
|
44
|
-
module ActiveModelCompatibility
|
45
|
-
# include ActiveModel::Validations does not make save check valid?.
|
46
|
-
# This may not be the best solution, but it seems to work. Note that
|
47
|
-
# Compatibility is included after this module; its #save method handles
|
48
|
-
# the :validate => false option.
|
49
|
-
def save(*args)
|
50
|
-
retval = valid? && super(*args)
|
51
|
-
assert_save_successful(:save, retval)
|
52
|
-
retval
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
module CouchRest
|
60
|
-
module Model
|
61
|
-
class Base
|
62
|
-
extend ::Devise::Models
|
63
|
-
extend ::Devise::Orm::CouchrestModel::Hook
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|