couchrest_model 2.0.1 → 2.0.3

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: e473840521261d3dfe005eea56cd1585b4b245f4
4
- data.tar.gz: 1df0369dc5e7a80c4d681eb9efdbb939f0df77f5
3
+ metadata.gz: 38d13ee6807a1d8e08ec19b1402ec3e222c62731
4
+ data.tar.gz: c5eec5eea342a0c58ca60df0e63f45239398fbfb
5
5
  SHA512:
6
- metadata.gz: b8d8ded40ab8343e7f2e13969af3e319d1989724024b50ec00b3736d0b88eb0b118f807cf6e92a74d508b19581ff14a5e33b05a5d80cb14285c00e25794948e3
7
- data.tar.gz: 31b1ecc35ec710094bec15bfa04fb2fa0eb3c208b966d787988fbfdd0bcd3c643684242f4508f98f6111d8f4075081e540b9969ab65050129054c4e85859721d
6
+ metadata.gz: 20fa41cff63d880fb8b681338935ffd946ff9bc32e2bb6de33a913d01e466c341708c80af011cf0c7785cd992e7d2963c7ebdce2c5ca625fe43b4e20360c7300
7
+ data.tar.gz: 10af0f1dee17c7ca5098ccd0aab103686b1714ce95b0f3cccbbe9544faa716d024e11c9b579a04e4ae10594d5dcc5b4da9a45c819316fa3ea631ac034fc4bee8
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.1
1
+ 2.0.3
@@ -24,15 +24,14 @@ Gem::Specification.new do |s|
24
24
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
25
25
  s.require_paths = ["lib"]
26
26
 
27
- s.add_dependency(%q<couchrest>, "~> 1.1.3")
28
- s.add_dependency(%q<mime-types>, ">= 1.15")
29
- s.add_dependency(%q<activemodel>, ">= 3.0")
27
+ s.add_dependency(%q<couchrest>, ">= 1.2")
28
+ s.add_dependency(%q<mime-types>, ">= 1.16")
29
+ s.add_dependency(%q<activemodel>, ">= 4.0", ">= 3.0")
30
30
  s.add_dependency(%q<tzinfo>, ">= 0.3.22")
31
31
  s.add_development_dependency(%q<rspec>, "~> 2.6.0")
32
32
  s.add_development_dependency(%q<json>, ["~> 1.5.1"])
33
33
  s.add_development_dependency(%q<rack-test>, ">= 0.5.7")
34
34
  s.add_development_dependency("rake", ">= 0.8.0")
35
- s.add_development_dependency(%q<activemodel>, ">= 4.0")
36
35
  #s.add_development_dependency("debugger", "~> 1.2.0") # TODO put in Gemfile
37
36
  #s.add_development_dependency(%q<oj>, "~> 1.3.4") # TODO put in Gemfile (fails in JRuby)
38
37
  s.add_development_dependency("kaminari", "~> 0.14.1")
data/history.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # CouchRest Model Change History
2
2
 
3
+ ## 2.0.3 - 2014-07-04
4
+
5
+ * Added find_by_view! method support for raising DocumentNotFound error when searching.
6
+ * Upgraded CouchRest to ~> 1.2.0
7
+
8
+ ## 2.0.2 - 2014-02-06
9
+
10
+ * Fix for model_type_value, not being used correctly from database.
11
+ * CastedArray now supports `as_couch_json` method.
12
+
3
13
  ## 2.0.1 - 2013-12-03
4
14
 
5
15
  * nil keys in view requests are now sent to server, avoiding returning first document issue. (Thanks to @svoboda-jan for pointer.)
@@ -72,6 +72,10 @@ module CouchRest::Model
72
72
  obj
73
73
  end
74
74
 
75
+ def as_couch_json
76
+ map{ |v| (v.respond_to?(:as_couch_json) ? v.as_couch_json : v)}
77
+ end
78
+
75
79
  protected
76
80
 
77
81
  def instantiate_and_cast(obj, change = true)
@@ -522,6 +522,9 @@ module CouchRest
522
522
  def find_#{name}(*key)
523
523
  #{name}.key(*key).first()
524
524
  end
525
+ def find_#{name}!(*key)
526
+ find_#{name}(*key) || raise(CouchRest::Model::DocumentNotFound)
527
+ end
525
528
  EOS
526
529
  end
527
530
 
@@ -120,7 +120,7 @@ module CouchRest
120
120
  #
121
121
  def build_from_database(doc = {}, options = {}, &block)
122
122
  src = doc[model_type_key]
123
- base = (src.blank? || src == self.to_s) ? self : src.constantize
123
+ base = (src.blank? || src == model_type_value) ? self : src.constantize
124
124
  base.new(doc, options.merge(:directly_set_attributes => true), &block)
125
125
  end
126
126
 
@@ -119,6 +119,9 @@ module CouchRest
119
119
  def find_#{name}(*key)
120
120
  #{name}.key(*key).first()
121
121
  end
122
+ def find_#{name}!(*key)
123
+ find_#{name}(*key) || raise(CouchRest::Model::DocumentNotFound)
124
+ end
122
125
  EOS
123
126
  end
124
127
  end
@@ -66,7 +66,7 @@ module CouchRest
66
66
  end
67
67
 
68
68
  def typecast_to_symbol(value)
69
- value.to_sym
69
+ value.kind_of?(Symbol) || !value.to_s.empty? ? value.to_sym : nil
70
70
  end
71
71
 
72
72
  # Typecast a value to a true or false
@@ -0,0 +1,50 @@
1
+ # encoding: utf-8
2
+ require "spec_helper"
3
+
4
+ #
5
+ # TODO This requires much more testing, although most of the basics
6
+ # are checked by other parts of the code.
7
+ #
8
+
9
+ describe CouchRest::Model::CastedArray do
10
+
11
+ let :klass do
12
+ CouchRest::Model::CastedArray
13
+ end
14
+
15
+ describe "#initialize" do
16
+ it "should set the casted properties" do
17
+ prop = double('Property')
18
+ parent = double('Parent')
19
+ obj = klass.new([], prop, parent)
20
+ obj.casted_by_property.should eql(prop)
21
+ obj.casted_by.should eql(parent)
22
+ obj.should be_empty
23
+ end
24
+ end
25
+
26
+ describe "#as_couch_json" do
27
+ let :property do
28
+ CouchRest::Model::Property.new(:cat, :type => Cat)
29
+ end
30
+ let :obj do
31
+ klass.new([
32
+ { :name => 'Felix' },
33
+ { :name => 'Garfield' }
34
+ ], property)
35
+ end
36
+ it "should return an array" do
37
+ obj.as_couch_json.should be_a(Array)
38
+ end
39
+ it "should call as_couch_json on each value" do
40
+ obj.first.should_receive(:as_couch_json)
41
+ obj.as_couch_json
42
+ end
43
+ it "should return value if no as_couch_json method" do
44
+ obj = klass.new(['Felix', 'Garfield'], CouchRest::Model::Property.new(:title, :type => String))
45
+ obj.first.should_not respond_to(:as_couch_json)
46
+ obj.as_couch_json.first.should eql('Felix')
47
+ end
48
+
49
+ end
50
+ end
@@ -182,6 +182,25 @@ describe "Design View" do
182
182
  @design_doc.should_receive('view').and_return(view)
183
183
  @model.find_by_name('fred')
184
184
  end
185
+ it "should create find_! view method" do
186
+ @klass.create_model_methods(@design_doc, 'by_name')
187
+ @model.should respond_to('find_by_name!')
188
+ obj = mock("SomeKlass")
189
+ view = mock("View")
190
+ view.should_receive('key').with('fred').and_return(view)
191
+ view.should_receive('first').and_return(obj)
192
+ @design_doc.should_receive('view').and_return(view)
193
+ @model.find_by_name!('fred').should eql(obj)
194
+ end
195
+ it "should create find_! view method and raise error when nil" do
196
+ @klass.create_model_methods(@design_doc, 'by_name')
197
+ view = mock("View")
198
+ view.should_receive('key').with('fred').and_return(view)
199
+ view.should_receive('first').and_return(nil)
200
+ @design_doc.should_receive('view').and_return(view)
201
+ lambda { @model.find_by_name!('fred') }.should raise_error(CouchRest::Model::DocumentNotFound)
202
+ end
203
+
185
204
  end
186
205
  end
187
206
 
@@ -19,13 +19,14 @@ describe CouchRest::Model::Persistence do
19
19
  doc.class.should eql(Article)
20
20
  end
21
21
 
22
- it "should instantialize document of different type" do
22
+ it "should instantiate document of different type" do
23
23
  doc = Article.build_from_database({'_id' => 'testitem2', '_rev' => 123, Article.model_type_key => 'WithTemplateAndUniqueID', 'name' => 'my test'})
24
24
  doc.class.should eql(WithTemplateAndUniqueID)
25
25
  end
26
26
 
27
27
  end
28
28
 
29
+
29
30
  describe "basic saving and retrieving" do
30
31
  it "should work fine" do
31
32
  @obj.name = "should be easily saved and retrieved"
@@ -482,6 +483,32 @@ describe CouchRest::Model::Persistence do
482
483
  it "should always return string value of class" do
483
484
  Article.model_type_value.should eql('Article')
484
485
  end
486
+
487
+ describe "usage" do
488
+ let :klass do
489
+ Class.new(CouchRest::Model::Base) do
490
+ property :name, String
491
+ def self.model_type_value
492
+ 'something_else'
493
+ end
494
+ end
495
+ end
496
+ it "should use the model type value if overridden" do
497
+ obj = klass.build_from_database(
498
+ '_id' => '1234', 'type' => 'something_else', 'name' => 'Test'
499
+ )
500
+ obj['type'].should eql('something_else')
501
+ obj.name.should eql('Test')
502
+ end
503
+ it "should fail if different model type value provided" do
504
+ expect {
505
+ obj = klass.build_from_database(
506
+ '_id' => '1234', 'type' => 'something', 'name' => 'Test'
507
+ )
508
+ }.to raise_error(NameError)
509
+ end
510
+
511
+ end
485
512
  end
486
513
 
487
514
  end
@@ -194,6 +194,7 @@ describe CouchRest::Model::Proxyable do
194
194
  @obj.should respond_to('by_name')
195
195
  @obj.should respond_to('find_all')
196
196
  @obj.should respond_to('find_by_name')
197
+ @obj.should respond_to('find_by_name!')
197
198
  end
198
199
 
199
200
  it "should create 'all' view method that forward to model's view with proxy" do
@@ -214,6 +215,14 @@ describe CouchRest::Model::Proxyable do
214
215
  @obj.find_by_name('name')
215
216
  end
216
217
 
218
+ it "should create 'find_by_name!' that raises error when there are no results" do
219
+ view = mock('view')
220
+ view.should_receive('key').with('name').and_return(view)
221
+ view.should_receive('first').and_return(nil)
222
+ @obj.should_receive(:by_name).and_return(view)
223
+ lambda { @obj.find_by_name!('name') }.should raise_error(CouchRest::Model::DocumentNotFound)
224
+ end
225
+
217
226
  end
218
227
 
219
228
  describe "instance" do
@@ -80,6 +80,11 @@ describe "Type Casting" do
80
80
  @course.symbol = "a_symbol"
81
81
  @course['symbol'].should equal(:a_symbol)
82
82
  end
83
+
84
+ it "turns blank value into nil" do
85
+ @course.symbol = ""
86
+ @course['symbol'].should be_nil
87
+ end
83
88
  end
84
89
 
85
90
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: couchrest_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - J. Chris Anderson
@@ -12,146 +12,138 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-12-03 00:00:00.000000000 Z
15
+ date: 2014-07-04 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: couchrest
19
19
  requirement: !ruby/object:Gem::Requirement
20
20
  requirements:
21
- - - ~>
21
+ - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 1.1.3
23
+ version: '1.2'
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
27
27
  requirements:
28
- - - ~>
28
+ - - ">="
29
29
  - !ruby/object:Gem::Version
30
- version: 1.1.3
30
+ version: '1.2'
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: mime-types
33
33
  requirement: !ruby/object:Gem::Requirement
34
34
  requirements:
35
- - - '>='
35
+ - - ">="
36
36
  - !ruby/object:Gem::Version
37
- version: '1.15'
37
+ version: '1.16'
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  requirements:
42
- - - '>='
42
+ - - ">="
43
43
  - !ruby/object:Gem::Version
44
- version: '1.15'
44
+ version: '1.16'
45
45
  - !ruby/object:Gem::Dependency
46
46
  name: activemodel
47
47
  requirement: !ruby/object:Gem::Requirement
48
48
  requirements:
49
- - - '>='
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '4.0'
52
+ - - ">="
50
53
  - !ruby/object:Gem::Version
51
54
  version: '3.0'
52
55
  type: :runtime
53
56
  prerelease: false
54
57
  version_requirements: !ruby/object:Gem::Requirement
55
58
  requirements:
56
- - - '>='
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '4.0'
62
+ - - ">="
57
63
  - !ruby/object:Gem::Version
58
64
  version: '3.0'
59
65
  - !ruby/object:Gem::Dependency
60
66
  name: tzinfo
61
67
  requirement: !ruby/object:Gem::Requirement
62
68
  requirements:
63
- - - '>='
69
+ - - ">="
64
70
  - !ruby/object:Gem::Version
65
71
  version: 0.3.22
66
72
  type: :runtime
67
73
  prerelease: false
68
74
  version_requirements: !ruby/object:Gem::Requirement
69
75
  requirements:
70
- - - '>='
76
+ - - ">="
71
77
  - !ruby/object:Gem::Version
72
78
  version: 0.3.22
73
79
  - !ruby/object:Gem::Dependency
74
80
  name: rspec
75
81
  requirement: !ruby/object:Gem::Requirement
76
82
  requirements:
77
- - - ~>
83
+ - - "~>"
78
84
  - !ruby/object:Gem::Version
79
85
  version: 2.6.0
80
86
  type: :development
81
87
  prerelease: false
82
88
  version_requirements: !ruby/object:Gem::Requirement
83
89
  requirements:
84
- - - ~>
90
+ - - "~>"
85
91
  - !ruby/object:Gem::Version
86
92
  version: 2.6.0
87
93
  - !ruby/object:Gem::Dependency
88
94
  name: json
89
95
  requirement: !ruby/object:Gem::Requirement
90
96
  requirements:
91
- - - ~>
97
+ - - "~>"
92
98
  - !ruby/object:Gem::Version
93
99
  version: 1.5.1
94
100
  type: :development
95
101
  prerelease: false
96
102
  version_requirements: !ruby/object:Gem::Requirement
97
103
  requirements:
98
- - - ~>
104
+ - - "~>"
99
105
  - !ruby/object:Gem::Version
100
106
  version: 1.5.1
101
107
  - !ruby/object:Gem::Dependency
102
108
  name: rack-test
103
109
  requirement: !ruby/object:Gem::Requirement
104
110
  requirements:
105
- - - '>='
111
+ - - ">="
106
112
  - !ruby/object:Gem::Version
107
113
  version: 0.5.7
108
114
  type: :development
109
115
  prerelease: false
110
116
  version_requirements: !ruby/object:Gem::Requirement
111
117
  requirements:
112
- - - '>='
118
+ - - ">="
113
119
  - !ruby/object:Gem::Version
114
120
  version: 0.5.7
115
121
  - !ruby/object:Gem::Dependency
116
122
  name: rake
117
123
  requirement: !ruby/object:Gem::Requirement
118
124
  requirements:
119
- - - '>='
125
+ - - ">="
120
126
  - !ruby/object:Gem::Version
121
127
  version: 0.8.0
122
128
  type: :development
123
129
  prerelease: false
124
130
  version_requirements: !ruby/object:Gem::Requirement
125
131
  requirements:
126
- - - '>='
132
+ - - ">="
127
133
  - !ruby/object:Gem::Version
128
134
  version: 0.8.0
129
- - !ruby/object:Gem::Dependency
130
- name: activemodel
131
- requirement: !ruby/object:Gem::Requirement
132
- requirements:
133
- - - '>='
134
- - !ruby/object:Gem::Version
135
- version: '4.0'
136
- type: :development
137
- prerelease: false
138
- version_requirements: !ruby/object:Gem::Requirement
139
- requirements:
140
- - - '>='
141
- - !ruby/object:Gem::Version
142
- version: '4.0'
143
135
  - !ruby/object:Gem::Dependency
144
136
  name: kaminari
145
137
  requirement: !ruby/object:Gem::Requirement
146
138
  requirements:
147
- - - ~>
139
+ - - "~>"
148
140
  - !ruby/object:Gem::Version
149
141
  version: 0.14.1
150
142
  type: :development
151
143
  prerelease: false
152
144
  version_requirements: !ruby/object:Gem::Requirement
153
145
  requirements:
154
- - - ~>
146
+ - - "~>"
155
147
  - !ruby/object:Gem::Version
156
148
  version: 0.14.1
157
149
  description: CouchRest Model provides aditional features to the standard CouchRest
@@ -165,9 +157,9 @@ extra_rdoc_files:
165
157
  - README.md
166
158
  - THANKS.md
167
159
  files:
168
- - .gitignore
169
- - .rspec
170
- - .travis.yml
160
+ - ".gitignore"
161
+ - ".rspec"
162
+ - ".travis.yml"
171
163
  - Gemfile
172
164
  - LICENSE
173
165
  - README.md
@@ -254,6 +246,7 @@ files:
254
246
  - spec/unit/assocations_spec.rb
255
247
  - spec/unit/attachment_spec.rb
256
248
  - spec/unit/base_spec.rb
249
+ - spec/unit/casted_array_spec.rb
257
250
  - spec/unit/casted_spec.rb
258
251
  - spec/unit/configuration_spec.rb
259
252
  - spec/unit/connection_spec.rb
@@ -285,17 +278,17 @@ require_paths:
285
278
  - lib
286
279
  required_ruby_version: !ruby/object:Gem::Requirement
287
280
  requirements:
288
- - - '>='
281
+ - - ">="
289
282
  - !ruby/object:Gem::Version
290
283
  version: '0'
291
284
  required_rubygems_version: !ruby/object:Gem::Requirement
292
285
  requirements:
293
- - - '>'
286
+ - - ">"
294
287
  - !ruby/object:Gem::Version
295
288
  version: 1.3.1
296
289
  requirements: []
297
290
  rubyforge_project:
298
- rubygems_version: 2.0.3
291
+ rubygems_version: 2.2.2
299
292
  signing_key:
300
293
  specification_version: 4
301
294
  summary: Extends the CouchRest Document for advanced modelling.
@@ -334,6 +327,7 @@ test_files:
334
327
  - spec/unit/assocations_spec.rb
335
328
  - spec/unit/attachment_spec.rb
336
329
  - spec/unit/base_spec.rb
330
+ - spec/unit/casted_array_spec.rb
337
331
  - spec/unit/casted_spec.rb
338
332
  - spec/unit/configuration_spec.rb
339
333
  - spec/unit/connection_spec.rb