Class: Generator::DataKiosk

Inherits:
Object
  • Object
show all
Includes:
FileWriter, SchemaGenerator, SchemaHelpers
Defined in:
lib/generator/data_kiosk.rb

Overview

Generates Ruby type classes for Data Kiosk GraphQL schemas

Constant Summary

Constants included from Formatter

Formatter::MAX_LINE_LENGTH

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from SchemaGenerator

#generate_main_file!, included, #needs_money?, #sorted_properties

Methods included from SchemaHelpers

#api_name_for_type_resolver, #attribute_name_for, #format_property_comment, #generate_rbs!, #generic_placeholder?, #needs_money?, #nested_type_files, #ruby_type_for, #type_resolver

Methods included from Formatter

#convert_doc_links_to_full_url, #convert_html_links_to_yard, #format_method_definition, #split_long_comment_line

Methods included from FileWriter

#format_files, #write_file

Constructor Details

#initialize(file_path) ⇒ DataKiosk

Returns a new instance of DataKiosk.



39
40
41
42
# File 'lib/generator/data_kiosk.rb', line 39

def initialize(file_path)
  @file_path = file_path
  @graphql_schema = parse_graphql_schema(File.read(file_path))
end

Instance Attribute Details

#file_pathObject (readonly)

Returns the value of attribute file_path.



25
26
27
# File 'lib/generator/data_kiosk.rb', line 25

def file_path
  @file_path
end

#graphql_schemaObject (readonly)

Returns the value of attribute graphql_schema.



25
26
27
# File 'lib/generator/data_kiosk.rb', line 25

def graphql_schema
  @graphql_schema
end

Class Method Details

.schema_filesObject

Override to filter .graphql files



33
34
35
36
# File 'lib/generator/data_kiosk.rb', line 33

def schema_files
  pattern = File.join(Config::BASE_PATH, "selling-partner-api-models/schemas/data-kiosk/*.graphql")
  Dir.glob(pattern)
end

.schema_typeObject



28
29
30
# File 'lib/generator/data_kiosk.rb', line 28

def schema_type
  "data_kiosk"
end

Instance Method Details

#class_nameObject



79
80
81
# File 'lib/generator/data_kiosk.rb', line 79

def class_name
  schema_name.underscore.camelize
end

#generateObject



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/generator/data_kiosk.rb', line 44

def generate
  written_files = []
  all_types = []

  # Generate nested types first
  nested_results = generate_nested_types!
  written_files.concat(nested_results[:files])
  all_types.concat(nested_results[:types])

  # Generate main module file
  written_files << generate_main_file!

  # Generate JSON introspection schema (don't format JSON files)
  generate_introspection_schema!

  # Reload and generate RBS
  IntrospectionLoader.reload
  written_files << generate_rbs!(all_types)

  # Format all files
  format_files(written_files)

  Generator.logger.info("Generated data_kiosk #{schema_name.underscore}")
end

#schema_nameObject Also known as: data_kiosk_name

Extract schema name from filename "analytics_salesAndTraffic_2024_04_24.graphql" => "SalesAndTraffic20240424"



71
72
73
74
75
76
77
# File 'lib/generator/data_kiosk.rb', line 71

def schema_name
  base_name = File.basename(file_path, ".graphql")
  # Remove "analytics_" prefix
  name = base_name.sub(/^analytics_/, "")
  # Convert to PascalCase
  name.split("_").map { |part| part.split(/(?=[A-Z])/).map(&:capitalize).join }.join
end