brick 1.0.190 → 1.0.192

Sign up to get free protection for your applications and to get access to all the features.
@@ -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