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
@@ -1,12 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'CouchPotato::Config.validation_framework' do
4
- before(:each) do
5
- @original_validation_framework = CouchPotato::Config.validation_framework
6
- end
7
- after(:each) do
8
- CouchPotato::Config.validation_framework = @original_validation_framework
9
- end
3
+ describe 'CouchPotato Validation' do
10
4
 
11
5
  describe "access to errors object" do
12
6
  it "should description" do
@@ -16,52 +10,4 @@ describe 'CouchPotato::Config.validation_framework' do
16
10
  end
17
11
  end
18
12
 
19
- begin
20
- require 'active_model'
21
-
22
- describe 'with :active_model' do
23
- before(:each) do
24
- CouchPotato::Config.validation_framework = :active_model
25
- end
26
-
27
- it "should include ActiveModel::Validations upon inclusion of CouchPotato::Persistence" do
28
- model_class = Class.new
29
- ActiveModel::Validations.should_receive(:included).with(model_class)
30
- model_class.send(:include, CouchPotato::Persistence)
31
- end
32
- end
33
-
34
- rescue LoadError
35
- STDERR.puts "WARNING: active_model gem not installed. Not running ActiveModel validation specs."
36
- end
37
-
38
- begin
39
- require 'validatable'
40
-
41
- describe 'with :validatable' do
42
- before(:each) do
43
- CouchPotato::Config.validation_framework = :validatable
44
- end
45
-
46
- it "should include ActiveModel::Validations upon inclusion of CouchPotato::Persistence" do
47
- model_class = Class.new
48
- Validatable.should_receive(:included).with(model_class)
49
- model_class.send(:include, CouchPotato::Persistence)
50
- end
51
- end
52
-
53
- rescue LoadError
54
- STDERR.puts "WARNING: validatable gem not installed. Not running Validatable validation specs."
55
- end
56
-
57
- describe 'with an unknown framework' do
58
- before(:each) do
59
- CouchPotato::Config.validation_framework = :unknown_validation_framework
60
- end
61
-
62
- it "should raise an error" do
63
- model_class = Class.new
64
- lambda { model_class.send(:include, CouchPotato::Persistence) }.should raise_error
65
- end
66
- end
67
13
  end
@@ -4,46 +4,68 @@ describe CouchPotato::View::ViewQuery, 'query_view!' do
4
4
  before(:each) do
5
5
  CouchRest.stub(:get => nil)
6
6
  end
7
-
8
- it "should not pass a key if conditions are empty" do
7
+
8
+ it "does not pass a key if conditions are empty" do
9
9
  db = mock 'db', :get => nil, :save_doc => nil
10
10
  db.should_receive(:view).with(anything, {})
11
11
  CouchPotato::View::ViewQuery.new(db, '', {:view0 => {}}).query_view!
12
12
  end
13
-
14
- it "should not update a view when the map/reduce functions haven't changed" do
13
+
14
+ it 'updates a view if it does not exist' do
15
+ db = mock 'db', :get => nil, :view => nil
16
+
17
+ db.should_receive(:save_doc).with(
18
+ 'views' => {'view' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}},
19
+ 'lists' => {}, "_id" => "_design/design", "language" => "javascript")
20
+
21
+ CouchPotato::View::ViewQuery.new(db, 'design', :view => {:map => '<map_code>', :reduce => '<reduce_code>'}).query_view!
22
+ end
23
+
24
+ it 'updates a view in erlang if it does not exist' do
25
+ db = mock 'db', :get => nil, :view => nil
26
+
27
+ db.should_receive(:save_doc).with(
28
+ 'views' => {'view' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}},
29
+ 'lists' => {}, "_id" => "_design/design", "language" => "erlang")
30
+
31
+ CouchPotato::View::ViewQuery.new(db, 'design',
32
+ {:view => {:map => '<map_code>', :reduce => '<reduce_code>'}},
33
+ nil, :erlang).query_view!
34
+ end
35
+
36
+ it "does not update a view when the map/reduce functions haven't changed" do
15
37
  db = mock 'db', :get => {'views' => {'view' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}}}, :view => nil
16
38
  db.should_not_receive(:save_doc)
17
39
  CouchPotato::View::ViewQuery.new(db, 'design', :view => {:map => '<map_code>', :reduce => '<reduce_code>'}).query_view!
18
40
  end
19
-
20
- it "should not update a view when the list function hasn't changed" do
41
+
42
+ it "does not update a view when the list function hasn't changed" do
21
43
  db = mock 'db', :get => {'views' => {'view' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}}, 'lists' => {'list0' => '<list_code>'}}, :view => nil
22
44
  db.should_not_receive(:save_doc)
23
45
  CouchPotato::View::ViewQuery.new(db, 'design', {:view => {:map => '<map_code>', :reduce => '<reduce_code>'}}, :list0 => '<list_code>').query_view!
24
46
  end
25
-
26
- it "should update a view when the map function has changed" do
47
+
48
+ it "updates a view when the map function has changed" do
27
49
  db = mock 'db', :get => {'views' => {'view2' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}}}, :view => nil
28
50
  db.should_receive(:save_doc)
29
51
  CouchPotato::View::ViewQuery.new(db, 'design', :view2 => {:map => '<new map_code>', :reduce => '<reduce_code>'}).query_view!
30
52
  end
31
-
32
- it "should not pass in a reduce key if there is no reduce function" do
53
+
54
+ it "does not pass in a reduce key if there is no reduce function" do
33
55
  db = mock 'db', :get => {'views' => {}}, :view => nil
34
-
56
+
35
57
  db.should_receive(:save_doc).with('views' => {'view3' => {'map' => '<map code>'}})
36
-
58
+
37
59
  CouchPotato::View::ViewQuery.new(db, 'design', :view3 => {:map => '<map code>', :reduce => nil}).query_view!
38
60
  end
39
-
40
- it "should update a view when the reduce function has changed" do
61
+
62
+ it "updates a view when the reduce function has changed" do
41
63
  db = mock 'db', :get => {'views' => {'view4' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}}}, :view => nil
42
64
  db.should_receive(:save_doc)
43
65
  CouchPotato::View::ViewQuery.new(db, 'design', :view4 => {:map => '<map_code>', :reduce => '<new reduce_code>'}).query_view!
44
66
  end
45
-
46
- it "should update a view when the list function has changed" do
67
+
68
+ it "updates a view when the list function has changed" do
47
69
  db = mock 'db', :get => {
48
70
  'views' => {'view5' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}},
49
71
  'lists' => {'list1' => '<list_code>'}
@@ -51,16 +73,16 @@ describe CouchPotato::View::ViewQuery, 'query_view!' do
51
73
  db.should_receive(:save_doc)
52
74
  CouchPotato::View::ViewQuery.new(db, 'design', {:view5 => {:map => '<map_code>', :reduce => '<reduce_code>'}}, :list1 => '<new_list_code>').query_view!
53
75
  end
54
-
55
- it "should update a view when there wasn't a list function but now there is one" do
76
+
77
+ it "updates a view when there wasn't a list function but now there is one" do
56
78
  db = mock 'db', :get => {
57
79
  'views' => {'view6' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}}
58
80
  }, :view => nil
59
81
  db.should_receive(:save_doc)
60
82
  CouchPotato::View::ViewQuery.new(db, 'design', {:view6 => {:map => '<map_code>', :reduce => '<reduce_code>'}}, :list1 => '<new_list_code>').query_view!
61
83
  end
62
-
63
- it "should not update a view when there is a list function but no list function is passed" do
84
+
85
+ it "does not update a view when there is a list function but no list function is passed" do
64
86
  db = mock 'db', :get => {
65
87
  'views' => {'view7' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}},
66
88
  'lists' => {'list1' => '<list_code>'}
@@ -68,19 +90,19 @@ describe CouchPotato::View::ViewQuery, 'query_view!' do
68
90
  db.should_not_receive(:save_doc)
69
91
  CouchPotato::View::ViewQuery.new(db, 'design', {:view7 => {:map => '<map_code>', :reduce => '<reduce_code>'}}, {}).query_view!
70
92
  end
71
-
72
- it "should not update a view when there were no lists before and no list function is passed" do
93
+
94
+ it "does not update a view when there were no lists before and no list function is passed" do
73
95
  db = mock 'db', :get => {
74
96
  'views' => {'view8' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}}
75
97
  }, :view => nil
76
98
  db.should_not_receive(:save_doc)
77
99
  CouchPotato::View::ViewQuery.new(db, 'design', {:view8 => {:map => '<map_code>', :reduce => '<reduce_code>'}}, {}).query_view!
78
100
  end
79
-
80
- it "should query CouchRest directly when querying a list" do
101
+
102
+ it "queries CouchRest directly when querying a list" do
81
103
  db = stub('db').as_null_object
82
104
  CouchRest.should_receive(:get).with('http://127.0.0.1:5984/couch_potato_test/_design/my_design/_list/list1/view9?key=1')
83
105
  CouchPotato::View::ViewQuery.new(db, 'my_design', {:view9 => {:map => '<map_code>', :reduce => '<reduce_code>'}}, :list1 => '<new_list_code>').query_view!(:key => 1)
84
106
  end
85
-
86
- end
107
+
108
+ end
@@ -22,18 +22,61 @@ end
22
22
  class CustomBuild < Build
23
23
  end
24
24
 
25
- describe 'view' do
25
+ class ErlangBuild
26
+ include CouchPotato::Persistence
27
+ property :name
28
+ property :code
29
+
30
+ view :by_name, :key => :name, :language => :erlang
31
+ view :by_name_and_code, :key => [:name, :code], :language => :erlang
32
+ end
33
+
34
+ describe 'views' do
26
35
  before(:each) do
27
36
  recreate_db
28
37
  @db = CouchPotato.database
29
38
  end
30
39
 
40
+ context 'in erlang' do
41
+ it 'builds views with single keys' do
42
+ build = ErlangBuild.new(:name => 'erlang')
43
+ @db.save_document build
44
+
45
+ results = @db.view(ErlangBuild.by_name('erlang'))
46
+ results.should == [build]
47
+ end
48
+
49
+ it 'does not crash couchdb when a document does not have the key' do
50
+ build = {'ruby_class' => 'ErlangBuild'}
51
+ @db.couchrest_database.save_doc build
52
+
53
+ results = @db.view(ErlangBuild.by_name(:key => nil))
54
+ results.size.should == 1
55
+ end
56
+
57
+ it 'builds views with composite keys' do
58
+ build = ErlangBuild.new(:name => 'erlang', :code => '123')
59
+ @db.save_document build
60
+
61
+ results = @db.view(ErlangBuild.by_name_and_code(['erlang', '123']))
62
+ results.should == [build]
63
+ end
64
+
65
+ it 'can reduce over erlang views' do
66
+ build = ErlangBuild.new(:name => 'erlang')
67
+ @db.save_document build
68
+
69
+ results = @db.view(ErlangBuild.by_name(:reduce => true))
70
+ results.should == 1
71
+ end
72
+ end
73
+
31
74
  it "should return instances of the class" do
32
75
  @db.save_document Build.new(:state => 'success', :time => '2008-01-01')
33
76
  results = @db.view(Build.timeline)
34
77
  results.map(&:class).should == [Build]
35
78
  end
36
-
79
+
37
80
  it "should return the ids if there document was not included" do
38
81
  build = Build.new(:state => 'success', :time => '2008-01-01')
39
82
  @db.save_document build
@@ -61,19 +104,19 @@ describe 'view' do
61
104
  it "should count zero documents" do
62
105
  @db.view(Build.count(:reduce => true)).should == 0
63
106
  end
64
-
107
+
65
108
  it "should return the total_rows" do
66
109
  @db.save_document! Build.new(:state => 'success', :time => '2008-01-01')
67
110
  @db.view(Build.count(:reduce => false)).total_rows.should == 1
68
111
  end
69
-
112
+
70
113
  describe "with multiple keys" do
71
114
  it "should return the documents with matching keys" do
72
115
  build = Build.new(:state => 'success', :time => '2008-01-01')
73
116
  @db.save! build
74
117
  @db.view(Build.timeline(:keys => ['2008-01-01'])).should == [build]
75
118
  end
76
-
119
+
77
120
  it "should not return documents with non-matching keys" do
78
121
  build = Build.new(:state => 'success', :time => '2008-01-01')
79
122
  @db.save! build
@@ -128,7 +171,7 @@ describe 'view' do
128
171
  CouchPotato.couchrest_database.save_doc({:state => 'success', :time => '2008-01-01'})
129
172
  @db.view(Build.custom_timeline).map(&:time).should == [nil]
130
173
  end
131
-
174
+
132
175
  describe "that returns null documents" do
133
176
  it "should return instances of the class" do
134
177
  CouchPotato.couchrest_database.save_doc({:state => 'success', :time => '2008-01-01'})
@@ -139,7 +182,7 @@ describe 'view' do
139
182
  CouchPotato.couchrest_database.save_doc({:state => 'success', :time => '2008-01-01'})
140
183
  @db.view(Build.custom_timeline_returns_docs).map(&:state).should == ['success']
141
184
  end
142
-
185
+
143
186
  it "should still return instance of class if document included JSON.create_id" do
144
187
  CouchPotato.couchrest_database.save_doc({:state => 'success', :time => '2008-01-01', JSON.create_id.to_sym => "Build"})
145
188
  view_data = @db.view(Build.custom_timeline_returns_docs)
@@ -147,14 +190,14 @@ describe 'view' do
147
190
  view_data.map(&:state).should == ['success']
148
191
  end
149
192
  end
150
-
193
+
151
194
  describe "additional reduce function given" do
152
195
  it "should still assign the id" do
153
196
  doc = CouchPotato.couchrest_database.save_doc({})
154
197
  CouchPotato.couchrest_database.save_doc({:foreign_key => doc['id']})
155
198
  @db.view(Build.custom_with_reduce).map(&:_id).should == [doc['id']]
156
199
  end
157
-
200
+
158
201
  describe "when the additional reduce function is a typical count" do
159
202
  it "should parse the reduce count" do
160
203
  doc = CouchPotato.couchrest_database.save_doc({})
@@ -169,7 +212,7 @@ describe 'view' do
169
212
  it "should create a map function with the composite key" do
170
213
  CouchPotato::View::ViewQuery.should_receive(:new) do |db, design_name, view, list|
171
214
  view['key_array_timeline'][:map].should match(/emit\(\[doc\['time'\], doc\['state'\]\]/)
172
-
215
+
173
216
  stub('view query', :query_view! => {'rows' => []})
174
217
  end
175
218
  @db.view Build.key_array_timeline
@@ -202,16 +245,16 @@ describe 'view' do
202
245
  @db.view(CustomBuild.timeline).first.should be_kind_of(CustomBuild)
203
246
  end
204
247
  end
205
-
248
+
206
249
  describe "list functions" do
207
250
  class Coworker
208
251
  include CouchPotato::Persistence
209
-
252
+
210
253
  property :name
211
-
254
+
212
255
  view :all_with_list, :key => :name, :list => :append_doe
213
256
  view :all, :key => :name
214
-
257
+
215
258
  list :append_doe, <<-JS
216
259
  function(head, req) {
217
260
  var row;
@@ -224,16 +267,15 @@ describe 'view' do
224
267
  }
225
268
  JS
226
269
  end
227
-
270
+
228
271
  it "should use the list function declared at class level" do
229
272
  @db.save! Coworker.new(:name => 'joe')
230
273
  @db.view(Coworker.all_with_list).first.name.should == 'joe doe'
231
274
  end
232
-
275
+
233
276
  it "should use the list function passed at runtime" do
234
277
  @db.save! Coworker.new(:name => 'joe')
235
278
  @db.view(Coworker.all(:list => :append_doe)).first.name.should == 'joe doe'
236
279
  end
237
-
238
280
  end
239
281
  end
metadata CHANGED
@@ -1,106 +1,111 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: couch_potato
3
- version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.6.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.7.0.pre.1
5
+ prerelease: 6
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Alexander Lang
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-09-23 00:00:00 +02:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
12
+ date: 2012-04-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
17
15
  name: json
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70113496423300 !ruby/object:Gem::Requirement
20
17
  none: false
21
- requirements:
18
+ requirements:
22
19
  - - ~>
23
- - !ruby/object:Gem::Version
20
+ - !ruby/object:Gem::Version
24
21
  version: 1.6.0
25
22
  type: :runtime
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
28
- name: couchrest
29
23
  prerelease: false
30
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70113496423300
25
+ - !ruby/object:Gem::Dependency
26
+ name: couchrest
27
+ requirement: &70113496422680 !ruby/object:Gem::Requirement
31
28
  none: false
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
35
32
  version: 1.0.1
36
33
  type: :runtime
37
- version_requirements: *id002
38
- - !ruby/object:Gem::Dependency
39
- name: activemodel
40
34
  prerelease: false
41
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *70113496422680
36
+ - !ruby/object:Gem::Dependency
37
+ name: activemodel
38
+ requirement: &70113496422120 !ruby/object:Gem::Requirement
42
39
  none: false
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: "0"
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
47
44
  type: :runtime
48
- version_requirements: *id003
49
- - !ruby/object:Gem::Dependency
50
- name: rspec
51
45
  prerelease: false
52
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *70113496422120
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: &70113496421240 !ruby/object:Gem::Requirement
53
50
  none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- version: "2.0"
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
58
55
  type: :development
59
- version_requirements: *id004
60
- - !ruby/object:Gem::Dependency
61
- name: timecop
62
56
  prerelease: false
63
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *70113496421240
58
+ - !ruby/object:Gem::Dependency
59
+ name: timecop
60
+ requirement: &70113496436300 !ruby/object:Gem::Requirement
64
61
  none: false
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: "0"
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
69
66
  type: :development
70
- version_requirements: *id005
71
- - !ruby/object:Gem::Dependency
72
- name: tzinfo
73
67
  prerelease: false
74
- requirement: &id006 !ruby/object:Gem::Requirement
68
+ version_requirements: *70113496436300
69
+ - !ruby/object:Gem::Dependency
70
+ name: tzinfo
71
+ requirement: &70113496434780 !ruby/object:Gem::Requirement
75
72
  none: false
76
- requirements:
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- version: "0"
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
80
77
  type: :development
81
- version_requirements: *id006
82
- - !ruby/object:Gem::Dependency
78
+ prerelease: false
79
+ version_requirements: *70113496434780
80
+ - !ruby/object:Gem::Dependency
83
81
  name: rake
82
+ requirement: &70113496434200 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
84
89
  prerelease: false
85
- requirement: &id007 !ruby/object:Gem::Requirement
90
+ version_requirements: *70113496434200
91
+ - !ruby/object:Gem::Dependency
92
+ name: therubyracer
93
+ requirement: &70113496433500 !ruby/object:Gem::Requirement
86
94
  none: false
87
- requirements:
88
- - - ">="
89
- - !ruby/object:Gem::Version
90
- version: "0"
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
91
99
  type: :development
92
- version_requirements: *id007
100
+ prerelease: false
101
+ version_requirements: *70113496433500
93
102
  description: Ruby persistence layer for CouchDB
94
103
  email: alex@upstre.am
95
104
  executables: []
96
-
97
105
  extensions: []
98
-
99
106
  extra_rdoc_files: []
100
-
101
- files:
107
+ files:
102
108
  - .gitignore
103
- - .rvmrc
104
109
  - .travis.yml
105
110
  - CHANGES.md
106
111
  - CREDITS
@@ -113,12 +118,11 @@ files:
113
118
  - active_support_3_0.lock
114
119
  - active_support_3_1
115
120
  - active_support_3_1.lock
121
+ - active_support_3_2
122
+ - active_support_3_2.lock
116
123
  - couch_potato.gemspec
117
124
  - init.rb
118
125
  - lib/core_ext/date.rb
119
- - lib/core_ext/object.rb
120
- - lib/core_ext/string.rb
121
- - lib/core_ext/symbol.rb
122
126
  - lib/core_ext/time.rb
123
127
  - lib/couch_potato.rb
124
128
  - lib/couch_potato/database.rb
@@ -143,8 +147,6 @@ files:
143
147
  - lib/couch_potato/rspec/matchers/reduce_to_matcher.rb
144
148
  - lib/couch_potato/rspec/stub_db.rb
145
149
  - lib/couch_potato/validation.rb
146
- - lib/couch_potato/validation/with_active_model.rb
147
- - lib/couch_potato/validation/with_validatable.rb
148
150
  - lib/couch_potato/version.rb
149
151
  - lib/couch_potato/view/base_view_spec.rb
150
152
  - lib/couch_potato/view/custom_view_spec.rb
@@ -159,7 +161,6 @@ files:
159
161
  - spec/attachments_spec.rb
160
162
  - spec/callbacks_spec.rb
161
163
  - spec/create_spec.rb
162
- - spec/custom_view_spec.rb
163
164
  - spec/default_property_spec.rb
164
165
  - spec/destroy_spec.rb
165
166
  - spec/fixtures/address.rb
@@ -192,39 +193,35 @@ files:
192
193
  - spec/unit/view_query_spec.rb
193
194
  - spec/update_spec.rb
194
195
  - spec/view_updates_spec.rb
195
- has_rdoc: true
196
+ - spec/views_spec.rb
196
197
  homepage: http://github.com/langalex/couch_potato
197
198
  licenses: []
198
-
199
199
  post_install_message:
200
200
  rdoc_options: []
201
-
202
- require_paths:
201
+ require_paths:
203
202
  - lib
204
- required_ruby_version: !ruby/object:Gem::Requirement
203
+ required_ruby_version: !ruby/object:Gem::Requirement
205
204
  none: false
206
- requirements:
207
- - - ">="
208
- - !ruby/object:Gem::Version
209
- version: "0"
210
- required_rubygems_version: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ! '>='
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ required_rubygems_version: !ruby/object:Gem::Requirement
211
210
  none: false
212
- requirements:
213
- - - ">="
214
- - !ruby/object:Gem::Version
215
- version: "0"
211
+ requirements:
212
+ - - ! '>'
213
+ - !ruby/object:Gem::Version
214
+ version: 1.3.1
216
215
  requirements: []
217
-
218
216
  rubyforge_project:
219
- rubygems_version: 1.6.2
217
+ rubygems_version: 1.8.11
220
218
  signing_key:
221
219
  specification_version: 3
222
220
  summary: Ruby persistence layer for CouchDB
223
- test_files:
221
+ test_files:
224
222
  - spec/attachments_spec.rb
225
223
  - spec/callbacks_spec.rb
226
224
  - spec/create_spec.rb
227
- - spec/custom_view_spec.rb
228
225
  - spec/default_property_spec.rb
229
226
  - spec/destroy_spec.rb
230
227
  - spec/fixtures/address.rb
@@ -257,3 +254,4 @@ test_files:
257
254
  - spec/unit/view_query_spec.rb
258
255
  - spec/update_spec.rb
259
256
  - spec/view_updates_spec.rb
257
+ - spec/views_spec.rb
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm 1.9.2@couch_potato
@@ -1,5 +0,0 @@
1
- Object.class_eval do
2
- def try(method, *args)
3
- self.send method, *args if self.respond_to?(method)
4
- end
5
- end
@@ -1,12 +0,0 @@
1
- module ActiveSupportMethods
2
- def camelize
3
- sub(/^([a-z])/) {$1.upcase}.gsub(/_([a-z])/) do
4
- $1.upcase
5
- end
6
- end
7
-
8
- def blank?
9
- empty?
10
- end
11
- end
12
- String.send :include, ActiveSupportMethods unless String.new.respond_to?(:underscore)
@@ -1,15 +0,0 @@
1
- # taken from ActiveSupport 2.3.2
2
- unless :to_proc.respond_to?(:to_proc)
3
- class Symbol
4
- # Turns the symbol into a simple proc, which is especially useful for enumerations. Examples:
5
- #
6
- # # The same as people.collect { |p| p.name }
7
- # people.collect(&:name)
8
- #
9
- # # The same as people.select { |p| p.manager? }.collect { |p| p.salary }
10
- # people.select(&:manager?).collect(&:salary)
11
- def to_proc
12
- Proc.new { |*args| args.shift.__send__(self, *args) }
13
- end
14
- end
15
- end