table_saw 2.6.0 → 2.7.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6b297b8f3066ede84566598a9afadad72dc7ee1474357f14983472ddc4fe4258
4
- data.tar.gz: 7691d2a4e773ccc6de0c0c08d188cea9d703858939cac0770dcb1f7d318fd2e5
3
+ metadata.gz: d7ba43df3b9906b32dc2478f41c974ee5cca5036d5ec7f95fa0ba6f04ece6812
4
+ data.tar.gz: d4775622ad45fc31d5a658d095807e925e4b0570a6a01eeb302546c5b5669540
5
5
  SHA512:
6
- metadata.gz: e9f7f60416d52018d03b96c659ce9cb3fc1808ec18a9febcd1fd21240cfb4086cc24da5ef54125971f35b69b1d805dc23155d04a92f6be0c0110663d218d7340
7
- data.tar.gz: 8ee95715579cdca1c575fa9873419e1ecf05878e97dade07d58fb9928b8258d64c684519b10dd96a3b932b15adf5cdf01f25961e90e37196d57ed23121c06fb0
6
+ metadata.gz: 5833756a4f1746c2b54a9ddd27766f2ff3fe651455e2dcb8112938e2c0b06984a6c0c3b1d5990b1a8acfabe3e65cb2ef85807dbc2f6156f254e7c3cf794c0a17
7
+ data.tar.gz: c620092fcdf65362c007c38ea4bbb3e66ed016d6a29a24d11e62e0f6d23fd5e70e2aa92c9c82b5b3cf7de16a6cf00e3c8574906d4a90630ad13b3483826e15a4
@@ -0,0 +1,53 @@
1
+ name: Ruby
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ build:
7
+
8
+ runs-on: ubuntu-latest
9
+
10
+ services:
11
+ postgres:
12
+ image: postgres:12.2
13
+ env:
14
+ POSTGRES_USER: postgres
15
+ POSTGRES_PASSWORD: postgres
16
+ POSTGRES_DB: table_saw_test
17
+ ports:
18
+ - 5432:5432
19
+ # needed because the postgres container does not provide a healthcheck
20
+ options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
21
+
22
+ steps:
23
+ - uses: actions/checkout@v2
24
+
25
+ - name: Set up Ruby 2.6
26
+ uses: actions/setup-ruby@v1
27
+ with:
28
+ ruby-version: 2.6.x
29
+
30
+ - uses: actions/cache@v1
31
+ with:
32
+ path: vendor/bundle
33
+ key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
34
+ restore-keys: |
35
+ ${{ runner.os }}-gems-
36
+
37
+ - name: Install PostgreSQL client
38
+ run: |
39
+ sudo apt-get -yqq install libpq-dev
40
+
41
+ - name: Configure Bundler
42
+ run: |
43
+ gem install bundler -v 2.1.4 --no-document
44
+ bundle config path 'vendor/bundle'
45
+ bundle install --jobs 4 --retry 3
46
+
47
+ - name: Run tests with RSpec
48
+ uses: paambaati/codeclimate-action@v2.5.4
49
+ env:
50
+ CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
51
+ with:
52
+ coverageCommand: bundle exec rspec
53
+ debug: false
data/.rubocop.yml CHANGED
@@ -3,14 +3,23 @@ require: rubocop-rspec
3
3
  AllCops:
4
4
  TargetRubyVersion: 2.6
5
5
 
6
+ Layout/LineLength:
7
+ Max: 120
8
+
6
9
  Layout/MultilineMethodCallIndentation:
7
10
  EnforcedStyle: indented_relative_to_receiver
8
11
 
9
- Metrics/LineLength:
10
- Max: 120
12
+ Layout/SpaceAroundMethodCallOperator:
13
+ Enabled: true
14
+
15
+ Lint/RaiseException:
16
+ Enabled: true
17
+
18
+ Lint/StructNewOverride:
19
+ Enabled: true
11
20
 
12
21
  Naming/PredicateName:
13
- NameWhitelist:
22
+ AllowedMethods:
14
23
  - has_many
15
24
 
16
25
  Style/Documentation:
@@ -19,9 +28,21 @@ Style/Documentation:
19
28
  Style/EmptyMethod:
20
29
  EnforcedStyle: expanded
21
30
 
31
+ Style/ExponentialNotation:
32
+ Enabled: true
33
+
22
34
  Style/FormatStringToken:
23
35
  EnforcedStyle: template
24
36
 
37
+ Style/HashEachMethods:
38
+ Enabled: true
39
+
40
+ Style/HashTransformKeys:
41
+ Enabled: true
42
+
43
+ Style/HashTransformValues:
44
+ Enabled: true
45
+
25
46
  Style/PercentLiteralDelimiters:
26
47
  PreferredDelimiters:
27
48
  default: ()
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.6.5
1
+ 2.6.6
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- table_saw (2.6.0)
4
+ table_saw (2.7.0)
5
5
  activerecord (>= 5.2)
6
6
  pg
7
7
  thor
@@ -9,25 +9,25 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- actionpack (6.0.2.1)
13
- actionview (= 6.0.2.1)
14
- activesupport (= 6.0.2.1)
12
+ actionpack (6.0.2.2)
13
+ actionview (= 6.0.2.2)
14
+ activesupport (= 6.0.2.2)
15
15
  rack (~> 2.0, >= 2.0.8)
16
16
  rack-test (>= 0.6.3)
17
17
  rails-dom-testing (~> 2.0)
18
18
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
19
- actionview (6.0.2.1)
20
- activesupport (= 6.0.2.1)
19
+ actionview (6.0.2.2)
20
+ activesupport (= 6.0.2.2)
21
21
  builder (~> 3.1)
22
22
  erubi (~> 1.4)
23
23
  rails-dom-testing (~> 2.0)
24
24
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
25
- activemodel (6.0.2.1)
26
- activesupport (= 6.0.2.1)
27
- activerecord (6.0.2.1)
28
- activemodel (= 6.0.2.1)
29
- activesupport (= 6.0.2.1)
30
- activesupport (6.0.2.1)
25
+ activemodel (6.0.2.2)
26
+ activesupport (= 6.0.2.2)
27
+ activerecord (6.0.2.2)
28
+ activemodel (= 6.0.2.2)
29
+ activesupport (= 6.0.2.2)
30
+ activesupport (6.0.2.2)
31
31
  concurrent-ruby (~> 1.0, >= 1.0.2)
32
32
  i18n (>= 0.7, < 2)
33
33
  minitest (~> 5.1)
@@ -40,7 +40,7 @@ GEM
40
40
  activesupport (>= 3.0.0)
41
41
  railties (>= 3.0.0)
42
42
  thor (>= 0.14.6)
43
- concurrent-ruby (1.1.5)
43
+ concurrent-ruby (1.1.6)
44
44
  crass (1.0.6)
45
45
  database_cleaner (1.7.0)
46
46
  diff-lcs (1.3)
@@ -48,7 +48,7 @@ GEM
48
48
  erubi (1.9.0)
49
49
  i18n (1.8.2)
50
50
  concurrent-ruby (~> 1.0)
51
- jaro_winkler (1.5.2)
51
+ jaro_winkler (1.5.4)
52
52
  json (2.2.0)
53
53
  loofah (2.4.0)
54
54
  crass (~> 1.0.2)
@@ -56,16 +56,16 @@ GEM
56
56
  method_source (0.9.2)
57
57
  mini_portile2 (2.4.0)
58
58
  minitest (5.14.0)
59
- nokogiri (1.10.7)
59
+ nokogiri (1.10.9)
60
60
  mini_portile2 (~> 2.4.0)
61
- parallel (1.17.0)
62
- parser (2.6.3.0)
61
+ parallel (1.19.1)
62
+ parser (2.7.1.2)
63
63
  ast (~> 2.4.0)
64
- pg (1.2.2)
64
+ pg (1.2.3)
65
65
  pry (0.12.2)
66
66
  coderay (~> 1.1.0)
67
67
  method_source (~> 0.9.0)
68
- rack (2.1.1)
68
+ rack (2.2.2)
69
69
  rack-test (1.1.0)
70
70
  rack (>= 1.0, < 3)
71
71
  rails-dom-testing (2.0.3)
@@ -73,38 +73,40 @@ GEM
73
73
  nokogiri (>= 1.6)
74
74
  rails-html-sanitizer (1.3.0)
75
75
  loofah (~> 2.3)
76
- railties (6.0.2.1)
77
- actionpack (= 6.0.2.1)
78
- activesupport (= 6.0.2.1)
76
+ railties (6.0.2.2)
77
+ actionpack (= 6.0.2.2)
78
+ activesupport (= 6.0.2.2)
79
79
  method_source
80
80
  rake (>= 0.8.7)
81
81
  thor (>= 0.20.3, < 2.0)
82
82
  rainbow (3.0.0)
83
- rake (10.5.0)
84
- rspec (3.8.0)
85
- rspec-core (~> 3.8.0)
86
- rspec-expectations (~> 3.8.0)
87
- rspec-mocks (~> 3.8.0)
88
- rspec-core (3.8.0)
89
- rspec-support (~> 3.8.0)
90
- rspec-expectations (3.8.3)
83
+ rake (13.0.1)
84
+ rexml (3.2.4)
85
+ rspec (3.9.0)
86
+ rspec-core (~> 3.9.0)
87
+ rspec-expectations (~> 3.9.0)
88
+ rspec-mocks (~> 3.9.0)
89
+ rspec-core (3.9.1)
90
+ rspec-support (~> 3.9.1)
91
+ rspec-expectations (3.9.0)
91
92
  diff-lcs (>= 1.2.0, < 2.0)
92
- rspec-support (~> 3.8.0)
93
- rspec-mocks (3.8.0)
93
+ rspec-support (~> 3.9.0)
94
+ rspec-mocks (3.9.1)
94
95
  diff-lcs (>= 1.2.0, < 2.0)
95
- rspec-support (~> 3.8.0)
96
- rspec-support (3.8.0)
97
- rubocop (0.71.0)
96
+ rspec-support (~> 3.9.0)
97
+ rspec-support (3.9.2)
98
+ rubocop (0.82.0)
98
99
  jaro_winkler (~> 1.5.1)
99
100
  parallel (~> 1.10)
100
- parser (>= 2.6)
101
+ parser (>= 2.7.0.1)
101
102
  rainbow (>= 2.2.2, < 4.0)
103
+ rexml
102
104
  ruby-progressbar (~> 1.7)
103
- unicode-display_width (>= 1.4.0, < 1.7)
105
+ unicode-display_width (>= 1.4.0, < 2.0)
104
106
  rubocop-rspec (1.33.0)
105
107
  rubocop (>= 0.60.0)
106
108
  ruby-progressbar (1.10.1)
107
- scenic (1.5.1)
109
+ scenic (1.5.2)
108
110
  activerecord (>= 4.0.0)
109
111
  railties (>= 4.0.0)
110
112
  simplecov (0.16.1)
@@ -116,8 +118,8 @@ GEM
116
118
  thread_safe (0.3.6)
117
119
  tzinfo (1.2.6)
118
120
  thread_safe (~> 0.1)
119
- unicode-display_width (1.6.0)
120
- zeitwerk (2.2.2)
121
+ unicode-display_width (1.7.0)
122
+ zeitwerk (2.3.0)
121
123
 
122
124
  PLATFORMS
123
125
  ruby
@@ -127,7 +129,7 @@ DEPENDENCIES
127
129
  combustion (~> 1.1)
128
130
  database_cleaner (~> 1.7)
129
131
  pry
130
- rake (~> 10.0)
132
+ rake (~> 13.0)
131
133
  rspec (~> 3.0)
132
134
  rubocop-rspec (~> 1.33)
133
135
  scenic (~> 1.5)
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Build Status](https://travis-ci.org/hasghari/table_saw.svg?branch=master)](https://travis-ci.org/hasghari/table_saw)
1
+ ![](https://github.com/hasghari/table_saw/workflows/Ruby/badge.svg)
2
2
  [![Maintainability](https://api.codeclimate.com/v1/badges/abd5b5451c764d3249f1/maintainability)](https://codeclimate.com/github/hasghari/table_saw/maintainability)
3
3
  [![Test Coverage](https://api.codeclimate.com/v1/badges/abd5b5451c764d3249f1/test_coverage)](https://codeclimate.com/github/hasghari/table_saw/test_coverage)
4
4
 
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TableSaw
4
+ class Associations
5
+ attr_reader :manifest
6
+
7
+ def initialize(manifest)
8
+ @manifest = manifest
9
+ end
10
+
11
+ def belongs_to
12
+ @belongs_to ||= foreign_keys.each_with_object(Hash.new { |h, k| h[k] = Set.new }) do |fk, memo|
13
+ memo[fk.from_table].add(fk)
14
+ end
15
+ end
16
+
17
+ def has_many
18
+ @has_many ||= foreign_keys.each_with_object(Hash.new { |h, k| h[k] = Set.new }) do |fk, memo|
19
+ memo[fk.to_table].add(fk)
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def foreign_keys
26
+ @foreign_keys ||= manifest_foreign_keys + schema_foreign_keys
27
+ end
28
+
29
+ def manifest_foreign_keys
30
+ manifest.foreign_keys.map do |fk|
31
+ TableSaw::ForeignKey.new(from_table: fk['from_table'], from_column: fk['from_column'],
32
+ to_table: fk['to_table'], to_column: fk['to_column'])
33
+ end
34
+ end
35
+
36
+ def schema_foreign_keys
37
+ TableSaw.information_schema.foreign_key_relationships.foreign_keys
38
+ end
39
+ end
40
+ end
@@ -3,42 +3,46 @@
3
3
  module TableSaw
4
4
  module DependencyGraph
5
5
  class BelongsToDirectives
6
- attr_reader :directive
6
+ QUERY = <<~SQL
7
+ select distinct %{column} from %{table_name} where %{clause} and %{column} is not null and %{polymorphic}
8
+ SQL
7
9
 
8
- def initialize(directive)
10
+ attr_reader :manifest, :directive
11
+
12
+ def initialize(manifest, directive)
13
+ @manifest = manifest
9
14
  @directive = directive
10
15
  end
11
16
 
12
17
  def call
13
- associations.map do |from_column, to_table|
14
- TableSaw::DependencyGraph::AddDirective.new(to_table, ids: ids[from_column], partial: directive.partial?)
18
+ associations.map do |fk|
19
+ TableSaw::DependencyGraph::AddDirective.new(fk.to_table, ids: ids[fk.column.primary_key],
20
+ partial: directive.partial?)
15
21
  end
16
22
  end
17
23
 
18
24
  private
19
25
 
20
26
  def associations
21
- TableSaw.information_schema.belongs_to.fetch(directive.table_name, {})
27
+ manifest.associations.belongs_to.fetch(directive.table_name, Set.new)
22
28
  end
23
29
 
24
30
  def ids
25
- @ids ||= associations.each_key.each_with_object({}) do |column, memo|
26
- memo[column] = query_result(column).map { |row| row[column] }
31
+ @ids ||= associations.each_with_object({}) do |fk, memo|
32
+ memo[fk.column.primary_key] = query_result(fk).map { |row| row[fk.column.primary_key] }
27
33
  end
28
34
  end
29
35
 
30
36
  # rubocop:disable Metrics/AbcSize
31
- def query_result(column)
37
+ def query_result(foreign_key)
32
38
  return [] unless directive.selectable?
33
39
 
34
40
  TableSaw::Connection.exec(
35
- format(
36
- 'select distinct %{column} from %{table_name} where %{clause} and %{column} is not null',
37
- primary_key: directive.primary_key, column: column, table_name: directive.table_name,
38
- clause: TableSaw::Queries::SerializeSqlInClause.new(directive.table_name,
39
- directive.primary_key,
40
- directive.ids).call
41
- )
41
+ format(QUERY, column: foreign_key.column.primary_key, table_name: directive.table_name,
42
+ clause: TableSaw::Queries::SerializeSqlInClause.new(directive.table_name,
43
+ directive.primary_key,
44
+ directive.ids).call,
45
+ polymorphic: foreign_key.type_condition)
42
46
  )
43
47
  end
44
48
  # rubocop:enable Metrics/AbcSize
@@ -31,7 +31,7 @@ module TableSaw
31
31
  private
32
32
 
33
33
  def fetch_belongs_to(directive)
34
- TableSaw::DependencyGraph::BelongsToDirectives.new(directive).call
34
+ TableSaw::DependencyGraph::BelongsToDirectives.new(manifest, directive).call
35
35
  end
36
36
 
37
37
  def fetch_has_many(directive)
@@ -3,6 +3,10 @@
3
3
  module TableSaw
4
4
  module DependencyGraph
5
5
  class HasManyDirectives
6
+ QUERY = <<~SQL
7
+ select %{primary_key} from %{table} where %{clause} and %{polymorphic}
8
+ SQL
9
+
6
10
  attr_reader :manifest, :directive
7
11
 
8
12
  def initialize(manifest, directive)
@@ -11,10 +15,10 @@ module TableSaw
11
15
  end
12
16
 
13
17
  def call
14
- valid_associations.map do |table, column|
18
+ valid_associations.map do |fk|
15
19
  TableSaw::DependencyGraph::AddDirective.new(
16
- table,
17
- ids: query_result(table, column).map { |r| r[TableSaw.schema_cache.primary_keys(table)] },
20
+ fk.from_table,
21
+ ids: query_result(fk).map { |r| r[TableSaw.schema_cache.primary_keys(fk.from_table)] },
18
22
  partial: directive.partial?
19
23
  )
20
24
  end
@@ -23,31 +27,32 @@ module TableSaw
23
27
  private
24
28
 
25
29
  def associations
26
- TableSaw.information_schema.has_many.fetch(directive.table_name, [])
30
+ manifest.associations.has_many.fetch(directive.table_name, Set.new)
27
31
  end
28
32
 
29
33
  # rubocop:disable Metrics/AbcSize
30
34
  def valid_associations
31
- associations.select do |table, _column|
32
- next false if directive.partial? && TableSaw.schema_cache.primary_keys(table).nil?
33
- next true if directive.has_many.include?(table)
35
+ associations.select do |fk|
36
+ next false if directive.partial? && TableSaw.schema_cache.primary_keys(fk.from_table).nil?
37
+ next true if directive.has_many.include?(fk.from_table)
34
38
 
35
- manifest.has_many.fetch(directive.table_name, []).include?(table)
39
+ manifest.has_many.fetch(directive.table_name, []).include?(fk.from_table)
36
40
  end
37
41
  end
38
- # rubocop:enable Metrics/AbcSize
39
42
 
40
- def query_result(table, column)
43
+ def query_result(foreign_key)
41
44
  return [] unless directive.selectable?
42
45
 
43
46
  TableSaw::Connection.exec(
44
- format(
45
- 'select %{primary_key} from %{table} where %{clause}',
46
- primary_key: TableSaw.schema_cache.primary_keys(table), table: table,
47
- clause: TableSaw::Queries::SerializeSqlInClause.new(table, column, directive.ids).call
48
- )
47
+ format(QUERY, primary_key: TableSaw.schema_cache.primary_keys(foreign_key.from_table),
48
+ table: foreign_key.from_table,
49
+ clause: TableSaw::Queries::SerializeSqlInClause.new(foreign_key.from_table,
50
+ foreign_key.column.primary_key,
51
+ directive.ids).call,
52
+ polymorphic: foreign_key.type_condition)
49
53
  )
50
54
  end
55
+ # rubocop:enable Metrics/AbcSize
51
56
  end
52
57
  end
53
58
  end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TableSaw
4
+ class ForeignKey
5
+ class Column
6
+ REGEX = /(\w+)(?::(\w+)\((\w+)\))?/.freeze
7
+
8
+ attr_reader :value
9
+
10
+ def initialize(value)
11
+ @value = value
12
+ end
13
+
14
+ def primary_key
15
+ value[REGEX, 1]
16
+ end
17
+
18
+ def type_condition
19
+ polymorphic? ? "#{type_column} = '#{type_value}'" : '1 = 1'
20
+ end
21
+
22
+ private
23
+
24
+ def type_column
25
+ value[REGEX, 2]
26
+ end
27
+
28
+ def type_value
29
+ value[REGEX, 3]
30
+ end
31
+
32
+ def polymorphic?
33
+ !(type_column.nil? || type_value.nil?)
34
+ end
35
+ end
36
+
37
+ attr_reader :name, :from_table, :from_column, :to_table, :to_column
38
+
39
+ def initialize(name: nil, from_table:, from_column:, to_table:, to_column:)
40
+ @name = name
41
+ @from_table = from_table
42
+ @from_column = from_column
43
+ @to_table = to_table
44
+ @to_column = to_column
45
+ end
46
+
47
+ def type_condition
48
+ @type_condition ||= column.type_condition
49
+ end
50
+
51
+ def column
52
+ @column ||= Column.new(from_column)
53
+ end
54
+
55
+ def eql?(other)
56
+ hash == other.hash
57
+ end
58
+
59
+ def hash
60
+ [from_table, from_column, to_table, to_column].hash
61
+ end
62
+ end
63
+ end
@@ -2,14 +2,10 @@
2
2
 
3
3
  module TableSaw
4
4
  class InformationSchema
5
- %i(belongs_to constraint_names has_many).each do |method_name|
6
- define_method method_name do
7
- foreign_key_relationships.public_send method_name
8
- end
5
+ def constraint_names
6
+ foreign_key_relationships.constraint_names
9
7
  end
10
8
 
11
- private
12
-
13
9
  def foreign_key_relationships
14
10
  @foreign_key_relationships ||= TableSaw::Queries::ForeignKeyRelationships.new
15
11
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'yaml'
4
+ require 'table_saw/associations'
4
5
 
5
6
  module TableSaw
6
7
  class Manifest
@@ -58,5 +59,13 @@ module TableSaw
58
59
  def has_many
59
60
  @has_many ||= config.fetch('has_many', {})
60
61
  end
62
+
63
+ def foreign_keys
64
+ @foreign_keys ||= config.fetch('foreign_keys', [])
65
+ end
66
+
67
+ def associations
68
+ @associations ||= TableSaw::Associations.new(self)
69
+ end
61
70
  end
62
71
  end
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'table_saw/foreign_key'
4
+ require 'set'
5
+
3
6
  module TableSaw
4
7
  module Queries
5
8
  class ForeignKeyRelationships
@@ -16,24 +19,20 @@ module TableSaw
16
19
  where tc.constraint_type = 'FOREIGN KEY'
17
20
  SQL
18
21
 
19
- def belongs_to
20
- @belongs_to ||= result.each_with_object(Hash.new { |h, k| h[k] = {} }) do |row, memo|
21
- memo[row['from_table']][row['from_column']] = row['to_table']
22
- end
23
- end
24
-
25
- def has_many
26
- @has_many ||= result.each_with_object(Hash.new { |h, k| h[k] = [] }) do |row, memo|
27
- memo[row['to_table']].push([row['from_table'], row['from_column']])
28
- end
29
- end
30
-
31
22
  def constraint_names
32
23
  @constraint_names ||= result.each_with_object(Hash.new { |h, k| h[k] = [] }) do |row, memo|
33
24
  memo[row['from_table']].push(row['constraint_name'])
34
25
  end
35
26
  end
36
27
 
28
+ def foreign_keys
29
+ @foreign_keys ||= result.map do |row|
30
+ TableSaw::ForeignKey.new(name: row['constraint_name'],
31
+ from_table: row['from_table'], from_column: row['from_column'],
32
+ to_table: row['to_table'], to_column: row['to_column'])
33
+ end
34
+ end
35
+
37
36
  private
38
37
 
39
38
  def result
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TableSaw
4
- VERSION = '2.6.0'
4
+ VERSION = '2.7.0'
5
5
  end
data/table_saw.gemspec CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency 'combustion', '~> 1.1'
32
32
  spec.add_development_dependency 'database_cleaner', '~> 1.7'
33
33
  spec.add_development_dependency 'pry'
34
- spec.add_development_dependency 'rake', '~> 10.0'
34
+ spec.add_development_dependency 'rake', '~> 13.0'
35
35
  spec.add_development_dependency 'rspec', '~> 3.0'
36
36
  spec.add_development_dependency 'rubocop-rspec', '~> 1.33'
37
37
  spec.add_development_dependency 'scenic', '~> 1.5'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: table_saw
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 2.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hamed Asghari
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-05 00:00:00.000000000 Z
11
+ date: 2020-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '10.0'
117
+ version: '13.0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '10.0'
124
+ version: '13.0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rspec
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -186,12 +186,12 @@ executables:
186
186
  extensions: []
187
187
  extra_rdoc_files: []
188
188
  files:
189
+ - ".github/workflows/ruby.yml"
189
190
  - ".gitignore"
190
191
  - ".rspec"
191
192
  - ".rubocop.yml"
192
193
  - ".ruby-gemset"
193
194
  - ".ruby-version"
194
- - ".travis.yml"
195
195
  - CODE_OF_CONDUCT.md
196
196
  - Gemfile
197
197
  - Gemfile.lock
@@ -202,6 +202,7 @@ files:
202
202
  - bin/setup
203
203
  - exe/table-saw
204
204
  - lib/table_saw.rb
205
+ - lib/table_saw/associations.rb
205
206
  - lib/table_saw/configuration.rb
206
207
  - lib/table_saw/connection.rb
207
208
  - lib/table_saw/create_dump_file.rb
@@ -211,6 +212,7 @@ files:
211
212
  - lib/table_saw/dependency_graph/build.rb
212
213
  - lib/table_saw/dependency_graph/dump_table.rb
213
214
  - lib/table_saw/dependency_graph/has_many_directives.rb
215
+ - lib/table_saw/foreign_key.rb
214
216
  - lib/table_saw/formats.rb
215
217
  - lib/table_saw/formats/base.rb
216
218
  - lib/table_saw/formats/copy.rb
@@ -245,7 +247,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
245
247
  - !ruby/object:Gem::Version
246
248
  version: '0'
247
249
  requirements: []
248
- rubygems_version: 3.0.6
250
+ rubygems_version: 3.0.3
249
251
  signing_key:
250
252
  specification_version: 4
251
253
  summary: Create a postgres dump file from a subset of tables
data/.travis.yml DELETED
@@ -1,24 +0,0 @@
1
- ---
2
- sudo: false
3
- env:
4
- global:
5
- - CC_TEST_REPORTER_ID=5432d4e95a7749f237cf9e659c44ba28c5c91fa65436b15c5bc849d6d9ebc049
6
- language: ruby
7
- cache: bundler
8
- rvm:
9
- - 2.5.5
10
- - 2.6.5
11
- - 2.7.0
12
- before_install: gem install bundler -v 2.0.1
13
- before_script:
14
- - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
15
- - chmod +x ./cc-test-reporter
16
- - ./cc-test-reporter before-build
17
- script:
18
- - bundle exec rspec
19
- after_script:
20
- - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
21
- addons:
22
- postgresql: "9.6"
23
- services:
24
- - postgresql