add promotions parsing to weapon and summon parsers

This commit is contained in:
Justin Edmund 2025-12-02 05:51:42 -08:00
parent 7aa0521ca4
commit c1a5d62a12
3 changed files with 49 additions and 0 deletions

View file

@ -216,6 +216,8 @@ module Granblue
kamigame: hash['link_kamigame'] kamigame: hash['link_kamigame']
} }
info[:promotions] = promotions_from_obtain(hash['obtain'])
{ {
info: info.compact info: info.compact
# skills: skills.compact # skills: skills.compact
@ -232,6 +234,8 @@ module Granblue
@summon.gamewith = hash[:links][:gamewith] if hash[:links].key?(:gamewith) @summon.gamewith = hash[:links][:gamewith] if hash[:links].key?(:gamewith)
@summon.kamigame = hash[:links][:kamigame] if hash[:links].key?(:kamigame) @summon.kamigame = hash[:links][:kamigame] if hash[:links].key?(:kamigame)
@summon.promotions = hash[:promotions] if hash[:promotions].present?
if @summon.save if @summon.save
ap "#{@summon.granblue_id}: Successfully saved info for #{@summon.wiki_en}" if @debug ap "#{@summon.granblue_id}: Successfully saved info for #{@summon.wiki_en}" if @debug
puts puts
@ -246,6 +250,17 @@ module Granblue
string ? GranblueWiki.rarities[string.upcase] : nil string ? GranblueWiki.rarities[string.upcase] : nil
end end
# Converts wiki obtain field to promotions array
# @param obtain [String] Comma-separated obtain values like "premium,gala,flash"
# @return [Array<Integer>] Array of promotion IDs
def promotions_from_obtain(obtain)
return [] if obtain.blank?
obtain.downcase.split(',').map(&:strip).filter_map do |value|
Granblue::Parsers::Wiki.promotions[value]
end.uniq.sort
end
# Parses a date string into a Date object # Parses a date string into a Date object
def parse_date(date_str) def parse_date(date_str)
Date.parse(date_str) unless date_str.blank? Date.parse(date_str) unless date_str.blank?

View file

@ -222,6 +222,8 @@ module Granblue
kamigame: hash['link_kamigame'] kamigame: hash['link_kamigame']
} }
info[:promotions] = promotions_from_obtain(hash['obtain'])
skills[:charge_attack] = { skills[:charge_attack] = {
name: { en: hash['ougi_name'], ja: hash['jpougi_name'] }, name: { en: hash['ougi_name'], ja: hash['jpougi_name'] },
description: { description: {
@ -267,6 +269,8 @@ module Granblue
@weapon.gamewith = hash[:links][:gamewith] if hash[:links].key?(:gamewith) @weapon.gamewith = hash[:links][:gamewith] if hash[:links].key?(:gamewith)
@weapon.kamigame = hash[:links][:kamigame] if hash[:links].key?(:kamigame) @weapon.kamigame = hash[:links][:kamigame] if hash[:links].key?(:kamigame)
@weapon.promotions = hash[:promotions] if hash[:promotions].present?
if @weapon.save if @weapon.save
ap "#{@weapon.granblue_id}: Successfully saved info for #{@weapon.wiki_en}" if @debug ap "#{@weapon.granblue_id}: Successfully saved info for #{@weapon.wiki_en}" if @debug
puts puts
@ -291,6 +295,17 @@ module Granblue
string ? Granblue::Parsers::Wiki.bullets[string] : nil string ? Granblue::Parsers::Wiki.bullets[string] : nil
end end
# Converts wiki obtain field to promotions array
# @param obtain [String] Comma-separated obtain values like "premium,gala,flash"
# @return [Array<Integer>] Array of promotion IDs
def promotions_from_obtain(obtain)
return [] if obtain.blank?
obtain.downcase.split(',').map(&:strip).filter_map do |value|
Granblue::Parsers::Wiki.promotions[value]
end.uniq.sort
end
# Parses a date string into a Date object # Parses a date string into a Date object
def parse_date(date_str) def parse_date(date_str)
Date.parse(date_str) unless date_str.blank? Date.parse(date_str) unless date_str.blank?

View file

@ -107,6 +107,25 @@ module Granblue
'holiday' => 6 # Holiday 'holiday' => 6 # Holiday
}.freeze }.freeze
# Maps wiki |obtain= values to PROMOTIONS enum values for weapons/summons
# Wiki uses comma-separated values like "premium,gala,flash"
def self.promotions
{
'premium' => 1, # Premium
'classic' => 2, # Classic
'classic2' => 3, # Classic II
'gala' => 4, # Flash (wiki uses "gala" for Flash Gala)
'flash' => 4, # Flash (alternate)
'legend' => 5, # Legend
'valentine' => 6, # Valentine
'summer' => 7, # Summer
'halloween' => 8, # Halloween
'holiday' => 9, # Holiday
'collab' => 10, # Collab
'formal' => 11 # Formal
}.freeze
end
def initialize(props: ['wikitext'], debug: false) def initialize(props: ['wikitext'], debug: false)
@debug = debug @debug = debug
@props = props.join('|') @props = props.join('|')