couchpillow 0.3.0 → 0.3.1
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 +4 -4
- data/README.markdown +15 -15
- data/lib/couchpillow/document.rb +10 -1
- data/lib/couchpillow/version.rb +1 -1
- data/lib/couchpillow.rb +1 -0
- data/test/helper.rb +32 -0
- data/test/test_document.rb +30 -8
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd27aa70e0b7f3922ff6580ead5c85c0ad3cbf48
|
4
|
+
data.tar.gz: 7b15227e763211f3638452b5604949b77c5038aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b21d6f6094133fd122e9f3f473c3affcb0e5e268a393138321d0ca7451c57c5d3268fff7afb3abe848abaa563c1f7901d62e19e6e382c47af1572e429ff02a41
|
7
|
+
data.tar.gz: 018d26070dc1111eae361f086fac5317e86fbb01b439a8b8233c16ef68fd8be80fa12cdf14fe316c15d8f790d5788ca2e7d1656a83bb940c7f49571ed31f3d42
|
data/README.markdown
CHANGED
@@ -1,22 +1,25 @@
|
|
1
1
|
# CouchPillow
|
2
2
|
|
3
|
-
Light and comfortable Document wrapper for Couchbase Server.
|
3
|
+
Light and comfortable Document wrapper and integrity tool for Couchbase Server.
|
4
4
|
|
5
5
|
|
6
6
|
## Why CouchPillow?
|
7
7
|
|
8
|
-
Yet another ORM? Not quite. CouchPillow
|
9
|
-
|
8
|
+
Yet another ORM? Not quite. CouchPillow is a wrapper to Couchbase Documents
|
9
|
+
and also an integrity tool to make sure that all current and existing documents
|
10
|
+
can work nicely with the current code.
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
CouchPillow separates itself from the database drivers, making it light and
|
13
|
+
independent from the implementation. Although it is initially designed to work
|
14
|
+
with Couchbase Server, one can easily extend this to other NoSQL drivers as
|
15
|
+
long as they `respond_to?` the `set`, `delete`, `replace`, and `get` methods.
|
14
16
|
|
15
17
|
|
16
18
|
## Features
|
17
19
|
|
18
|
-
- Automatic
|
19
|
-
-
|
20
|
+
- Automatic id generation.
|
21
|
+
- Automatic timestamp.
|
22
|
+
- Built-in and custom data validations.
|
20
23
|
|
21
24
|
|
22
25
|
## Installation
|
@@ -40,13 +43,13 @@ the `set`, `delete`, `replace`, and `get` methods.
|
|
40
43
|
# }
|
41
44
|
|
42
45
|
|
43
|
-
Retrieving Documents
|
46
|
+
Retrieving Documents:
|
44
47
|
|
45
48
|
doc = CouchPillow::Document.get('123')
|
46
49
|
doc.stuff # '123'
|
47
50
|
|
48
51
|
|
49
|
-
Overriding `CouchPillow::Document
|
52
|
+
Overriding `CouchPillow::Document`:
|
50
53
|
|
51
54
|
class User < CouchPillow::Document
|
52
55
|
type :user
|
@@ -65,7 +68,7 @@ Overriding `CouchPillow::Document`
|
|
65
68
|
# 'updated_at': '2014-07-04 00:00:00 UTC'
|
66
69
|
# }
|
67
70
|
|
68
|
-
Using validation
|
71
|
+
Using built-in validation methods:
|
69
72
|
|
70
73
|
class User < CouchPillow::Document
|
71
74
|
type :user
|
@@ -79,18 +82,15 @@ Using validation
|
|
79
82
|
doc.email = 'john@email.com'
|
80
83
|
doc.save! # Success!
|
81
84
|
|
82
|
-
Using custom validation blocks
|
85
|
+
Using custom validation blocks:
|
83
86
|
|
84
87
|
class User < CouchPillow::Document
|
85
88
|
type :user
|
86
|
-
validate_presence :email
|
87
89
|
validate :phone, 'is not a number', lambda { |v| v.is_a? Numeric }
|
88
90
|
end
|
89
91
|
|
90
92
|
CouchPillow.db = Couchbase.connect( bucket: 'default', host: 'localhost' )
|
91
93
|
doc = User.new
|
92
|
-
doc.email = 'john@email.com'
|
93
|
-
doc.first_name = 'john'
|
94
94
|
doc.phone = '123'
|
95
95
|
doc.save! # raises ValidationError('phone is not a number')
|
96
96
|
doc.phone = 123
|
data/lib/couchpillow/document.rb
CHANGED
@@ -13,15 +13,21 @@ module CouchPillow
|
|
13
13
|
|
14
14
|
PRESENCE_LAMBDA = lambda do |value| !value.nil? end
|
15
15
|
|
16
|
+
RESERVED_KEYS = %i[_id _type created_at updated_at]
|
17
|
+
|
16
18
|
|
17
19
|
def initialize hash = {}, id = SecureRandom.hex
|
18
20
|
@data = self.class.symbolize(hash)
|
19
21
|
@id = id
|
20
22
|
|
21
23
|
@data[:created_at] and
|
24
|
+
@data[:created_at].is_a? String and
|
22
25
|
@data[:created_at] = Time.parse(@data[:created_at]) or
|
23
26
|
@data[:created_at] = Time.now.utc
|
24
|
-
|
27
|
+
|
28
|
+
@data[:updated_at] and
|
29
|
+
@data[:updated_at].is_a? String and
|
30
|
+
@data[:updated_at] = Time.parse(@data[:updated_at])
|
25
31
|
|
26
32
|
raise TypeError if @data[:_type] && @data[:_type] != self.class._type
|
27
33
|
@data[:_type] = self.class._type
|
@@ -141,6 +147,9 @@ module CouchPillow
|
|
141
147
|
# Rename an existing key to a new key. This is invoked right after initialize.
|
142
148
|
#
|
143
149
|
def self.rename from, to
|
150
|
+
raise ArgumentError, "Cannot rename reserved keys" if
|
151
|
+
RESERVED_KEYS.include?(from) || RESERVED_KEYS.include?(to)
|
152
|
+
|
144
153
|
rename_keys << [from.to_s.to_sym, to.to_s.to_sym]
|
145
154
|
end
|
146
155
|
|
data/lib/couchpillow/version.rb
CHANGED
data/lib/couchpillow.rb
CHANGED
data/test/helper.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require './lib/couchpillow.rb'
|
2
|
+
|
3
|
+
|
4
|
+
class FakeCouchbaseServer
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@storage = {}
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
def set id, data
|
12
|
+
@storage[id] = data
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
def delete id
|
17
|
+
@storage.delete(id)
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def replace id, data
|
22
|
+
@storage.has_key?(id) or raise "Document does not exist"
|
23
|
+
@storage[id] = data
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
def get id
|
28
|
+
@storage[id]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
data/test/test_document.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'minitest/autorun'
|
2
2
|
require 'minitest/unit'
|
3
3
|
require 'mocha/mini_test'
|
4
|
-
require './
|
4
|
+
require './test/helper.rb'
|
5
5
|
|
6
6
|
class TestDocument < Minitest::Test
|
7
7
|
|
@@ -16,12 +16,7 @@ class TestDocument < Minitest::Test
|
|
16
16
|
|
17
17
|
|
18
18
|
def setup
|
19
|
-
|
20
|
-
@db.stubs(:set)
|
21
|
-
@db.stubs(:delete)
|
22
|
-
@db.stubs(:replace)
|
23
|
-
@db.stubs(:get)
|
24
|
-
CouchPillow.db = @db
|
19
|
+
CouchPillow.db = FakeCouchbaseServer.new
|
25
20
|
end
|
26
21
|
|
27
22
|
|
@@ -83,7 +78,7 @@ class TestDocument < Minitest::Test
|
|
83
78
|
|
84
79
|
def test_validate_custom
|
85
80
|
d = Class.new(Document) do
|
86
|
-
validate
|
81
|
+
validate :xyz, "must be Numeric", lambda { |v| v.is_a? Numeric }
|
87
82
|
end.new
|
88
83
|
d.xyz = "string"
|
89
84
|
assert_raises Document::ValidationError do
|
@@ -133,4 +128,31 @@ class TestDocument < Minitest::Test
|
|
133
128
|
assert_equal 'abc', d.other
|
134
129
|
end
|
135
130
|
|
131
|
+
|
132
|
+
def test_rename_keys_reserved_keys
|
133
|
+
assert_raises ArgumentError do
|
134
|
+
d = Class.new(Document) do
|
135
|
+
rename :_id, :bad
|
136
|
+
end.new
|
137
|
+
end
|
138
|
+
|
139
|
+
assert_raises ArgumentError do
|
140
|
+
d = Class.new(Document) do
|
141
|
+
rename :_type, :err
|
142
|
+
end.new
|
143
|
+
end
|
144
|
+
|
145
|
+
assert_raises ArgumentError do
|
146
|
+
d = Class.new(Document) do
|
147
|
+
rename :created_at, :err
|
148
|
+
end.new
|
149
|
+
end
|
150
|
+
|
151
|
+
assert_raises ArgumentError do
|
152
|
+
d = Class.new(Document) do
|
153
|
+
rename :bla, :updated_at
|
154
|
+
end.new
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
136
158
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: couchpillow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Albert Tedja
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- lib/couchpillow.rb
|
67
67
|
- lib/couchpillow/document.rb
|
68
68
|
- lib/couchpillow/version.rb
|
69
|
+
- test/helper.rb
|
69
70
|
- test/test_document.rb
|
70
71
|
homepage: https://github.com/atedja/pillow
|
71
72
|
licenses:
|