Class: Stactics::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/stactics/client.rb

Instance Method Summary collapse

Constructor Details

#initialize(api_key:, host: DEFAULT_HOST, timeout: 5, transport: nil) ⇒ Client

Returns a new instance of Client.

Raises:

  • (ArgumentError)


20
21
22
23
24
25
26
27
# File 'lib/stactics/client.rb', line 20

def initialize(api_key:, host: DEFAULT_HOST, timeout: 5, transport: nil)
  raise ArgumentError, "api_key is required" if api_key.to_s.strip.empty?

  @api_key = api_key
  @host = host.to_s.delete_suffix("/")
  @timeout = timeout
  @transport = transport || method(:perform_request)
end

Instance Method Details

#batch(events) ⇒ Object



34
35
36
37
# File 'lib/stactics/client.rb', line 34

def batch(events)
  payload = { "events" => events.map { |event| stringify_keys(event) } }
  request("/v1/events/batch", payload)
end

#submit_form(form_key, field_data, source: nil, external_user_id: nil) ⇒ Object

Raises:

  • (ArgumentError)


39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/stactics/client.rb', line 39

def submit_form(form_key, field_data, source: nil, external_user_id: nil)
  raise ArgumentError, "form_key is required" if form_key.to_s.strip.empty?
  raise ArgumentError, "field_data must be a hash" unless field_data.is_a?(Hash)

  payload = { "fieldData" => stringify_form_values(field_data) }
  payload["source"] = source unless source.nil?
  payload["external_user_id"] = external_user_id unless external_user_id.nil?
  result = request("/v1/forms/#{URI.encode_www_form_component(form_key.to_s)}/submissions", payload)

  FormSubmissionResult.new(
    accepted?: result.accepted?,
    submission_id: result.body["submission_id"],
    submitted_at: result.body["submitted_at"],
    message: result.body["message"],
    body: result.body
  )
end

#track(event_type, attributes = {}) ⇒ Object



29
30
31
32
# File 'lib/stactics/client.rb', line 29

def track(event_type, attributes = {})
  payload = stringify_keys(attributes).merge("event_type" => event_type.to_s)
  request("/v1/events", payload)
end