couchbase-orm 0.0.1 → 0.0.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.
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
|