class NeopetsPagesController < ApplicationController include ActionView::Helpers::TextHelper before_filter :authenticate_user!, :build_neopets_page rescue_from ClosetPage::ParseError, with: :on_parse_error def create if @page_params && @page_params[:source] @neopets_page.index = @page_params[:index] @neopets_page.list_id = @page_params[:list_id] @neopets_page.source = @page_params[:source] messages = [t('neopets_pages.create.success', index: @neopets_page.index)] saved_counts = @neopets_page.save_hangers! any_created = saved_counts[:created] > 0 any_updated = saved_counts[:updated] > 0 if any_created && any_updated created_msg = t('neopets_pages.create.created_and_updated_hangers.created_msg', count: saved_counts[:created]) updated_msg = t('neopets_pages.create.created_and_updated_hangers.updated_msg', count: saved_counts[:updated]) messages << t('neopets_pages.create.created_and_updated_hangers.text', created_msg: created_msg, updated_msg: updated_msg) elsif any_created messages << t('neopets_pages.create.created_hangers', count: saved_counts[:created]) elsif any_updated messages << t('neopets_pages.create.updated_hangers', count: saved_counts[:updated]) elsif @neopets_page.hangers.size > 1 # saw items, but at same quantities messages << t('neopets_pages.create.no_changes') else # no items recognized messages << t('neopets_pages.create.no_data') end unless @neopets_page.unknown_item_names.empty? messages << t('neopets_pages.create.unknown_items', item_names: @neopets_page.unknown_item_names.to_sentence, count: @neopets_page.unknown_item_names.size) end if @neopets_page.last? messages << t('neopets_pages.create.done', name: @neopets_page.name) destination = user_closet_hangers_path(current_user) else messages << t('neopets_pages.create.next_page', next_index: (@neopets_page.index + 1)) destination = {action: :new, index: @neopets_page.index + 1, list_id: @neopets_page.list_id} end flash[:success] = messages.join(' ') redirect_to destination else redirect_to action: :new end end def new @neopets_page.index ||= 1 end protected TYPES = { 'closet' => ClosetPage, 'sdb' => SafetyDepositPage } def build_neopets_page type_class = TYPES[params[:type]] @neopets_page = type_class.new(current_user) @neopets_page.index = params[:index] @neopets_page.list_id = params[:list_id] @page_params = params[type_class.model_name.singular] end def on_parse_error(e) Rails.logger.info "Neopets page parse error: #{e.message}" flash[:alert] = t('neopets_pages.create.parse_error') render action: :new end end