couchbase-model 0.5.0 → 0.5.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.
- data/HISTORY.markdown +4 -0
- data/lib/couchbase/model.rb +37 -5
- data/lib/couchbase/model/version.rb +1 -1
- data/lib/couchbase/railtie.rb +2 -1
- data/test/test_model.rb +4 -2
- metadata +96 -112
data/HISTORY.markdown
CHANGED
data/lib/couchbase/model.rb
CHANGED
@@ -430,11 +430,20 @@ module Couchbase
|
|
430
430
|
# @since 0.0.1
|
431
431
|
#
|
432
432
|
# @param [Hash] args attribute-value pairs for the object
|
433
|
-
# @return [Couchbase::Model] an instance of the model
|
433
|
+
# @return [Couchbase::Model, false] an instance of the model
|
434
434
|
def self.create(*args)
|
435
435
|
new(*args).create
|
436
436
|
end
|
437
437
|
|
438
|
+
# Creates an object just like {{Model.create} but raises an exception if
|
439
|
+
# the record is invalid.
|
440
|
+
#
|
441
|
+
# @since 0.5.1
|
442
|
+
# @raise [Couchbase::Error::RecordInvalid] if the instance is invalid
|
443
|
+
def self.create!(*args)
|
444
|
+
new(*args).create!
|
445
|
+
end
|
446
|
+
|
438
447
|
# Constructor for all subclasses of Couchbase::Model
|
439
448
|
#
|
440
449
|
# @since 0.0.1
|
@@ -473,7 +482,7 @@ module Couchbase
|
|
473
482
|
#
|
474
483
|
# @since 0.0.1
|
475
484
|
#
|
476
|
-
# @return [Couchbase::Model] newly created object
|
485
|
+
# @return [Couchbase::Model, false] newly created object
|
477
486
|
#
|
478
487
|
# @raise [Couchbase::Error::KeyExists] if model with the same +id+
|
479
488
|
# exists in the bucket
|
@@ -484,7 +493,7 @@ module Couchbase
|
|
484
493
|
def create(options = {})
|
485
494
|
@id ||= Couchbase::Model::UUID.generator.next(1, model.thread_storage[:uuid_algorithm])
|
486
495
|
if respond_to?(:valid?) && !valid?
|
487
|
-
|
496
|
+
return false
|
488
497
|
end
|
489
498
|
options = model.defaults.merge(options)
|
490
499
|
value = (options[:format] == :plain) ? @raw : attributes_with_values
|
@@ -498,13 +507,25 @@ module Couchbase
|
|
498
507
|
self
|
499
508
|
end
|
500
509
|
|
510
|
+
# Creates an object just like {{Model#create} but raises an exception if
|
511
|
+
# the record is invalid.
|
512
|
+
#
|
513
|
+
# @since 0.5.1
|
514
|
+
#
|
515
|
+
# @raise [Couchbase::Error::RecordInvalid] if the instance is invalid
|
516
|
+
def create!(options = {})
|
517
|
+
create(options) || raise(Couchbase::Error::RecordInvalid.new(self))
|
518
|
+
end
|
519
|
+
|
501
520
|
# Create or update this object based on the state of #new?.
|
502
521
|
#
|
503
522
|
# @since 0.0.1
|
504
523
|
#
|
505
524
|
# @param [Hash] options options for operation, see
|
506
525
|
# {{Couchbase::Bucket#set}}
|
507
|
-
#
|
526
|
+
#
|
527
|
+
# @return [Couchbase::Model, false] saved object or false if there
|
528
|
+
# are validation errors
|
508
529
|
#
|
509
530
|
# @example Update the Post model
|
510
531
|
# p = Post.find('hello-world')
|
@@ -515,10 +536,11 @@ module Couchbase
|
|
515
536
|
# p = Post.find('hello-world')
|
516
537
|
# p.draft = false
|
517
538
|
# p.save('cas' => p.meta['cas'])
|
539
|
+
#
|
518
540
|
def save(options = {})
|
519
541
|
return create(options) unless @meta
|
520
542
|
if respond_to?(:valid?) && !valid?
|
521
|
-
|
543
|
+
return false
|
522
544
|
end
|
523
545
|
options = model.defaults.merge(options)
|
524
546
|
value = (options[:format] == :plain) ? @raw : attributes_with_values
|
@@ -526,6 +548,16 @@ module Couchbase
|
|
526
548
|
self
|
527
549
|
end
|
528
550
|
|
551
|
+
# Creates an object just like {{Model#save} but raises an exception if
|
552
|
+
# the record is invalid.
|
553
|
+
#
|
554
|
+
# @since 0.5.1
|
555
|
+
#
|
556
|
+
# @raise [Couchbase::Error::RecordInvalid] if the instance is invalid
|
557
|
+
def save!(options = {})
|
558
|
+
save(options) || raise(Couchbase::Error::RecordInvalid.new(self))
|
559
|
+
end
|
560
|
+
|
529
561
|
# Update this object, optionally accepting new attributes.
|
530
562
|
#
|
531
563
|
# @since 0.0.1
|
data/lib/couchbase/railtie.rb
CHANGED
@@ -50,7 +50,8 @@ module Rails #:nodoc:
|
|
50
50
|
def self.rescue_responses
|
51
51
|
{
|
52
52
|
"Couchbase::Error::NotFound" => :not_found,
|
53
|
-
"Couchbase::Error::NotStored" => :unprocessable_entity
|
53
|
+
"Couchbase::Error::NotStored" => :unprocessable_entity,
|
54
|
+
"Couchbase::Error::RecordInvalid" => :unprocessable_entity
|
54
55
|
}
|
55
56
|
end
|
56
57
|
|
data/test/test_model.rb
CHANGED
@@ -225,11 +225,13 @@ class TestModel < MiniTest::Unit::TestCase
|
|
225
225
|
post = ValidPost.create(:title => 'Hello, World!')
|
226
226
|
assert post.valid?, "post with title should be valid"
|
227
227
|
post.title = nil
|
228
|
+
refute post.save
|
228
229
|
assert_raises(Couchbase::Error::RecordInvalid) do
|
229
|
-
post.save
|
230
|
+
post.save!
|
230
231
|
end
|
232
|
+
refute ValidPost.create(:title => nil)
|
231
233
|
assert_raises(Couchbase::Error::RecordInvalid) do
|
232
|
-
ValidPost.create(:title => nil)
|
234
|
+
ValidPost.create!(:title => nil)
|
233
235
|
end
|
234
236
|
end
|
235
237
|
|
metadata
CHANGED
@@ -1,121 +1,118 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: couchbase-model
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.1
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 5
|
9
|
-
- 0
|
10
|
-
version: 0.5.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Couchbase
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
type: :runtime
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
12
|
+
date: 2012-11-29 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: couchbase
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
18
|
+
requirements:
|
26
19
|
- - ~>
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: -168919795
|
29
|
-
segments:
|
30
|
-
- 1
|
31
|
-
- 2
|
32
|
-
- 0
|
33
|
-
- dp
|
20
|
+
- !ruby/object:Gem::Version
|
34
21
|
version: 1.2.0.dp
|
35
|
-
|
36
|
-
version_requirements: *id001
|
22
|
+
type: :runtime
|
37
23
|
prerelease: false
|
38
|
-
|
39
|
-
type: :development
|
40
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
25
|
none: false
|
42
|
-
requirements:
|
26
|
+
requirements:
|
43
27
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
46
|
-
|
47
|
-
- 0
|
48
|
-
- 8
|
49
|
-
- 7
|
50
|
-
version: 0.8.7
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.2.0.dp
|
30
|
+
- !ruby/object:Gem::Dependency
|
51
31
|
name: rake
|
52
|
-
|
53
|
-
|
54
|
-
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.8.7
|
55
38
|
type: :development
|
56
|
-
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
41
|
none: false
|
58
|
-
requirements:
|
59
|
-
- -
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
|
62
|
-
|
63
|
-
- 0
|
64
|
-
version: "0"
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.8.7
|
46
|
+
- !ruby/object:Gem::Dependency
|
65
47
|
name: minitest
|
66
|
-
|
67
|
-
|
68
|
-
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
69
54
|
type: :development
|
70
|
-
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
57
|
none: false
|
72
|
-
requirements:
|
73
|
-
- -
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
|
76
|
-
|
77
|
-
- 0
|
78
|
-
version: "0"
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
79
63
|
name: rdiscount
|
80
|
-
|
81
|
-
|
82
|
-
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
83
70
|
type: :development
|
84
|
-
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
73
|
none: false
|
86
|
-
requirements:
|
87
|
-
- -
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
|
90
|
-
|
91
|
-
- 0
|
92
|
-
version: "0"
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
93
79
|
name: yard
|
94
|
-
|
95
|
-
|
96
|
-
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
97
86
|
type: :development
|
98
|
-
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
89
|
none: false
|
100
|
-
requirements:
|
101
|
-
- -
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
|
104
|
-
|
105
|
-
- 0
|
106
|
-
version: "0"
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
107
95
|
name: debugger
|
108
|
-
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
109
103
|
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
110
|
description: ORM-like interface allows you to persist your models to Couchbase
|
111
111
|
email: support@couchbase.com
|
112
112
|
executables: []
|
113
|
-
|
114
113
|
extensions: []
|
115
|
-
|
116
114
|
extra_rdoc_files: []
|
117
|
-
|
118
|
-
files:
|
115
|
+
files:
|
119
116
|
- .gitignore
|
120
117
|
- .travis.yml
|
121
118
|
- .yardopts
|
@@ -146,41 +143,28 @@ files:
|
|
146
143
|
- test/setup.rb
|
147
144
|
- test/test_model.rb
|
148
145
|
- test/test_uuid.rb
|
149
|
-
has_rdoc: true
|
150
146
|
homepage: https://github.com/couchbase/couchbase-ruby-model
|
151
147
|
licenses: []
|
152
|
-
|
153
148
|
post_install_message:
|
154
149
|
rdoc_options: []
|
155
|
-
|
156
|
-
require_paths:
|
150
|
+
require_paths:
|
157
151
|
- lib
|
158
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
152
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
159
153
|
none: false
|
160
|
-
requirements:
|
161
|
-
- -
|
162
|
-
- !ruby/object:Gem::Version
|
163
|
-
|
164
|
-
|
165
|
-
- 0
|
166
|
-
version: "0"
|
167
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
159
|
none: false
|
169
|
-
requirements:
|
170
|
-
- -
|
171
|
-
- !ruby/object:Gem::Version
|
172
|
-
|
173
|
-
segments:
|
174
|
-
- 0
|
175
|
-
version: "0"
|
160
|
+
requirements:
|
161
|
+
- - ! '>='
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0'
|
176
164
|
requirements: []
|
177
|
-
|
178
165
|
rubyforge_project:
|
179
|
-
rubygems_version: 1.
|
166
|
+
rubygems_version: 1.8.23
|
180
167
|
signing_key:
|
181
168
|
specification_version: 3
|
182
169
|
summary: Declarative interface to Couchbase
|
183
|
-
test_files:
|
184
|
-
- test/setup.rb
|
185
|
-
- test/test_model.rb
|
186
|
-
- test/test_uuid.rb
|
170
|
+
test_files: []
|