blufin 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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,27 @@
1
+ module Blufin
2
+
3
+ class SiteEmbedded
4
+
5
+ @@embedded_data = nil
6
+
7
+ # Only needs to be initialized once.
8
+ # @return void
9
+ def self.init(embedded_data)
10
+
11
+ return unless @@embedded_data.nil?
12
+
13
+ raise RuntimeError, "Expected Hash, instead got: #{embedded_data.class}" unless embedded_data.is_a?(Hash)
14
+
15
+ @@embedded_data = embedded_data
16
+
17
+ end
18
+
19
+ # Gets the Data Hash
20
+ # @return Hash
21
+ def self.get_data
22
+ @@embedded_data
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,9 @@
1
+ module Blufin
2
+
3
+ class SitePorts
4
+
5
+ attr_accessor :api, :api_admin, :cron, :cron_admin, :worker, :worker_admin, :port_range_raw, :port_numbers_used
6
+
7
+ end
8
+
9
+ end
@@ -0,0 +1,276 @@
1
+ module Blufin
2
+
3
+ class SiteResolver
4
+
5
+ SITE = 'site'
6
+ SITE_NAME = 'name'
7
+ SITE_TITLE = 'title'
8
+ SITE_ALIAS = 'alias'
9
+ SITE_PORTS = 'ports'
10
+
11
+ PORT_RANGE_CRITERIA_ARRAY = ["\xe2\x80\x94 Consist of two 4-digit numbers separated by a '-' hyphen", "\xe2\x80\x94 Have a numerical difference of exactly 19.", "\xe2\x80\x94 The first number in the set must be divisible by 10.", nil, "An example of a valid #{Blufin::Terminal::format_highlight('port-range')} would be \xe2\x86\x92 #{Blufin::Terminal::format_action('6000-6019')}"]
12
+
13
+ @sitemap = nil
14
+ @site_valid = {}
15
+
16
+ # Gets the PATH to the site repository.
17
+ # @return String
18
+ def self.get_site_location(site)
19
+ validate_site(site)
20
+ get_sitemap[site][:site_location]
21
+ end
22
+
23
+ # Gets the site domain.
24
+ # @return String
25
+ def self.get_site_domain(site)
26
+ validate_site(site)
27
+ get_sitemap[site][:site_domain]
28
+ end
29
+
30
+ # Gets the (repository) name of the site.
31
+ # @return String
32
+ def self.get_site_name(site)
33
+ validate_site(site)
34
+ get_sitemap[site][:site_name]
35
+ end
36
+
37
+ # Gets the (repository) name of the site in camel-cased version.
38
+ # @return String
39
+ def self.get_site_name_camel_cased(site)
40
+ validate_site(site)
41
+ get_sitemap[site][:site_name_camel_cased]
42
+ end
43
+
44
+ # Gets the full name of the site.
45
+ # @return String
46
+ def self.get_site_title(site)
47
+ validate_site(site)
48
+ get_sitemap[site][:site_title]
49
+ end
50
+
51
+ # Gets an object containing all the site ports.
52
+ # @return Blufin::SitePorts
53
+ def self.get_site_ports(site)
54
+ validate_site(site)
55
+ get_sitemap[site][:site_ports]
56
+ end
57
+
58
+ # Checks if the site exists and takes 'aliases' into account.
59
+ # Throws ERROR if site doesn'ts exist.
60
+ # @return String
61
+ def self.validate_site(site, location = true)
62
+ if @site_valid[site].nil?
63
+ sitemap = get_sitemap
64
+ if !sitemap.keys.include?(site) || site.nil?
65
+ Blufin::Terminal::error("An API by the name \"#{Blufin::Terminal::format_highlight(site.nil? ? '[nil]' : site)}\" cannot be found \xe2\x80\x94 available APIs are:", get_available_apis, true)
66
+ else
67
+ validate_location(get_sitemap[site][:site_location]) if location
68
+ validate_ports_internal(get_sitemap[site][:site_ports].port_range_raw)
69
+ @site_valid[site] = true
70
+ site
71
+ end
72
+ else
73
+ site
74
+ end
75
+ end
76
+
77
+ # Get an array of available APIs (for use in Blufin::Terminal messages).
78
+ # @return Array
79
+ def self.get_available_apis
80
+ apis_names = []
81
+ apis_output = []
82
+ apis = Blufin::Projects::get_apis
83
+ apis.each { |api| apis_names << api[1][Blufin::Projects::PROJECT_NAME] }
84
+ api_max_text = apis_names.max_by(&:length).length
85
+ apis.each do |api|
86
+ api = api[1]
87
+ apis_output << "\x1B[38;5;154m#{api[Blufin::Projects::PROJECT_NAME].rjust(api_max_text, ' ')}\x1B[0m\x1B[38;5;240m \xe2\x86\x92 #{get_path_sites}/#{api[Blufin::Projects::PROJECT_NAME]} \x1B[38;5;67m[#{api[Blufin::Projects::PORT_RANGE]}] \x1B[38;5;154m#{api[Blufin::Projects::ALIAS]}"
88
+ end
89
+ apis_output
90
+ end
91
+
92
+ # Get an Array of Hashes used for validation, listing purposes.
93
+ # @return Array (of Hash)
94
+ def self.get_site_details_for_validation
95
+ validation_details = {
96
+ :existing_locations => [],
97
+ :existing_titles => [],
98
+ :existing_aliases => [],
99
+ :existing_names => [],
100
+ :existing_ports => []
101
+ }
102
+ get_sitemap(false).each do |key, site|
103
+ nil if key
104
+ validation_details[:existing_locations] << site[:site_location].to_s
105
+ validation_details[:existing_titles] << site[:site_title]
106
+ validation_details[:existing_aliases] << site[:site_alias]
107
+ validation_details[:existing_names] << site[:site_name]
108
+ validation_details[:existing_names_camel_cased] << site[:site_name_camel_cased]
109
+ validation_details[:existing_ports] << site[:site_ports].port_range_raw
110
+ end
111
+ validation_details[:existing_locations].uniq!
112
+ validation_details[:existing_titles].uniq!
113
+ validation_details[:existing_aliases].uniq!
114
+ validation_details[:existing_names].uniq!
115
+ validation_details[:existing_ports].uniq!
116
+ validation_details
117
+ end
118
+
119
+ # Validates ports. Needs to be in form of -> 6000-6019
120
+ # @return boolean
121
+ def self.validate_ports(site_ports)
122
+ return false unless site_ports.is_a?(String) && site_ports.include?('-')
123
+ valid = true
124
+ site_ports_split = site_ports.split('-')
125
+ if site_ports_split.length == 2
126
+ site_ports_split.each { |site_port| valid = false unless site_port =~ /\d{4}/ }
127
+ valid = false unless site_ports_split[1].to_i - site_ports_split[0].to_i == 19
128
+ valid = false unless site_ports_split[0].to_i % 10 == 0
129
+ else
130
+ valid = false
131
+ end
132
+ valid
133
+ end
134
+
135
+ # Invalidates the sitemap so data will have to be re-retrieved.
136
+ # @return void
137
+ def self.invalidate_sitemap
138
+ @sitemap = nil
139
+ end
140
+
141
+ private
142
+
143
+ # Generates the sitemap (only once during each script-run).
144
+ # If 'with_aliases' == TRUE, returns aliases as keys with identical data to original site-name.
145
+ # @return void
146
+ def self.get_sitemap(with_aliases = true)
147
+ if @sitemap.nil?
148
+ @sitemap = {}
149
+ Blufin::Projects::get_apis.each do |project|
150
+ project = project[1]
151
+ sl = "#{get_path_sites}/#{project[Blufin::Projects::PROJECT_NAME]}"
152
+ @sitemap[project[Blufin::Projects::PROJECT_NAME]] = {
153
+ :site_location => sl,
154
+ :site_title => project[Blufin::Projects::TITLE],
155
+ :site_alias => project[Blufin::Projects::ALIAS],
156
+ :site_name => project[Blufin::Projects::PROJECT_NAME],
157
+ :site_name_camel_cased => project[Blufin::Projects::PROJECT_NAME_PASCAL_CASE],
158
+ :site_domain => project[Blufin::Projects::DOMAIN],
159
+ :site_ports => convert_site_ports_to_object(project[Blufin::Projects::PORT_RANGE])
160
+ }
161
+ @sitemap[project[Blufin::Projects::ALIAS]] = @sitemap[project[Blufin::Projects::PROJECT_NAME]] if with_aliases
162
+ end
163
+ end
164
+ @sitemap
165
+ end
166
+
167
+ # Converts 6000-6019 to a Blufin::SitePorts object.
168
+ # @return Blufin::SitePorts
169
+ def self.convert_site_ports_to_object(site_ports)
170
+ raise RuntimeError, "Expected a String (port-range), instead got:#{site_ports.class}" unless site_ports.is_a?(String)
171
+ site_ports_split = site_ports.split('-')
172
+ base_port = site_ports_split[0].to_i
173
+ spo = Blufin::SitePorts.new
174
+ spo.port_range_raw = site_ports
175
+ spo.port_numbers_used = (site_ports_split[0]..site_ports_split[1]).to_a
176
+ spo.api = base_port + 0
177
+ spo.cron = base_port + 1
178
+ spo.worker = base_port + 3
179
+ spo.api_admin = base_port + 10
180
+ spo.cron_admin = base_port + 11
181
+ spo.worker_admin = base_port + 13
182
+ spo
183
+ end
184
+
185
+ # Checks that the site repo path exists.
186
+ # @return void
187
+ def self.validate_location(site_location)
188
+ unless Blufin::Files::path_exists(File.expand_path(site_location))
189
+ Blufin::Terminal::error("Location not found: #{Blufin::Terminal::format_directory(site_location)}", "Please check the #{Blufin::Terminal::format_highlight('path_sites')} value defined in your configuration file \xe2\x86\x92 #{Blufin::Terminal::format_command("#{App::GEM_NAME} x")}")
190
+ end
191
+ end
192
+
193
+ # Checks that the ports have a range of 20 and start on a number divisible by 10.
194
+ # @return void
195
+ def self.validate_ports_internal(site_ports)
196
+ raise RuntimeError, "Expected a String (port-range), instead got:#{site_ports.class}" unless site_ports.is_a?(String)
197
+ unless validate_ports(site_ports)
198
+ Blufin::Terminal::error("#{Blufin::Terminal::format_highlight('Port-range')} is in wrong format: #{Blufin::Terminal::format_invalid(site_ports)}. A valid #{Blufin::Terminal::format_highlight('port-range')} must meet the following criteria:", PORT_RANGE_CRITERIA_ARRAY, true)
199
+ end
200
+ end
201
+
202
+ # Returns the path to Java Api from root -> IE: /Users/<your-name>/.../app-infrastructure/<site-name>-api
203
+ # @return String
204
+ def self.path_to_java_api(site)
205
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_APP_INFRASTRUCTURE}/#{get_site_name(site)}-#{Blufin::SiteServices::API}"
206
+ end
207
+
208
+ # Returns the path to Java Cron from root -> IE: /Users/<your-name>/.../app-infrastructure/<site-name>-cron
209
+ # @return String
210
+ def self.path_to_java_cron(site)
211
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_APP_INFRASTRUCTURE}/#{get_site_name(site)}-#{Blufin::SiteServices::CRON}"
212
+ end
213
+
214
+ # Returns the path to Java Lib from root -> IE: /Users/<your-name>/.../app-infrastructure/<site-name>-lib
215
+ # @return String
216
+ def self.path_to_java_lib(site)
217
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_APP_INFRASTRUCTURE}/#{get_site_name(site)}-#{Blufin::SiteServices::LIB}"
218
+ end
219
+
220
+ # Returns the path to Java SDK from root -> IE: /Users/<your-name>/.../app-infrastructure/<site-name>-sdk
221
+ # @return String
222
+ def self.path_to_java_sdk(site)
223
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_APP_INFRASTRUCTURE}/#{get_site_name(site)}-#{Blufin::SiteServices::SDK}"
224
+ end
225
+
226
+ # Returns the path to Java SDK from root -> IE: /Users/<your-name>/.../app-infrastructure/<site-name>-sdk/<site-name>-sdk-core
227
+ # @return String
228
+ def self.path_to_java_sdk_core(site)
229
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_APP_INFRASTRUCTURE}/#{get_site_name(site)}-#{Blufin::SiteServices::SDK}/#{get_site_name(site)}-#{Blufin::SiteServices::SDK}-core"
230
+ end
231
+
232
+ # Returns the path to Java SDK from root -> IE: /Users/<your-name>/.../app-infrastructure/<site-name>-sdk/<site-name>-sdk-internal
233
+ # @return String
234
+ def self.path_to_java_sdk_internal(site)
235
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_APP_INFRASTRUCTURE}/#{get_site_name(site)}-#{Blufin::SiteServices::SDK}/#{get_site_name(site)}-#{Blufin::SiteServices::SDK}-internal"
236
+ end
237
+
238
+ # Returns the path to Java SDK from root -> IE: /Users/<your-name>/.../app-infrastructure/<site-name>-sdk/<site-name>-sdk-oauth
239
+ # @return String
240
+ def self.path_to_java_sdk_oauth(site)
241
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_APP_INFRASTRUCTURE}/#{get_site_name(site)}-#{Blufin::SiteServices::SDK}/#{get_site_name(site)}-#{Blufin::SiteServices::SDK}-oauth"
242
+ end
243
+
244
+ # Returns the path to Java Worker from root -> IE: /Users/<your-name>/.../app-infrastructure/<site-name>-worker
245
+ # @return String
246
+ def self.path_to_java_worker(site)
247
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_APP_INFRASTRUCTURE}/#{get_site_name(site)}-#{Blufin::SiteServices::WORKER}"
248
+ end
249
+
250
+ # Returns the path to the Blufin Java library from root -> IE: /Users/<your-name>/.../blufin-java
251
+ # @return String
252
+ def self.path_to_blufin_java
253
+ File.expand_path(Blufin::Config::get_path('Paths', 'BlufinJava'))
254
+ end
255
+
256
+ # Returns the path to SQL files from root -> IE: /Users/<your-name>/.../sql/
257
+ # @return String
258
+ def self.path_to_sql(site)
259
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_TO_SQL}"
260
+ end
261
+
262
+ # Returns the path to YML files from root -> IE: /Users/<your-name>/.../yml/
263
+ # @return String
264
+ def self.path_to_yml(site)
265
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_TO_YML}"
266
+ end
267
+
268
+ # Gets path to sites.
269
+ # @return String
270
+ def self.get_path_sites
271
+ Blufin::Config::get_path('Paths', 'Sites')
272
+ end
273
+
274
+ end
275
+
276
+ end
@@ -0,0 +1,162 @@
1
+ module Blufin
2
+
3
+ class SiteServices
4
+
5
+ API = 'api'
6
+ CRON = 'cron'
7
+ LIB = 'lib'
8
+ SDK = 'sdk'
9
+ SDK_CORE = 'sdk-core'
10
+ SDK_INTERNAL = 'sdk-internal'
11
+ SDK_OAUTH = 'sdk-oauth'
12
+ WORKER = 'worker'
13
+
14
+ PACKAGE_SYSTEM_ENUMS = 'org.blufin.base.enums'
15
+ PACKAGE_AUTO_GENERATED = 'system'
16
+
17
+ ANNOTATION_TEST_REQUIRED = '@TestRequired'
18
+ ANNOTATION_TEST_NOT_REQUIRED = '@TestNotRequired'
19
+ ANNOTATION_TEST_NOT_RELATED_TO_CLASS = '@TestNotRelatedToClass'
20
+
21
+ REGEX_SERVICES = "#{Blufin::SiteServices::API}|#{Blufin::SiteServices::CRON}|#{Blufin::SiteServices::WORKER}"
22
+ REGEX_SERVICES_CAPITALIZED = "#{Blufin::SiteServices::API.capitalize}|#{Blufin::SiteServices::CRON.capitalize}|#{Blufin::SiteServices::WORKER.capitalize}"
23
+ REGEX_JAVA = "#{REGEX_SERVICES}|#{Blufin::SiteServices::LIB}|#{Blufin::SiteServices::SDK}-core|#{Blufin::SiteServices::SDK}-internal|#{Blufin::SiteServices::SDK}-core"
24
+
25
+ @@services_core = nil
26
+
27
+ # Build blufin-core-lib.
28
+ # @return void
29
+ def self.build_core_service(service, skip_tests = false)
30
+ validate_core_service(service)
31
+ result = Blufin::Terminal.command("mvn clean install#{get_skip_tests_param(skip_tests)}", "#{Blufin::SiteResolver::path_to_blufin_java}/blufin-#{service}")
32
+ Blufin::Terminal::error("#{Blufin::Terminal::format_highlight("blufin-#{service}")} failed to compile.") unless result[0]
33
+ end
34
+
35
+ # Build a service.
36
+ # @return void
37
+ def self.build_site_service(site, service, skip_tests = false)
38
+ Blufin::SiteResolver::validate_site(site)
39
+ service = validate_site_service(site, service)
40
+ result = Blufin::Terminal.command("mvn clean package#{get_skip_tests_param(skip_tests)}", get_available_site_services(site)[service][0])
41
+ Blufin::Terminal::error("#{Blufin::Terminal::format_highlight("#{Blufin::SiteResolver::get_site_name(site)}-#{service}")} failed to compile.") unless result[0]
42
+ end
43
+
44
+ # Build a site lib.
45
+ # NOTE: Cannot use 'build_site_services' because the lib is not maven packaged.
46
+ # @return void
47
+ def self.build_site_lib(site, skip_tests = false)
48
+ Blufin::SiteResolver::validate_site(site)
49
+ result = Blufin::Terminal.command("mvn clean install#{get_skip_tests_param(skip_tests)}", "#{Blufin::SiteResolver::path_to_java_lib(site)}")
50
+ Blufin::Terminal::error("#{Blufin::Terminal::format_highlight("#{Blufin::SiteResolver::get_site_name(site)}-lib")} failed to compile.") unless result[0]
51
+ end
52
+
53
+ # Deploy a service.
54
+ # @return void
55
+ def self.deploy(site, service)
56
+
57
+ Blufin::SiteResolver::validate_site(site)
58
+ service = validate_site_service(site, service, true)
59
+
60
+ # TODO - Re-program this when we need it.
61
+ raise RuntimeError, 'Needs to be re-written to generate YML file from DB values.' if true
62
+
63
+ yml_file = nil
64
+
65
+ # If YML file not found, stop script.
66
+ Blufin::Terminal::error('File not found', yml_file, true) unless Blufin::Files::file_exists(yml_file)
67
+
68
+ # TODO - CURRENTLY LOOKS FOR TO 1.0.0-SNAPSHOT. THIS MUST BE DYNAMIC.
69
+ # TODO - CURRENTLY HAWAII TIMEZONE IS HARD-CODED. SHOULD DYNAMICALLY GRAB TIMEZONE FROM YML FILE.
70
+ Blufin::Terminal.command("java -Duser.timezone=\"US/Hawaii\" -Xms128M -Xmx256M -XX:+UseParallelGC -jar #{get_available_site_services(site)[service][0]}/target/#{Blufin::SiteResolver::get_site_name(site)}-#{service}-1.0.0-SNAPSHOT.jar server #{yml_file}", get_available_site_services(site)[service][0])
71
+
72
+ end
73
+
74
+ # Validate core service.
75
+ # @return String
76
+ def self.validate_core_service(service)
77
+ Blufin::Terminal::error("Non-existent service: #{Blufin::Terminal::format_invalid(service)} \xe2\x80\x94 available services are:", Blufin::SiteServices::get_available_services_output, true) unless get_available_core_services.include?(service)
78
+ service
79
+ end
80
+
81
+ # Validate site service.
82
+ # @return String
83
+ def self.validate_site_service(site, service, for_deploy = false)
84
+ Blufin::SiteResolver::validate_site(site)
85
+ @error_message = ['Valid services are:', nil]
86
+ get_available_site_services(site).keys.each do |service_inner|
87
+ next if for_deploy && service_inner == LIB
88
+ @error_message << " \x1B[38;5;154m#{service_inner}\x1B[0m"
89
+ end
90
+ if for_deploy == true && service == LIB
91
+ Blufin::Terminal::error("You cannot deploy: #{Blufin::Terminal::format_highlight('lib')}", @error_message, true)
92
+ elsif !get_available_site_services(site).keys.include?(service)
93
+ Blufin::Terminal::error("You must specify a valid #{Blufin::Terminal::format_highlight('service')}.", @error_message, true)
94
+ end
95
+ service
96
+ end
97
+
98
+ # Returns Array of services (without the "blufin-" prefix).
99
+ # @return Array
100
+ def self.get_available_core_services
101
+ if @@services_core.nil?
102
+ @@services_core = []
103
+ Blufin::Files::get_dirs_in_dir(Blufin::Config::get_path('Paths', 'BlufinJava')).each do |dir|
104
+ service = dir.split('/')
105
+ service = service[service.length - 1].gsub('blufin-', '')
106
+ @@services_core << service unless service.downcase == 'target'
107
+ end
108
+ end
109
+ @@services_core
110
+ end
111
+
112
+ # Creates clean terminal output of available services in 2 columns with colors.
113
+ # @return Array
114
+ def self.get_available_services_output(services = [], color_selected = false)
115
+ output = []
116
+ half_first = []
117
+ half_second = []
118
+ half = (get_available_core_services.length / 2).to_i
119
+ (0..half).each { |n| half_first << get_available_core_services[n] }
120
+ ((half + 1)..(get_available_core_services.length - 1)).each { |n| half_second << get_available_core_services[n] }
121
+ hfm = half_first.max_by(&:length).length + 4
122
+ hsm = half_second.max_by(&:length).length+4
123
+ (0..[half_first.length, half_second.length].max).each do |n|
124
+ if color_selected
125
+ left = half_first[n].nil? ? '' : half_first[n].ljust(hfm, ' ')
126
+ right = half_second[n].nil? ? '' : half_second[n].ljust(hsm, ' ')
127
+ left = services.include?(half_first[n]) ? "\x1B[38;5;154m#{left}\x1B[38;5;240m" : "\x1B[38;5;240m#{left}"
128
+ right = services.include?(half_second[n]) ? "\x1B[38;5;154m#{right}\x1B[38;5;240m" : "\x1B[38;5;240m#{right}"
129
+ else
130
+ left = half_first[n].nil? ? '' : "\x1B[38;5;154m#{half_first[n].ljust(hfm, ' ')}\x1B[0m"
131
+ right = half_second[n].nil? ? '' : "\x1B[38;5;154m#{ half_second[n].ljust(hsm, ' ')}\x1B[0m"
132
+ end
133
+ output << "#{left}#{right}"
134
+ end
135
+ output
136
+ end
137
+
138
+ # Returns service(s) hash for site.
139
+ # @return Hash
140
+ def self.get_available_site_services(site)
141
+ Blufin::SiteResolver::validate_site(site)
142
+ valid_sites = {
143
+ API => %W(#{Blufin::SiteResolver::path_to_java_api(site)} #{Blufin::SiteResolver::path_to_blufin_java}#{Blufin::Site::PATH_TO_BLUFIN_API}),
144
+ CRON => %W(#{Blufin::SiteResolver::path_to_java_cron(site)} #{Blufin::SiteResolver::path_to_blufin_java}#{Blufin::Site::PATH_TO_BLUFIN_CRON}),
145
+ LIB => %W(#{Blufin::SiteResolver::path_to_java_lib(site)} #{Blufin::SiteResolver::path_to_blufin_java}#{Blufin::Site::PATH_TO_BLUFIN_CORE_LIB}),
146
+ SDK => %W(#{Blufin::SiteResolver::path_to_java_sdk(site)} #{Blufin::SiteResolver::path_to_blufin_java}#{Blufin::Site::PATH_TO_BLUFIN_SDK}),
147
+ WORKER => %W(#{Blufin::SiteResolver::path_to_java_worker(site)} #{Blufin::SiteResolver::path_to_blufin_java}#{Blufin::Site::PATH_TO_BLUFIN_WORKER})
148
+ }
149
+ valid_sites
150
+ end
151
+
152
+ private
153
+
154
+ # Returns MVN skipTests string if input is TRUE, blank-string if FALSE.
155
+ # @return String
156
+ def self.get_skip_tests_param(skip_tests)
157
+ skip_tests ? ' -Dmaven.test.skip=true -Dfindbugs.skip=true' : ''
158
+ end
159
+
160
+ end
161
+
162
+ end