Class: Katalyst::GoogleApis::Recaptcha::AssessmentService

Inherits:
Object
  • Object
show all
Defined in:
app/services/katalyst/google_apis/recaptcha/assessment_service.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(credentials:, parent:) ⇒ AssessmentService

Returns a new instance of AssessmentService.



15
16
17
18
# File 'app/services/katalyst/google_apis/recaptcha/assessment_service.rb', line 15

def initialize(credentials:, parent:)
  @credentials = credentials
  @parent      = parent
end

Instance Attribute Details

#errorObject

Returns the value of attribute error.



9
10
11
# File 'app/services/katalyst/google_apis/recaptcha/assessment_service.rb', line 9

def error
  @error
end

#responseObject

Returns the value of attribute response.



9
10
11
# File 'app/services/katalyst/google_apis/recaptcha/assessment_service.rb', line 9

def response
  @response
end

#resultObject

Returns the value of attribute result.



9
10
11
# File 'app/services/katalyst/google_apis/recaptcha/assessment_service.rb', line 9

def result
  @result
end

Class Method Details

.call(assessment:, parent:, credentials: GoogleApis.credentials) ⇒ Object



11
12
13
# File 'app/services/katalyst/google_apis/recaptcha/assessment_service.rb', line 11

def self.call(assessment:, parent:, credentials: GoogleApis.credentials)
  new(credentials:, parent:).call(assessment:)
end

Instance Method Details

#actionObject



48
49
50
51
52
# File 'app/services/katalyst/google_apis/recaptcha/assessment_service.rb', line 48

def action
  return nil unless valid?

  @result.dig(:tokenProperties, :action)
end

#call(assessment:) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'app/services/katalyst/google_apis/recaptcha/assessment_service.rb', line 20

def call(assessment:)
  @response = Curl.post(url, assessment.to_json) do |http|
    http.headers["Content-Type"] = "application/json; UTF-8"
    @credentials.apply!(http.headers)
  end

  if %r{^application/json}.match?(@response.content_type)
    @result = JSON.parse(response.body, symbolize_names: true)
  else
    raise GoogleApis::Error.new(
      code:    response.response_code,
      status:  Rack::Utils::HTTP_STATUS_CODES[response.response_code],
      message: "Unexpected HTTP response received (#{response.response_code}, #{@response.content_type})",
    )
  end

  self
rescue StandardError => e
  @error = e
  raise e
ensure
  report_error
end

#inspectObject



60
61
62
# File 'app/services/katalyst/google_apis/recaptcha/assessment_service.rb', line 60

def inspect
  "#<#{self.class.name} result: #{@result.inspect} error: #{@error.inspect}>"
end

#scoreObject



54
55
56
57
58
# File 'app/services/katalyst/google_apis/recaptcha/assessment_service.rb', line 54

def score
  return nil unless valid?

  @result.dig(:riskAnalysis, :score)
end

#valid?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'app/services/katalyst/google_apis/recaptcha/assessment_service.rb', line 44

def valid?
  @result.present? && @result.dig(:tokenProperties, :valid)
end