class Blufin::YmlJavaEnumWriter
Constants
- PACKAGE_AUTO
- PACKAGE_CUSTOM
- SERVICE
Public Class Methods
new(site, schema_data)
click to toggle source
@return void
# File lib/core/yml_writers/yml_java_enum_writer.rb, line 10 def initialize(site, schema_data) @schema_data = schema_data raise RuntimeError, 'Could not find valid @schema_data.' if @schema_data.nil? || !@schema_data.is_a?(Hash) @site = Blufin::SiteResolver::validate_site(site) @site_name = Blufin::SiteResolver::get_site_name(@site) @site_domain = Blufin::SiteResolver::get_site_domain(@site) @site_location = "#{Blufin::SiteResolver::get_site_location(@site)}/" # Wipe out all previous files. Blufin::YmlSchemaValidator::VALID_SCHEMAS_GENERATE.each do |schema| paths_to_wipe_out = %W(#{get_java_path(@site, schema, SERVICE, PACKAGE_AUTO)}) paths_to_wipe_out.each do |path_to_wipe_out| if Blufin::Files::path_exists(path_to_wipe_out) if Blufin::Files::get_files_in_dir(path_to_wipe_out).any? Blufin::Terminal::command('rm *', path_to_wipe_out, false, false) end end end end end
Public Instance Methods
write()
click to toggle source
@return void
# File lib/core/yml_writers/yml_java_enum_writer.rb, line 37 def write @schema_data.each do |schema, schema_data| schema_data.each_with_index do |(table, table_data), idx| if table_data.length > 0 table_data.each do |column_name, column_data| # Skip Placeholders next if column_name =~ /\A(#{Blufin::YmlSchemaValidator::VALID_SCHEMAS_REGEX})\.[a-z_]+\[\]\z/ || column_name =~ /\A(#{Blufin::YmlSchemaValidator::VALID_SCHEMAS_REGEX})\.[a-z_]+\z/ || column_name =~ /\A[a-z_.]+\[#{Blufin::YmlSchemaValidator::LINK}\]/ field_camel_case = Blufin::Strings.snake_case_to_camel_case(column_name.dup) @type = column_data[Blufin::YmlSchemaValidator::TYPE] if @type =~ Blufin::YmlSchemaValidator::REGEX_ENUM enum_class_name = "#{Blufin::Strings::snake_case_to_camel_case(table)}#{field_camel_case}" write_enum_class(enum_class_name, @type, schema) elsif @type =~ Blufin::YmlSchemaValidator::REGEX_ENUM_CUSTOM enum_value = Blufin::YmlCommon::enum_name_extractor(@type) enum_file = "#{get_java_path(@site, schema, Blufin::SiteServices::SDK_CORE, PACKAGE_CUSTOM)}/#{enum_value}.java" write_enum_custom_class(enum_value, schema) unless Blufin::Files::file_exists(enum_file) end end end end end end
Private Instance Methods
write_enum_class(enum_class_name, type, schema)
click to toggle source
# File lib/core/yml_writers/yml_java_enum_writer.rb, line 75 def write_enum_class(enum_class_name, type, schema) enum_values = Blufin::YmlCommon::enum_value_extractor(type, @site) enum_class_name_lower = "#{enum_class_name[0, 1].downcase}#{enum_class_name[1..-1]}" enum_lines = [] enum_lines << "package #{get_package(@site, schema, PACKAGE_AUTO, SERVICE)};" enum_lines << '' enum_lines << 'import lombok.Getter;' enum_lines << '' enum_lines << 'import java.util.HashMap;' enum_lines << 'import java.util.Map;' enum_lines << '' enum_lines << "public enum #{enum_class_name} {" enum_lines << '' enum_values.each_with_index do |enum_value, idx| if idx == (enum_values.length - 1) enum_lines << " #{write_enum_name(enum_value)}(\"#{enum_value}\");" else enum_lines << " #{write_enum_name(enum_value)}(\"#{enum_value}\")," end end enum_lines << '' enum_lines << " private static final Map<String, #{enum_class_name}> #{enum_class_name_lower}Map = new HashMap<>();" enum_lines << '' enum_lines << ' @Getter' enum_lines << ' private final String name;' enum_lines << '' enum_lines << ' static {' enum_lines << '' enum_lines << " for (#{enum_class_name} #{enum_class_name_lower} : #{enum_class_name}.values()) {" enum_lines << '' enum_lines << " #{enum_class_name_lower}Map.put(#{enum_class_name_lower}.toString(), #{enum_class_name_lower});" enum_lines << ' }' enum_lines << ' }' enum_lines << '' enum_lines << " #{enum_class_name}(String name) {" enum_lines << '' enum_lines << ' this.name = name;' enum_lines << ' }' enum_lines << '' enum_lines << " public static final #{enum_class_name} get(String name) {" enum_lines << '' enum_lines << " return #{enum_class_name_lower}Map.get(name);" enum_lines << ' }' enum_lines << '' enum_lines << ' @Override' enum_lines << ' public final String toString() {' enum_lines << '' enum_lines << ' return name;' enum_lines << ' }' enum_lines << '}' full_file_path = "#{get_java_path(@site, schema, SERVICE, PACKAGE_AUTO)}/#{enum_class_name}.java" write_file_java(full_file_path, enum_lines, schema == Blufin::YmlSchemaValidator::MOCK).gsub(@site_location, '') end
write_enum_custom_class(enum_class_name, schema)
click to toggle source
Writes a blank CUSTOM_ENUM file in the sdk-core (if it's defined in the schema but the actual file doesn't exist). @return void
# File lib/core/yml_writers/yml_java_enum_writer.rb, line 137 def write_enum_custom_class(enum_class_name, schema) enum_lines = [] enum_lines << "package #{get_package(@site, schema, PACKAGE_CUSTOM, Blufin::SiteServices::SDK_CORE)};" enum_lines << '' enum_lines << "public enum #{enum_class_name} {" enum_lines << '' enum_lines << '}' full_file_path = "#{get_java_path(@site, schema, Blufin::SiteServices::SDK_CORE, PACKAGE_CUSTOM)}/#{enum_class_name}.java" write_file_java(full_file_path, enum_lines, schema == Blufin::YmlSchemaValidator::MOCK).gsub(@site_location, '') Blufin::Terminal::command("git add #{full_file_path}", get_base_path(@site), false, false) end
write_enum_name(enum_value)
click to toggle source
ENUM -> ENUM EnumValue -> ENUM_VALUE
# File lib/core/yml_writers/yml_java_enum_writer.rb, line 155 def write_enum_name(enum_value) enum_value.upcase == enum_value ? enum_value : Blufin::Strings::camel_case_to_snake_case(enum_value).upcase end