trains 0.0.17 → 0.0.19

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