brick 1.0.190 → 1.0.192

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.
@@ -0,0 +1,105 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brick
4
+ class SalesforceSchema < Nokogiri::XML::SAX::Document
5
+ include ::Brick::MigrationBuilder
6
+
7
+ attr_reader :end_document_proc
8
+
9
+ def initialize(end_doc_proc)
10
+ @end_document_proc = end_doc_proc
11
+ end
12
+
13
+ def start_document
14
+ # p [:start_document]
15
+ @salesforce_tables = {}
16
+ @text_stack = []
17
+ @all_extends = {}
18
+ puts 'Each dot is a table:'
19
+ end
20
+
21
+ def end_document
22
+ puts
23
+ end_document_proc&.call(@salesforce_tables)
24
+ end
25
+
26
+ def start_element_namespace(name, attrs = [], prefix = nil, uri = nil, ns = [])
27
+ # p [:start_element, name, attrs, prefix, uri, ns]
28
+ case name
29
+ when 'complexType' # Table
30
+ @last_table = attrs.find { |a| a.localname == 'name' }&.value
31
+ @fks = {}
32
+ # if attrs.first&.value&.end_with?('__c') # Starts as a string
33
+ when 'extension'
34
+ @last_extension = attrs.find { |a| a.localname == 'base' }.value
35
+ when 'element' # Column
36
+ # Extremely rarely this is nil!
37
+ data_type = attrs.find { |a| a.localname == 'type' }&.value
38
+ return if !@last_table || data_type.nil? || data_type == 'tns:QueryResult'
39
+
40
+ # Promoted to a real SalesforceTable object
41
+ if @last_table.is_a?(String)
42
+ @last_table = @salesforce_tables[@last_table] = { extend: @salesforce_tables[@last_extension] }
43
+ end
44
+
45
+ col_name = attrs.find { |a| a.localname == 'name' }&.value
46
+
47
+ # Foreign key reference?
48
+ if data_type&.start_with?('ens:')
49
+ foreign_table = data_type[4..]
50
+ if col_name.end_with?('__r')
51
+ @fks["#{col_name[0..-2]}c"] = foreign_table
52
+ else # if col_name.end_with?('Id')
53
+ @fks["#{col_name}Id"] = foreign_table
54
+ end
55
+ return
56
+ end
57
+
58
+ # Rarely this is nil
59
+ nillable = attrs.find { |a| a.localname == 'nillable' }&.value == 'true'
60
+ min_occurs = attrs.find { |a| a.localname == 'minOccurs' }&.value || -2
61
+ min_occurs = -1 if min_occurs == 'unbounded'
62
+ max_occurs = attrs.find { |a| a.localname == 'maxOccurs' }&.value || -2
63
+ max_occurs = -1 if max_occurs == 'unbounded'
64
+ col_options = { name: col_name, data_type: :data_type, nillable: :nillable, min_occurs: :min_occurs, max_occurs: :max_occurs }
65
+
66
+ (@last_table[:cols] ||= []) << col_options
67
+ end
68
+ @text_stack.push +''
69
+ end
70
+
71
+ def end_element_namespace(name, prefix = nil, uri = nil)
72
+ # p [:end_element, name, prefix, uri]
73
+ texts = @text_stack.pop
74
+ case name
75
+ when 'extension'
76
+ @last_extension = nil
77
+ when 'complexType'
78
+ if @last_table && !@last_table.is_a?(String)
79
+ # Do up any foreign keys
80
+ @fks.each do |k, v|
81
+ # Only a few records set up like this, going to sObject
82
+ if
83
+ # (k.downcase.end_with?('recordid') &&
84
+ # (fk_col = @last_table[:cols].find { |t| t[:name] == "#{k[0..-9]}Id" })
85
+ # ) ||
86
+ (fk_col = @last_table[:cols].find { |t| t[:name] == k })
87
+ fk_col[:fk_reference_to] = v
88
+ # puts "Skipping #{@last_table[:name]} / #{k}"
89
+ end
90
+ end
91
+ end
92
+ print '.'
93
+ @last_table = nil
94
+ end
95
+ # p [:end_element_texts, name, texts]
96
+ end
97
+
98
+ def characters(string)
99
+ # p [:characters, string]
100
+ @text_stack.each do |text|
101
+ text << string
102
+ end
103
+ end
104
+ end
105
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brick
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.190
4
+ version: 1.0.192
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lorin Thwaits
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-23 00:00:00.000000000 Z
11
+ date: 2023-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -248,16 +248,20 @@ files:
248
248
  - lib/brick/frameworks/rails/form_tags.rb
249
249
  - lib/brick/frameworks/rspec.rb
250
250
  - lib/brick/join_array.rb
251
+ - lib/brick/route_mapper.rb
251
252
  - lib/brick/serializers/json.rb
252
253
  - lib/brick/serializers/yaml.rb
253
254
  - lib/brick/tasks/orphans.rake
254
255
  - lib/brick/util.rb
255
256
  - lib/brick/version_number.rb
256
257
  - lib/generators/brick/USAGE
258
+ - lib/generators/brick/controllers_generator.rb
257
259
  - lib/generators/brick/install_generator.rb
258
260
  - lib/generators/brick/migration_builder.rb
259
261
  - lib/generators/brick/migrations_generator.rb
260
262
  - lib/generators/brick/models_generator.rb
263
+ - lib/generators/brick/salesforce_migrations_generator.rb
264
+ - lib/generators/brick/salesforce_schema.rb
261
265
  - lib/generators/brick/seeds_generator.rb
262
266
  - lib/generators/brick/templates/add_object_changes_to_versions.rb.erb
263
267
  - lib/generators/brick/templates/create_versions.rb.erb