- Add page_size helper method to read from X-Per-Page header - Set min (1) and max (100) bounds for page sizes - Update all paginated endpoints to use dynamic page size - Maintain backward compatibility with default sizes
101 lines
3.4 KiB
Ruby
101 lines
3.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Granblue
|
|
module Parsers
|
|
class WeaponSkillParser
|
|
OPTIMUS_AURAS = %w[
|
|
Fire Hellfire Inferno
|
|
Water Tsunami Hoarfrost
|
|
Wind Whirlwind Ventosus
|
|
Earth Mountain Terra
|
|
Light THunder Zion
|
|
Dark Hatred Oblivion
|
|
].freeze
|
|
|
|
OMEGA_AURAS = %w[
|
|
Ironflame Oceansoul Stormwyrm Lifetree Knightcode Mistfall
|
|
]
|
|
|
|
UNBOOSTABLE_AURAS = %w[
|
|
Scarlet Cobalt Jade Amber Golden Graphite
|
|
].freeze
|
|
|
|
# These skills are boostable by aura
|
|
BOOSTABLE_SKILLS = %w[
|
|
Abandon Aegis Apotheosis Auspice Betrayal Bladeshield Bloodshed
|
|
Celere Clarity Deathstrike Demolishment Devastation Dual-Edge
|
|
Encouragement Enmity Essence Fandango Garrison Glory Grace
|
|
Haunt Healing Heed Heroism Impalement Insignia Majesty Might
|
|
Mystery Precocity Primacy Progression Resolve Restraint Sapience
|
|
Sentence Spearhead Stamina Stratagem Sweep Tempering Trituration
|
|
Trium Truce Tyranny Verity Verve
|
|
].freeze
|
|
|
|
# These skills have flat values and are not boostable by aura
|
|
UNBOOSTABLE_SKILLS = %w[
|
|
Arts Ascendancy "Beast Essence" Blessing Blow "Chain Force"
|
|
Charge Convergence Craft Enforcement Excelsior Exertion Fortified
|
|
Fortitude Frailty "Grand Epic" Initiation Marvel "Omega Exalto"
|
|
"Optimus Exalto" Pact Persistence "Preemptive Barrier"
|
|
"Preemptive Blade" "Preemptive Wall" Quenching Quintessence
|
|
Resonator "Sephira Maxi" "Sephira Soul" "Sephira Tek" Sovereign
|
|
Spectacle Strike "Striking Art" Supremacy Surge Swashbuckler
|
|
"True Supremacy" Valuables Vitality Vivification Voltage
|
|
Wrath "Zenith Art" "Zenith Strike"
|
|
]
|
|
|
|
# These skills can be boostable or unboostable depending on the source
|
|
DEPENDENT_SKILLS = %w[
|
|
Crux
|
|
].freeze
|
|
|
|
def self.parse(skill_name)
|
|
return { aura: nil, skill_type: nil, skill_name: skill_name } if skill_name.blank?
|
|
|
|
# Handle standard format: "Aura's Skill [I-IV]"
|
|
if match = skill_name.match(/^(.*?)'s\s+(.+?)(?:\s+(I{1,3}V?|IV))?$/)
|
|
aura = match[1]
|
|
skill = match[2]
|
|
numeral = match[3]
|
|
|
|
skill_with_numeral = numeral ? "#{skill} #{numeral}" : skill
|
|
|
|
# Check if aura and skill are in known lists
|
|
if KNOWN_AURAS.include?(aura) && KNOWN_SKILLS.include?(skill)
|
|
return { aura: aura, skill_type: skill, skill_name: skill_name }
|
|
end
|
|
|
|
return { aura: nil, skill_type: 'Special', skill_name: skill_name }
|
|
|
|
end
|
|
|
|
# Handle two-word format without possessive: "Aura Skill"
|
|
if skill_name.split.size == 2
|
|
parts = skill_name.split
|
|
aura = parts[0]
|
|
skill = parts[1]
|
|
|
|
# Check if aura and skill are in known lists
|
|
if KNOWN_AURAS.include?(aura) && KNOWN_SKILLS.include?(skill)
|
|
return { aura: aura, skill_type: skill, skill_name: skill_name }
|
|
end
|
|
|
|
return { aura: nil, skill_type: 'Special', skill_name: skill_name }
|
|
|
|
end
|
|
|
|
# Fallback for special cases
|
|
{ aura: nil, skill_type: 'Special', skill_name: skill_name }
|
|
end
|
|
|
|
# Method to extend dictionaries
|
|
def self.add_aura(aura)
|
|
KNOWN_AURAS << aura unless KNOWN_AURAS.include?(aura)
|
|
end
|
|
|
|
def self.add_skill(skill)
|
|
KNOWN_SKILLS << skill unless KNOWN_SKILLS.include?(skill)
|
|
end
|
|
end
|
|
end
|
|
end
|