castle-rb 7.2.0 → 8.0.0

Sign up to get free protection for your applications and to get access to all the features.
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