Current section
Files
Jump to
Current section
Files
lib/helpers/helpers.ex
defmodule Pinterex.Helpers.Helpers do
@moduledoc """
Various helpers for creating the structs from the fetched data.
"""
alias Pinterex.Structs.{User, Board, Pin, Interest, PagedBoards, PagedPins, PagedUsers, PinCounts, BoardCounts, UserCounts}
def create_board(response) do
create_single_board(response["data"])
end
def create_single_board(board) do
Board.new(board)
|> add_board_field(:creator)
|> add_board_field(:counts)
end
def create_boards(response) do
boards =
response["data"]
|> Enum.map(fn board -> create_single_board(board) end)
page = response["page"]
%PagedBoards{cursor: page["cursor"], next: page["next"], boards: boards}
end
def create_pin(response) do
create_single_pin(response["data"])
end
def create_single_pin(pin) do
Pin.new(pin)
|> add_pin_field(:creator)
|> add_pin_field(:counts)
end
def create_pins(response) do
pins =
response["data"]
|> Enum.map(fn pin -> create_single_pin(pin) end)
page = response["page"]
%PagedPins{cursor: page["cursor"], next: page["next"], pins: pins}
end
def create_user(response) do
create_single_user(response["data"])
end
def create_single_user(user) do
User.new(user)
|> add_user_field(:counts)
end
def create_users(response) do
users =
response
|> Enum.map(fn user -> create_single_user(user) end)
page = response["page"]
%PagedUsers{cursor: page["cursor"], next: page["next"], users: users}
end
def create_interest(interest) do
Interest.new(interest)
end
def create_interests(interests) do
interests
|> Enum.map(fn interest -> create_interest(interest) end)
end
def add_pin_field(pin, :creator) do
if pin.creator do
%Pin{pin | creator: create_single_user(pin.creator)}
else
pin
end
end
def add_pin_field(pin, :counts) do
if pin.counts do
%Pin{pin | counts: create_pin_counts(pin.counts)}
else
pin
end
end
def add_board_field(board, :creator) do
if board.creator do
%Board{board | creator: create_single_user(board.creator)}
else
board
end
end
def add_board_field(board, :counts) do
if board.counts do
%Board{board | counts: create_board_counts(board.counts)}
else
board
end
end
def add_user_field(user, :counts) do
if user.counts do
%User{user | counts: create_user_counts(user.counts)}
else
user
end
end
defp create_pin_counts(counts), do: PinCounts.new(counts)
defp create_board_counts(counts), do: BoardCounts.new(counts)
defp create_user_counts(counts), do: UserCounts.new(counts)
end