class RubyBranch::API::Resources::Link

Constants

Public Instance Methods

build(analytics: {}, data: {}, settings: {}) click to toggle source
# File lib/ruby_branch/api/resources/link.rb, line 41
def build(analytics: {}, data: {}, settings: {})
  params = {}
  params.merge!(prepare_analytics(analytics))
  params.merge!(prepare_settings(settings))
  params.merge!(data)

  link = Addressable::URI.new(
    scheme: 'https',
    host: RubyBranch.config.branch_domain,
    path: "/a/#{RubyBranch.config.api_key}",
    query: ToQuery.call(params)
  ).to_s
  check_for_link_length_limit(link)
  link
end
create(analytics: {}, data: {}, settings: {}) click to toggle source
# File lib/ruby_branch/api/resources/link.rb, line 20
def create(analytics: {}, data: {}, settings: {})
  request_body = build_request_body(analytics, settings, data)
  response = do_create_request(request_body)

  return response.json[:url] if response.success?

  process_error(response)

  RubyBranch.config.link_to_homepage if RubyBranch.config.link_to_homepage
end
create_safely(analytics: {}, data: {}, settings: {}) click to toggle source
# File lib/ruby_branch/api/resources/link.rb, line 8
def create_safely(analytics: {}, data: {}, settings: {})
  build(analytics: analytics, data: data, settings: settings)
rescue Errors::LinkLengthExceedError
  create(analytics: analytics, data: data, settings: settings)
end
update(url:, analytics: {}, data: {}, settings: {}) click to toggle source
# File lib/ruby_branch/api/resources/link.rb, line 31
def update(url:, analytics: {}, data: {}, settings: {})
  request_body = build_request_body(analytics, settings, data)
  response = do_update_request(url, request_body)

  return true if response.success?

  process_error(response)
  false
end
update_safely(url:, analytics: {}, data: {}, settings: {}) click to toggle source
# File lib/ruby_branch/api/resources/link.rb, line 14
def update_safely(url:, analytics: {}, data: {}, settings: {})
  build(analytics: analytics, data: data, settings: settings)
rescue Errors::LinkLengthExceedError
  update(url: url, analytics: analytics, data: data, settings: settings)
end

Private Instance Methods

build_request_body(analytics, settings, data) click to toggle source
# File lib/ruby_branch/api/resources/link.rb, line 69
def build_request_body(analytics, settings, data)
  body = { branch_key: RubyBranch.config.api_key, branch_secret: RubyBranch.config.secret_key }
  body.merge! prepare_analytics(analytics)
  body.merge! prepare_settings(settings)
  body.merge! prepare_data(data)
end
do_create_request(request_body) click to toggle source
# File lib/ruby_branch/api/resources/link.rb, line 59
def do_create_request(request_body)
  request = Request.new
  request.post('v1/url', request_body.to_json)
end
do_update_request(url, request_body) click to toggle source
# File lib/ruby_branch/api/resources/link.rb, line 64
def do_update_request(url, request_body)
  request = Request.new
  request.put("v1/url?url=#{url}", request_body.to_json)
end
prepare_analytics(analytics) click to toggle source
# File lib/ruby_branch/api/resources/link.rb, line 80
def prepare_analytics(analytics)
  allowed_params = %i[channel feature campaign stage tags]
  analytics.reject { |k, v| !allowed_params.include?(k) || v.nil? }
end
prepare_data(data) click to toggle source
# File lib/ruby_branch/api/resources/link.rb, line 76
def prepare_data(data)
  { data: data }
end
prepare_settings(settings) click to toggle source
# File lib/ruby_branch/api/resources/link.rb, line 85
def prepare_settings(settings)
  allowed_params = %i[alias type duration identity]
  settings.reject { |k, v| !allowed_params.include?(k) || v.nil? }
end
process_error(response) click to toggle source
# File lib/ruby_branch/api/resources/link.rb, line 94
def process_error(response)
  error_attrs = { status: response.status, body: response.body }
  if defined?(Bugsnag) && defined?(Rails) && Rails.env.production?
    Bugsnag.notify(Errors::ApiResponseError.new, error_attrs)
  end
end