activerecord-dbt 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +921 -0
  4. data/Rakefile +5 -0
  5. data/lib/active_record/dbt/column/column.rb +84 -0
  6. data/lib/active_record/dbt/column/test.rb +61 -0
  7. data/lib/active_record/dbt/column/testable/accepted_values_testable.rb +59 -0
  8. data/lib/active_record/dbt/column/testable/not_null_testable.rb +23 -0
  9. data/lib/active_record/dbt/column/testable/relationships_testable.rb +49 -0
  10. data/lib/active_record/dbt/column/testable/unique_testable.rb +37 -0
  11. data/lib/active_record/dbt/config.rb +45 -0
  12. data/lib/active_record/dbt/configuration/data_sync.rb +15 -0
  13. data/lib/active_record/dbt/configuration/logger.rb +41 -0
  14. data/lib/active_record/dbt/configuration/parser.rb +15 -0
  15. data/lib/active_record/dbt/configuration/used_dbt_package.rb +25 -0
  16. data/lib/active_record/dbt/dbt_package/dbt_utils/table/testable/unique_combination_of_columns_testable.rb +42 -0
  17. data/lib/active_record/dbt/dbt_package/dbterd/column/testable/relationships_meta_relationship_type.rb +138 -0
  18. data/lib/active_record/dbt/factory/columns_factory.rb +31 -0
  19. data/lib/active_record/dbt/factory/model/staging_factory.rb +22 -0
  20. data/lib/active_record/dbt/factory/source_factory.rb +16 -0
  21. data/lib/active_record/dbt/factory/table_factory.rb +16 -0
  22. data/lib/active_record/dbt/factory/tables_factory.rb +15 -0
  23. data/lib/active_record/dbt/model/staging/base.rb +73 -0
  24. data/lib/active_record/dbt/model/staging/sql.rb +43 -0
  25. data/lib/active_record/dbt/model/staging/yml.rb +108 -0
  26. data/lib/active_record/dbt/railtie.rb +8 -0
  27. data/lib/active_record/dbt/source/yml.rb +37 -0
  28. data/lib/active_record/dbt/table/base.rb +16 -0
  29. data/lib/active_record/dbt/table/test.rb +19 -0
  30. data/lib/active_record/dbt/table/yml.rb +75 -0
  31. data/lib/active_record/dbt/version.rb +7 -0
  32. data/lib/active_record/dbt.rb +17 -0
  33. data/lib/generators/active_record/dbt/config/USAGE +9 -0
  34. data/lib/generators/active_record/dbt/config/config_generator.rb +30 -0
  35. data/lib/generators/active_record/dbt/config/templates/source_config.yml.tt +68 -0
  36. data/lib/generators/active_record/dbt/initializer/USAGE +8 -0
  37. data/lib/generators/active_record/dbt/initializer/initializer_generator.rb +15 -0
  38. data/lib/generators/active_record/dbt/initializer/templates/dbt.rb +10 -0
  39. data/lib/generators/active_record/dbt/source/USAGE +8 -0
  40. data/lib/generators/active_record/dbt/source/source_generator.rb +22 -0
  41. data/lib/generators/active_record/dbt/staging_model/USAGE +9 -0
  42. data/lib/generators/active_record/dbt/staging_model/staging_model_generator.rb +38 -0
  43. data/lib/generators/active_record/dbt/staging_model/templates/staging_model.sql.tt +29 -0
  44. data/lib/tasks/active_record/dbt_tasks.rake +6 -0
  45. metadata +133 -0
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveRecord
4
+ module Dbt
5
+ module Generators
6
+ class StagingModelGenerator < Rails::Generators::NamedBase
7
+ source_root File.expand_path('templates', __dir__)
8
+
9
+ def create_staging_model_sql_file
10
+ template 'staging_model.sql.tt', sql.export_path
11
+ end
12
+
13
+ def create_staging_model_yml_file
14
+ create_file yml.export_path, yml.yml_dump
15
+ end
16
+
17
+ private
18
+
19
+ def sql
20
+ @sql ||= ActiveRecord::Dbt::Model::Staging::Sql.new(name)
21
+ end
22
+
23
+ def yml
24
+ @yml ||= ActiveRecord::Dbt::Factory::Model::StagingFactory.yml_build(name)
25
+ end
26
+
27
+ def source_paths
28
+ config_directory_path = ActiveRecord::Dbt::Config.instance.config_directory_path
29
+
30
+ [
31
+ File.expand_path(config_directory_path, Rails.root),
32
+ File.expand_path('./templates/', __dir__)
33
+ ]
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,29 @@
1
+ with
2
+
3
+ source as (
4
+
5
+ select * from {{ source('<%= sql.source_name %>', '<%= sql.table_name %>') }}
6
+
7
+ ),
8
+
9
+ renamed as (
10
+
11
+ select
12
+
13
+ <%- sql.select_column_names.each_with_index do |(column_type, columns), column_type_index| -%>
14
+ -- <%= column_type %>
15
+ <%- columns.each_with_index do |column, column_index| -%>
16
+ <%- is_rename_primary_id = sql.primary_key_eql_id? && sql.primary_key?(column.name) -%>
17
+ <%- is_last_column = column_type_index == sql.select_column_names.size - 1 && column_index == columns.size - 1 -%>
18
+ <%= is_rename_primary_id ? "id as #{sql.rename_primary_id}" : column.name %><% unless is_last_column -%>,<%- end %>
19
+ <%- if column_type_index != sql.select_column_names.size - 1 && column_index == columns.size - 1 -%>
20
+
21
+ <%- end -%>
22
+ <%- end -%>
23
+ <%- end -%>
24
+
25
+ from source
26
+
27
+ )
28
+
29
+ select * from renamed
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ # desc "Explaining what the task does"
4
+ # task :activerecord_dbt do
5
+ # # Task goes here
6
+ # end
metadata ADDED
@@ -0,0 +1,133 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: activerecord-dbt
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - yamotech
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-07-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '7.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '7.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '7.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '7.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: zeitwerk
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '2.6'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '2.6'
55
+ description: Generate dbt files from the information of the database connected by
56
+ ActiveRecord.
57
+ email:
58
+ - nothings.2c9@gmail.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - LICENSE
64
+ - README.md
65
+ - Rakefile
66
+ - lib/active_record/dbt.rb
67
+ - lib/active_record/dbt/column/column.rb
68
+ - lib/active_record/dbt/column/test.rb
69
+ - lib/active_record/dbt/column/testable/accepted_values_testable.rb
70
+ - lib/active_record/dbt/column/testable/not_null_testable.rb
71
+ - lib/active_record/dbt/column/testable/relationships_testable.rb
72
+ - lib/active_record/dbt/column/testable/unique_testable.rb
73
+ - lib/active_record/dbt/config.rb
74
+ - lib/active_record/dbt/configuration/data_sync.rb
75
+ - lib/active_record/dbt/configuration/logger.rb
76
+ - lib/active_record/dbt/configuration/parser.rb
77
+ - lib/active_record/dbt/configuration/used_dbt_package.rb
78
+ - lib/active_record/dbt/dbt_package/dbt_utils/table/testable/unique_combination_of_columns_testable.rb
79
+ - lib/active_record/dbt/dbt_package/dbterd/column/testable/relationships_meta_relationship_type.rb
80
+ - lib/active_record/dbt/factory/columns_factory.rb
81
+ - lib/active_record/dbt/factory/model/staging_factory.rb
82
+ - lib/active_record/dbt/factory/source_factory.rb
83
+ - lib/active_record/dbt/factory/table_factory.rb
84
+ - lib/active_record/dbt/factory/tables_factory.rb
85
+ - lib/active_record/dbt/model/staging/base.rb
86
+ - lib/active_record/dbt/model/staging/sql.rb
87
+ - lib/active_record/dbt/model/staging/yml.rb
88
+ - lib/active_record/dbt/railtie.rb
89
+ - lib/active_record/dbt/source/yml.rb
90
+ - lib/active_record/dbt/table/base.rb
91
+ - lib/active_record/dbt/table/test.rb
92
+ - lib/active_record/dbt/table/yml.rb
93
+ - lib/active_record/dbt/version.rb
94
+ - lib/generators/active_record/dbt/config/USAGE
95
+ - lib/generators/active_record/dbt/config/config_generator.rb
96
+ - lib/generators/active_record/dbt/config/templates/source_config.yml.tt
97
+ - lib/generators/active_record/dbt/initializer/USAGE
98
+ - lib/generators/active_record/dbt/initializer/initializer_generator.rb
99
+ - lib/generators/active_record/dbt/initializer/templates/dbt.rb
100
+ - lib/generators/active_record/dbt/source/USAGE
101
+ - lib/generators/active_record/dbt/source/source_generator.rb
102
+ - lib/generators/active_record/dbt/staging_model/USAGE
103
+ - lib/generators/active_record/dbt/staging_model/staging_model_generator.rb
104
+ - lib/generators/active_record/dbt/staging_model/templates/staging_model.sql.tt
105
+ - lib/tasks/active_record/dbt_tasks.rake
106
+ homepage: https://github.com/yamotech/activerecord-dbt
107
+ licenses:
108
+ - MIT
109
+ metadata:
110
+ homepage_uri: https://github.com/yamotech/activerecord-dbt
111
+ source_code_uri: https://github.com/yamotech/activerecord-dbt
112
+ changelog_uri: https://github.com/yamotech/activerecord-dbt/blob/main/CHANGELOG.md
113
+ rubygems_mfa_required: 'true'
114
+ post_install_message:
115
+ rdoc_options: []
116
+ require_paths:
117
+ - lib
118
+ required_ruby_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '3.0'
123
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ requirements: []
129
+ rubygems_version: 3.2.33
130
+ signing_key:
131
+ specification_version: 4
132
+ summary: Generate dbt files from the information of the database connected by ActiveRecord.
133
+ test_files: []