blufin 0.1.0

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.
Files changed (113) hide show
  1. checksums.yaml +7 -0
  2. data/bin/bf +5 -0
  3. data/bin/blufin +5 -0
  4. data/lib/blufin.rb +245 -0
  5. data/lib/core/code_scanners/common/scanner_common.rb +83 -0
  6. data/lib/core/code_scanners/common/scanner_java.rb +106 -0
  7. data/lib/core/code_scanners/scanner_java_embedded_objects.rb +386 -0
  8. data/lib/core/code_scanners/scanner_java_enums.rb +125 -0
  9. data/lib/core/code_scanners/scanner_java_source.rb +29 -0
  10. data/lib/core/code_scanners/scanner_java_tests.rb +157 -0
  11. data/lib/core/error_handling/schema_error.rb +9 -0
  12. data/lib/core/error_handling/sql_error.rb +21 -0
  13. data/lib/core/error_handling/sql_error_handler.rb +149 -0
  14. data/lib/core/error_handling/yml_error.rb +21 -0
  15. data/lib/core/error_handling/yml_error_handler.rb +437 -0
  16. data/lib/core/mysql.rb +347 -0
  17. data/lib/core/opt.rb +21 -0
  18. data/lib/core/site/site.rb +26 -0
  19. data/lib/core/site/site_auth.rb +88 -0
  20. data/lib/core/site/site_embedded.rb +27 -0
  21. data/lib/core/site/site_ports.rb +9 -0
  22. data/lib/core/site/site_resolver.rb +276 -0
  23. data/lib/core/site/site_services.rb +162 -0
  24. data/lib/core/site/site_ui.rb +16 -0
  25. data/lib/core/yml/config/yml_config_validator.rb +219 -0
  26. data/lib/core/yml/maven/yml_maven_validator.rb +1132 -0
  27. data/lib/core/yml/resource/yml_resource_validator.rb +154 -0
  28. data/lib/core/yml/schema/yml_schema_flags.rb +9 -0
  29. data/lib/core/yml/schema/yml_schema_validator.rb +1850 -0
  30. data/lib/core/yml/yml_cache_handler.rb +115 -0
  31. data/lib/core/yml/yml_common.rb +487 -0
  32. data/lib/core/yml/yml_meta_writer_base.rb +300 -0
  33. data/lib/core/yml/yml_outputter.rb +307 -0
  34. data/lib/core/yml/yml_validator_base.rb +630 -0
  35. data/lib/core/yml_writers/yml_configuration_writer.rb +40 -0
  36. data/lib/core/yml_writers/yml_java_api_resource_writer.rb +348 -0
  37. data/lib/core/yml_writers/yml_java_cron_type_writer.rb +113 -0
  38. data/lib/core/yml_writers/yml_java_css_dependency_writer.rb +59 -0
  39. data/lib/core/yml_writers/yml_java_dao_writer.rb +364 -0
  40. data/lib/core/yml_writers/yml_java_dto_writer.rb +251 -0
  41. data/lib/core/yml_writers/yml_java_embedded_object_writer.rb +968 -0
  42. data/lib/core/yml_writers/yml_java_enum_writer.rb +161 -0
  43. data/lib/core/yml_writers/yml_java_js_dependency_writer.rb +59 -0
  44. data/lib/core/yml_writers/yml_java_message_type_writer.rb +106 -0
  45. data/lib/core/yml_writers/yml_java_meta_writer.rb +173 -0
  46. data/lib/core/yml_writers/yml_java_model_writer.rb +510 -0
  47. data/lib/core/yml_writers/yml_java_pom_writer.rb +1050 -0
  48. data/lib/core/yml_writers/yml_java_resource_data_writer.rb +251 -0
  49. data/lib/core/yml_writers/yml_java_sdk_writer.rb +732 -0
  50. data/lib/core/yml_writers/yml_java_validator_writer.rb +280 -0
  51. data/lib/core/yml_writers/yml_java_worker_writer.rb +81 -0
  52. data/lib/core/yml_writers/yml_sql_structure_writer.rb +307 -0
  53. data/lib/core/yml_writers/yml_sql_template_writer.rb +243 -0
  54. data/lib/core/yml_writers/yml_vue_service_writer.rb +170 -0
  55. data/lib/core/yml_writers/yml_writer_base.rb +114 -0
  56. data/lib/routes/api_list.rb +35 -0
  57. data/lib/routes/api_meta.rb +59 -0
  58. data/lib/routes/build.rb +46 -0
  59. data/lib/routes/create/create_api.rb +35 -0
  60. data/lib/routes/create/create_ui.rb +84 -0
  61. data/lib/routes/export.rb +56 -0
  62. data/lib/routes/generate/generate_api.rb +225 -0
  63. data/lib/routes/generate/generate_img_favicon.rb +56 -0
  64. data/lib/routes/generate/generate_img_landing.rb +94 -0
  65. data/lib/routes/generate/generate_lambda.rb +43 -0
  66. data/lib/routes/lint.rb +35 -0
  67. data/lib/routes/mysql_reset.rb +43 -0
  68. data/lib/routes/release_blufin.rb +351 -0
  69. data/lib/routes/run.rb +35 -0
  70. data/lib/version.rb +1 -0
  71. data/opt/README.MD +2 -0
  72. data/opt/config/schema.yml +73 -0
  73. data/opt/config/template.yml +25 -0
  74. data/opt/sql/data/config/data-client.sql +7 -0
  75. data/opt/sql/data/config/data-db-configuration-property.sql +47 -0
  76. data/opt/sql/data/config/data-db-configuration.sql +9 -0
  77. data/opt/sql/data/config/data-db.sql +175 -0
  78. data/opt/sql/data/config/data-profile-api.sql +47 -0
  79. data/opt/sql/data/config/data-profile-cron.sql +0 -0
  80. data/opt/sql/data/config/data-profile-worker.sql +0 -0
  81. data/opt/sql/data/config/data-profile.sql +87 -0
  82. data/opt/sql/data/config/data-project.sql +95 -0
  83. data/opt/sql/structure/blufin-master-structure-fks.sql +65 -0
  84. data/opt/sql/structure/blufin-master-structure.sql +97 -0
  85. data/opt/sql/structure/blufin-mock-structure-fks.sql +38 -0
  86. data/opt/sql/structure/blufin-mock-structure.sql +98 -0
  87. data/opt/sql/templates/config/template-client.sql +7 -0
  88. data/opt/sql/templates/config/template-db-configuration-property.sql +11 -0
  89. data/opt/sql/templates/config/template-db-configuration.sql +9 -0
  90. data/opt/sql/templates/config/template-db.sql +21 -0
  91. data/opt/sql/templates/config/template-profile-api.sql +11 -0
  92. data/opt/sql/templates/config/template-profile-cron.sql +7 -0
  93. data/opt/sql/templates/config/template-profile-worker.sql +7 -0
  94. data/opt/sql/templates/config/template-profile.sql +21 -0
  95. data/opt/sql/templates/config/template-project.sql +23 -0
  96. data/opt/yml/api/schema/config/client.yml +14 -0
  97. data/opt/yml/api/schema/config/db.yml +45 -0
  98. data/opt/yml/api/schema/config/db_configuration.yml +22 -0
  99. data/opt/yml/api/schema/config/db_configuration_property.yml +22 -0
  100. data/opt/yml/api/schema/config/profile.yml +53 -0
  101. data/opt/yml/api/schema/config/profile_api.yml +22 -0
  102. data/opt/yml/api/schema/config/profile_cron.yml +14 -0
  103. data/opt/yml/api/schema/config/profile_worker.yml +14 -0
  104. data/opt/yml/api/schema/config/project.yml +48 -0
  105. data/opt/yml/api/schema/mock/mock.yml +99 -0
  106. data/opt/yml/api/schema/mock/mock_nested_if_enum.yml +16 -0
  107. data/opt/yml/api/schema/mock/mock_nested_if_enum_system.yml +16 -0
  108. data/opt/yml/api/schema/mock/mock_nested_linked.yml +43 -0
  109. data/opt/yml/api/schema/mock/mock_nested_multiple.yml +61 -0
  110. data/opt/yml/api/schema/mock/mock_nested_single.yml +67 -0
  111. data/opt/yml/api/schema/mock/mock_nested_single_super_deep.yml +32 -0
  112. data/opt/yml/api/schema/mock/mock_nested_single_super_super_deep.yml +17 -0
  113. metadata +240 -0
@@ -0,0 +1,243 @@
1
+ module Blufin
2
+
3
+ class YmlSqlTemplateWriter < Blufin::YmlWriterBase
4
+
5
+ # @return void
6
+ def initialize(site, schema_data)
7
+
8
+ @schema_data = schema_data
9
+
10
+ raise RuntimeError, 'Could not find valid @schema_data.' if @schema_data.nil? || !@schema_data.is_a?(Hash)
11
+
12
+ @site = Blufin::SiteResolver::validate_site(site)
13
+ @site_name = Blufin::SiteResolver::get_site_name(@site)
14
+ @site_path = Blufin::SiteResolver::get_site_location(@site)
15
+ @site_domain = Blufin::SiteResolver::get_site_domain(@site)
16
+ @site_location = "#{Blufin::SiteResolver::get_site_location(@site)}/"
17
+
18
+ @yml_enum_scanner = Blufin::ScannerJavaEnums.new(@site)
19
+
20
+ # Wipe out all previous files.
21
+ Blufin::YmlSchemaValidator::VALID_SCHEMAS_GENERATE.each do |schema|
22
+ path_to_wipe_out = "#{get_template_path(schema)}/#{schema}"
23
+ if Blufin::Files::path_exists(path_to_wipe_out)
24
+ if Blufin::Files::get_files_in_dir(path_to_wipe_out).any?
25
+ Blufin::Terminal::command('rm *', path_to_wipe_out, false, false)
26
+ end
27
+ end
28
+ end
29
+
30
+ end
31
+
32
+ # @return void
33
+ def write
34
+
35
+ valid_sql_data_files = []
36
+
37
+ @schema_data.each do |schema, schema_data|
38
+
39
+ # This filters out the "mock" schema used for testing.
40
+ next if schema == Blufin::YmlSchemaValidator::MOCK
41
+
42
+ schema_data.each do |table, table_data|
43
+
44
+ if table_data.length > 0
45
+
46
+ @mock_data = []
47
+ @column_names = []
48
+
49
+ fkey_ref_last = ''
50
+
51
+ template_path = get_template_path(schema)
52
+ data_path = get_data_path(schema)
53
+
54
+ # Skip if user doesn't have the PATH_TO_RUBY config value.
55
+ next if template_path.nil? || data_path.nil?
56
+
57
+ if schema == Blufin::YmlSchemaValidator::CONFIG
58
+ site_schema = App::MySQL::CONFIG_SCHEMA
59
+ elsif schema == Blufin::YmlSchemaValidator::MOCK
60
+ site_schema = App::MySQL::MOCK_SCHEMA
61
+ else
62
+ site_schema = "#{@site_name}-#{schema}"
63
+ end
64
+
65
+ table_data.each do |column_name, column_data|
66
+
67
+ # Skip Placeholders
68
+ next if column_name =~ /\A(#{Blufin::YmlSchemaValidator::VALID_SCHEMAS_REGEX})\.[a-z_]+\[\]\z/ || column_name =~ /\A(#{Blufin::YmlSchemaValidator::VALID_SCHEMAS_REGEX})\.[a-z_]+\z/
69
+
70
+ @type = column_data[Blufin::YmlSchemaValidator::TYPE]
71
+
72
+ # Skip Transient Objects.
73
+ next if [Blufin::ScannerJavaEmbeddedObjects::OBJECT].include?(@type)
74
+
75
+ # Create FKEY LINK tables entry templates
76
+ if column_name =~ /\A[a-z_.]+\[#{Blufin::YmlSchemaValidator::LINK}\]/
77
+
78
+ target_table = column_name.dup.gsub("[#{Blufin::YmlSchemaValidator::LINK}]", '').split('.')
79
+ table_name = "#{table}_to_#{target_table[1]}_link"
80
+
81
+ fk_link_lines = []
82
+ fk_link_lines << "INSERT IGNORE INTO `#{site_schema}`.#{table_name} ("
83
+ fk_link_lines << " `#{table}_id`,"
84
+ fk_link_lines << " `#{target_table[1]}_id`"
85
+ fk_link_lines << ') VALUES ('
86
+ fk_link_lines << " '0',"
87
+ fk_link_lines << " '0'"
88
+ fk_link_lines << ');'
89
+
90
+ # Write template file.
91
+ full_file_path = "#{template_path}/#{schema}/template-#{table_name.gsub('_', '-')}.sql"
92
+ Blufin::Files.write_file(full_file_path, fk_link_lines)
93
+
94
+ # Write data file.
95
+ sql_data_path = "#{data_path}/#{schema}/"
96
+ sql_data_file = "data-#{table_name.gsub('_', '-')}.sql"
97
+ sql_data_file_final = "#{sql_data_path}#{sql_data_file}"
98
+ Blufin::Files.write_file(sql_data_file_final, ['']) unless Blufin::Files::file_exists(sql_data_file_final)
99
+ Blufin::Terminal::command("git add #{sql_data_file_final}", get_base_path(@site), false, false) if schema != Blufin::YmlSchemaValidator::CONFIG && schema != Blufin::YmlSchemaValidator::MOCK
100
+
101
+ valid_sql_data_files << sql_data_file_final
102
+
103
+ next
104
+
105
+ end
106
+
107
+ fkey_ref = column_data[Blufin::YmlSchemaValidator::FKEY].nil? ? ',' : ", -- FK: #{column_data[Blufin::YmlSchemaValidator::FKEY]}"
108
+ fkey_ref_last = fkey_ref.dup
109
+ fkey_ref_last[0] = ''
110
+
111
+ if @type == Blufin::YmlSchemaValidator::TYPE_BOOLEAN
112
+ @mock_data << " 0#{fkey_ref}"
113
+ elsif @type == Blufin::YmlSchemaValidator::TYPE_DATE # MUST BE BEFORE DATETIME TYPES
114
+ @mock_data << " '#{Blufin::DateTimeUtils::now('%Y-%m-%d')}'#{fkey_ref}"
115
+ elsif Blufin::YmlSchemaValidator::DATETIME_TYPES.include?(@type)
116
+ @mock_data << " '#{Blufin::DateTimeUtils::now('%Y-%m-%d %H:%I:%S')}'#{fkey_ref}"
117
+ elsif @type =~ Blufin::YmlSchemaValidator::REGEX_DECIMAL
118
+ @mock_data << " 0.00#{fkey_ref}"
119
+ elsif Blufin::YmlSchemaValidator::INT_TYPES.include?(@type) || @type == Blufin::YmlSchemaValidator::TYPE_INT_TINY || @type == Blufin::YmlSchemaValidator::TYPE_INT_SMALL || @type == Blufin::YmlSchemaValidator::TYPE_INT_BIG
120
+ @mock_data << " 0#{fkey_ref}"
121
+ elsif @type == Blufin::YmlSchemaValidator::TYPE_INT_BIG
122
+ @mock_data << " 0#{fkey_ref}"
123
+ elsif Blufin::YmlSchemaValidator::TEXT_TYPES.include?(@type)
124
+ @mock_data << " '#{column_name.upcase}'#{fkey_ref}"
125
+ elsif @type =~ Blufin::YmlSchemaValidator::REGEX_ENUM
126
+ @mock_data << " '#{Blufin::YmlCommon::enum_value_extractor(@type, @site).join('|')}'#{fkey_ref}"
127
+ elsif @type =~ Blufin::YmlSchemaValidator::REGEX_ENUM_CUSTOM
128
+ @mock_data << " '#{@yml_enum_scanner.get_enum_custom_values_for(Blufin::YmlCommon::enum_name_extractor(@type)).join('|')}'#{fkey_ref}"
129
+ elsif @type =~ Blufin::YmlSchemaValidator::REGEX_ENUM_SYSTEM
130
+ @mock_data << " '#{@yml_enum_scanner.get_enum_system_values_for(Blufin::YmlCommon::enum_name_extractor(@type)).join('|')}'#{fkey_ref}"
131
+ elsif @type =~ Blufin::YmlSchemaValidator::REGEX_VARCHAR
132
+ @mock_data << " '#{column_name.upcase}'#{fkey_ref}"
133
+ else
134
+ raise RuntimeError, "Unrecognized type: #{@type}"
135
+ end
136
+
137
+ @column_names << " `#{column_name}`#{fkey_ref}"
138
+
139
+ end
140
+
141
+ # Remove the last comma (',') from SQL insert statements -- @mock_data
142
+ if @mock_data[@mock_data.length - 1] =~ /,\s--\sFK/
143
+ @mock_data[@mock_data.length - 1].gsub!(/,\s--\sFK/, ' -- FK')
144
+ else
145
+ @mock_data[@mock_data.length - 1] = @mock_data[@mock_data.length - 1][0...-1]
146
+ end
147
+
148
+ # Remove the last comma (',') from SQL insert statements -- @@column_names
149
+ if @column_names[@column_names.length - 1] =~ /,\s--\sFK/
150
+ @column_names[@column_names.length - 1].gsub!(/,\s--\sFK/, ' -- FK')
151
+ else
152
+ @column_names[@column_names.length - 1] = @column_names[@column_names.length - 1][0...-1]
153
+ end
154
+
155
+ @final_lines = []
156
+ @final_lines << "INSERT IGNORE INTO `#{site_schema}`.#{table} ("
157
+ @final_lines.push(*@column_names)
158
+ @final_lines << ') VALUES ('
159
+ @final_lines.push(*@mock_data)
160
+ @final_lines << ');'
161
+
162
+ full_file_path = "#{template_path}/#{schema}/template-#{table.gsub('_', '-')}.sql"
163
+
164
+ Blufin::Files.write_file(full_file_path, @final_lines).gsub(@site_location, '')
165
+
166
+ # Create Data file if it doesn't exist.
167
+ sql_data_path = "#{data_path}/#{schema}/"
168
+ sql_data_file = "data-#{table.gsub('_', '-')}.sql"
169
+ sql_data_file_final = "#{sql_data_path}#{sql_data_file}"
170
+ Blufin::YmlCommon::validate_file_and_contents(@site, sql_data_file_final, [], [], nil, schema != Blufin::YmlSchemaValidator::CONFIG) && schema != Blufin::YmlSchemaValidator::MOCK
171
+
172
+ valid_sql_data_files << sql_data_file_final
173
+
174
+ end
175
+
176
+ end
177
+
178
+ end
179
+
180
+ data_path_config = get_data_path(Blufin::YmlSchemaValidator::CONFIG)
181
+ data_path_mock = get_data_path(Blufin::YmlSchemaValidator::MOCK)
182
+
183
+ # Check for ROGUE file(s).
184
+ all_data_files = []
185
+ all_data_files = all_data_files + Blufin::Files::get_files_in_dir(get_data_path(Blufin::YmlSchemaValidator::APP))
186
+ all_data_files = all_data_files + Blufin::Files::get_files_in_dir(get_data_path(Blufin::YmlSchemaValidator::COMMON))
187
+ all_data_files = all_data_files + Blufin::Files::get_files_in_dir(data_path_config) unless data_path_config.nil?
188
+ all_data_files = all_data_files + Blufin::Files::get_files_in_dir(data_path_mock) unless data_path_mock.nil?
189
+ all_data_files.uniq!
190
+ all_data_files.each do |existing_data_file|
191
+ Blufin::Terminal::output("Found rogue file: #{Blufin::Terminal::format_directory(existing_data_file)}", Blufin::Terminal::MSG_WARNING) unless valid_sql_data_files.include?(existing_data_file)
192
+ end
193
+
194
+ end
195
+
196
+ # @return Array
197
+ def get_template_path(schema)
198
+ if schema == Blufin::YmlSchemaValidator::CONFIG || schema == Blufin::YmlSchemaValidator::MOCK
199
+ path_to_blufin_ruby = Blufin::Config::get_path('Paths', 'BlufinRuby')
200
+ return nil if path_to_blufin_ruby.nil?
201
+ "#{path_to_blufin_ruby}/#{App::Opt::BLUFIN}#{App::Opt::OPT_PATH_SQL}/templates"
202
+ else
203
+ "#{get_base_path(@site)}/#{Blufin::Site::PATH_TO_SQL_TEMPLATES}"
204
+ end
205
+ end
206
+
207
+ # @return Array
208
+ def get_data_path(schema)
209
+ if schema == Blufin::YmlSchemaValidator::CONFIG || schema == Blufin::YmlSchemaValidator::MOCK
210
+ path_to_blufin_ruby = Blufin::Config::get_path('Paths', 'BlufinRuby')
211
+ return nil if path_to_blufin_ruby.nil?
212
+ "#{path_to_blufin_ruby}/#{App::Opt::BLUFIN}#{App::Opt::OPT_PATH_SQL}/data"
213
+ else
214
+ "#{get_base_path(@site)}/#{Blufin::Site::PATH_TO_SQL_DATA}"
215
+ end
216
+
217
+ end
218
+
219
+ # @return Array
220
+ def get_structure_files(schema)
221
+
222
+ if schema == Blufin::YmlSchemaValidator::CONFIG
223
+ path_to_blufin_ruby = Blufin::Config::get_path('Paths', 'BlufinRuby')
224
+ return nil if path_to_blufin_ruby.nil?
225
+ structure_file = "#{path_to_blufin_ruby}/#{App::Opt::BLUFIN}#{App::Opt::OPT_PATH_SQL}/structure/#{App::MySQL::CONFIG_FILENAME_STRUCTURE}"
226
+ foreign_key_file = "#{path_to_blufin_ruby}/#{App::Opt::BLUFIN}#{App::Opt::OPT_PATH_SQL}/structure/#{App::MySQL::CONFIG_FILENAME_STRUCTURE_FKS}"
227
+ elsif schema == Blufin::YmlSchemaValidator::MOCK
228
+ path_to_blufin_ruby = Blufin::Config::get_path('Paths', 'BlufinRuby')
229
+ return nil if path_to_blufin_ruby.nil?
230
+ structure_file = "#{path_to_blufin_ruby}/#{App::Opt::BLUFIN}#{App::Opt::OPT_PATH_SQL}/structure/#{App::MySQL::MOCK_FILENAME_STRUCTURE}"
231
+ foreign_key_file = "#{path_to_blufin_ruby}/#{App::Opt::BLUFIN}#{App::Opt::OPT_PATH_SQL}/structure/#{App::MySQL::MOCK_FILENAME_STRUCTURE_FKS}"
232
+ else
233
+ structure_file = "#{get_base_path(@site)}/#{Blufin::Site::PATH_TO_SQL_STRUCTURE}/#{Blufin::SiteResolver::get_site_name(@site)}-#{schema}.sql"
234
+ foreign_key_file = "#{get_base_path(@site)}/#{Blufin::Site::PATH_TO_SQL_STRUCTURE}/#{Blufin::SiteResolver::get_site_name(@site)}-fks-#{schema}.sql"
235
+ end
236
+
237
+ [structure_file, foreign_key_file]
238
+
239
+ end
240
+
241
+ end
242
+
243
+ end
@@ -0,0 +1,170 @@
1
+ module Blufin
2
+
3
+ class YmlVueServiceWriter < Blufin::YmlWriterBase
4
+
5
+ SERVICE = Blufin::SiteServices::API
6
+ PACKAGE = 'resources'
7
+
8
+ # Initialize the class.
9
+ # @return void
10
+ def initialize(site, schema_resources)
11
+
12
+ @schema_resources = schema_resources
13
+
14
+ raise RuntimeError, 'Could not find valid @schema_resources.' if @schema_resources.nil? || !@schema_resources.is_a?(Hash)
15
+
16
+ @site = Blufin::SiteResolver::validate_site(site)
17
+ @site_name = Blufin::SiteResolver::get_site_name(@site)
18
+ @site_domain = Blufin::SiteResolver::get_site_domain(@site)
19
+ @site_location = "#{Blufin::SiteResolver::get_site_location(@site)}/"
20
+
21
+ # Wipe out all previous files.
22
+ # Blufin::YmlSchemaValidator::VALID_SCHEMAS_GENERATE.each do |schema|
23
+ # path_to_wipe_out = "#{get_java_path(@site, schema, SERVICE, PACKAGE)}"
24
+ # if Blufin::Files::path_exists(path_to_wipe_out)
25
+ # if Blufin::Files::get_files_in_dir(path_to_wipe_out).any?
26
+ # Blufin::Terminal::command('rm *', path_to_wipe_out, false, false)
27
+ # end
28
+ # end
29
+ # end
30
+
31
+ end
32
+
33
+ # @return void
34
+ def write
35
+
36
+ @schema_resources.each do |schema_table, resource_data|
37
+
38
+ # Only write PARENT resources as they will contain the others as 'dependents'.
39
+ next unless resource_data[:tree].length < 2
40
+
41
+ # Skip if this resource has no HTTP Methods.
42
+ next unless Blufin::YmlCommon::has_at_least_one_http_method(resource_data, Blufin::YmlSchemaValidator::CONFIG_INTERNAL)
43
+
44
+ @schema = schema_table.split('.')[0]
45
+ @table = schema_table.split('.')[1]
46
+ @type = resource_data[:type]
47
+
48
+ @import_statements = []
49
+
50
+ table_name = Blufin::Strings::snake_case_to_camel_case(@table)
51
+ table_name_lower = Blufin::Strings::snake_case_to_camel_case_lower(@table)
52
+ class_name = "#{table_name}Resource"
53
+
54
+ auth_level = Blufin::SiteAuth::get_auth_level_for_table(@schema, @table)
55
+
56
+ # TODO - THIS CANNOT BE HARD-CODED TO FALSE/TRUE.
57
+ is_public = false
58
+ is_secured = true
59
+
60
+ is_account_aware = (auth_level == Blufin::SiteAuth::LEVEL_ACCOUNT || auth_level == Blufin::SiteAuth::LEVEL_ACCOUNT_USER)
61
+ is_user_aware = (auth_level == Blufin::SiteAuth::LEVEL_ACCOUNT_USER)
62
+
63
+ # TODO - THIS CANNOT BE HARD-CODED TO FALSE.
64
+ is_oauth = false
65
+
66
+ # TODO - REMOVE (AFTER OAUTH IS FIXED -- HANDY DEBUG STRING)
67
+ # puts "\x1B[38;5;154m#{@schema}.#{@table}\x1B[0m \xe2\x86\x92 \x1B[38;5;196m#{auth_level}\x1B[0m"
68
+
69
+ content_inner = []
70
+ content_inner << "import Axios from 'axios';"
71
+ content_inner << ''
72
+ content_inner << 'export default {'
73
+
74
+ if resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::GET)
75
+ content_inner << " get#{table_name}() {"
76
+ content_inner << " return Axios.get(`/#{@schema_resources["#{schema_table}"][:resource]}`).then((response) => {"
77
+ content_inner << ' return response.data;'
78
+ content_inner << ' }, (e) => {'
79
+ content_inner << ' return Promise.reject(e.data);'
80
+ content_inner << ' });'
81
+ content_inner << ' },'
82
+ content_inner << " get#{table_name}(id) {"
83
+ content_inner << " return Axios.get(`/#{@schema_resources["#{schema_table}"][:resource]}/${id}`).then((response) => {"
84
+ content_inner << ' return response.data;'
85
+ content_inner << ' }, (e) => {'
86
+ content_inner << ' return Promise.reject(e.data);'
87
+ content_inner << ' });'
88
+ content_inner << ' },'
89
+ end
90
+
91
+ if resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::POST)
92
+ content_inner << " post#{table_name}(obj) {"
93
+ content_inner << " return Axios.post(`/#{@schema_resources["#{schema_table}"][:resource]}`, obj).then((response) => {"
94
+ content_inner << ' return response.data;'
95
+ content_inner << ' }, (e) => {'
96
+ content_inner << ' return Promise.reject(e.data);'
97
+ content_inner << ' });'
98
+ content_inner << ' },'
99
+ end
100
+
101
+ if resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::PATCH)
102
+ content_inner << " patch#{table_name}(obj) {"
103
+ content_inner << " return Axios.patch(`/#{@schema_resources["#{schema_table}"][:resource]}`, obj).then((response) => {"
104
+ content_inner << ' return response.data;'
105
+ content_inner << ' }, (e) => {'
106
+ content_inner << ' return Promise.reject(e.data);'
107
+ content_inner << ' });'
108
+ content_inner << ' },'
109
+ end
110
+
111
+ if resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::DELETE)
112
+ content_inner << " delete#{table_name}(id) {"
113
+ content_inner << " return Axios.delete(`/#{@schema_resources["#{schema_table}"][:resource]}/${id}`).then((response) => {"
114
+ content_inner << ' return response.data;'
115
+ content_inner << ' }, (e) => {'
116
+ content_inner << ' return Promise.reject(e.data);'
117
+ content_inner << ' });'
118
+ content_inner << ' },'
119
+ end
120
+
121
+ if !resource_data[:dependents].nil? && resource_data[:dependents].any?
122
+ resource_data[:dependents].each do |dependent|
123
+
124
+ dcc = Blufin::Strings::snake_case_to_camel_case(dependent)
125
+ dccl = Blufin::Strings::snake_case_to_camel_case_lower(dependent)
126
+ uri = @schema_resources["#{@schema}.#{dependent}"][:resource]
127
+
128
+ resource_data = @schema_resources["#{@schema}.#{dependent}"]
129
+
130
+ if resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::GET)
131
+ # TODO
132
+ end
133
+
134
+ if resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::POST)
135
+ # TODO
136
+ end
137
+
138
+ if resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::PATCH)
139
+ # TODO
140
+ end
141
+
142
+ if resource_data[:methods_internal].has_key?(Blufin::YmlConfigValidator::DELETE)
143
+ # TODO
144
+ end
145
+
146
+ end
147
+
148
+ end
149
+
150
+ content = []
151
+ content = content.push(*content_inner)
152
+ content[content.length - 1] = ' }'
153
+ content << '}'
154
+
155
+ # TODO - REMOVE
156
+ # puts "\x1B[38;5;154m#{content.to_yaml}\x1B[0m" if schema_table == 'common.account'
157
+
158
+ # TODO
159
+ # full_file_path = "#{get_java_path(@site, @schema, SERVICE, PACKAGE)}/#{class_name}.java"
160
+
161
+ # TODO
162
+ # write_file_java(full_file_path, content).gsub(@site_location, '')
163
+
164
+ end
165
+
166
+ end
167
+
168
+ end
169
+
170
+ end
@@ -0,0 +1,114 @@
1
+ module Blufin
2
+
3
+ class YmlWriterBase
4
+
5
+ PLACEHOLDER_PACKAGE = '{{--PACKAGE--}}'
6
+ PLACEHOLDER_CLASS = '{{--CLASS--}}'
7
+ PLACEHOLDER_SCHEMA = '{{--SCHEMA--}}'
8
+ PLACEHOLDER_IMPORT = '{{--IMPORT--}}'
9
+
10
+ AUTO_TYPES = %w(boolean byte short int long BigDecimal String ZonedDateTime LocalDate)
11
+
12
+ # Gets the base path to JAVA.
13
+ # @return String
14
+ def get_java_path(site, schema, service, package)
15
+ schema = '' if schema.nil?
16
+ case service
17
+ when Blufin::SiteServices::API
18
+ path = Blufin::SiteResolver::path_to_java_api(site)
19
+ when Blufin::SiteServices::CRON
20
+ path = Blufin::SiteResolver::path_to_java_cron(site)
21
+ when Blufin::SiteServices::LIB
22
+ path = Blufin::SiteResolver::path_to_java_lib(site)
23
+ when Blufin::SiteServices::SDK_CORE
24
+ path = Blufin::SiteResolver::path_to_java_sdk_core(site)
25
+ return "#{path}/src/main/java/#{Blufin::SiteResolver::get_site_domain(site).gsub('.', '/')}/#{Blufin::SiteResolver::get_site_name(site).gsub('-', '/')}/#{Blufin::SiteServices::SDK}/#{package.gsub('{schema}', schema).gsub('.', '/')}"
26
+ when Blufin::SiteServices::SDK_INTERNAL
27
+ path = Blufin::SiteResolver::path_to_java_sdk_internal(site)
28
+ return "#{path}/src/main/java/#{Blufin::SiteResolver::get_site_domain(site).gsub('.', '/')}/#{Blufin::SiteResolver::get_site_name(site).gsub('-', '/')}/#{Blufin::SiteServices::SDK}/#{package.gsub('{schema}', schema).gsub('.', '/')}"
29
+ when Blufin::SiteServices::SDK_OAUTH
30
+ path = Blufin::SiteResolver::path_to_java_sdk_oauth(site)
31
+ return "#{path}/src/main/java/#{Blufin::SiteResolver::get_site_domain(site).gsub('.', '/')}/#{Blufin::SiteResolver::get_site_name(site).gsub('-', '/')}/#{Blufin::SiteServices::SDK}/#{package.gsub('{schema}', schema).gsub('.', '/')}"
32
+ when Blufin::SiteServices::WORKER
33
+ path = Blufin::SiteResolver::path_to_java_worker(site)
34
+ else
35
+ raise RuntimeError, "Invalid Service: #{service}"
36
+ end
37
+ "#{path}/src/main/java/#{Blufin::SiteResolver::get_site_domain(site).gsub('.', '/')}/#{Blufin::SiteResolver::get_site_name(site).gsub('-', '/')}/#{service}/#{package.gsub('{schema}', schema).gsub('.', '/')}"
38
+ end
39
+
40
+ # Gets the base path for site.
41
+ # @return String
42
+ def get_base_path(site)
43
+ "#{Blufin::SiteResolver::get_site_location(site)}"
44
+ end
45
+
46
+ # Gets the package.
47
+ # @return String
48
+ def get_package(site, schema, package, service)
49
+ schema = '' if schema.nil?
50
+ domain = Blufin::SiteResolver::get_site_domain(site).strip
51
+ domain_gsub = domain == '' ? '' : "#{domain}."
52
+ if [Blufin::SiteServices::SDK_CORE, Blufin::SiteServices::SDK_INTERNAL, Blufin::SiteServices::SDK_OAUTH].include?(service)
53
+ "#{domain_gsub}#{Blufin::SiteResolver::get_site_name(site).gsub('-', '.')}.#{Blufin::SiteServices::SDK}.#{package.gsub('{schema}', schema)}"
54
+ else
55
+ "#{domain_gsub}#{Blufin::SiteResolver::get_site_name(site).gsub('-', '.')}.#{service}.#{package.gsub('{schema}', schema)}"
56
+ end
57
+ end
58
+
59
+ # Takes a filename as input and determines the package. Magic.
60
+ # @return String
61
+ def get_package_from_file(site, file)
62
+ raise RuntimeError, "Expected String, instead got: #{file.class}" unless file.is_a?(String)
63
+ site = Blufin::SiteResolver::validate_site(site)
64
+ site_name = Blufin::SiteResolver::get_site_name(site)
65
+ site_domain = Blufin::SiteResolver::get_site_domain(site)
66
+ begin
67
+ matches = file.match(/\/#{site_name}-(#{Blufin::SiteServices::REGEX_JAVA})\/src\/(main|test)\/java\/#{site_domain}\/#{site_name.gsub('-', '/')}\//)
68
+ matches = matches[0].gsub(/\A\//, '').gsub(/\/\z/, '')
69
+ matches = matches.split('/')
70
+ service = matches[0]
71
+ split_path = "/#{service}/src/"
72
+ raise RuntimeError, "Unable to find swap_path: #{split_path}" unless file =~ /#{split_path}/
73
+ file_split = file.split(split_path)
74
+ file_split = file_split[1].split('/java/')
75
+ file_split = file_split[1].split('/')
76
+ file_split.pop
77
+ return file_split.join('.')
78
+ rescue => e
79
+ puts e.message
80
+ raise RuntimeError, "Failed to get_package_from_file() with file: #{file}"
81
+ end
82
+ end
83
+
84
+ # Proxy method needed to handle mocks.
85
+ # @return void
86
+ def write_file_java(path_and_file, contents, is_mock = false)
87
+ all_paths = 'config|dao|dto|enums|field|filter|mapper|metadata|model|refiner|service|sort|validator'
88
+ # This is the "mock interceptor" that writes all the auto-generated mocks.
89
+ if is_mock
90
+ package = path_and_file =~ /\/sdk/ ? 'sdk' : 'api'
91
+ file = File.basename(path_and_file)
92
+ type = path_and_file.split('/')
93
+ type = type[type.length - 2]
94
+ path = "#{Blufin::Config::get_path('Paths', 'BlufinJava')}/blufin-#{package}/src/test/java/org/blufin/mock/#{type}/"
95
+ path_and_file = "#{path}#{file}"
96
+ contents_intercepted = []
97
+ contents_intercepted = ['import lombok.EqualsAndHashCode;', '@EqualsAndHashCode(callSuper = false)'] if type == 'dto'
98
+ contents.each do |line|
99
+ if line =~ /^package\s+[A-Za-z0-9\.\-_].+(#{all_paths});/
100
+ contents_intercepted << line.gsub(/^package\s+[A-Za-z0-9.\-_].+./, "package org.blufin.mock.#{type};")
101
+ elsif line =~ /^import\s+[A-Za-z0-9\.\-_].+(#{all_paths}).Mock([A-Z][A-Za-z]+)?;/
102
+ import_split = line.split('.')
103
+ contents_intercepted << "import org.blufin.mock.#{import_split[import_split.length - 2]}.#{import_split[import_split.length - 1]}"
104
+ else
105
+ contents_intercepted << line
106
+ end
107
+ end
108
+ contents = contents_intercepted
109
+ end
110
+ Blufin::Files::write_file_java(path_and_file, contents)
111
+ end
112
+ end
113
+
114
+ end