hensei-api/app/services/processors/base_processor.rb
Justin Edmund 3cdd925162
Fix filters and add processors (#181)
* Update test csvs

* Fix count filters and refactor apply_filters

* Update party_querying_concern.rb

* +tests/-debug logs

* Make party association optional in Job

* Updates for weapon series

- Change to new series numbers
- Add static method for querying whether the weapon's element is changeable
- Add a new method to return a text slug for the weapon's series

* Add and update test data

- Updates canonical.rb for loading multiple types of data with multiple types of associations
- Adds test data for Guidebooks, Job Accessories, Job Skills, and Jobs
- Updates test data for Weapons and Summons

* Migrations

- Adds series of migrations for changing the weapon's series to the values used by Cygames
- Shuffled around some foreign keys

* Implement BaseProcessor

Processors are in charge of processing deck data straight from Granblue.

* Implement CharacterProcessor

Process character data from deck

* Implement WeaponProcessor

Process weapon data from deck

* Implement JobProcessor

Process job, job skill, and job accessory data from deck

* Implement SummonProcessor

Process summon data from deck

* Update SummonProcessor to work like the others

* ImportController should use processors

* Process element for changeable weapons
2025-02-17 23:51:50 -08:00

44 lines
1.1 KiB
Ruby

# frozen_string_literal: true
module Processors
##
# BaseProcessor provides shared functionality for processing transformed deck data
# into new party records. Subclasses must implement the +process+ method.
#
# @abstract
class BaseProcessor
##
# Initializes the processor.
#
# @param party [Party] the Party record to which the component will be added.
# @param data [Object] the transformed data for this component.
# @param options [Hash] optional additional options.
def initialize(party, data, options = {})
@party = party
@data = data
@options = options
end
##
# Process the given data and create associated records.
#
# @abstract Subclasses must implement this method.
# @return [void]
def process
raise NotImplementedError, "#{self.class} must implement the process method"
end
protected
attr_reader :party, :data, :options
##
# Logs a message to Rails.logger.
#
# @param message [String] the message to log.
# @return [void]
def log(message)
Rails.logger.info "[PROCESSOR][#{self.class.name}] #{message}"
end
end
end