trains 0.0.16 → 0.0.18

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