couch_potato 1.7.1 → 1.9.0

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 (56) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +38 -0
  3. data/.gitignore +3 -0
  4. data/CHANGES.md +169 -131
  5. data/Gemfile +4 -0
  6. data/README.md +55 -75
  7. data/Rakefile +11 -10
  8. data/couch_potato-rspec.gemspec +2 -1
  9. data/couch_potato.gemspec +8 -6
  10. data/gemfiles/active_support_5_0 +1 -5
  11. data/gemfiles/active_support_5_1 +7 -0
  12. data/gemfiles/active_support_5_2 +7 -0
  13. data/gemfiles/active_support_6_0 +7 -0
  14. data/gemfiles/active_support_6_1 +7 -0
  15. data/lib/couch_potato/database.rb +165 -70
  16. data/lib/couch_potato/persistence/dirty_attributes.rb +3 -21
  17. data/lib/couch_potato/persistence/magic_timestamps.rb +3 -3
  18. data/lib/couch_potato/persistence/properties.rb +15 -10
  19. data/lib/couch_potato/persistence/simple_property.rb +0 -4
  20. data/lib/couch_potato/persistence/type_caster.rb +9 -6
  21. data/lib/couch_potato/persistence.rb +0 -1
  22. data/lib/couch_potato/railtie.rb +6 -11
  23. data/lib/couch_potato/validation.rb +8 -0
  24. data/lib/couch_potato/version.rb +1 -1
  25. data/lib/couch_potato/view/base_view_spec.rb +8 -32
  26. data/lib/couch_potato/view/custom_views.rb +4 -3
  27. data/lib/couch_potato/view/flex_view_spec.rb +121 -0
  28. data/lib/couch_potato/view/view_parameters.rb +34 -0
  29. data/lib/couch_potato.rb +32 -9
  30. data/spec/callbacks_spec.rb +45 -19
  31. data/spec/conflict_handling_spec.rb +0 -1
  32. data/spec/property_spec.rb +2 -2
  33. data/spec/railtie_spec.rb +10 -0
  34. data/spec/spec_helper.rb +4 -3
  35. data/spec/unit/active_model_compliance_spec.rb +7 -3
  36. data/spec/unit/attributes_spec.rb +1 -1
  37. data/spec/unit/caching_spec.rb +105 -0
  38. data/spec/unit/couch_potato_spec.rb +70 -5
  39. data/spec/unit/create_spec.rb +5 -4
  40. data/spec/unit/database_spec.rb +235 -135
  41. data/spec/unit/dirty_attributes_spec.rb +5 -26
  42. data/spec/unit/flex_view_spec_spec.rb +17 -0
  43. data/spec/unit/model_view_spec_spec.rb +1 -1
  44. data/spec/unit/rspec_stub_db_spec.rb +31 -0
  45. data/spec/unit/validation_spec.rb +42 -2
  46. data/spec/views_spec.rb +214 -103
  47. data/vendor/pouchdb-collate/LICENSE +202 -0
  48. data/vendor/pouchdb-collate/pouchdb-collate.js +430 -0
  49. metadata +46 -42
  50. data/.ruby-version +0 -1
  51. data/.travis.yml +0 -21
  52. data/gemfiles/active_support_4_0 +0 -11
  53. data/gemfiles/active_support_4_1 +0 -11
  54. data/gemfiles/active_support_4_2 +0 -11
  55. data/lib/couch_potato/persistence/deep_dirty_attributes.rb +0 -180
  56. data/spec/unit/deep_dirty_attributes_spec.rb +0 -434
@@ -1,6 +1,62 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
- describe CouchPotato, 'full_url_to_database' do
5
+ describe CouchPotato, '.configure' do
6
+ after(:example) do
7
+ # reset defaults
8
+ CouchPotato::Config.database_name = nil
9
+ CouchPotato::Config.split_design_documents_per_view = false
10
+ CouchPotato::Config.digest_view_names = false
11
+ CouchPotato::Config.default_language = :javascript
12
+ CouchPotato::Config.database_host = 'http://127.0.0.1:5984'
13
+ CouchPotato::Config.additional_databases = {}
14
+ end
15
+
16
+ it 'sets the database name when config is a string' do
17
+ CouchPotato.configure('testdb')
18
+
19
+ expect(CouchPotato::Config.database_name).to eq('testdb')
20
+ end
21
+
22
+ it 'does not override database_host if not given' do
23
+ CouchPotato.configure(
24
+ database: 'testdb'
25
+ )
26
+
27
+ expect(CouchPotato::Config.database_host).to eq('http://127.0.0.1:5984')
28
+ end
29
+
30
+ it 'sets the given config options' do
31
+ CouchPotato.configure(
32
+ database: 'testdb',
33
+ database_host: 'http://10.0.0.1:2000',
34
+ additional_databases: {
35
+ test2: 'test2_db'
36
+ },
37
+ split_design_documents_per_view: true,
38
+ digest_view_names: true,
39
+ default_language: 'erlang'
40
+ )
41
+
42
+ expect(CouchPotato::Config.database_name).to eq('testdb')
43
+ expect(CouchPotato::Config.split_design_documents_per_view).to eq(true)
44
+ expect(CouchPotato::Config.digest_view_names).to eq(true)
45
+ expect(CouchPotato::Config.default_language).to eq('erlang')
46
+ expect(CouchPotato::Config.database_host).to eq('http://10.0.0.1:2000')
47
+ expect(CouchPotato::Config.additional_databases).to eq('test2' => 'test2_db')
48
+ end
49
+
50
+ it 'works with string keys' do
51
+ CouchPotato.configure(
52
+ 'database' => 'testdb'
53
+ )
54
+
55
+ expect(CouchPotato::Config.database_name).to eq('testdb')
56
+ end
57
+ end
58
+
59
+ describe CouchPotato, '.full_url_to_database' do
4
60
  before(:each) do
5
61
  @original_database_name = CouchPotato::Config.database_name
6
62
  end
@@ -8,12 +64,12 @@ describe CouchPotato, 'full_url_to_database' do
8
64
  CouchPotato::Config.database_name = @original_database_name
9
65
  end
10
66
 
11
- it "should add the default localhost and port if only a name is set" do
67
+ it 'should add the default localhost and port if only a name is set' do
12
68
  CouchPotato::Config.database_name = 'test'
13
69
  expect(CouchPotato.full_url_to_database).to eq('http://127.0.0.1:5984/test')
14
70
  end
15
71
 
16
- it "should return the set url" do
72
+ it 'should return the set url' do
17
73
  CouchPotato::Config.database_name = 'http://db.local/test'
18
74
  expect(CouchPotato.full_url_to_database).to eq('http://db.local/test')
19
75
  end
@@ -21,13 +77,22 @@ end
21
77
 
22
78
  describe CouchPotato, 'use' do
23
79
  it 'should return the db object' do
24
- db = CouchPotato.use("testdb")
80
+ db = CouchPotato.use('testdb')
25
81
  expect(db.couchrest_database.root.to_s).to eq('http://127.0.0.1:5984/testdb')
26
82
  end
83
+
84
+ it 'returns a db from the additional_databases pool' do
85
+ CouchPotato::Config.database_host = 'http://127.0.0.1:5984'
86
+ CouchPotato::Config.additional_databases = { '1' => 'db1', '2' => 'db2' }
87
+
88
+ db = CouchPotato.use('2')
89
+
90
+ expect(db.couchrest_database.root.to_s).to eq('http://127.0.0.1:5984/db2')
91
+ end
27
92
  end
28
93
 
29
94
  describe CouchPotato, '.models' do
30
- it "returns all classes that have implemented CouchPotato::Persistence" do
95
+ it 'returns all classes that have implemented CouchPotato::Persistence' do
31
96
  clazz = Class.new
32
97
  clazz.send(:include, CouchPotato::Persistence)
33
98
 
@@ -39,7 +39,8 @@ describe "create" do
39
39
  describe "fails" do
40
40
  before(:each) do
41
41
  @comment = Comment.new
42
- CouchPotato::Database.new(double('database', :info => nil)).save_document(@comment)
42
+ @db = CouchPotato::Database.new(double('database', :info => nil))
43
+ @db.save_document(@comment)
43
44
  end
44
45
 
45
46
  it "should not assign an id" do
@@ -58,11 +59,11 @@ describe "create" do
58
59
  expect(@comment.updated_at).to be_nil
59
60
  end
60
61
 
61
- describe "with bank" do
62
+ describe "with !" do
62
63
  it "should raise an exception" do
63
64
  expect {
64
- @comment.save!
65
- }.to raise_error
65
+ @db.save! @comment
66
+ }.to raise_error(CouchPotato::Database::ValidationsFailedError)
66
67
  end
67
68
  end
68
69
  end