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