trains 0.0.16 → 0.0.18

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: 4ec81a397d70c4affd856766de4b471fb2f6dbe40a545a089075b3f1e8361c43
4
- data.tar.gz: e59cb748ec77bddab7fd5ea61f216050485d773c618e568bff37f4b3eab68d16
3
+ metadata.gz: 7a1893b50977fd1adda92c2268df81b65f47fa4218961835c11c5534274774db
4
+ data.tar.gz: aa0c28905214fa2d776d144e3e58bfa952ad154b91a4f007e0f9d506e6fe723d
5
5
  SHA512:
6
- metadata.gz: b194c73de6398aa702a487e4c5aaf182bbb3075a7580dcd15bbee2ec67e37a3743dd7abc08aeb8fd5c78612d2e220812c0c75df1d01db78d1954565152aa60b3
7
- data.tar.gz: f0b4abdd5ef3824e9e46000e53914d093240d4e919d551608a7e256860f5c0dd0cf5036f503560674de5928a46427355f526b61a80576d145fe2228a9fa242cd
6
+ metadata.gz: 87bf0d7266a6347d452434b83f19f3798ed68f97b0be036baed26390442894ccf725a0e54bb233cbb25523b9864e9bbc3d246bae5341c489121e1ef80b7195b4
7
+ data.tar.gz: 377afeb54297eca4feb98a5c482a348250319f7d61b84650fb33910c91faa86d1c9eade41c34b82cf217c9833ebc5e238af7cc04c86c53255e29480fa4e0d605
@@ -46,9 +46,12 @@ module Trains
46
46
 
47
47
  # Stitch together migrations to create models
48
48
  def generate_models
49
+ # Parse models from schema.rb (used when brownfield project)
50
+ schema_models = parse_schema
51
+
49
52
  migrations = get_migrations.flatten.reject(&:nil?)
50
53
  migrations = [*migrations, *parse_models.flatten.reject(&:nil?)]
51
- Utils::MigrationTailor.stitch(migrations)
54
+ Utils::MigrationTailor.stitch(schema_models, migrations)
52
55
  end
53
56
 
54
57
  def get_routes
@@ -63,9 +66,10 @@ module Trains
63
66
 
64
67
  def parse_schema
65
68
  result_hash = {}
66
- schema_file = [File.join(@dir, 'db', 'schema.rb')]
67
- 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
68
71
 
72
+ models_results = parse_util([schema_file], Visitor::Schema)
69
73
  models_results
70
74
  .select { |result| result.error.nil? }
71
75
  .map(&:data)
@@ -1,18 +1,19 @@
1
1
  module Trains
2
2
  module Utils
3
3
  module MigrationTailor
4
- def self.stitch(migrations)
5
- models = {}
6
-
4
+ def self.stitch(models = {}, migrations)
7
5
  migrations.each do |mig|
8
6
  case mig.modifier
9
7
  when :create_table, :create_join_table
10
- models[mig.table_name] = {}
11
- models[mig.table_name] = Trains::DTO::Model.new(
12
- name: mig.table_name,
13
- fields: mig.fields,
14
- version: mig.version
15
- )
8
+ if models.key?(mig.table_name)
9
+ models[mig.table_name].fields.push(*mig.fields)
10
+ else
11
+ models[mig.table_name] = Trains::DTO::Model.new(
12
+ name: mig.table_name,
13
+ fields: mig.fields,
14
+ version: mig.version
15
+ )
16
+ end
16
17
  when :add_column, :add_column_with_default, :add_reference
17
18
  models[mig.table_name].fields.push(*mig.fields)
18
19
  when :remove_column
@@ -1,3 +1,3 @@
1
1
  module Trains
2
- VERSION = '0.0.16'.freeze
2
+ VERSION = '0.0.18'.freeze
3
3
  end
@@ -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) }
@@ -9,9 +9,9 @@ module Trains
9
9
  PATTERN
10
10
 
11
11
  def_node_matcher :unversioned_schema?, <<~PATTERN
12
- (block
13
- (send (const (const nil? :ActiveRecord) :Schema) :define ...)
14
- ...)
12
+ (block
13
+ (send (const (const nil? :ActiveRecord) :Schema) :define ...)
14
+ ...)
15
15
  PATTERN
16
16
 
17
17
  def initialize
@@ -64,7 +64,7 @@ module Trains
64
64
  next if child.method?(:index)
65
65
 
66
66
  DTO::Field.new(
67
- name: child.first_argument.str_content,
67
+ name: child.first_argument.str_content.to_sym,
68
68
  type: child.method_name
69
69
  )
70
70
  end
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.16
4
+ version: 0.0.18
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-07-31 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