trains 0.0.17 → 0.0.19

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: d9b0cdd1bee0a6ed5d222184662bb45dced14a141f00c166633ee177c3f83501
4
- data.tar.gz: 75132b13c33a5cc68005cdbc6d525dfda2b3d97aad8144cbb923f759c299bd1e
3
+ metadata.gz: 93ee7909ca18c2d768daa77d9bfce0096ac1f1965fc3590d6d3cd4fd281698cd
4
+ data.tar.gz: 6e935fff8f51fdda8e95d49f3520aff2d0ce3d71a67e4267a385c1d915e0cd5f
5
5
  SHA512:
6
- metadata.gz: 754df75dcf500b11b1d45df65c5bfde168be9dc160912cbd4a2dc0da37f9be9a380158a078b5aafa457bf73315e10f96d47fc50d6d2b849f29c2dc0c59196aee
7
- data.tar.gz: 4e8d8dbaad75395f686d5547cb633d162730858f8cc9fccb48fa4e84756ee942affdc2ec0aceaec5e755e523661bbfa944acdc6578344606630add7cbf68c767
6
+ metadata.gz: 77468c5ea8f22d4eba7daae1b188a1535a6de55cf21d4fc210cbaf8637e6afb587c21ed9a274eba27d35f674849863e125f413dcdbcc4927405ed39056ea7590
7
+ data.tar.gz: 20db296bfda78eee13f8affb92c1c4635ec5dd0bc35e24015e6e4b28de64faaef0277ce34cad88e3dde4c9e76eb9513ad3198a22571f1e3a1212c9b163f28c93
@@ -66,9 +66,10 @@ module Trains
66
66
 
67
67
  def parse_schema
68
68
  result_hash = {}
69
- schema_file = [File.join(@dir, 'db', 'schema.rb')]
70
- models_results = parse_util(schema_file, Visitor::Schema)
69
+ schema_file = File.join(@dir, 'db', 'schema.rb')
70
+ return result_hash unless File.exist? schema_file
71
71
 
72
+ models_results = parse_util([schema_file], Visitor::Schema)
72
73
  models_results
73
74
  .select { |result| result.error.nil? }
74
75
  .map(&:data)
@@ -1,5 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Trains
2
4
  module Utils
5
+ # Combine multiple migrations into models
3
6
  module MigrationTailor
4
7
  def self.stitch(models = {}, migrations)
5
8
  migrations.each do |mig|
@@ -22,8 +25,46 @@ module Trains
22
25
  field.name == mig.fields.first.name
23
26
  end
24
27
  models[mig.table_name].fields.delete(column)
28
+ when :rename_column
29
+ column =
30
+ models[mig.table_name].fields.find do |field|
31
+ field.name == mig.fields.first.name
32
+ end
33
+ models[mig.table_name].fields.push(
34
+ Trains::DTO::Field.new(
35
+ name: mig.fields.first.type.to_sym,
36
+ type: column.type
37
+ )
38
+ )
39
+ models[mig.table_name].fields.delete(column)
25
40
  when :change_table
26
- # TODO: handle renaming columns
41
+ mig.fields.each do |field|
42
+ case field.type
43
+ when :remove
44
+ column =
45
+ models[mig.table_name].fields.find do |mod_field|
46
+ mod_field.name == field.name
47
+ end
48
+ models[mig.table_name].fields.delete(column)
49
+ when :rename
50
+ # find the field and store temporarily
51
+ column =
52
+ models[mig.table_name].fields.find do |mod_field|
53
+ mod_field.name == field.name[0]
54
+ end
55
+ # Create new field from temp with new name
56
+ models[mig.table_name].fields.push(
57
+ Trains::DTO::Field.new(
58
+ name: field.name[1],
59
+ type: column.type
60
+ )
61
+ )
62
+ # Delete the field
63
+ models[mig.table_name].fields.delete(column)
64
+ else
65
+ models[mig.table_name].fields.push(field)
66
+ end
67
+ end
27
68
  when :change_column
28
69
  # get column
29
70
  column =
@@ -34,6 +75,8 @@ module Trains
34
75
  models[mig.table_name].fields.delete(column)
35
76
 
36
77
  models[mig.table_name].fields << mig.fields.first
78
+ else
79
+ next
37
80
  end
38
81
 
39
82
  rescue NoMethodError
@@ -1,3 +1,3 @@
1
1
  module Trains
2
- VERSION = '0.0.17'.freeze
2
+ VERSION = '0.0.19'.freeze
3
3
  end
@@ -22,6 +22,7 @@ module Trains
22
22
  add_column_with_default
23
23
  change_column
24
24
  add_reference
25
+ rename_column
25
26
  remove_column
26
27
  ].freeze
27
28
 
@@ -181,7 +182,11 @@ module Trains
181
182
  # t.references
182
183
  type = :bigint
183
184
  value = "#{node.children[2].value}_id".to_sym
184
- fields << DTO::Field.new(value.to_sym, type)
185
+ fields << DTO::Field.new(value, type)
186
+ when :rename
187
+ type = :rename
188
+ value = node.children[2..3].map { |field| field.value.to_sym }
189
+ fields << DTO::Field.new(value, type)
185
190
  when :index
186
191
  else
187
192
  # t.string, t.integer etc.
@@ -9,7 +9,11 @@ module Trains
9
9
  belongs_to
10
10
  has_one
11
11
  has_and_belongs_to_many
12
- ]
12
+ ].freeze
13
+ MODEL_PARENT_CLASSES = %w[
14
+ ApplicationRecord
15
+ ActiveRecord::Base
16
+ ].freeze
13
17
  attr_reader :result
14
18
 
15
19
  # skipcq: RB-LI1087
@@ -19,7 +23,7 @@ module Trains
19
23
 
20
24
  def on_class(node)
21
25
  return unless node.parent_class
22
- return unless node.parent_class.source == 'ApplicationRecord'
26
+ return unless MODEL_PARENT_CLASSES.include? node.parent_class.source
23
27
 
24
28
  @model_class = node.identifier.source
25
29
  node.each_descendant(:send) { |send_node| parse_model(send_node) }
@@ -31,7 +35,7 @@ module Trains
31
35
  @result << DTO::Migration.new(
32
36
  @model_class,
33
37
  :add_column,
34
- [DTO::Field.new(node.arguments.first.value, :bigint)],
38
+ [DTO::Field.new(node.arguments.first.value.to_sym, :bigint)],
35
39
  nil
36
40
  )
37
41
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trains
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.17
4
+ version: 0.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Syed Faraaz Ahmad
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-12 00:00:00.000000000 Z
11
+ date: 2023-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -130,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  requirements: []
133
- rubygems_version: 3.4.3
133
+ rubygems_version: 3.4.16
134
134
  signing_key:
135
135
  specification_version: 4
136
136
  summary: Collect metadata about your Rails app by statically analyzing it