castle-rb 7.2.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/lib/castle/api/authenticate.rb +3 -12
  3. data/lib/castle/api/end_impersonation.rb +1 -3
  4. data/lib/castle/api/filter.rb +2 -10
  5. data/lib/castle/api/log.rb +2 -10
  6. data/lib/castle/api/risk.rb +2 -10
  7. data/lib/castle/api/start_impersonation.rb +1 -3
  8. data/lib/castle/api/track.rb +1 -3
  9. data/lib/castle/client.rb +1 -5
  10. data/lib/castle/commands/log.rb +1 -5
  11. data/lib/castle/commands/risk.rb +1 -5
  12. data/lib/castle/configuration.rb +2 -5
  13. data/lib/castle/core/process_response.rb +4 -3
  14. data/lib/castle/core/send_request.rb +1 -3
  15. data/lib/castle/errors.rb +4 -0
  16. data/lib/castle/headers/extract.rb +1 -3
  17. data/lib/castle/headers/filter.rb +2 -3
  18. data/lib/castle/payload/prepare.rb +1 -2
  19. data/lib/castle/session.rb +1 -1
  20. data/lib/castle/version.rb +1 -1
  21. data/lib/castle.rb +1 -3
  22. data/spec/integration/rails/rails_spec.rb +9 -3
  23. data/spec/integration/rails/support/application.rb +2 -2
  24. data/spec/integration/rails/support/home_controller.rb +4 -30
  25. data/spec/lib/castle/api/approve_device_spec.rb +2 -6
  26. data/spec/lib/castle/api/authenticate_spec.rb +22 -25
  27. data/spec/lib/castle/api/end_impersonation_spec.rb +8 -14
  28. data/spec/lib/castle/api/get_device_spec.rb +1 -3
  29. data/spec/lib/castle/api/get_devices_for_user_spec.rb +1 -3
  30. data/spec/lib/castle/api/report_device_spec.rb +2 -6
  31. data/spec/lib/castle/api/start_impersonation_spec.rb +8 -14
  32. data/spec/lib/castle/api/track_spec.rb +9 -16
  33. data/spec/lib/castle/client_id/extract_spec.rb +2 -9
  34. data/spec/lib/castle/client_spec.rb +32 -78
  35. data/spec/lib/castle/command_spec.rb +3 -3
  36. data/spec/lib/castle/commands/approve_device_spec.rb +2 -2
  37. data/spec/lib/castle/commands/authenticate_spec.rb +17 -24
  38. data/spec/lib/castle/commands/end_impersonation_spec.rb +14 -21
  39. data/spec/lib/castle/commands/filter_spec.rb +15 -15
  40. data/spec/lib/castle/commands/get_device_spec.rb +2 -2
  41. data/spec/lib/castle/commands/get_devices_for_user_spec.rb +2 -2
  42. data/spec/lib/castle/commands/log_spec.rb +15 -15
  43. data/spec/lib/castle/commands/report_device_spec.rb +2 -2
  44. data/spec/lib/castle/commands/risk_spec.rb +15 -15
  45. data/spec/lib/castle/commands/start_impersonation_spec.rb +14 -21
  46. data/spec/lib/castle/commands/track_spec.rb +19 -24
  47. data/spec/lib/castle/configuration_spec.rb +1 -1
  48. data/spec/lib/castle/context/get_default_spec.rb +9 -8
  49. data/spec/lib/castle/context/prepare_spec.rb +3 -4
  50. data/spec/lib/castle/core/process_response_spec.rb +3 -6
  51. data/spec/lib/castle/core/process_webhook_spec.rb +12 -6
  52. data/spec/lib/castle/core/send_request_spec.rb +7 -11
  53. data/spec/lib/castle/failover/strategy_spec.rb +5 -5
  54. data/spec/lib/castle/headers/extract_spec.rb +1 -1
  55. data/spec/lib/castle/headers/filter_spec.rb +6 -3
  56. data/spec/lib/castle/headers/format_spec.rb +5 -5
  57. data/spec/lib/castle/ips/extract_spec.rb +2 -6
  58. data/spec/lib/castle/logger_spec.rb +2 -1
  59. data/spec/lib/castle/payload/prepare_spec.rb +4 -7
  60. data/spec/lib/castle/secure_mode_spec.rb +1 -3
  61. data/spec/lib/castle/session_spec.rb +1 -5
  62. data/spec/lib/castle/singleton_configuration_spec.rb +1 -1
  63. data/spec/lib/castle/utils/clone_spec.rb +1 -1
  64. data/spec/lib/castle/utils/merge_spec.rb +2 -4
  65. data/spec/lib/castle/validators/not_supported_spec.rb +1 -6
  66. data/spec/lib/castle/validators/present_spec.rb +2 -9
  67. data/spec/lib/castle/verdict_spec.rb +3 -3
  68. data/spec/lib/castle/webhooks/verify_spec.rb +12 -6
  69. data/spec/lib/castle_spec.rb +5 -7
  70. data/spec/support/shared_examples/action_request.rb +16 -34
  71. data/spec/support/shared_examples/configuration.rb +14 -16
  72. metadata +48 -48
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5ada9f9e25a4da59d7577cb10848d45697a6709648846011fc803167a8b96203
4
- data.tar.gz: 2b0927e4ae6f686a35c9c5ac39e510f46f8fc06506932441b421a845ba296f27
3
+ metadata.gz: e9dc06eac5803e36c8576d9938442ba1c1f6bb852420c7a736044127deea50b8
4
+ data.tar.gz: 5d89738c670359a0345d51b41d0137d614622002711f20665238a4c289f28bab
5
5
  SHA512:
6
- metadata.gz: 5ff2d32ab3ae269adbcd5380ba7488e06c0d9ae0ab463cd73856eb65b67bb4559daa1118344bc1a6896b097f00f9e5cc35c80ce68add430785769c2502e261b0
7
- data.tar.gz: e48b7c5332de7d74ad8d13a89f52b2fd756d1c2b77600af86b86d74c78789916ac2972983781708be097d9d6f4067705b59ba26eaca2dc3e45720eee4ced6f08
6
+ metadata.gz: 118236690b20da223208e043cb4aafea5c1d9870e0d2e44d87106a45122652ca894f8bfbc79bf465e474923a026b9b2253a6c7a1ab2c2f5157b0b21d51459d6c
7
+ data.tar.gz: 223933e1de62111635ba5d22fed064541a1d54aee9c9374fc8524a808b27b623245ee0d5240a42d0eff4ac72e214cc4f61ce44bb72f15591d3944790d8bc3e0d
@@ -7,26 +7,17 @@ module Castle
7
7
  # @param options [Hash]
8
8
  # return [Hash]
9
9
  def call(options = {})
10
- unless options[:no_symbolize]
11
- options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
12
- end
10
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {}) unless options[:no_symbolize]
13
11
  options.delete(:no_symbolize)
14
12
  http = options.delete(:http)
15
13
  config = options.delete(:config) || Castle.config
16
14
 
17
- response =
18
- Castle::API.call(Castle::Commands::Authenticate.build(options), {}, http, config)
15
+ response = Castle::API.call(Castle::Commands::Authenticate.build(options), {}, http, config)
19
16
  response.merge(failover: false, failover_reason: nil)
20
17
  rescue Castle::RequestError, Castle::InternalServerError => e
21
18
  unless config.failover_strategy == :throw
22
19
  strategy = (config || Castle.config).failover_strategy
23
- return(
24
- Castle::Failover::PrepareResponse.new(
25
- options[:user_id],
26
- reason: e.to_s,
27
- strategy: strategy
28
- ).call
29
- )
20
+ return(Castle::Failover::PrepareResponse.new(options[:user_id], reason: e.to_s, strategy: strategy).call)
30
21
  end
31
22
 
32
23
  raise e
@@ -7,9 +7,7 @@ module Castle
7
7
  class << self
8
8
  # @param options [Hash]
9
9
  def call(options = {})
10
- unless options[:no_symbolize]
11
- options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
12
- end
10
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {}) unless options[:no_symbolize]
13
11
  options.delete(:no_symbolize)
14
12
  http = options.delete(:http)
15
13
  config = options.delete(:config) || Castle.config
@@ -8,9 +8,7 @@ module Castle
8
8
  # @param options [Hash]
9
9
  # return [Hash]
10
10
  def call(options = {})
11
- unless options[:no_symbolize]
12
- options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
13
- end
11
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {}) unless options[:no_symbolize]
14
12
  options.delete(:no_symbolize)
15
13
  http = options.delete(:http)
16
14
  config = options.delete(:config) || Castle.config
@@ -20,13 +18,7 @@ module Castle
20
18
  rescue Castle::RequestError, Castle::InternalServerError => e
21
19
  unless config.failover_strategy == :throw
22
20
  strategy = (config || Castle.config).failover_strategy
23
- return(
24
- Castle::Failover::PrepareResponse.new(
25
- options[:user][:id],
26
- reason: e.to_s,
27
- strategy: strategy
28
- ).call
29
- )
21
+ return(Castle::Failover::PrepareResponse.new(options[:user][:id], reason: e.to_s, strategy: strategy).call)
30
22
  end
31
23
 
32
24
  raise e
@@ -8,9 +8,7 @@ module Castle
8
8
  # @param options [Hash]
9
9
  # return [Hash]
10
10
  def call(options = {})
11
- unless options[:no_symbolize]
12
- options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
13
- end
11
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {}) unless options[:no_symbolize]
14
12
  options.delete(:no_symbolize)
15
13
  http = options.delete(:http)
16
14
  config = options.delete(:config) || Castle.config
@@ -20,13 +18,7 @@ module Castle
20
18
  rescue Castle::RequestError, Castle::InternalServerError => e
21
19
  unless config.failover_strategy == :throw
22
20
  strategy = (config || Castle.config).failover_strategy
23
- return(
24
- Castle::Failover::PrepareResponse.new(
25
- options[:user][:id],
26
- reason: e.to_s,
27
- strategy: strategy
28
- ).call
29
- )
21
+ return(Castle::Failover::PrepareResponse.new(options[:user][:id], reason: e.to_s, strategy: strategy).call)
30
22
  end
31
23
 
32
24
  raise e
@@ -8,9 +8,7 @@ module Castle
8
8
  # @param options [Hash]
9
9
  # return [Hash]
10
10
  def call(options = {})
11
- unless options[:no_symbolize]
12
- options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
13
- end
11
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {}) unless options[:no_symbolize]
14
12
  options.delete(:no_symbolize)
15
13
  http = options.delete(:http)
16
14
  config = options.delete(:config) || Castle.config
@@ -20,13 +18,7 @@ module Castle
20
18
  rescue Castle::RequestError, Castle::InternalServerError => e
21
19
  unless config.failover_strategy == :throw
22
20
  strategy = (config || Castle.config).failover_strategy
23
- return(
24
- Castle::Failover::PrepareResponse.new(
25
- options[:user][:id],
26
- reason: e.to_s,
27
- strategy: strategy
28
- ).call
29
- )
21
+ return(Castle::Failover::PrepareResponse.new(options[:user][:id], reason: e.to_s, strategy: strategy).call)
30
22
  end
31
23
 
32
24
  raise e
@@ -7,9 +7,7 @@ module Castle
7
7
  class << self
8
8
  # @param options [Hash]
9
9
  def call(options = {})
10
- unless options[:no_symbolize]
11
- options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
12
- end
10
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {}) unless options[:no_symbolize]
13
11
  options.delete(:no_symbolize)
14
12
  http = options.delete(:http)
15
13
  config = options.delete(:config) || Castle.config
@@ -6,9 +6,7 @@ module Castle
6
6
  class << self
7
7
  # @param options [Hash]
8
8
  def call(options = {})
9
- unless options[:no_symbolize]
10
- options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
11
- end
9
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {}) unless options[:no_symbolize]
12
10
  options.delete(:no_symbolize)
13
11
  http = options.delete(:http)
14
12
  config = options.delete(:config) || Castle.config
data/lib/castle/client.rb CHANGED
@@ -123,11 +123,7 @@ module Castle
123
123
 
124
124
  # @param user_id [String, Boolean]
125
125
  def generate_do_not_track_response(user_id)
126
- Castle::Failover::PrepareResponse.new(
127
- user_id,
128
- strategy: :allow,
129
- reason: 'Castle is set to do not track.'
130
- ).call
126
+ Castle::Failover::PrepareResponse.new(user_id, strategy: :allow, reason: 'Castle is set to do not track.').call
131
127
  end
132
128
 
133
129
  # @param options [Hash]
@@ -10,11 +10,7 @@ module Castle
10
10
  def build(options = {})
11
11
  context = Castle::Context::Sanitize.call(options[:context])
12
12
 
13
- Castle::Command.new(
14
- 'log',
15
- options.merge(context: context, sent_at: Castle::Utils::GetTimestamp.call),
16
- :post
17
- )
13
+ Castle::Command.new('log', options.merge(context: context, sent_at: Castle::Utils::GetTimestamp.call), :post)
18
14
  end
19
15
  end
20
16
  end
@@ -10,11 +10,7 @@ module Castle
10
10
  def build(options = {})
11
11
  context = Castle::Context::Sanitize.call(options[:context])
12
12
 
13
- Castle::Command.new(
14
- 'risk',
15
- options.merge(context: context, sent_at: Castle::Utils::GetTimestamp.call),
16
- :post
17
- )
13
+ Castle::Command.new('risk', options.merge(context: context, sent_at: Castle::Utils::GetTimestamp.call), :post)
18
14
  end
19
15
  end
20
16
  end
@@ -104,9 +104,7 @@ module Castle
104
104
  # sets trusted proxies
105
105
  # @param value [Array<String,Regexp>]
106
106
  def trusted_proxies=(value)
107
- unless value.is_a?(Array)
108
- raise Castle::ConfigurationError, 'trusted proxies must be an Array'
109
- end
107
+ raise Castle::ConfigurationError, 'trusted proxies must be an Array' unless value.is_a?(Array)
110
108
 
111
109
  @trusted_proxies = value
112
110
  end
@@ -121,8 +119,7 @@ module Castle
121
119
  end
122
120
 
123
121
  def failover_strategy=(value)
124
- @failover_strategy =
125
- Castle::Failover::STRATEGIES.detect { |strategy| strategy == value.to_sym }
122
+ @failover_strategy = Castle::Failover::STRATEGIES.detect { |strategy| strategy == value.to_sym }
126
123
  raise Castle::ConfigurationError, 'unrecognized failover strategy' if @failover_strategy.nil?
127
124
  end
128
125
 
@@ -9,7 +9,8 @@ module Castle
9
9
  401 => Castle::UnauthorizedError,
10
10
  403 => Castle::ForbiddenError,
11
11
  404 => Castle::NotFoundError,
12
- 419 => Castle::UserUnauthorizedError
12
+ 419 => Castle::UserUnauthorizedError,
13
+ 429 => Castle::RateLimitError
13
14
  }.freeze
14
15
 
15
16
  INVALID_REQUEST_TOKEN = 'invalid_request_token'
@@ -51,9 +52,9 @@ module Castle
51
52
  if parsed_body.is_a?(Hash) && parsed_body.key?(:type)
52
53
  if parsed_body[:type] == INVALID_REQUEST_TOKEN
53
54
  raise Castle::InvalidRequestTokenError, parsed_body[:message]
54
- else
55
- raise Castle::InvalidParametersError, parsed_body[:message]
56
55
  end
56
+
57
+ raise Castle::InvalidParametersError, parsed_body[:message]
57
58
  end
58
59
  rescue JSON::ParserError
59
60
  end
@@ -15,9 +15,7 @@ module Castle
15
15
  # @param http [Net::HTTP]
16
16
  # @param config [Castle::Configuration, Castle::SingletonConfiguration, nil]
17
17
  def call(command, headers, http = nil, config = nil)
18
- (http || Castle::Core::GetConnection.call).request(
19
- build(command, headers.merge(DEFAULT_HEADERS), config)
20
- )
18
+ (http || Castle::Core::GetConnection.call).request(build(command, headers.merge(DEFAULT_HEADERS), config))
21
19
  end
22
20
 
23
21
  # @param command [String]
data/lib/castle/errors.rb CHANGED
@@ -61,6 +61,10 @@ module Castle
61
61
  class UnauthorizedError < Castle::ApiError
62
62
  end
63
63
 
64
+ # api error too many requests 429
65
+ class RateLimitError < Castle::ApiError
66
+ end
67
+
64
68
  # all internal server errors
65
69
  class InternalServerError < Castle::ApiError
66
70
  end
@@ -23,9 +23,7 @@ module Castle
23
23
  # Serialize HTTP headers
24
24
  # @return [Hash]
25
25
  def call
26
- @headers.each_with_object({}) do |(name, value), acc|
27
- acc[name] = header_value(name, value)
28
- end
26
+ @headers.each_with_object({}) { |(name, value), acc| acc[name] = header_value(name, value) }
29
27
  end
30
28
 
31
29
  private
@@ -12,8 +12,7 @@ module Castle
12
12
  HTTP(?:_|-).*|
13
13
  CONTENT(?:_|-)LENGTH|
14
14
  REMOTE(?:_|-)ADDR
15
- $/xi
16
- .freeze
15
+ $/xi.freeze
17
16
 
18
17
  private_constant :VALUABLE_HEADERS
19
18
 
@@ -32,7 +31,7 @@ module Castle
32
31
  next unless header_name.match(VALUABLE_HEADERS)
33
32
 
34
33
  formatted_name = @header_format.call(header_name)
35
- acc[formatted_name] = @request_env[header_name]
34
+ acc[formatted_name] = @request_env[header_name].to_s
36
35
  end
37
36
  end
38
37
  end
@@ -12,8 +12,7 @@ module Castle
12
12
  def call(payload_options, request, options = {})
13
13
  context = Castle::Context::Prepare.call(request, payload_options.merge(options))
14
14
 
15
- payload =
16
- Castle::Utils::DeepSymbolizeKeys.call(payload_options || {}).merge(context: context)
15
+ payload = Castle::Utils::DeepSymbolizeKeys.call(payload_options || {}).merge(context: context)
17
16
  payload[:timestamp] ||= Castle::Utils::GetTimestamp.call
18
17
 
19
18
  warn '[DEPRECATION] use user_traits instead of traits key' if payload.key?(:traits)
@@ -9,7 +9,7 @@ module Castle
9
9
 
10
10
  class << self
11
11
  def call(&block)
12
- return unless block_given?
12
+ return unless block
13
13
 
14
14
  Castle::Core::GetConnection.call.start(&block)
15
15
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Castle
4
- VERSION = '7.2.0'
4
+ VERSION = '8.0.0'
5
5
  end
data/lib/castle.rb CHANGED
@@ -67,9 +67,7 @@
67
67
  module Castle
68
68
  class << self
69
69
  def configure(config_hash = nil)
70
- (config_hash || {}).each do |config_name, config_value|
71
- config.send("#{config_name}=", config_value)
72
- end
70
+ (config_hash || {}).each { |config_name, config_value| config.send(:"#{config_name}=", config_value) }
73
71
 
74
72
  yield(config) if block_given?
75
73
  end
@@ -24,11 +24,12 @@ RSpec.describe HomeController, type: :request do
24
24
  'Accept' =>
25
25
  'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
26
26
  'Authorization' => true,
27
- 'Content-Length' => '0',
28
27
  'Cookie' => true,
28
+ 'Content-Length' => '0',
29
29
  'Host' => 'www.example.com',
30
30
  'X-Forwarded-For' => '5.5.5.5, 1.2.3.4',
31
- 'Remote-Addr' => '127.0.0.1'
31
+ 'Remote-Addr' => '127.0.0.1',
32
+ 'Version' => 'HTTP/1.0'
32
33
  },
33
34
  'ip' => '1.2.3.4',
34
35
  'library' => {
@@ -40,7 +41,12 @@ RSpec.describe HomeController, type: :request do
40
41
  end
41
42
  let(:now) { Time.now }
42
43
  let(:headers) do
43
- { 'HTTP_AUTHORIZATION' => 'Basic 123', 'HTTP_X_FORWARDED_FOR' => '5.5.5.5, 1.2.3.4' }
44
+ {
45
+ 'HTTP_AUTHORIZATION' => 'Basic 123',
46
+ 'HTTP_X_FORWARDED_FOR' => '5.5.5.5, 1.2.3.4',
47
+ 'HTTP_VERSION' => 'HTTP/1.0',
48
+ 'HTTP_CONTENT_LENGTH' => '0'
49
+ }
44
50
  end
45
51
 
46
52
  before do
@@ -3,8 +3,8 @@
3
3
  require 'action_controller/railtie'
4
4
 
5
5
  class TestApp < Rails::Application
6
- secrets.secret_token = 'secret_token'
7
- secrets.secret_key_base = 'secret_key_base'
6
+ credentials.secret_token = 'secret_token'
7
+ credentials.secret_key_base = 'secret_key_base'
8
8
 
9
9
  config.logger = Logger.new($stdout)
10
10
  Rails.logger = config.logger
@@ -4,16 +4,7 @@ class HomeController < ActionController::Base
4
4
  # prepare context and calling track with client example
5
5
  def index1
6
6
  request_context = ::Castle::Context::Prepare.call(request)
7
- payload = {
8
- event: '$login.succeeded',
9
- user_id: '123',
10
- properties: {
11
- key: 'value'
12
- },
13
- user_traits: {
14
- key: 'value'
15
- }
16
- }
7
+ payload = { event: '$login.succeeded', user_id: '123', properties: { key: 'value' }, user_traits: { key: 'value' } }
17
8
  client = ::Castle::Client.new(context: request_context)
18
9
  client.track(payload)
19
10
 
@@ -24,16 +15,7 @@ class HomeController < ActionController::Base
24
15
  def index2
25
16
  payload =
26
17
  ::Castle::Payload::Prepare.call(
27
- {
28
- event: '$login.succeeded',
29
- user_id: '123',
30
- properties: {
31
- key: 'value'
32
- },
33
- user_traits: {
34
- key: 'value'
35
- }
36
- },
18
+ { event: '$login.succeeded', user_id: '123', properties: { key: 'value' }, user_traits: { key: 'value' } },
37
19
  request
38
20
  )
39
21
  client = ::Castle::Client.new
@@ -46,18 +28,10 @@ class HomeController < ActionController::Base
46
28
  def index3
47
29
  payload =
48
30
  ::Castle::Payload::Prepare.call(
49
- {
50
- event: '$login.succeeded',
51
- user_id: '123',
52
- properties: {
53
- key: 'value'
54
- },
55
- user_traits: {
56
- key: 'value'
57
- }
58
- },
31
+ { event: '$login.succeeded', user_id: '123', properties: { key: 'value' }, user_traits: { key: 'value' } },
59
32
  request
60
33
  )
34
+
61
35
  Castle::API::Track.call(payload)
62
36
 
63
37
  render inline: 'hello'
@@ -2,9 +2,7 @@
2
2
 
3
3
  describe Castle::API::ApproveDevice do
4
4
  before do
5
- stub_request(:any, /api.castle.io/)
6
- .with(basic_auth: ['', 'secret'])
7
- .to_return(status: 200, body: '{}', headers: {})
5
+ stub_request(:any, /api.castle.io/).with(basic_auth: ['', 'secret']).to_return(status: 200, body: '{}', headers: {})
8
6
  end
9
7
 
10
8
  describe '.call' do
@@ -14,8 +12,6 @@ describe Castle::API::ApproveDevice do
14
12
 
15
13
  before { retrieve }
16
14
 
17
- it do
18
- assert_requested :put, "https://api.castle.io/v1/devices/#{device_token}/approve", times: 1
19
- end
15
+ it { assert_requested :put, "https://api.castle.io/v1/devices/#{device_token}/approve", times: 1 }
20
16
  end
21
17
  end
@@ -29,15 +29,16 @@ describe Castle::API::Authenticate do
29
29
  after { Timecop.return }
30
30
 
31
31
  describe '.call' do
32
- let(:request_body) do
33
- { event: '$login.succeeded', context: context, user_id: '1234', sent_at: time_auto }
34
- end
32
+ let(:request_body) { { event: '$login.succeeded', context: context, user_id: '1234', sent_at: time_auto } }
35
33
 
36
34
  context 'when used with symbol keys' do
37
35
  before do
38
- stub_request(:any, /api.castle.io/)
39
- .with(basic_auth: ['', 'secret'])
40
- .to_return(status: 200, body: response_body, headers: {})
36
+ stub_request(:any, /api.castle.io/).with(basic_auth: ['', 'secret']).to_return(
37
+ status: 200,
38
+ body: response_body,
39
+ headers: {
40
+ }
41
+ )
41
42
  call_subject
42
43
  end
43
44
 
@@ -50,17 +51,9 @@ describe Castle::API::Authenticate do
50
51
  end
51
52
 
52
53
  context 'when passed timestamp in options and no defined timestamp' do
53
- let(:options) do
54
- { event: '$login.succeeded', user_id: '1234', timestamp: time_user, context: context }
55
- end
54
+ let(:options) { { event: '$login.succeeded', user_id: '1234', timestamp: time_user, context: context } }
56
55
  let(:request_body) do
57
- {
58
- event: '$login.succeeded',
59
- user_id: '1234',
60
- context: context,
61
- timestamp: time_user,
62
- sent_at: time_auto
63
- }
56
+ { event: '$login.succeeded', user_id: '1234', context: context, timestamp: time_user, sent_at: time_auto }
64
57
  end
65
58
 
66
59
  it do
@@ -78,15 +71,16 @@ describe Castle::API::Authenticate do
78
71
 
79
72
  context 'when denied without any risk policy' do
80
73
  let(:response_body) { deny_response_without_rp.to_json }
81
- let(:deny_response_without_rp) do
82
- { action: 'deny', user_id: '12345', device_token: 'abcdefg1234' }
83
- end
74
+ let(:deny_response_without_rp) { { action: 'deny', user_id: '12345', device_token: 'abcdefg1234' } }
84
75
  let(:deny_without_rp_failover_result) { deny_response_without_rp.merge(failover_appendix) }
85
76
 
86
77
  before do
87
- stub_request(:any, /api.castle.io/)
88
- .with(basic_auth: ['', 'secret'])
89
- .to_return(status: 200, body: deny_response_without_rp.to_json, headers: {})
78
+ stub_request(:any, /api.castle.io/).with(basic_auth: ['', 'secret']).to_return(
79
+ status: 200,
80
+ body: deny_response_without_rp.to_json,
81
+ headers: {
82
+ }
83
+ )
90
84
  call_subject
91
85
  end
92
86
 
@@ -117,9 +111,12 @@ describe Castle::API::Authenticate do
117
111
  let(:deny_with_rp_failover_result) { deny_response_with_rp.merge(failover_appendix) }
118
112
 
119
113
  before do
120
- stub_request(:any, /api.castle.io/)
121
- .with(basic_auth: ['', 'secret'])
122
- .to_return(status: 200, body: deny_response_with_rp.to_json, headers: {})
114
+ stub_request(:any, /api.castle.io/).with(basic_auth: ['', 'secret']).to_return(
115
+ status: 200,
116
+ body: deny_response_with_rp.to_json,
117
+ headers: {
118
+ }
119
+ )
123
120
  call_subject
124
121
  end
125
122
 
@@ -22,9 +22,12 @@ describe Castle::API::EndImpersonation do
22
22
  before do
23
23
  Timecop.freeze(time_now)
24
24
  stub_const('Castle::VERSION', '2.2.0')
25
- stub_request(:any, /api.castle.io/)
26
- .with(basic_auth: ['', 'secret'])
27
- .to_return(status: 200, body: response_body, headers: {})
25
+ stub_request(:any, /api.castle.io/).with(basic_auth: ['', 'secret']).to_return(
26
+ status: 200,
27
+ body: response_body,
28
+ headers: {
29
+ }
30
+ )
28
31
  end
29
32
 
30
33
  after { Timecop.return }
@@ -32,19 +35,10 @@ describe Castle::API::EndImpersonation do
32
35
  describe 'call' do
33
36
  let(:impersonator) { 'test@castle.io' }
34
37
  let(:request_body) do
35
- {
36
- user_id: '1234',
37
- sent_at: time_auto,
38
- properties: {
39
- impersonator: impersonator
40
- },
41
- context: context
42
- }
38
+ { user_id: '1234', sent_at: time_auto, properties: { impersonator: impersonator }, context: context }
43
39
  end
44
40
  let(:response_body) { { success: true }.to_json }
45
- let(:options) do
46
- { user_id: '1234', properties: { impersonator: impersonator }, context: context }
47
- end
41
+ let(:options) { { user_id: '1234', properties: { impersonator: impersonator }, context: context } }
48
42
 
49
43
  context 'when used with symbol keys' do
50
44
  before { call }
@@ -2,9 +2,7 @@
2
2
 
3
3
  describe Castle::API::GetDevice do
4
4
  before do
5
- stub_request(:any, /api.castle.io/)
6
- .with(basic_auth: ['', 'secret'])
7
- .to_return(status: 200, body: '{}', headers: {})
5
+ stub_request(:any, /api.castle.io/).with(basic_auth: ['', 'secret']).to_return(status: 200, body: '{}', headers: {})
8
6
  end
9
7
 
10
8
  describe '.call' do
@@ -2,9 +2,7 @@
2
2
 
3
3
  describe Castle::API::GetDevicesForUser do
4
4
  before do
5
- stub_request(:any, /api.castle.io/)
6
- .with(basic_auth: ['', 'secret'])
7
- .to_return(status: 200, body: '{}', headers: {})
5
+ stub_request(:any, /api.castle.io/).with(basic_auth: ['', 'secret']).to_return(status: 200, body: '{}', headers: {})
8
6
  end
9
7
 
10
8
  describe '.call' do
@@ -2,9 +2,7 @@
2
2
 
3
3
  describe Castle::API::ReportDevice do
4
4
  before do
5
- stub_request(:any, /api.castle.io/)
6
- .with(basic_auth: ['', 'secret'])
7
- .to_return(status: 200, body: '{}', headers: {})
5
+ stub_request(:any, /api.castle.io/).with(basic_auth: ['', 'secret']).to_return(status: 200, body: '{}', headers: {})
8
6
  end
9
7
 
10
8
  describe '.call' do
@@ -14,8 +12,6 @@ describe Castle::API::ReportDevice do
14
12
 
15
13
  before { retrieve }
16
14
 
17
- it do
18
- assert_requested :put, "https://api.castle.io/v1/devices/#{device_token}/report", times: 1
19
- end
15
+ it { assert_requested :put, "https://api.castle.io/v1/devices/#{device_token}/report", times: 1 }
20
16
  end
21
17
  end