blufin 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/bf +5 -0
- data/bin/blufin +5 -0
- data/lib/blufin.rb +245 -0
- data/lib/core/code_scanners/common/scanner_common.rb +83 -0
- data/lib/core/code_scanners/common/scanner_java.rb +106 -0
- data/lib/core/code_scanners/scanner_java_embedded_objects.rb +386 -0
- data/lib/core/code_scanners/scanner_java_enums.rb +125 -0
- data/lib/core/code_scanners/scanner_java_source.rb +29 -0
- data/lib/core/code_scanners/scanner_java_tests.rb +157 -0
- data/lib/core/error_handling/schema_error.rb +9 -0
- data/lib/core/error_handling/sql_error.rb +21 -0
- data/lib/core/error_handling/sql_error_handler.rb +149 -0
- data/lib/core/error_handling/yml_error.rb +21 -0
- data/lib/core/error_handling/yml_error_handler.rb +437 -0
- data/lib/core/mysql.rb +347 -0
- data/lib/core/opt.rb +21 -0
- data/lib/core/site/site.rb +26 -0
- data/lib/core/site/site_auth.rb +88 -0
- data/lib/core/site/site_embedded.rb +27 -0
- data/lib/core/site/site_ports.rb +9 -0
- data/lib/core/site/site_resolver.rb +276 -0
- data/lib/core/site/site_services.rb +162 -0
- data/lib/core/site/site_ui.rb +16 -0
- data/lib/core/yml/config/yml_config_validator.rb +219 -0
- data/lib/core/yml/maven/yml_maven_validator.rb +1132 -0
- data/lib/core/yml/resource/yml_resource_validator.rb +154 -0
- data/lib/core/yml/schema/yml_schema_flags.rb +9 -0
- data/lib/core/yml/schema/yml_schema_validator.rb +1850 -0
- data/lib/core/yml/yml_cache_handler.rb +115 -0
- data/lib/core/yml/yml_common.rb +487 -0
- data/lib/core/yml/yml_meta_writer_base.rb +300 -0
- data/lib/core/yml/yml_outputter.rb +307 -0
- data/lib/core/yml/yml_validator_base.rb +630 -0
- data/lib/core/yml_writers/yml_configuration_writer.rb +40 -0
- data/lib/core/yml_writers/yml_java_api_resource_writer.rb +348 -0
- data/lib/core/yml_writers/yml_java_cron_type_writer.rb +113 -0
- data/lib/core/yml_writers/yml_java_css_dependency_writer.rb +59 -0
- data/lib/core/yml_writers/yml_java_dao_writer.rb +364 -0
- data/lib/core/yml_writers/yml_java_dto_writer.rb +251 -0
- data/lib/core/yml_writers/yml_java_embedded_object_writer.rb +968 -0
- data/lib/core/yml_writers/yml_java_enum_writer.rb +161 -0
- data/lib/core/yml_writers/yml_java_js_dependency_writer.rb +59 -0
- data/lib/core/yml_writers/yml_java_message_type_writer.rb +106 -0
- data/lib/core/yml_writers/yml_java_meta_writer.rb +173 -0
- data/lib/core/yml_writers/yml_java_model_writer.rb +510 -0
- data/lib/core/yml_writers/yml_java_pom_writer.rb +1050 -0
- data/lib/core/yml_writers/yml_java_resource_data_writer.rb +251 -0
- data/lib/core/yml_writers/yml_java_sdk_writer.rb +732 -0
- data/lib/core/yml_writers/yml_java_validator_writer.rb +280 -0
- data/lib/core/yml_writers/yml_java_worker_writer.rb +81 -0
- data/lib/core/yml_writers/yml_sql_structure_writer.rb +307 -0
- data/lib/core/yml_writers/yml_sql_template_writer.rb +243 -0
- data/lib/core/yml_writers/yml_vue_service_writer.rb +170 -0
- data/lib/core/yml_writers/yml_writer_base.rb +114 -0
- data/lib/routes/api_list.rb +35 -0
- data/lib/routes/api_meta.rb +59 -0
- data/lib/routes/build.rb +46 -0
- data/lib/routes/create/create_api.rb +35 -0
- data/lib/routes/create/create_ui.rb +84 -0
- data/lib/routes/export.rb +56 -0
- data/lib/routes/generate/generate_api.rb +225 -0
- data/lib/routes/generate/generate_img_favicon.rb +56 -0
- data/lib/routes/generate/generate_img_landing.rb +94 -0
- data/lib/routes/generate/generate_lambda.rb +43 -0
- data/lib/routes/lint.rb +35 -0
- data/lib/routes/mysql_reset.rb +43 -0
- data/lib/routes/release_blufin.rb +351 -0
- data/lib/routes/run.rb +35 -0
- data/lib/version.rb +1 -0
- data/opt/README.MD +2 -0
- data/opt/config/schema.yml +73 -0
- data/opt/config/template.yml +25 -0
- data/opt/sql/data/config/data-client.sql +7 -0
- data/opt/sql/data/config/data-db-configuration-property.sql +47 -0
- data/opt/sql/data/config/data-db-configuration.sql +9 -0
- data/opt/sql/data/config/data-db.sql +175 -0
- data/opt/sql/data/config/data-profile-api.sql +47 -0
- data/opt/sql/data/config/data-profile-cron.sql +0 -0
- data/opt/sql/data/config/data-profile-worker.sql +0 -0
- data/opt/sql/data/config/data-profile.sql +87 -0
- data/opt/sql/data/config/data-project.sql +95 -0
- data/opt/sql/structure/blufin-master-structure-fks.sql +65 -0
- data/opt/sql/structure/blufin-master-structure.sql +97 -0
- data/opt/sql/structure/blufin-mock-structure-fks.sql +38 -0
- data/opt/sql/structure/blufin-mock-structure.sql +98 -0
- data/opt/sql/templates/config/template-client.sql +7 -0
- data/opt/sql/templates/config/template-db-configuration-property.sql +11 -0
- data/opt/sql/templates/config/template-db-configuration.sql +9 -0
- data/opt/sql/templates/config/template-db.sql +21 -0
- data/opt/sql/templates/config/template-profile-api.sql +11 -0
- data/opt/sql/templates/config/template-profile-cron.sql +7 -0
- data/opt/sql/templates/config/template-profile-worker.sql +7 -0
- data/opt/sql/templates/config/template-profile.sql +21 -0
- data/opt/sql/templates/config/template-project.sql +23 -0
- data/opt/yml/api/schema/config/client.yml +14 -0
- data/opt/yml/api/schema/config/db.yml +45 -0
- data/opt/yml/api/schema/config/db_configuration.yml +22 -0
- data/opt/yml/api/schema/config/db_configuration_property.yml +22 -0
- data/opt/yml/api/schema/config/profile.yml +53 -0
- data/opt/yml/api/schema/config/profile_api.yml +22 -0
- data/opt/yml/api/schema/config/profile_cron.yml +14 -0
- data/opt/yml/api/schema/config/profile_worker.yml +14 -0
- data/opt/yml/api/schema/config/project.yml +48 -0
- data/opt/yml/api/schema/mock/mock.yml +99 -0
- data/opt/yml/api/schema/mock/mock_nested_if_enum.yml +16 -0
- data/opt/yml/api/schema/mock/mock_nested_if_enum_system.yml +16 -0
- data/opt/yml/api/schema/mock/mock_nested_linked.yml +43 -0
- data/opt/yml/api/schema/mock/mock_nested_multiple.yml +61 -0
- data/opt/yml/api/schema/mock/mock_nested_single.yml +67 -0
- data/opt/yml/api/schema/mock/mock_nested_single_super_deep.yml +32 -0
- data/opt/yml/api/schema/mock/mock_nested_single_super_super_deep.yml +17 -0
- 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,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
|