Module: RockautoApi::Endpoints::Account

Included in:
Client
Defined in:
lib/rockauto_api/endpoints/account.rb

Constant Summary collapse

LOGIN_URL =
"https://www.rockauto.com/catalog/catalogapi.php"
PROFILE_URL =
"/en/profile/"
ORDER_HISTORY_URL =
"/en/orderhistory/"

Instance Method Summary collapse

Instance Method Details

#add_external_order(email_or_phone, order_number) ⇒ Object



157
158
159
160
161
162
163
164
165
166
167
168
# File 'lib/rockauto_api/endpoints/account.rb', line 157

def add_external_order(email_or_phone, order_number)
  require_authentication!
  form_data = {
    "email" => email_or_phone.include?("@") ? email_or_phone : "",
    "phone" => email_or_phone.include?("@") ? "" : email_or_phone,
    "order_number" => order_number
  }
  post_with_csrf("/en/orderhistory/addorder/", form_data)
  true
rescue StandardError
  false
end

#authenticated?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/rockauto_api/endpoints/account.rb', line 53

def authenticated?
  @authenticated
end

#get_account_activityObject



115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/rockauto_api/endpoints/account.rb', line 115

def 
  addresses = get_saved_addresses
  vehicles = get_saved_vehicles

  Models::AccountActivityResult.new(
    saved_addresses: addresses,
    saved_vehicles: vehicles,
    order_history: nil,
    has_discount_codes: false,
    has_store_credit: false,
    has_alerts: false
  )
end

#get_order_history(filter_params = {}) ⇒ Object



129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/rockauto_api/endpoints/account.rb', line 129

def get_order_history(filter_params = {})
  require_authentication!
  html = get(ORDER_HISTORY_URL)
  doc = Nokogiri::HTML(html)

  orders = doc.css("table tr").map { |row|
    cells = row.css("td").map { |c| c.text.strip }
    next nil if cells.size < 3
    next nil if cells[0].match?(/\A\s*(?:Order|Date|Status)\s*\z/i)

    Models::OrderHistoryItem.new(
      order_number: cells[0] || "",
      date: cells[1],
      status: cells[2],
      total: cells[3],
      vehicle: cells[4],
      order_url: nil
    )
  }.compact

  Models::OrderHistoryResult.new(
    orders: orders,
    count: orders.size,
    filter_applied: filter_params.empty? ? nil : filter_params.to_s,
    search_time: Time.now.iso8601
  )
end

#get_saved_addressesObject



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/rockauto_api/endpoints/account.rb', line 57

def get_saved_addresses
  require_authentication!
  html = get(PROFILE_URL)
  doc = Nokogiri::HTML(html)

  addresses = doc.css("table tr").map { |row|
    cells = row.css("td").map { |c| c.text.strip }
    next nil if cells.size < 5

    Models::SavedAddress.new(
      name: cells[0],
      full_name: cells[1],
      address_line1: cells[2],
      city: cells[3],
      state: cells[4],
      postal_code: cells[5],
      country: cells[6] || "US",
      phone: cells[7]
    )
  }.compact

  Models::SavedAddressesResult.new(
    addresses: addresses,
    count: addresses.size,
    has_default: addresses.any? { |a| a.name&.downcase&.include?("default") }
  )
end

#get_saved_vehiclesObject



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/rockauto_api/endpoints/account.rb', line 85

def get_saved_vehicles
  require_authentication!
  html = get(PROFILE_URL)
  doc = Nokogiri::HTML(html)

  vehicles = doc.css("a[href*='carcode']").map { |a|
    href = a["href"]
    text = a.text.strip
    match = href&.match(/carcode=(\d+)/)

    parts = text.split(" ")
    year = parts[0].to_i

    Models::SavedVehicle.new(
      year: year,
      make: parts[1] || "",
      model: parts[2] || "",
      engine: parts[3..]&.join(" "),
      carcode: match&.captures&.first,
      display_name: text,
      catalog_url: Parsers::HtmlHelpers.make_absolute_url(href)
    )
  }.compact

  Models::SavedVehiclesResult.new(
    vehicles: vehicles,
    count: vehicles.size
  )
end

#login(email, password) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/rockauto_api/endpoints/account.rb', line 10

def (email, password)
  init_session!

  form_data = {
    "loginaction" => "login",
    "accountemail" => email,
    "captchacode" => "",
    "passworddecoy" => "",
    "password" => password,
    "passwordconfirmdecoy" => "",
    "passwordconfirm" => "",
    "keepsignin" => "false",
    "async" => "1",
    "accountlogin_php" => "1"
  }

  resp = (form_data)

  result = JSON.parse(resp.body)
  @authenticated = result["message"]&.include?("Successful") || false
  @authenticated
rescue StandardError
  @authenticated = false
end

#logoutObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/rockauto_api/endpoints/account.rb', line 35

def logout
  init_session!

  form_data = {
    "loginaction" => "logout",
    "async" => "1",
    "accountlogin_php" => "1"
  }

  (form_data)

  @authenticated = false
  true
rescue StandardError
  @authenticated = false
  true
end