forest_liana 7.6.9 → 7.6.10

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.
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