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.
- 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
|