infer_model 0.1.0 → 0.1.2

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: beae3b14bb858f6f8d597788daa62d18ab9246d4ccc81e8d862f08b5e6bcf99f
4
- data.tar.gz: 9856dc12362b8f109260e272b2a392d61a3a54c22f02085ffe3146d35acd5ebf
3
+ metadata.gz: 89e0007e60d9ffa17f7ceb8f12e157be7c8d3570e3edaf5acd7ae9c3d397478e
4
+ data.tar.gz: c622cb756b83391f44328e0a85ca2b3cd46df5e7f171757deb2aca36f3f7cd3e
5
5
  SHA512:
6
- metadata.gz: 49929b9598e50253e0eff456bd7a73894d782d95fb82fe90f5dd5c73bcd13eb2a59b4cb86da983b735b236652d9944f10370c35d6dd60265e0183f007cb0a177
7
- data.tar.gz: 61c7a94a1f691dad8f6e3999cfcb876472e92c0ca4bf566f1e33d9d567d5835531a97743425317900fa0067664deaeab5ea244e5f3101c13b46ab338b9e8ac3f
6
+ metadata.gz: f1a0328a1fa5fb4b3eaf22c7e7fe19e206041f847859e8b7291ebd1b4f1ec520b1e54fd6644f62733e619f6e7990b6571f189951f45266561dd9a365e1af4e43
7
+ data.tar.gz: 508256b0bb1a0e40f0b5ae7881c141dcea149fa3b74817d37542a77df8496f8cd485938afb9ea2ac085f68ee273b82b038350be0e4384fb8ed0e4edc1d64c234
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.1.2] - 2022-09-15
4
+
5
+ - feat: Allow renaming attributes in to/migration & from/csv adapters
6
+
7
+ ## [0.1.1] - 2022-09-13
8
+
9
+ - Bump dependencies
10
+
3
11
  ## [0.1.0] - 2022-09-04
4
12
 
5
13
  - Initial release
data/Gemfile CHANGED
@@ -4,5 +4,3 @@ source "https://rubygems.org"
4
4
 
5
5
  # Specify your gem's dependencies in infer_model.gemspec
6
6
  gemspec
7
-
8
- gem "rake"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- infer_model (0.1.0)
4
+ infer_model (0.1.2)
5
5
  activesupport (~> 7.0)
6
6
  dry-initializer (~> 3.0)
7
7
  zeitwerk (~> 2.6)
@@ -9,7 +9,7 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- activesupport (7.0.3.1)
12
+ activesupport (7.0.4)
13
13
  concurrent-ruby (~> 1.0, >= 1.0.2)
14
14
  i18n (>= 1.6, < 2)
15
15
  minitest (>= 5.1)
@@ -41,13 +41,13 @@ GEM
41
41
  rspec-mocks (~> 3.11.0)
42
42
  rspec-core (3.11.0)
43
43
  rspec-support (~> 3.11.0)
44
- rspec-expectations (3.11.0)
44
+ rspec-expectations (3.11.1)
45
45
  diff-lcs (>= 1.2.0, < 2.0)
46
46
  rspec-support (~> 3.11.0)
47
47
  rspec-mocks (3.11.1)
48
48
  diff-lcs (>= 1.2.0, < 2.0)
49
49
  rspec-support (~> 3.11.0)
50
- rspec-support (3.11.0)
50
+ rspec-support (3.11.1)
51
51
  rubocop (1.36.0)
52
52
  json (~> 2.3)
53
53
  parallel (~> 1.10)
@@ -60,7 +60,7 @@ GEM
60
60
  unicode-display_width (>= 1.4.0, < 3.0)
61
61
  rubocop-ast (1.21.0)
62
62
  parser (>= 3.1.1.0)
63
- rubocop-performance (1.14.3)
63
+ rubocop-performance (1.15.0)
64
64
  rubocop (>= 1.7.0, < 2.0)
65
65
  rubocop-ast (>= 0.4.0)
66
66
  ruby-progressbar (1.11.0)
@@ -77,10 +77,10 @@ DEPENDENCIES
77
77
  dotenv (~> 2.8)
78
78
  infer_model!
79
79
  pry (~> 0.14)
80
- rake
80
+ rake (~> 13.0)
81
81
  rspec (~> 3.11)
82
82
  rubocop (~> 1.36)
83
83
  rubocop-performance (~> 1.14)
84
84
 
85
85
  BUNDLED WITH
86
- 2.3.17
86
+ 2.3.11
data/infer_model.gemspec CHANGED
@@ -38,6 +38,7 @@ Gem::Specification.new do |spec|
38
38
  spec.add_dependency "zeitwerk", "~> 2.6"
39
39
  spec.add_development_dependency "dotenv", "~> 2.8"
40
40
  spec.add_development_dependency "pry", "~> 0.14"
41
+ spec.add_development_dependency "rake", "~> 13.0"
41
42
  spec.add_development_dependency "rspec", "~> 3.11"
42
43
  spec.add_development_dependency "rubocop", "~> 1.36"
43
44
  spec.add_development_dependency "rubocop-performance", "~> 1.14"
@@ -13,6 +13,7 @@ module InferModel::From
13
13
  param :filename
14
14
  option :available_types, default: -> { ::InferModel::ValueTypeGuesser::RESULT_TYPES }
15
15
  option :multi, default: -> { false }
16
+ option :rename_attributes, optional: true
16
17
  option :csv_options, default: -> { {} }
17
18
 
18
19
  def call
@@ -26,12 +27,19 @@ module InferModel::From
26
27
  def attributes
27
28
  csv.by_col!.to_h do |header, contents|
28
29
  [
29
- header.downcase.to_sym,
30
+ transform_header(header),
30
31
  ::InferModel::CommonTypeGuesser.call(contents, available_types:),
31
32
  ]
32
33
  end
33
34
  end
34
35
 
36
+ def transform_header(header)
37
+ header = header.downcase.to_sym
38
+ return header unless rename_attributes
39
+
40
+ rename_attributes.to_proc.call(header) || header
41
+ end
42
+
35
43
  def csv = ::CSV.parse(file_content, **csv_options_with_defaults)
36
44
 
37
45
  def file_content = File.read(filename)
@@ -10,9 +10,11 @@ module InferModel::To
10
10
  TIMESTAMP_FORMAT = "%Y%m%d%H%M%S"
11
11
 
12
12
  param :model
13
- option :target_dir, default: -> { "db/migrate" }
14
- option :table_name, optional: true
13
+ option :attributes_map, optional: true
14
+ option :filter_on_attribute_mapping, default: -> { true }
15
15
  option :rails_version, default: -> { "7.0" }
16
+ option :table_name, optional: true
17
+ option :target_dir, default: -> { "db/migrate" }
16
18
 
17
19
  def call
18
20
  FileUtils.mkdir_p(target_dir)
@@ -30,6 +32,16 @@ module InferModel::To
30
32
  table_name || model.source_name.pluralize
31
33
  end
32
34
 
35
+ def given_or_mapped_attributes
36
+ return model.attributes unless attributes_map
37
+
38
+ if filter_on_attribute_mapping
39
+ attributes_map.to_h { |old_key, new_key| [new_key, model.attributes[old_key]] }
40
+ else
41
+ model.attributes.transform_keys { |key| attributes_map.fetch(key, key) }
42
+ end
43
+ end
44
+
33
45
  def migration_content
34
46
  <<~RUBY
35
47
  # frozen_string_literal: true
@@ -49,13 +61,13 @@ module InferModel::To
49
61
  COLUMN_DDL_LINES_WITH_INDENTATION_JOINER = "\n#{" " * 3}".freeze
50
62
 
51
63
  def column_ddl_lines
52
- column_definitions = model.attributes.map do |key, common_type|
64
+ column_definitions = given_or_mapped_attributes.map do |key, common_type|
53
65
  attribute_and_name = %(t.#{common_type.detected_type} "#{key}")
54
66
  non_null_constraint = common_type.non_null_constraint_possible ? "null: false" : nil
55
67
 
56
68
  [attribute_and_name, non_null_constraint].compact.join(", ")
57
69
  end
58
- index_definitions = model.attributes.filter_map do |key, common_type|
70
+ index_definitions = given_or_mapped_attributes.filter_map do |key, common_type|
59
71
  next unless common_type.unique_constraint_possible
60
72
 
61
73
  %(t.index ["#{key}"], unique: true)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module InferModel
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: infer_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jay Schneider
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-10 00:00:00.000000000 Z
11
+ date: 2022-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.14'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '13.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '13.0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: rspec
85
99
  requirement: !ruby/object:Gem::Requirement