couch_potato 0.6.0 → 0.7.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
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