couch_potato 0.6.0 → 0.7.0.pre.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.
Files changed (58) hide show
  1. data/.gitignore +0 -1
  2. data/.travis.yml +9 -1
  3. data/CHANGES.md +12 -0
  4. data/Gemfile.lock +29 -23
  5. data/MIT-LICENSE.txt +1 -1
  6. data/README.md +68 -38
  7. data/Rakefile +19 -60
  8. data/active_support_3_0.lock +4 -0
  9. data/active_support_3_1.lock +4 -0
  10. data/active_support_3_2 +4 -0
  11. data/active_support_3_2.lock +55 -0
  12. data/couch_potato.gemspec +1 -0
  13. data/lib/couch_potato/database.rb +55 -27
  14. data/lib/couch_potato/persistence/active_model_compliance.rb +6 -2
  15. data/lib/couch_potato/persistence/callbacks.rb +0 -1
  16. data/lib/couch_potato/persistence/dirty_attributes.rb +8 -17
  17. data/lib/couch_potato/persistence/json.rb +3 -2
  18. data/lib/couch_potato/persistence/properties.rb +19 -8
  19. data/lib/couch_potato/persistence/simple_property.rb +1 -3
  20. data/lib/couch_potato/persistence/type_caster.rb +7 -2
  21. data/lib/couch_potato/persistence.rb +27 -13
  22. data/lib/couch_potato/railtie.rb +1 -1
  23. data/lib/couch_potato/rspec/matchers/list_as_matcher.rb +12 -12
  24. data/lib/couch_potato/rspec/matchers/map_to_matcher.rb +8 -8
  25. data/lib/couch_potato/rspec/matchers/reduce_to_matcher.rb +10 -10
  26. data/lib/couch_potato/rspec/matchers.rb +8 -7
  27. data/lib/couch_potato/validation.rb +15 -11
  28. data/lib/couch_potato/version.rb +1 -1
  29. data/lib/couch_potato/view/base_view_spec.rb +14 -12
  30. data/lib/couch_potato/view/model_view_spec.rb +134 -39
  31. data/lib/couch_potato/view/properties_view_spec.rb +11 -7
  32. data/lib/couch_potato/view/view_query.rb +10 -9
  33. data/lib/couch_potato.rb +25 -10
  34. data/spec/callbacks_spec.rb +88 -0
  35. data/spec/create_spec.rb +22 -4
  36. data/spec/default_property_spec.rb +6 -0
  37. data/spec/property_spec.rb +81 -44
  38. data/spec/railtie_spec.rb +20 -18
  39. data/spec/spec_helper.rb +19 -1
  40. data/spec/unit/active_model_compliance_spec.rb +17 -11
  41. data/spec/unit/attributes_spec.rb +33 -10
  42. data/spec/unit/base_view_spec_spec.rb +19 -5
  43. data/spec/unit/couch_potato_spec.rb +1 -20
  44. data/spec/unit/create_spec.rb +2 -2
  45. data/spec/unit/database_spec.rb +113 -47
  46. data/spec/unit/dirty_attributes_spec.rb +19 -19
  47. data/spec/unit/model_view_spec_spec.rb +78 -1
  48. data/spec/unit/properties_view_spec_spec.rb +18 -5
  49. data/spec/unit/validation_spec.rb +1 -55
  50. data/spec/unit/view_query_spec.rb +48 -26
  51. data/spec/{custom_view_spec.rb → views_spec.rb} +59 -17
  52. metadata +88 -90
  53. data/.rvmrc +0 -1
  54. data/lib/core_ext/object.rb +0 -5
  55. data/lib/core_ext/string.rb +0 -12
  56. data/lib/core_ext/symbol.rb +0 -15
  57. data/lib/couch_potato/validation/with_active_model.rb +0 -27
  58. data/lib/couch_potato/validation/with_validatable.rb +0 -41
@@ -4,16 +4,19 @@ require 'fixtures/person'
4
4
 
5
5
  class Watch
6
6
  include CouchPotato::Persistence
7
-
7
+
8
8
  property :time, :type => Time
9
9
  property :date, :type => Date
10
+ property :custom, :type => [String]
11
+ property :custom_date, :type => [Date]
12
+ property :custom_address, :type => [Address]
10
13
  property :overwritten_read
11
14
  property :overwritten_write
12
-
15
+
13
16
  def overwritten_read
14
17
  super.to_s
15
18
  end
16
-
19
+
17
20
  def overwritten_write=(value)
18
21
  super value.to_s
19
22
  end
@@ -27,40 +30,40 @@ describe 'properties' do
27
30
  before(:all) do
28
31
  recreate_db
29
32
  end
30
-
33
+
31
34
  it "should allow me to overwrite read accessor and call super" do
32
35
  Watch.new(:overwritten_read => 1).overwritten_read.should == '1'
33
36
  end
34
-
37
+
35
38
  it "should allow me to overwrite write accessor and call super" do
36
39
  Watch.new(:overwritten_write => 1).overwritten_write.should == '1'
37
40
  end
38
-
41
+
39
42
  it "should return the property names" do
40
43
  Comment.property_names.should == [:created_at, :updated_at, :title]
41
44
  end
42
-
45
+
43
46
  it "should persist a string" do
44
47
  c = Comment.new :title => 'my title'
45
48
  CouchPotato.database.save_document! c
46
49
  c = CouchPotato.database.load_document c.id
47
50
  c.title.should == 'my title'
48
51
  end
49
-
52
+
50
53
  it "should persist a number" do
51
54
  c = Comment.new :title => 3
52
55
  CouchPotato.database.save_document! c
53
56
  c = CouchPotato.database.load_document c.id
54
57
  c.title.should == 3
55
58
  end
56
-
59
+
57
60
  it "should persist a hash" do
58
61
  c = Comment.new :title => {'key' => 'value'}
59
62
  CouchPotato.database.save_document! c
60
63
  c = CouchPotato.database.load_document c.id
61
64
  c.title.should == {'key' => 'value'}
62
65
  end
63
-
66
+
64
67
  def it_should_persist value
65
68
  c = Comment.new :title => value
66
69
  CouchPotato.database.save_document! c
@@ -99,7 +102,7 @@ describe 'properties' do
99
102
  ]
100
103
  it_should_persist something_very_complex
101
104
  end
102
-
105
+
103
106
  it "should persist an object" do
104
107
  p = Person.new
105
108
  a = Address.new :city => 'Denver'
@@ -108,7 +111,7 @@ describe 'properties' do
108
111
  p = CouchPotato.database.load_document p.id
109
112
  p.ship_address.should === a
110
113
  end
111
-
114
+
112
115
  it "should persist null for a null " do
113
116
  p = Person.new
114
117
  p.ship_address = nil
@@ -116,7 +119,7 @@ describe 'properties' do
116
119
  p = CouchPotato.database.load_document p.id
117
120
  p.ship_address.should be_nil
118
121
  end
119
-
122
+
120
123
  it "should actually pass the null value down in the JSON document " do
121
124
  p = Person.new
122
125
  p.ship_address = nil
@@ -135,7 +138,7 @@ describe 'properties' do
135
138
  p = CouchPotato.database.load_document p.id
136
139
  p.ship_address.should be_false
137
140
  end
138
-
141
+
139
142
  describe "time properties" do
140
143
  it "should persist a Time as utc" do
141
144
  time = Time.now
@@ -144,7 +147,7 @@ describe 'properties' do
144
147
  w = CouchPotato.database.load_document w.id
145
148
  w.time.to_s.should == time.utc.to_s
146
149
  end
147
-
150
+
148
151
  it "should parse a string and persist it as utc time" do
149
152
  w = Watch.new :time => '2009-01-01 13:25 +0100'
150
153
  CouchPotato.database.save_document! w
@@ -152,14 +155,14 @@ describe 'properties' do
152
155
  w.time.should be_a(Time)
153
156
  w.time.should == Time.parse('2009-01-01 12:25 +0000')
154
157
  end
155
-
158
+
156
159
  it "should store nil" do
157
160
  w = Watch.new :time => nil
158
161
  CouchPotato.database.save_document! w
159
162
  w = CouchPotato.database.load_document w.id
160
163
  w.time.should be_nil
161
164
  end
162
-
165
+
163
166
  it "should store an empty string as nil" do
164
167
  w = Watch.new :time => ''
165
168
  CouchPotato.database.save_document! w
@@ -167,7 +170,7 @@ describe 'properties' do
167
170
  w.time.should be_nil
168
171
  end
169
172
  end
170
-
173
+
171
174
  describe "date properties" do
172
175
  it "should persist a date" do
173
176
  date = Date.today
@@ -176,21 +179,21 @@ describe 'properties' do
176
179
  w = CouchPotato.database.load_document w.id
177
180
  w.date.should == date
178
181
  end
179
-
182
+
180
183
  it "should parse a string and persist it as a date" do
181
184
  w = Watch.new :date => '2009-01-10'
182
185
  CouchPotato.database.save_document! w
183
186
  w = CouchPotato.database.load_document w.id
184
187
  w.date.should == Date.parse('2009-01-10')
185
188
  end
186
-
189
+
187
190
  it "should store nil" do
188
191
  w = Watch.new :date => nil
189
192
  CouchPotato.database.save_document! w
190
193
  w = CouchPotato.database.load_document w.id
191
194
  w.date.should be_nil
192
195
  end
193
-
196
+
194
197
  it "should store an empty string as nil" do
195
198
  w = Watch.new :date => ''
196
199
  CouchPotato.database.save_document! w
@@ -198,7 +201,40 @@ describe 'properties' do
198
201
  w.date.should be_nil
199
202
  end
200
203
  end
201
-
204
+
205
+ describe "array properties" do
206
+ it "should persist an array of strings" do
207
+ w = Watch.new :custom => ["moin"]
208
+ CouchPotato.database.save_document! w
209
+ w = CouchPotato.database.load_document w.id
210
+ w.custom.should eql(["moin"])
211
+ end
212
+
213
+ it "should persist an array of dates" do
214
+ date = Date.today
215
+ w = Watch.new :custom_date => [date]
216
+ CouchPotato.database.save_document! w
217
+ w = CouchPotato.database.load_document w.id
218
+ w.custom_date.should eql([date])
219
+ end
220
+
221
+ it "should persist an array of nested documents" do
222
+ address = Address.new(:verified => 1)
223
+ w = Watch.new :custom_address => [address]
224
+ CouchPotato.database.save_document! w
225
+ w = CouchPotato.database.load_document w.id
226
+ w.custom_address.should eql([address])
227
+ end
228
+
229
+ it "should handle nil values" do
230
+ address = Address.new(:verified => 1)
231
+ w = Watch.new :custom_address => nil
232
+ CouchPotato.database.save_document! w
233
+ w = CouchPotato.database.load_document w.id
234
+ w.custom_address.should eql(nil)
235
+ end
236
+ end
237
+
202
238
  describe "boolean properties" do
203
239
  it "should persist '0' as false" do
204
240
  a = Address.new
@@ -207,7 +243,7 @@ describe 'properties' do
207
243
  a = CouchPotato.database.load_document a.id
208
244
  a.verified.should be_false
209
245
  end
210
-
246
+
211
247
  it "should persist 0 as false" do
212
248
  a = Address.new
213
249
  a.verified = 0
@@ -215,7 +251,7 @@ describe 'properties' do
215
251
  a = CouchPotato.database.load_document a.id
216
252
  a.verified.should be_false
217
253
  end
218
-
254
+
219
255
  it "should persist 'false' as false" do
220
256
  a = Address.new
221
257
  a.verified = 'false'
@@ -223,7 +259,7 @@ describe 'properties' do
223
259
  a = CouchPotato.database.load_document a.id
224
260
  a.verified.should be_false
225
261
  end
226
-
262
+
227
263
  it "should persist '1' as true" do
228
264
  a = Address.new
229
265
  a.verified = '1'
@@ -231,7 +267,7 @@ describe 'properties' do
231
267
  a = CouchPotato.database.load_document a.id
232
268
  a.verified.should be_true
233
269
  end
234
-
270
+
235
271
  it "should persist 1 as true" do
236
272
  a = Address.new
237
273
  a.verified = 1
@@ -239,7 +275,7 @@ describe 'properties' do
239
275
  a = CouchPotato.database.load_document a.id
240
276
  a.verified.should be_true
241
277
  end
242
-
278
+
243
279
  it "should leave nil as nil" do
244
280
  a = Address.new
245
281
  a.verified = nil
@@ -253,33 +289,33 @@ describe 'properties' do
253
289
  it "should return true if property set" do
254
290
  Comment.new(:title => 'title').title?.should be_true
255
291
  end
256
-
292
+
257
293
  it "should return false if property nil" do
258
294
  Comment.new.title?.should be_false
259
295
  end
260
-
296
+
261
297
  it "should return false if property false" do
262
298
  Comment.new(:title => false).title?.should be_false
263
299
  end
264
-
300
+
265
301
  it "should return false if property blank" do
266
302
  Comment.new(:title => '').title?.should be_false
267
303
  end
268
304
  end
269
-
305
+
270
306
  describe "with subclasses" do
271
307
  it "should include properties of superclasses" do
272
308
  CuckooClock.properties.map(&:name).should include(:time)
273
309
  CuckooClock.properties.map(&:name).should include(:cuckoo)
274
310
  end
275
-
311
+
276
312
  it "should return attributes of superclasses" do
277
313
  clock = CuckooClock.new(:time => Time.now, :cuckoo => 'bavarian')
278
- clock.attributes[:time].should_not == nil
279
- clock.attributes[:cuckoo].should == 'bavarian'
314
+ clock.attributes[:time].should_not be_nil
315
+ clock.attributes[:cuckoo].should eql('bavarian')
280
316
  end
281
317
  end
282
-
318
+
283
319
  describe "inspecting an object" do
284
320
  let(:comment) do
285
321
  comment = Comment.new(:title => 'title')
@@ -289,35 +325,36 @@ describe 'properties' do
289
325
  end
290
326
  comment
291
327
  end
292
-
328
+
293
329
  it "should not include change-tracking variables" do
294
330
  comment.inspect.should_not include('title_was')
295
331
  end
296
-
332
+
297
333
  it "should include the normal persistent variables" do
298
334
  comment.inspect.should include('title: "title"')
299
335
  end
300
-
336
+
301
337
  it "should include the id" do
302
338
  comment.inspect.should include(%Q{_id: "123456abcdef",})
303
339
  end
304
-
340
+
305
341
  it "should include the revision" do
306
342
  comment.inspect.should include(%Q{_rev: "1-654321fedcba",})
307
343
  end
308
-
344
+
309
345
  it "should return a complete string" do
310
346
  # stub to work around (un)sorted hash on different rubies
311
347
  comment.stub!(:attributes).and_return([['created_at', ''], ['updated_at', ''], ['title', 'title']])
312
- comment.inspect.should == %Q{#<Comment _id: "123456abcdef", _rev: "1-654321fedcba", created_at: "", updated_at: "", title: "title">}
348
+ doc = '#<Comment _id: "123456abcdef", _rev: "1-654321fedcba", created_at: "", updated_at: "", title: "title">'
349
+ comment.inspect.should eql(doc)
313
350
  end
314
-
351
+
315
352
  it "should include complex datatypes fully inspected" do
316
353
  comment.title = {'en' => 'Blog post'}
317
354
  comment.inspect.should include('title: {"en"=>"Blog post"}')
318
-
355
+
319
356
  comment.title = nil
320
357
  comment.inspect.should include('title: nil')
321
358
  end
322
359
  end
323
- end
360
+ end
data/spec/railtie_spec.rb CHANGED
@@ -10,7 +10,7 @@ module Rails
10
10
  def self.initializer(*args)
11
11
  end
12
12
  end
13
-
13
+
14
14
  def self.root
15
15
  RSpec::Mocks::Mock.new :join => ''
16
16
  end
@@ -20,46 +20,48 @@ require 'couch_potato/railtie'
20
20
 
21
21
  describe "railtie" do
22
22
  before(:all) do
23
- @validation_framework = CouchPotato::Config.validation_framework
23
+ @database_name = CouchPotato::Config.database_name
24
+ @default_language = CouchPotato::Config.default_language
24
25
  end
25
-
26
+
26
27
  after(:all) do
27
- CouchPotato::Config.validation_framework = @validation_framework
28
+ CouchPotato::Config.database_name = @database_name
29
+ CouchPotato::Config.default_language = @default_language
28
30
  end
29
-
31
+
30
32
  context 'yaml file contains only database names' do
31
33
  it "should set the database name from the yaml file" do
32
34
  File.stub(:read => "test: test_db")
33
-
35
+
34
36
  CouchPotato::Config.should_receive(:database_name=).with('test_db')
35
-
37
+
36
38
  CouchPotato.rails_init
37
39
  end
38
40
  end
39
-
41
+
40
42
  context 'yaml file contains more configuration' do
41
43
  before(:each) do
42
- File.stub(:read => "test: \n database: test_db\n validation_framework: :active_model")
44
+ File.stub(:read => "test: \n database: test_db\n default_language: :erlang")
43
45
  end
44
-
45
- it "should set the database name from the yaml file" do
46
+
47
+ it "set the database name from the yaml file" do
46
48
  CouchPotato::Config.should_receive(:database_name=).with('test_db')
47
-
49
+
48
50
  CouchPotato.rails_init
49
51
  end
50
-
51
- it "should set the validation framework from the yaml file" do
52
- CouchPotato::Config.should_receive(:validation_framework=).with(:active_model)
53
-
52
+
53
+ it 'sets the default language from the yaml file' do
54
+ CouchPotato::Config.should_receive(:default_language=).with(:erlang)
55
+
54
56
  CouchPotato.rails_init
55
57
  end
56
58
  end
57
-
59
+
58
60
  it "should process the yml file with erb" do
59
61
  File.stub(:read => "test: \n database: <%= 'db' %>")
60
62
 
61
63
  CouchPotato::Config.should_receive(:database_name=).with('db')
62
-
64
+
63
65
  CouchPotato.rails_init
64
66
  end
65
67
  end
data/spec/spec_helper.rb CHANGED
@@ -9,7 +9,6 @@ $:.unshift(File.dirname(__FILE__) + '/../lib')
9
9
  require 'couch_potato'
10
10
 
11
11
  CouchPotato::Config.database_name = ENV['DATABASE'] || 'couch_potato_test'
12
- CouchPotato::Config.validation_framework = ENV['VALIDATION_FRAMEWORK'].to_sym unless ENV['VALIDATION_FRAMEWORK'].blank?
13
12
 
14
13
  # silence deprecation warnings from ActiveModel as the Spec uses Errors#on
15
14
  begin
@@ -42,3 +41,22 @@ RSpec::Matchers.define :string_matching do |regex|
42
41
  string =~ regex
43
42
  end
44
43
  end
44
+
45
+ RSpec::Matchers.define :eql_ignoring_indentation do |expected|
46
+ match do |string|
47
+ strip_indentation(string) == strip_indentation(expected)
48
+ end
49
+
50
+ failure_message_for_should do |actual|
51
+ "expected\n#{strip_indentation(actual).inspect} to == \n#{strip_indentation(expected).inspect} but wasn't."
52
+ end
53
+
54
+ failure_message_for_should_not do |actual|
55
+ "expected\n#{strip_indentation(actual).inspect} to not == \n#{strip_indentation(expected).inspect} but wasn."
56
+ end
57
+
58
+ def strip_indentation(string)
59
+ string.gsub(/^\s+/m, '')
60
+ end
61
+
62
+ end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  begin
4
4
  require 'active_model'
5
-
5
+
6
6
  describe 'ActiveModel conformance of couch potato objects' do
7
7
  include ActiveModel::Lint::Tests
8
8
 
@@ -23,47 +23,53 @@ begin
23
23
  before(:each) do
24
24
  @model = ActiveComment.new
25
25
  end
26
-
26
+
27
+ describe '#to_partial_path' do
28
+ it 'returns a path based on the class name' do
29
+ @model.to_partial_path.should == 'active_comments/active_comment'
30
+ end
31
+ end
32
+
27
33
  describe "#persisted?" do
28
34
  it "should return false if it is a new document " do
29
35
  @model.should_not be_persisted
30
36
  end
31
-
37
+
32
38
  it "should be true if it was saved" do
33
39
  @comment = ActiveComment.new(:name => 'Thilo', :email => 'test@local.host')
34
40
  CouchPotato.database.save_document! @comment
35
41
  @comment.should be_persisted
36
42
  end
37
43
  end
38
-
44
+
39
45
  describe "#to_key" do
40
46
  it "should return nil if the document was not persisted" do
41
47
  @model.to_key.should be_nil
42
48
  end
43
-
49
+
44
50
  it "should return the id of the document if it was persisted" do
45
51
  @comment = ActiveComment.new(:name => 'Thilo', :email => 'test@local.host')
46
52
  CouchPotato.database.save_document! @comment
47
53
  @comment.to_key.should == [@comment.id]
48
54
  end
49
55
  end
50
-
51
-
56
+
57
+
52
58
  describe "#errors" do
53
59
  it "should return a single error as array" do
54
60
  @model.valid?
55
61
  @model.errors[:name].should be_kind_of(Array)
56
62
  end
57
-
63
+
58
64
  it "should return multiple errors as array" do
59
65
  @model.valid?
60
66
  @model.errors[:email].size.should == 2
61
67
  end
62
-
68
+
63
69
  it "should return no error as an empty array" do
64
70
  @model.errors[:name].should == []
65
71
  end
66
-
72
+
67
73
  it "should be able to be Marshal.dump'ed" do
68
74
  lambda { Marshal.dump(@model.errors) }.should_not raise_error
69
75
  end
@@ -88,7 +94,7 @@ begin
88
94
  object.should be_a(klass)
89
95
  end
90
96
  end
91
-
97
+
92
98
  rescue LoadError
93
99
  STDERR.puts "WARNING: active_model gem not installed. Not running ActiveModel specs."
94
100
  end
@@ -12,7 +12,7 @@ class Plant
12
12
  property :leaf_count
13
13
  property :typed_leaf_count, :type => Fixnum
14
14
  property :typed_leaf_size, :type => Float
15
- property :branch, type: Branch
15
+ property :branch, :type => Branch
16
16
  end
17
17
 
18
18
 
@@ -23,13 +23,32 @@ describe "attributes" do
23
23
  plant.attributes = {:leaf_count => 1}
24
24
  plant.leaf_count.should == 1
25
25
  end
26
+
27
+ it "should assign the attributes via []=" do
28
+ plant = Plant.new
29
+ plant[:leaf_count] = 1
30
+ plant.leaf_count.should == 1
31
+ end
26
32
  end
27
33
 
28
34
  context "attributes" do
29
35
  it "should return the attributes" do
30
36
  plant = Plant.new(:leaf_count => 1)
31
37
  plant.attributes.should == {:leaf_count => 1, :created_at => nil, :updated_at => nil,
32
- :typed_leaf_count => nil, :typed_leaf_size => nil, :branch => nil}
38
+ :typed_leaf_count => nil, :typed_leaf_size => nil, :branch => nil}
39
+ end
40
+
41
+ it "should return the attributes via []" do
42
+ plant = Plant.new(:leaf_count => 1)
43
+ plant.attributes[:leaf_count].should eql(plant[:leaf_count])
44
+ plant.attributes[:leaf_count].should eql(1)
45
+ end
46
+ end
47
+
48
+ context "has_key?" do
49
+ it "should respond to has_key?" do
50
+ plant = Plant.new(:leaf_count => 1)
51
+ plant.has_key?(:leaf_count).should be_true
33
52
  end
34
53
  end
35
54
 
@@ -67,37 +86,42 @@ describe "attributes" do
67
86
  end
68
87
 
69
88
  describe "fixnum" do
70
- it "should convert a string into a fixnum" do
89
+ it 'rounds a float to a fixnum' do
90
+ @plant.typed_leaf_count = 4.5
91
+ @plant.typed_leaf_count.should == 5
92
+ end
93
+
94
+ it "converts a string into a fixnum" do
71
95
  @plant.typed_leaf_count = '4'
72
96
  @plant.typed_leaf_count.should == 4
73
97
  end
74
98
 
75
- it "should convert a string into a negative fixnum" do
99
+ it "converts a string into a negative fixnum" do
76
100
  @plant.typed_leaf_count = '-4'
77
101
  @plant.typed_leaf_count.should == -4
78
102
  end
79
103
 
80
- it "should leave a fixnum as is" do
104
+ it "leaves a fixnum as is" do
81
105
  @plant.typed_leaf_count = 4
82
106
  @plant.typed_leaf_count.should == 4
83
107
  end
84
108
 
85
- it "should leave nil as is" do
109
+ it "leaves nil as is" do
86
110
  @plant.typed_leaf_count = nil
87
111
  @plant.typed_leaf_count.should be_nil
88
112
  end
89
113
 
90
- it "should set the attributes to zero if a string given" do
114
+ it "sets the attributes to zero if a string given" do
91
115
  @plant.typed_leaf_count = 'x'
92
116
  @plant.typed_leaf_count.should == 0
93
117
  end
94
118
 
95
- it "should parse numbers out of a string" do
119
+ it "parses numbers out of a string" do
96
120
  @plant.typed_leaf_count = 'x123'
97
121
  @plant.typed_leaf_count.should == 123
98
122
  end
99
123
 
100
- it "should set the attributes to nil if given a blank string" do
124
+ it "set the attributes to nil if given a blank string" do
101
125
  @plant.typed_leaf_count = ''
102
126
  @plant.typed_leaf_count.should be_nil
103
127
  end
@@ -146,4 +170,3 @@ describe "attributes" do
146
170
  end
147
171
  end
148
172
  end
149
-
@@ -4,6 +4,11 @@ describe CouchPotato::View::BaseViewSpec, 'initialize' do
4
4
  describe "view parameters" do
5
5
  before(:each) do
6
6
  CouchPotato::Config.split_design_documents_per_view = false
7
+ @default_language = CouchPotato::Config.default_language
8
+ end
9
+
10
+ after(:each) do
11
+ CouchPotato::Config.default_language = @default_language
7
12
  end
8
13
 
9
14
  it "should raise an error when passing invalid view parameters" do
@@ -32,7 +37,7 @@ describe CouchPotato::View::BaseViewSpec, 'initialize' do
32
37
  }
33
38
  }.should_not raise_error
34
39
  end
35
-
40
+
36
41
  it "should remove stale when it's nil" do
37
42
  spec = CouchPotato::View::BaseViewSpec.new Object, 'all', {}, {:stale => nil}
38
43
  spec.view_parameters.should == {}
@@ -81,17 +86,17 @@ describe CouchPotato::View::BaseViewSpec, 'initialize' do
81
86
  spec = CouchPotato::View::BaseViewSpec.new stub(:lists => nil), 'all', {:list => :test_list}, {}
82
87
  spec.list_name.should == :test_list
83
88
  end
84
-
89
+
85
90
  it "should extract the list from the view parameters" do
86
91
  spec = CouchPotato::View::BaseViewSpec.new stub(:lists => nil), 'all', {}, {:list => :test_list}
87
92
  spec.list_name.should == :test_list
88
93
  end
89
-
94
+
90
95
  it "should prefer the list name from the view parameters over the one from the options" do
91
96
  spec = CouchPotato::View::BaseViewSpec.new stub(:lists => nil), 'all', {:list => 'my_list'}, {:list => :test_list}
92
97
  spec.list_name.should == :test_list
93
98
  end
94
-
99
+
95
100
  it "should return the list function" do
96
101
  klass = stub 'class'
97
102
  klass.stub(:lists).with('test_list').and_return('<list_code>')
@@ -99,8 +104,17 @@ describe CouchPotato::View::BaseViewSpec, 'initialize' do
99
104
  spec.list_function.should == '<list_code>'
100
105
  end
101
106
 
102
- end
107
+ it 'reads the language from the couch potato config by default' do
108
+ CouchPotato::Config.default_language = :ruby
109
+ spec = CouchPotato::View::BaseViewSpec.new Object, 'all', {}, {}
110
+ spec.language.should == :ruby
111
+ end
103
112
 
113
+ it 'sets the language to the given language' do
114
+ spec = CouchPotato::View::BaseViewSpec.new Object, 'all', {:language => :erlang}, {}
115
+ spec.language.should == :erlang
116
+ end
117
+ end
104
118
  end
105
119
 
106
120