couchbase-orm 0.0.1 → 0.0.2
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f69d88d6820ca854f9650369e01b4ccb7c431a22
|
4
|
+
data.tar.gz: c80410e6473d97aee26722c763286bd0a322e9ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e157bc072a22300558ef1b6bca1ed2033a4c74e8651b78c09306d43687081b0e3560199c10ab185b8b35ae4fca46056a067ddcbf79af09eacdd2d036f225dce
|
7
|
+
data.tar.gz: 3543a615ad4e0f117139ec75658e714f119e15aef615859fa9a5dd161edc90a54d7ba99606cc29b15d39872a79a31a7f3fdcea41527cfc374abb864aaa3f7ab8
|
data/lib/couchbase-orm/base.rb
CHANGED
@@ -128,9 +128,9 @@ module CouchbaseOrm
|
|
128
128
|
self.class.attributes.each do |key, options|
|
129
129
|
default = options[:default]
|
130
130
|
if default.respond_to?(:call)
|
131
|
-
|
131
|
+
write_attribute key, default.call
|
132
132
|
else
|
133
|
-
|
133
|
+
write_attribute key, default
|
134
134
|
end
|
135
135
|
end
|
136
136
|
|
@@ -2,11 +2,11 @@ module CouchbaseOrm
|
|
2
2
|
module EnsureUnique
|
3
3
|
private
|
4
4
|
|
5
|
-
def ensure_unique(attrs, name = nil, &processor)
|
5
|
+
def ensure_unique(attrs, name = nil, presence: true, &processor)
|
6
6
|
# index uses a special bucket key to allow record lookups based on
|
7
7
|
# the values of attrs. ensure_unique adds a simple lookup using
|
8
8
|
# one of the added methods to identify duplicate
|
9
|
-
name = index(attrs, name, &processor)
|
9
|
+
name = index(attrs, name, presence: presence, &processor)
|
10
10
|
|
11
11
|
validate do |record|
|
12
12
|
unless record.send("#{name}_unique?")
|
@@ -2,7 +2,7 @@ module CouchbaseOrm
|
|
2
2
|
module Index
|
3
3
|
private
|
4
4
|
|
5
|
-
def index(attrs, name = nil, &processor)
|
5
|
+
def index(attrs, name = nil, presence: true, &processor)
|
6
6
|
attrs = Array(attrs).flatten
|
7
7
|
name ||= attrs.map(&:to_s).join('_')
|
8
8
|
|
@@ -67,9 +67,11 @@ module CouchbaseOrm
|
|
67
67
|
# validations
|
68
68
|
#----------------
|
69
69
|
# ensure each component of the unique key is present
|
70
|
-
|
71
|
-
|
72
|
-
|
70
|
+
if presence
|
71
|
+
attrs.each do |attr|
|
72
|
+
validates attr, presence: true
|
73
|
+
define_attribute_methods attr
|
74
|
+
end
|
73
75
|
end
|
74
76
|
|
75
77
|
define_method("#{name}_unique?") do
|
@@ -97,7 +99,10 @@ module CouchbaseOrm
|
|
97
99
|
after_save do |record|
|
98
100
|
original_key = instance_variable_get(original_bucket_key_var)
|
99
101
|
record.class.bucket.delete(original_key, quiet: true) if original_key
|
100
|
-
|
102
|
+
|
103
|
+
unless presence == false && attrs.length == 1 && record[attrs[0]].nil?
|
104
|
+
record.class.bucket.set(record.send(bucket_key_method), record.id, plain: true)
|
105
|
+
end
|
101
106
|
instance_variable_set(original_bucket_key_var, nil)
|
102
107
|
end
|
103
108
|
|
data/lib/couchbase-orm/views.rb
CHANGED
@@ -32,9 +32,9 @@ module CouchbaseOrm
|
|
32
32
|
method_opts[:reduce] = reduce if reduce
|
33
33
|
|
34
34
|
unless method_opts.has_key? :map
|
35
|
-
emit_key = emit_key || :
|
35
|
+
emit_key = emit_key || :created_at
|
36
36
|
|
37
|
-
if emit_key != :
|
37
|
+
if emit_key != :created_at && self.attributes[emit_key][:type].to_s == 'Array'
|
38
38
|
method_opts[:map] = <<-EMAP
|
39
39
|
function(doc) {
|
40
40
|
var i;
|
data/spec/index_spec.rb
CHANGED
@@ -4,8 +4,9 @@ require File.expand_path("../support", __FILE__)
|
|
4
4
|
|
5
5
|
|
6
6
|
class IndexTest < CouchbaseOrm::Base
|
7
|
-
attribute :email
|
8
|
-
|
7
|
+
attribute :email, type: String
|
8
|
+
attribute :name, type: String, default: :joe
|
9
|
+
ensure_unique :email, presence: false
|
9
10
|
end
|
10
11
|
|
11
12
|
class EnumTest < CouchbaseOrm::Base
|
@@ -14,6 +15,11 @@ end
|
|
14
15
|
|
15
16
|
|
16
17
|
describe CouchbaseOrm::Index do
|
18
|
+
after :each do
|
19
|
+
IndexTest.bucket.delete('index_testemail-joe@aca.com')
|
20
|
+
IndexTest.bucket.delete('index_testemail-')
|
21
|
+
end
|
22
|
+
|
17
23
|
it "should prevent models being created if they should have unique keys" do
|
18
24
|
joe = IndexTest.create!(email: 'joe@aca.com')
|
19
25
|
expect { IndexTest.create!(email: 'joe@aca.com') }.to raise_error(CouchbaseOrm::Error::RecordInvalid)
|
@@ -54,6 +60,22 @@ describe CouchbaseOrm::Index do
|
|
54
60
|
again.destroy
|
55
61
|
end
|
56
62
|
|
63
|
+
it "should work with nil values" do
|
64
|
+
joe = IndexTest.create!
|
65
|
+
expect(IndexTest.find_by_email(nil)).to eq(nil)
|
66
|
+
|
67
|
+
joe.email = 'joe@aca.com'
|
68
|
+
joe.save!
|
69
|
+
expect(IndexTest.find_by_email('joe@aca.com')).to eq(joe)
|
70
|
+
|
71
|
+
joe.email = nil
|
72
|
+
joe.save!
|
73
|
+
expect(IndexTest.find_by_email('joe@aca.com')).to eq(nil)
|
74
|
+
expect(IndexTest.find_by_email(nil)).to eq(nil)
|
75
|
+
|
76
|
+
joe.destroy
|
77
|
+
end
|
78
|
+
|
57
79
|
it "should work with enumerators" do
|
58
80
|
# Test symbol
|
59
81
|
enum = EnumTest.create!(visibility: :public)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: couchbase-orm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen von Takach
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: libcouchbase
|