class PizzaSelector

Public Class Methods

add_pizza(pizza) click to toggle source
# File lib/pizza_selector.rb, line 49
def self.add_pizza(pizza)
  params = pizza.params.merge(
    "pageId" => "PIZZA_DETAIL",
    # TODO: Allow cut type, number of slices and quantity selection
    "cutTypeC" => 1, # Type of cut: 1=Round Cut
    "cutSu" => 8, # Number of slices
    "figure" => 1 # Quantity
  )

  response = Request.post(
    "https://order.dominos.jp/eng/cart/add/pizza/", params,
    expect: :redirect, to: %r{\Ahttps?://order\.dominos\.jp/eng/cart/added/\z},
    failure: "Couldn't add the pizza you selected"
  )

  # For some reason we need to GET this URL otherwise it doesn't count as added <_<
  Request.get(response["Location"],
              expect: :redirect, to: "https://order.dominos.jp/eng/cart/",
              failure: "Couldn't add the pizza you selected")
end
customize_pizza(pizza) click to toggle source
# File lib/pizza_selector.rb, line 33
def self.customize_pizza(pizza)
  puts "#{"→".colorize(:green)} #{pizza.name.colorize(:blue)}"

  # TODO: Allow toppings selection

  # Choosing the size
  selected_size_index = Ask.list "Choose the size", pizza.available_sizes.map(&:list_item)
  pizza.size = pizza.available_sizes[selected_size_index]

  # Choosing the crust
  selected_crust_index = Ask.list "Choose the crust", pizza.available_crusts.map(&:list_item)
  pizza.crust = pizza.available_crusts[selected_crust_index]

  pizza
end
select_pizzas() click to toggle source
# File lib/pizza_selector.rb, line 3
def self.select_pizzas
  return unless Ask.confirm "Add a pizza?"

  response = Request.get("https://order.dominos.jp/eng/pizza/search/",
                         expect: :ok, failure: "Couldn't get pizza list page")

  pizzas = Pizzas.from(response.body)

  cli = HighLine.new
  choices = pizzas.selection_list

  loop do
    puts "-" * 42
    cli.choose do |menu|
      menu.prompt = "Add a pizza via number:"
      menu.choices(*(choices + ["Cancel"])) do |choice|
        index = choices.index(choice)

        if index && index < choices.count
          selected_pizza = pizzas[index]
          add_pizza(customize_pizza(selected_pizza))
        end
      end
      menu.default = "Cancel"
    end

    break unless Ask.confirm "Add another pizza?"
  end
end