forest_liana 7.6.9 → 7.6.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5771aacdf3ba9cccd4c4b041298e2848f1a7f80260d5c8c3efac7994117a4a87
4
- data.tar.gz: b284e42c3adabfb13b37f7588d669d7a3b52863ff7d1970a8f45b0d6b3f62cd5
3
+ metadata.gz: 529622dcf795df3fecbb514a1b707c59ba2508d5b9c09b51ebc4cd25984cc558
4
+ data.tar.gz: 31d36870440829fcad6549e452ccba2b25cde75a9bb3ce3c7370baf48248c6c2
5
5
  SHA512:
6
- metadata.gz: 7578fe5932e400ba5215bffdb9c7178196118f2ab20ad3fd945115162c67f2c062c32dafb0528eefe6af5be19fcbd692c97d46b58a89a371c74c82a979038bd3
7
- data.tar.gz: 9f3e3d85106f52f3785c81c100f65ae2bf24709f5d2da127ec726e5a1eb9e3135f81bd7332ac9b1fb1a6c23a954185a2ab108787d76679dacb1cd0e731520789
6
+ metadata.gz: 8183bd54a698c09f6831a8972bf108074cf038f983c3e9e89ab688b61dab07d9bb9e4fc75b337d0bcf54fe6d64e11eb96cfe7e3e6a05b133f9b2c3c5dd2a2724
7
+ data.tar.gz: f677de6ae48ec830dcde1f2f9acaa7b795017f4a068af72a5d2f3eacc3c826c5df6827fe5398869671ef275d86beb355736eefd64a7b1f965c3baa8dc5a760f6
@@ -34,10 +34,10 @@ module ForestLiana
34
34
  instance_dependent_associations = instance_dependent_associations(resource)
35
35
 
36
36
  preload_loads = @includes.select do |name|
37
- targetModelConnection = resource.reflect_on_association(name).inverse_of&.active_record&.connection
37
+ targetModelConnection = resource.reflect_on_association(name).klass.connection
38
38
  targetModelDatabase = targetModelConnection.current_database if targetModelConnection.respond_to? :current_database
39
39
  resourceConnection = resource.connection
40
- resourceDatabase = resourceConnection if resourceConnection.respond_to? :current_database
40
+ resourceDatabase = resourceConnection.current_database if resourceConnection.respond_to? :current_database
41
41
 
42
42
  targetModelDatabase != resourceDatabase
43
43
  end + instance_dependent_associations
@@ -1,3 +1,3 @@
1
1
  module ForestLiana
2
- VERSION = "7.6.9"
2
+ VERSION = "7.6.10"
3
3
  end
@@ -0,0 +1,3 @@
1
+ class Manufacturer < ApplicationRecord
2
+ has_many :products
3
+ end
@@ -1,3 +1,6 @@
1
1
  class Product < ApplicationRecord
2
+ belongs_to :manufacturer
3
+ belongs_to :driver, optional: true
4
+
2
5
  validates :uri, presence: true, format: { with: URI::DEFAULT_PARSER.make_regexp }
3
6
  end
@@ -0,0 +1,7 @@
1
+ class CreateManufacturers < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :manufacturers do |t|
4
+ t.string :name
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ class AddColumnsToProducts < ActiveRecord::Migration[6.0]
2
+ def change
3
+ change_table :products do |table|
4
+ table.string :name
5
+ table.belongs_to(:manufacturer)
6
+ table.belongs_to(:driver)
7
+ end
8
+ end
9
+ end
@@ -10,7 +10,7 @@
10
10
  #
11
11
  # It's strongly recommended that you check this file into your version control system.
12
12
 
13
- ActiveRecord::Schema.define(version: 2021_05_26_084712) do
13
+ ActiveRecord::Schema.define(version: 2022_07_27_114930) do
14
14
 
15
15
  create_table "isle", force: :cascade do |t|
16
16
  t.string "name"
@@ -27,6 +27,10 @@ ActiveRecord::Schema.define(version: 2021_05_26_084712) do
27
27
  t.index ["island_id"], name: "index_locations_on_island_id"
28
28
  end
29
29
 
30
+ create_table "manufacturers", force: :cascade do |t|
31
+ t.string "name"
32
+ end
33
+
30
34
  create_table "owners", force: :cascade do |t|
31
35
  t.string "name"
32
36
  t.datetime "hired_at"
@@ -34,6 +38,11 @@ ActiveRecord::Schema.define(version: 2021_05_26_084712) do
34
38
 
35
39
  create_table "products", force: :cascade do |t|
36
40
  t.string "uri"
41
+ t.string "name"
42
+ t.integer "manufacturer_id"
43
+ t.integer "driver_id"
44
+ t.index ["driver_id"], name: "index_products_on_driver_id"
45
+ t.index ["manufacturer_id"], name: "index_products_on_manufacturer_id"
37
46
  end
38
47
 
39
48
  create_table "references", force: :cascade do |t|
@@ -25,6 +25,7 @@ module ForestLiana
25
25
  [
26
26
  Island,
27
27
  Location,
28
+ Manufacturer,
28
29
  Owner,
29
30
  Product,
30
31
  Reference,
@@ -4,9 +4,9 @@ module ForestLiana
4
4
  let(:pageSize) { 10 }
5
5
  let(:pageNumber) { 1 }
6
6
  let(:sort) { 'id' }
7
- let(:fields) { }
8
- let(:filters) { }
9
- let(:scopes) { { } }
7
+ let(:fields) {}
8
+ let(:filters) {}
9
+ let(:scopes) { {} }
10
10
  let(:rendering_id) { 13 }
11
11
  let(:user) { { 'id' => '1', 'rendering_id' => rendering_id } }
12
12
 
@@ -22,7 +22,21 @@ module ForestLiana
22
22
  allow(ForestLiana::ScopeManager).to receive(:fetch_scopes).and_return(scopes)
23
23
  end
24
24
 
25
+ def clean_database
26
+ [
27
+ Driver,
28
+ Island,
29
+ Location,
30
+ Manufacturer,
31
+ Product,
32
+ Tree,
33
+ User,
34
+ ].each(&:destroy_all)
35
+ end
36
+
25
37
  before(:each) do
38
+ clean_database
39
+
26
40
  users = ['Michel', 'Robert', 'Vince', 'Sandro', 'Olesya', 'Romain', 'Valentin', 'Jason', 'Arnaud', 'Jeff', 'Steve', 'Marc', 'Xavier', 'Paul', 'Mickael', 'Mike', 'Maxime', 'Gertrude', 'Monique', 'Mia', 'Rachid', 'Edouard', 'Sacha', 'Caro', 'Amand', 'Nathan', 'Noémie', 'Robin', 'Gaelle', 'Isabelle']
27
41
  .map { |name| User.create(name: name) }
28
42
 
@@ -50,15 +64,94 @@ module ForestLiana
50
64
  { :coordinates => '32154', :island => islands[4] }
51
65
  ].map { |location| Location.create(coordinates: location[:coordinates], island: location[:island]) }
52
66
 
67
+ manufacturers = ['Orange', 'Pear'].map { |name| Manufacturer.create!(name: 'name') }
68
+
69
+ drivers = ['Baby driver', 'Taxi driver'].map { |firstname| Driver.create!(firstname: firstname) }
70
+
71
+ products = [
72
+ { name: 'Valencia', uri: 'https://valencia.com', manufacturer: manufacturers[0], driver: drivers[0] },
73
+ { name: 'Blood', uri: 'https://blood.com', manufacturer: manufacturers[0], driver: drivers[1] },
74
+ { name: 'Conference', uri: 'https://conference.com', manufacturer: manufacturers[1], driver: drivers[0] },
75
+ { name: 'Concorde', uri: 'https://concorde.com', manufacturer: manufacturers[1], driver: drivers[1] }
76
+ ].map {|attributes| Product.create!(attributes) }
77
+
53
78
  reference = Reference.create()
54
79
  init_scopes
55
80
  end
56
81
 
57
- after(:each) do
58
- User.destroy_all
59
- Island.destroy_all
60
- Location.destroy_all
61
- Tree.destroy_all
82
+ describe 'records eager loading' do
83
+ let(:resource) { Product }
84
+ let(:fields) { { resource.name => 'id,name,manufacturer', 'manufacturer' => 'name' } }
85
+
86
+ shared_context 'resource current_database' do
87
+ before do
88
+ connection = resource.connection
89
+
90
+ def connection.current_database
91
+ 'db/test.sqlite3'
92
+ end
93
+ end
94
+
95
+ after do
96
+ resource.connection.singleton_class.remove_method(:current_database)
97
+ end
98
+ end
99
+
100
+ shared_examples 'left outer join' do
101
+ it 'should perform a left outer join with the association' do
102
+ expect(getter.perform.to_sql).to match(/LEFT OUTER JOIN "manufacturers"/)
103
+ end
104
+ end
105
+
106
+ shared_examples 'records' do
107
+ it 'should get only the expected records' do
108
+ getter.perform
109
+
110
+ records = getter.records
111
+
112
+ count = getter.count
113
+
114
+ expect(records.count).to eq 4
115
+ expect(count).to eq 4
116
+ expect(records.map(&:name)).to match_array(%w[Valencia Blood Conference Concorde])
117
+ end
118
+ end
119
+
120
+ context 'when the connections do not support current_database' do
121
+ include_examples 'left outer join'
122
+ include_examples 'records'
123
+ end
124
+
125
+ context 'when the included association uses a different database connection' do
126
+ let(:fields) { { resource.name => 'id,name,driver', 'driver' => 'firstname' } }
127
+
128
+ before do
129
+ association_connection = resource.reflect_on_association(:driver).klass.connection
130
+
131
+ def association_connection.current_database
132
+ 'db/different_test.sqlite3'
133
+ end
134
+ end
135
+
136
+ after do
137
+ resource.reflect_on_association(:driver).klass.connection.singleton_class.remove_method(:current_database)
138
+ end
139
+
140
+ include_context 'resource current_database'
141
+
142
+ include_examples 'records'
143
+
144
+ it 'does not perform a left outer join with the association' do
145
+ expect(getter.perform.to_sql).not_to match(/LEFT OUTER JOIN "drivers"/)
146
+ end
147
+ end
148
+
149
+ context 'when the included association uses the same database connection' do
150
+ include_context 'resource current_database'
151
+
152
+ include_examples 'left outer join'
153
+ include_examples 'records'
154
+ end
62
155
  end
63
156
 
64
157
  describe 'when there are more records than the page size' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forest_liana
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.6.9
4
+ version: 7.6.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sandro Munda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-22 00:00:00.000000000 Z
11
+ date: 2022-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -334,6 +334,7 @@ files:
334
334
  - spec/dummy/app/models/garage_record.rb
335
335
  - spec/dummy/app/models/island.rb
336
336
  - spec/dummy/app/models/location.rb
337
+ - spec/dummy/app/models/manufacturer.rb
337
338
  - spec/dummy/app/models/owner.rb
338
339
  - spec/dummy/app/models/product.rb
339
340
  - spec/dummy/app/models/reference.rb
@@ -377,6 +378,8 @@ files:
377
378
  - spec/dummy/db/migrate/20210526084712_create_products.rb
378
379
  - spec/dummy/db/migrate/20220719094127_create_cars.rb
379
380
  - spec/dummy/db/migrate/20220719094450_create_drivers.rb
381
+ - spec/dummy/db/migrate/20220727114450_create_manufacturers.rb
382
+ - spec/dummy/db/migrate/20220727114930_add_columns_to_products.rb
380
383
  - spec/dummy/db/schema.rb
381
384
  - spec/dummy/lib/forest_liana/collections/island.rb
382
385
  - spec/dummy/lib/forest_liana/collections/location.rb
@@ -657,6 +660,7 @@ test_files:
657
660
  - spec/dummy/app/models/island.rb
658
661
  - spec/dummy/app/models/owner.rb
659
662
  - spec/dummy/app/models/application_record.rb
663
+ - spec/dummy/app/models/manufacturer.rb
660
664
  - spec/dummy/app/models/town.rb
661
665
  - spec/dummy/app/models/user.rb
662
666
  - spec/dummy/app/models/reference.rb
@@ -678,7 +682,9 @@ test_files:
678
682
  - spec/dummy/db/migrate/20220719094127_create_cars.rb
679
683
  - spec/dummy/db/migrate/20210511141752_create_owners.rb
680
684
  - spec/dummy/db/migrate/20220719094450_create_drivers.rb
685
+ - spec/dummy/db/migrate/20220727114930_add_columns_to_products.rb
681
686
  - spec/dummy/db/migrate/20210526084712_create_products.rb
687
+ - spec/dummy/db/migrate/20220727114450_create_manufacturers.rb
682
688
  - spec/dummy/db/migrate/20190226174951_create_tree.rb
683
689
  - spec/dummy/db/migrate/20190716130830_add_age_to_tree.rb
684
690
  - spec/dummy/db/migrate/20190226172951_create_user.rb