foreign_key_checker 0.2.2 → 0.3.0

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: cefd15f97041e89257c6487ba55dfeed549c4b97abcd577af614e38a2a23c54b
4
- data.tar.gz: 322939db9133f937b95bb7f7324c418eae65758a0f4c50f422abc0387e7706ea
3
+ metadata.gz: 04ba348e8860c85305d58ec740c7d49dd318a11f2d80fff5905e434281b0f75e
4
+ data.tar.gz: 0e40f9cff0e3af05525c529217c28eb360e008f6e20cf1b6268d0146c71955e7
5
5
  SHA512:
6
- metadata.gz: d8a8b3c7e1e308935781008935029c850d57db6cfb17127eced235580f3b2eaf75dcd9d2b8d1692130e4f83f6dabead19410fe7d15c886b1105b3524a66db60e
7
- data.tar.gz: aab87280fdcba657ac5737ac4bf793713528d689f95d7a73ffaa558f3ab75bc107af6b61dd635b6faaa7a6df143973cf77e618b2687013d10f930ff0184a2ca2
6
+ metadata.gz: f66ab3eacf8fd3238740483184683f871bbf0cd482ae3fa644d7120a8f01bde616ef571ab19638c6bae9e2a677650838370858a9f2e8ab776829a17d48a75f8a
7
+ data.tar.gz: 53fd8d518399d7b61ee42cb7e47ac01f5604852e724e78971c7fd63a2009ac8b95afbc4ddd17a433da453dc7b4b0427d3c813a241015c0525b233473af9bb319
data/README.md CHANGED
@@ -23,6 +23,12 @@ ForeignKeyChecker.check.each do |key, result|
23
23
  end
24
24
  ```
25
25
 
26
+ Get general information about foreign keys (only postgresql, mysql2)
27
+ ```ruby
28
+ ForeignKeyChecker::Utils.get_foreign_keys_hash
29
+ # => {"users"=>[#<ForeignKeyChecker::Utils::Result:0x00005645e51756e8 @from_table="user_rating_changes", @from_column="user_id", @to_table="users", @to_column="id">]}
30
+ ```
31
+
26
32
  ## Installation
27
33
  Add this line to your application's Gemfile:
28
34
 
@@ -1,4 +1,5 @@
1
1
  require "foreign_key_checker/railtie"
2
+ require 'foreign_key_checker/utils'
2
3
 
3
4
  module ForeignKeyChecker
4
5
  class TypeMismatch < StandardError; end
@@ -0,0 +1,61 @@
1
+ module ForeignKeyChecker
2
+ module Utils
3
+ class Result
4
+ attr_reader :from_table, :to_table, :from_column, :to_column
5
+ def initialize(args)
6
+ args.each { |k, v| instance_variable_set("@#{k}", v) }
7
+ end
8
+ end
9
+ class UnsupportedConnectionAdapter < StandardError; end
10
+ def self.get_foreign_keys(model = ActiveRecord::Base)
11
+ adapter = model.connection_config[:adapter]
12
+ raise(UnsupportedConnectionAdapter, adapter) unless %w[postgresql mysql2].include?(adapter)
13
+
14
+ connection = model.connection
15
+ send("get_#{adapter}_foreign_keys", connection)
16
+ end
17
+
18
+ def self.get_foreign_keys_hash(model = ActiveRecord::Base)
19
+ get_foreign_keys(model).to_a.each_with_object({}) do |datum, obj|
20
+ obj[datum.to_table] ||= []
21
+ obj[datum.to_table].push(datum)
22
+ end
23
+ end
24
+
25
+ def self.get_mysql2_foreign_keys(connection)
26
+ res = connection.select_all <<-SQL
27
+ SELECT
28
+ fks.TABLE_NAME AS from_table,
29
+ fks.COLUMN_NAME AS from_column,
30
+ fks.REFERENCED_TABLE_NAME AS to_table,
31
+ fks.REFERENCED_COLUMN_NAME AS to_column
32
+ FROM information_schema.KEY_COLUMN_USAGE AS fks
33
+ INNER JOIN information_schema.REFERENTIAL_CONSTRAINTS rules ON rules.CONSTRAINT_NAME = fks.CONSTRAINT_NAME
34
+ WHERE
35
+ fks.CONSTRAINT_SCHEMA = DATABASE()
36
+ AND rules.CONSTRAINT_SCHEMA = DATABASE();
37
+ SQL
38
+ res.to_a.map{|i| Result.new(i) }
39
+ end
40
+
41
+ def self.get_postgresql_foreign_keys(connection)
42
+ res = connection.select_all <<-SQL
43
+ SELECT
44
+ tc.table_name AS from_table,
45
+ kcu.column_name AS from_column,
46
+ ccu.table_name AS to_table,
47
+ ccu.column_name AS to_column
48
+ FROM
49
+ information_schema.table_constraints AS tc
50
+ JOIN information_schema.key_column_usage AS kcu
51
+ ON tc.constraint_name = kcu.constraint_name
52
+ AND tc.table_schema = kcu.table_schema
53
+ JOIN information_schema.constraint_column_usage AS ccu
54
+ ON ccu.constraint_name = tc.constraint_name
55
+ AND ccu.table_schema = tc.table_schema
56
+ WHERE tc.constraint_type = 'FOREIGN KEY';
57
+ SQL
58
+ res.to_a.map{ |i| Result.new(i) }
59
+ end
60
+ end
61
+ end
@@ -1,3 +1,3 @@
1
1
  module ForeignKeyChecker
2
- VERSION = '0.2.2'
2
+ VERSION = '0.3.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreign_key_checker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - AnatolyShirykalov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-24 00:00:00.000000000 Z
11
+ date: 2019-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -50,6 +50,7 @@ files:
50
50
  - Rakefile
51
51
  - lib/foreign_key_checker.rb
52
52
  - lib/foreign_key_checker/railtie.rb
53
+ - lib/foreign_key_checker/utils.rb
53
54
  - lib/foreign_key_checker/version.rb
54
55
  - lib/generators/foreign_key_checker/migration/migration_generator.rb
55
56
  - lib/generators/foreign_key_checker/migration/templates/migrations/fix_foreign_keys.rb.erb