lol_dba 2.1.0 → 2.1.1

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
  SHA1:
3
- metadata.gz: a24c219f8ce04a75238a85eb0706313076d2dd98
4
- data.tar.gz: d3ea7d52f43f8cefa74a32d620da535bffdac8f3
3
+ metadata.gz: 095775b96e5bc0e22e261e1e55fc03d3f2c0dc94
4
+ data.tar.gz: 84ae3baeef1d90f247acde65f52518d3b2c4079d
5
5
  SHA512:
6
- metadata.gz: 3497f9a65fbea82c2daa969811de3db7ed0ddebcfe785cdef85f04916a7193ccd2da5ffaca189dc9af2201680e13837242bc7bf8bdc7a2ab111f759e495ce57a
7
- data.tar.gz: 6a506f4800a9db20ffbd4747da8c09432749d62f4fd2be58ff0adf26c0ec367ed69641344dd7210d1e32c023c836061df1a1efb93dc58f60ba2be1cea5f17b24
6
+ metadata.gz: 38aa20f992b87c89f3635dbded75b1236f09872a68f1c25268328fb5fb1b6acb5dd69fd428c7021759b3df8cd9613fe9afb871c6a253835d64762ea94f4b1c37
7
+ data.tar.gz: 481dfd01822e773ae806f85654a99e7bddf32fd60827cb60a133fd02edf61bc8cef9d6d0ee7735ba8dc639d4d31ca43019d0c0f80f18e01b4238dab82a9698ad
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lol_dba (2.1.0)
4
+ lol_dba (2.1.1)
5
5
  actionpack (>= 3.0)
6
6
  activerecord (>= 3.0)
7
7
  railties (>= 3.0)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- lol_dba (2.1.0)
4
+ lol_dba (2.1.1)
5
5
  actionpack (>= 3.0)
6
6
  activerecord (>= 3.0)
7
7
  railties (>= 3.0)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- lol_dba (2.1.0)
4
+ lol_dba (2.1.1)
5
5
  actionpack (>= 3.0)
6
6
  activerecord (>= 3.0)
7
7
  railties (>= 3.0)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- lol_dba (2.1.0)
4
+ lol_dba (2.1.1)
5
5
  actionpack (>= 3.0)
6
6
  activerecord (>= 3.0)
7
7
  railties (>= 3.0)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- lol_dba (2.1.0)
4
+ lol_dba (2.1.1)
5
5
  actionpack (>= 3.0)
6
6
  activerecord (>= 3.0)
7
7
  railties (>= 3.0)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- lol_dba (2.1.0)
4
+ lol_dba (2.1.1)
5
5
  actionpack (>= 3.0)
6
6
  activerecord (>= 3.0)
7
7
  railties (>= 3.0)
data/lib/lol_dba.rb CHANGED
@@ -127,8 +127,9 @@ EOM
127
127
  foreign_key = get_through_foreign_key(class_name, reflection_options)
128
128
 
129
129
  if source = reflection_options.options[:source]
130
- association_class = through_class.reflections.stringify_keys[source.to_s].klass
131
- association_foreign_key = get_through_foreign_key(association_class, reflection_options)
130
+ association_reflection = through_class.reflections.stringify_keys[source.to_s]
131
+ next if association_reflection.options[:polymorphic]
132
+ association_foreign_key = get_through_foreign_key(association_reflection.klass, reflection_options)
132
133
  elsif through_reflections = through_class.reflections.stringify_keys[reflection_name.singularize]
133
134
  # go to joining model through has_many and find belongs_to
134
135
  association_foreign_key = through_reflections.options[:foreign_key]
@@ -1,3 +1,3 @@
1
1
  module LolDba
2
- VERSION = "2.1.0" unless defined? LolDba::VERSION
2
+ VERSION = "2.1.1" unless defined? LolDba::VERSION
3
3
  end
@@ -2,80 +2,88 @@ require 'spec_helper'
2
2
 
3
3
  describe "Collect indexes based on associations:" do
4
4
 
5
- let(:lol_dba){ LolDba.check_for_indexes }
6
- let(:relationship_indexes){ lol_dba[0] }
7
- let(:warning_messages){ lol_dba[1] }
5
+ before :all do
6
+ lol_dba = LolDba.check_for_indexes
7
+ @relationship_indexes = lol_dba[0]
8
+ @warning_messages = lol_dba[1]
9
+ end
8
10
 
9
11
  it "find relationship indexes" do
10
- expect(relationship_indexes).not_to be_empty
12
+ expect(@relationship_indexes).not_to be_empty
11
13
 
12
- expect(relationship_indexes).to have_key("companies")
13
- expect(relationship_indexes).to have_key("companies_freelancers")
14
- expect(relationship_indexes).to have_key("addresses")
15
- expect(relationship_indexes).to have_key("purchases")
14
+ expect(@relationship_indexes).to have_key("companies")
15
+ expect(@relationship_indexes).to have_key("companies_freelancers")
16
+ expect(@relationship_indexes).to have_key("addresses")
17
+ expect(@relationship_indexes).to have_key("purchases")
16
18
  end
17
19
 
18
20
  it "find indexes for belongs_to" do
19
- expect(relationship_indexes["addresses"]).to include("country_id")
21
+ expect(@relationship_indexes["addresses"]).to include("country_id")
20
22
  end
21
23
 
22
24
  it "find indexes for polymorphic belongs_to" do
23
- expect(relationship_indexes["addresses"]).to include(["addressable_id", "addressable_type"])
25
+ expect(@relationship_indexes["addresses"]).to include(["addressable_id", "addressable_type"])
24
26
  end
25
27
 
26
28
  it "find indexes for belongs_to with custom foreign key" do
27
- expect(relationship_indexes["companies"]).to include("owner_id")
29
+ expect(@relationship_indexes["companies"]).to include("owner_id")
28
30
  end
29
31
 
30
32
  it "find indexes for has_and_belongs_to_many" do
31
- expect(relationship_indexes["companies_freelancers"]).to include(["company_id", "freelancer_id"])
32
- expect(relationship_indexes["companies_freelancers"]).not_to include(["freelancer_id", "company_id"])
33
+ expect(@relationship_indexes["companies_freelancers"]).to include(["company_id", "freelancer_id"])
34
+ expect(@relationship_indexes["companies_freelancers"]).not_to include(["freelancer_id", "company_id"])
33
35
  end
34
36
 
35
37
  it "find indexes for has_and_belongs_to_many with custom join_table, primary and foreign keys" do
36
- expect(relationship_indexes["purchases"]).to include(["buyer_id", "present_id"])
38
+ expect(@relationship_indexes["purchases"]).to include(["buyer_id", "present_id"])
37
39
  end
38
40
 
39
41
  it "find indexes for has_and_belongs_to_many but don't create the left_side index" do
40
- expect(relationship_indexes["purchases"]).not_to include("left_side_id")
42
+ expect(@relationship_indexes["purchases"]).not_to include("left_side_id")
41
43
  end
42
44
 
43
45
  it "do not add an already existing index" do
44
- expect(relationship_indexes["companies"]).not_to include("country_id")
46
+ expect(@relationship_indexes["companies"]).not_to include("country_id")
45
47
  end
46
48
 
47
49
  it "find indexes for has_many :through" do
48
- expect(relationship_indexes["billable_weeks"]).to include("remote_worker_id", "timesheet_id")
49
- expect(relationship_indexes["billable_weeks"]).not_to include(["billable_week_id", "remote_worker_id"])
50
+ expect(@relationship_indexes["billable_weeks"]).to include("remote_worker_id", "timesheet_id")
51
+ expect(@relationship_indexes["billable_weeks"]).not_to include(["billable_week_id", "remote_worker_id"])
50
52
  end
51
53
 
52
54
  it "find indexes for has_many :through with source and foreign key" do
53
- expect(relationship_indexes["complex_billable_week"]).to include(["freelancer_id", "id_complex_timesheet"])
55
+ expect(@relationship_indexes["complex_billable_week"]).to include(["freelancer_id", "id_complex_timesheet"])
54
56
  end
55
57
 
56
58
  it "do not include wrong class" do
57
- expect(relationship_indexes["wrongs"]).to be_nil
58
- expect(relationship_indexes["addresses_wrongs"]).to be_nil
59
+ expect(@relationship_indexes["wrongs"]).to be_nil
60
+ expect(@relationship_indexes["addresses_wrongs"]).to be_nil
59
61
  end
60
62
 
61
63
  it "have warnings(non-existent table) on test data" do
62
- expect(warning_messages).not_to be_empty
63
- expect(warning_messages).to match(/\'wrongs\'/)
64
- expect(warning_messages).to match(/\'addresses_wrongs\'/)
64
+ expect(@warning_messages).not_to be_empty
65
+ expect(@warning_messages).to match(/\'wrongs\'/)
66
+ expect(@warning_messages).to match(/\'addresses_wrongs\'/)
65
67
  end
66
68
 
67
69
  it "find indexes for STI" do
68
- expect(relationship_indexes["users"]).to include(["id", "type"])
70
+ expect(@relationship_indexes["users"]).to include(["id", "type"])
69
71
  end
70
72
 
71
73
  it "find indexes for STI with custom inheritance column" do
72
- expect(relationship_indexes["freelancers"]).to include(["id", "worker_type"])
74
+ expect(@relationship_indexes["freelancers"]).to include(["id", "worker_type"])
73
75
  end
74
76
 
75
77
  it "find indexes, than use custom class name option in association" do
76
- expect(relationship_indexes["employers_freelancers"]).to be_nil
77
- expect(relationship_indexes["companies_freelancers"]).to include(["company_id", "freelancer_id"])
78
- expect(relationship_indexes["companies_freelancers"]).not_to include(["freelancer_id", "company_id"])
78
+ expect(@relationship_indexes["employers_freelancers"]).to be_nil
79
+ expect(@relationship_indexes["companies_freelancers"]).to include(["company_id", "freelancer_id"])
80
+ expect(@relationship_indexes["companies_freelancers"]).not_to include(["freelancer_id", "company_id"])
79
81
  end
80
82
 
83
+ it "HABTM with polymorphic relationship" do
84
+ expect(@relationship_indexes["favourites"]).to include("user_id")
85
+ expect(@relationship_indexes["favourites"]).to include(["favourable_id", "favourable_type"])
86
+ expect(@relationship_indexes["favourites"]).not_to include(["project_id", "user_id"])
87
+ expect(@relationship_indexes["favourites"]).not_to include(["project_id", "worker_user_id"])
88
+ end
81
89
  end
@@ -0,0 +1,6 @@
1
+ class Favourite < ActiveRecord::Base
2
+
3
+ belongs_to :user
4
+ belongs_to :favourable, polymorphic: true
5
+
6
+ end
@@ -0,0 +1,6 @@
1
+ class Project < ActiveRecord::Base
2
+
3
+ belongs_to :user
4
+ has_many :favourites, as: :favourable
5
+
6
+ end
@@ -5,6 +5,10 @@ class User < ActiveRecord::Base
5
5
 
6
6
  has_and_belongs_to_many :users, join_table: :purchases, association_foreign_key: :present_id, foreign_key: :buyer_id
7
7
 
8
+ has_many :projects
9
+ has_many :favourites
10
+ has_many :favourite_projects, through: :favourites, source: :favourable, source_type: 'Project'
11
+
8
12
  validates_uniqueness_of :name
9
13
 
10
14
  end
@@ -78,5 +78,14 @@ ActiveRecord::Schema.define do
78
78
  create_table "groups", force: :cascade do |t|
79
79
  end
80
80
 
81
+ create_table "projects", :force => true do |t|
82
+ t.column "name", :string
83
+ t.column "user_id", :integer
84
+ end
81
85
 
86
+ create_table "favourites", :force => true do |t|
87
+ t.column "user_id", :integer
88
+ t.column "favourable_id", :integer
89
+ t.column "favourable_type", :string
90
+ end
82
91
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lol_dba
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Diego Plentz
@@ -119,11 +119,13 @@ files:
119
119
  - spec/fixtures/app/models/complex_timesheet.rb
120
120
  - spec/fixtures/app/models/component.rb
121
121
  - spec/fixtures/app/models/country.rb
122
+ - spec/fixtures/app/models/favourite.rb
122
123
  - spec/fixtures/app/models/freelancer.rb
123
124
  - spec/fixtures/app/models/gift.rb
124
125
  - spec/fixtures/app/models/god.rb
125
126
  - spec/fixtures/app/models/group.rb
126
127
  - spec/fixtures/app/models/group_component.rb
128
+ - spec/fixtures/app/models/project.rb
127
129
  - spec/fixtures/app/models/timesheet.rb
128
130
  - spec/fixtures/app/models/user.rb
129
131
  - spec/fixtures/app/models/worker.rb
@@ -167,11 +169,13 @@ test_files:
167
169
  - spec/fixtures/app/models/complex_timesheet.rb
168
170
  - spec/fixtures/app/models/component.rb
169
171
  - spec/fixtures/app/models/country.rb
172
+ - spec/fixtures/app/models/favourite.rb
170
173
  - spec/fixtures/app/models/freelancer.rb
171
174
  - spec/fixtures/app/models/gift.rb
172
175
  - spec/fixtures/app/models/god.rb
173
176
  - spec/fixtures/app/models/group.rb
174
177
  - spec/fixtures/app/models/group_component.rb
178
+ - spec/fixtures/app/models/project.rb
175
179
  - spec/fixtures/app/models/timesheet.rb
176
180
  - spec/fixtures/app/models/user.rb
177
181
  - spec/fixtures/app/models/worker.rb