class RubyBranch::API::Resources::Link
Constants
- LINK_LENGTH_LIMIT
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
check_for_link_length_limit(link)
click to toggle source
# File lib/ruby_branch/api/resources/link.rb, line 90 def check_for_link_length_limit(link) raise Errors::LinkLengthExceedError if link.size > LINK_LENGTH_LIMIT 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