bsm-sso-client 0.12.0 → 0.12.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e2130651c34cb85c562ab688d121eed6f6d709c002ca6388d9a6742b19f2e134
4
- data.tar.gz: 6fd1a90fb066f52d007086f30e5d2590639f3df17c4994b50bb1dbd89d6e7a3f
3
+ metadata.gz: 4c084ba477e33a910155a4a2c8a317d1288c51fe700e017f3776198a21c34529
4
+ data.tar.gz: 4d23e704261c51d62f1c07c61dd24b6b5a69714e63a82a3ef5fa8bd1e2aac342
5
5
  SHA512:
6
- metadata.gz: 37811dc50112157d7ca226004bebd51f9ebdd77e7986d173bdaa7509ce88a7447bf17fa01f9a401bae8d0a04563e399a2eaabf34c2fe3512f0fff81a8da9d698
7
- data.tar.gz: 3e84ae2f5bbbc07f2c7f990f957abd2944e7b123d779f7f6c38701f4a2b50ea07e63c81dc10ce49a21a9e76e8642783b1964ceb33f50391342918fca8a831d48
6
+ metadata.gz: 335af965c679c91e99055c90ef27c37d3e8a347c4eb4a4f8f28558964a3c8a6bd8d5e39d428a81381199e92a2bcf229591101aed9d74b2f9bc5e09ebcbb27b23
7
+ data.tar.gz: 0a3da5caa3a7fdca38da422eae0c8164c29b174b7c087530e3367f26f0071b3774f07fa7fa76195757e09cd94fbf5877122783fc07866446faacf7b775d679c1
@@ -42,14 +42,14 @@ module Bsm
42
42
  @@navigational_formats = [:html, :all, :js, nil].to_set
43
43
 
44
44
  mattr_reader :api_formats
45
- @@api_formats = [:xml, :json].to_set
45
+ @@api_formats = %i[xml json].to_set
46
46
 
47
47
  mattr_accessor :cache_store
48
- @@cache_store = ActiveSupport::Cache::NullStore.new :namespace => "bsm:sso:client:#{Rails.env}"
48
+ @@cache_store = ActiveSupport::Cache::NullStore.new namespace: "bsm:sso:client:#{Rails.env}"
49
49
 
50
50
  class << self
51
51
 
52
- delegate :site=, :site, :to => :"Bsm::Sso::Client::AbstractResource"
52
+ delegate :site=, :site, to: :"Bsm::Sso::Client::AbstractResource"
53
53
 
54
54
  def user_class
55
55
  if @@user_class.respond_to?(:constantize)
@@ -62,6 +62,7 @@ module Bsm
62
62
  # Default message verifier
63
63
  def verifier
64
64
  raise "Please configure a secret! Example: Bsm::Sso::Client.secret = '...'" unless secret.present?
65
+
65
66
  @verifier ||= ActiveSupport::MessageVerifier.new(secret)
66
67
  end
67
68
 
@@ -89,7 +90,7 @@ module Bsm
89
90
  end
90
91
 
91
92
  # Raises an UnauthorizedAccess exception
92
- def forbidden!(request, message = nil)
93
+ def forbidden!(request, message=nil)
93
94
  message ||= "You are not permitted to access the resource in #{request.path}"
94
95
  raise UnauthorizedAccess, message
95
96
  end
@@ -1,6 +1,6 @@
1
1
  begin
2
2
  require 'cancan/ability'
3
- rescue LoadError => e
3
+ rescue LoadError
4
4
  warn "\n [!] Please install `cancan` Gem to use the Ability module\n"
5
5
  raise
6
6
  end
@@ -13,16 +13,14 @@ module Bsm::Sso::Client::Ability
13
13
  end
14
14
 
15
15
  module ClassMethods
16
-
17
16
  # @return [Hash] roles, scoped by user type
18
17
  def roles
19
- private_instance_methods(false).inject({}) do |result, name|
18
+ private_instance_methods(false).each_with_object({}) do |name, result|
20
19
  prefix, scope, name = name.to_s.split('__')
21
- next result unless prefix == "as" && scope && name
20
+ next result unless prefix == 'as' && scope && name
22
21
 
23
22
  result[scope.to_sym] ||= []
24
23
  result[scope.to_sym] << name
25
- result
26
24
  end
27
25
  end
28
26
 
@@ -34,13 +32,13 @@ module Bsm::Sso::Client::Ability
34
32
 
35
33
  define_method(method_name) do
36
34
  return false if self.scope != scope || applied.include?(name.to_s)
35
+
37
36
  applied.add(name.to_s)
38
37
  instance_eval(&block)
39
38
  true
40
39
  end
41
40
  private method_name
42
41
  end
43
-
44
42
  end
45
43
 
46
44
  # @attr_reader [User] current user record
@@ -77,8 +75,7 @@ module Bsm::Sso::Client::Ability
77
75
 
78
76
  private
79
77
 
80
- def administrator?
81
- (@user.respond_to?(:level?) && @user.level.to_i >= 90) || (@user.respond_to?(:admin?) && @user.admin?)
82
- end
83
-
84
- end
78
+ def administrator?
79
+ (@user.respond_to?(:level?) && @user.level.to_i >= 90) || (@user.respond_to?(:admin?) && @user.admin?)
80
+ end
81
+ end
@@ -10,15 +10,17 @@ class Bsm::Sso::Client::AbstractResource < Hash
10
10
  # @param [String] url
11
11
  def site=(url)
12
12
  @site = Excon.new url,
13
- mock: defined?(WebMock),
13
+ mock: defined?(WebMock),
14
14
  idempotent: true,
15
- expects: [200, 422],
16
- headers: { 'Accept' => Mime[:json].to_s, 'Content-Type' => Mime[:json].to_s }
15
+ expects: [200, 422],
16
+ headers: { 'Accept' => Mime[:json].to_s, 'Content-Type' => Mime[:json].to_s }
17
17
  end
18
18
 
19
19
  # @return [Excon::Connection] site connection
20
20
  def site
21
- @site || (superclass.respond_to?(:site) && superclass.site) || raise("No site specified for #{name}. Please specify #{name}.site = 'http://your.sso.host'")
21
+ @site ||
22
+ (superclass.respond_to?(:site) && superclass.site) ||
23
+ raise("No site specified for #{name}. Please specify #{name}.site = 'http://your.sso.host'")
22
24
  end
23
25
 
24
26
  # @return [Hash] default headers
@@ -29,10 +31,10 @@ class Bsm::Sso::Client::AbstractResource < Hash
29
31
  # @param [String] path
30
32
  # @param [Hash] params, request params - see Excon::Connection#request
31
33
  # @return [Bsm::Sso::Client::AbstractResource] fetches object from remote
32
- def get(path, params = {})
34
+ def get(path, params={})
33
35
  params[:query] ||= params.delete(:params)
34
36
  collection = params.delete(:collection)
35
- params = params.merge(:path => path)
37
+ params = params.merge(path: path)
36
38
  params[:headers] = (params[:headers] || {}).merge(headers)
37
39
 
38
40
  response = site.get(params)
@@ -52,18 +54,18 @@ class Bsm::Sso::Client::AbstractResource < Hash
52
54
 
53
55
  # Constuctor
54
56
  # @param [Hash,NilClass] attributes the attributes to assign
55
- def initialize(attributes = nil)
57
+ def initialize(attributes=nil)
56
58
  super()
57
59
  update(attributes.stringify_keys) if attributes.is_a?(Hash)
58
60
  end
59
61
 
60
62
  # @return [Integer] ID, the primary key
61
63
  def id
62
- self["id"]
64
+ self['id']
63
65
  end
64
66
 
65
67
  # @return [Boolean] true, if method exists?
66
- def respond_to?(method, *)
68
+ def respond_to_missing?(method, *)
67
69
  super || key?(method.to_s.sub(/[=?]$/, ''))
68
70
  end
69
71
 
@@ -74,17 +76,18 @@ class Bsm::Sso::Client::AbstractResource < Hash
74
76
 
75
77
  protected
76
78
 
77
- def method_missing(method, *arguments)
78
- method, punctation = method.to_s.sub(/([=?])$/, ''), $1
79
-
80
- case punctation
81
- when "="
82
- store(method, arguments.first)
83
- when "?"
84
- self[method]
85
- else
86
- key?(method) ? fetch(method) : super
87
- end
79
+ def method_missing(method, *arguments)
80
+ method = method.to_s.sub(/([=?])$/, '')
81
+ punctation = Regexp.last_match(1)
82
+
83
+ case punctation
84
+ when '='
85
+ store(method, arguments.first)
86
+ when '?'
87
+ self[method]
88
+ else
89
+ key?(method) ? fetch(method) : super
88
90
  end
91
+ end
89
92
 
90
93
  end
@@ -1,6 +1,6 @@
1
1
  begin
2
2
  require 'inherited_resources'
3
- rescue LoadError => e
3
+ rescue LoadError
4
4
  warn "\n [!] Please install `inherited_resources` Gem to use the AuthorizedController\n"
5
5
  raise
6
6
  end
@@ -14,32 +14,31 @@ module Bsm::Sso::Client::AuthorizedController
14
14
 
15
15
  protected
16
16
 
17
- # Override. Apply `accessible_by` scope if #scope_accessible? applies
18
- def apply_scopes(*)
19
- relation = super
20
- relation = relation.accessible_by(current_ability) if scope_accessible?
21
- relation
22
- end
23
-
24
- # Callback. Default authorization of inherited resources
25
- def authorize_inherited_resource!
26
- authorize! :show, parent if parent?
27
- authorize! authorizable_action, authorize_resource? ? resource : resource_class
28
- end
29
-
30
- # @return [Boolean] true if a single resource is to be authorized, false if the whole resource class
31
- def authorize_resource?
32
- !!(resources_configuration[:self][:singleton] || params[:id])
33
- end
34
-
35
- # @return [Boolean] true if accessible_by scope should be applied
36
- def scope_accessible?
37
- !authorize_resource? && ['new', 'create'].exclude?(action_name)
38
- end
39
-
40
- # @return [Symbol] resource permission name, defaults to the action name
41
- def authorizable_action
42
- action_name.to_sym
43
- end
44
-
45
- end
17
+ # Override. Apply `accessible_by` scope if #scope_accessible? applies
18
+ def apply_scopes(*)
19
+ relation = super
20
+ relation = relation.accessible_by(current_ability) if scope_accessible?
21
+ relation
22
+ end
23
+
24
+ # Callback. Default authorization of inherited resources
25
+ def authorize_inherited_resource!
26
+ authorize! :show, parent if parent?
27
+ authorize! authorizable_action, authorize_resource? ? resource : resource_class
28
+ end
29
+
30
+ # @return [Boolean] true if a single resource is to be authorized, false if the whole resource class
31
+ def authorize_resource?
32
+ !!(resources_configuration[:self][:singleton] || params[:id])
33
+ end
34
+
35
+ # @return [Boolean] true if accessible_by scope should be applied
36
+ def scope_accessible?
37
+ !authorize_resource? && %w[new create].exclude?(action_name)
38
+ end
39
+
40
+ # @return [Symbol] resource permission name, defaults to the action name
41
+ def authorizable_action
42
+ action_name.to_sym
43
+ end
44
+ end
@@ -1,3 +1,3 @@
1
1
  module Bsm::Sso::Client::Cached
2
- autoload :ActiveRecord, "bsm/sso/client/cached/active_record"
2
+ autoload :ActiveRecord, 'bsm/sso/client/cached/active_record'
3
3
  end
@@ -10,7 +10,6 @@ module Bsm::Sso::Client::Cached::ActiveRecord
10
10
  end
11
11
 
12
12
  module ClassMethods
13
-
14
13
  # Retrieve cached
15
14
  def sso_find(id)
16
15
  where(id: id).first || super
@@ -26,13 +25,12 @@ module Bsm::Sso::Client::Cached::ActiveRecord
26
25
  end
27
26
 
28
27
  # Cache!
29
- def sso_cache(resource, action = nil)
28
+ def sso_cache(resource, _action=nil)
30
29
  record = where(id: resource.id).first_or_initialize
31
30
  attrs = [resource.attributes.slice(*record.attribute_names)]
32
31
  record.assign_attributes(*attrs)
33
32
  record.changed? ? record.save! : record.touch
34
33
  record
35
34
  end
36
-
37
35
  end
38
36
  end
@@ -19,8 +19,8 @@ class Bsm::Sso::Client::FailureApp < ActionController::Metal
19
19
  end
20
20
 
21
21
  def redirect!
22
- path = request.env["warden.options"].try(:[], :attempted_path) || request.fullpath
23
- redirect_to Bsm::Sso::Client.user_class.sso_sign_in_url(:service => service_url(path)), :status => 303
22
+ path = request.env['warden.options'].try(:[], :attempted_path) || request.fullpath
23
+ redirect_to Bsm::Sso::Client.user_class.sso_sign_in_url(service: service_url(path)), status: 303
24
24
  end
25
25
 
26
26
  def respond_with_js!
@@ -32,7 +32,7 @@ class Bsm::Sso::Client::FailureApp < ActionController::Metal
32
32
  def stop!
33
33
  self.status = 403
34
34
  self.content_type = Mime[:html]
35
- self.response_body = "<html><head></head><body><h1>Access Forbidden</h1></body></html>"
35
+ self.response_body = '<html><head></head><body><h1>Access Forbidden</h1></body></html>'
36
36
  end
37
37
 
38
38
  end
@@ -2,16 +2,12 @@ require 'bsm/sso/client'
2
2
  require 'rails'
3
3
 
4
4
  class Bsm::Sso::Client::Railtie < ::Rails::Railtie
5
- RESCUE_RESPONSES = { "Bsm::Sso::Client::UnauthorizedAccess" => :forbidden }.freeze
5
+ RESCUE_RESPONSES = { 'Bsm::Sso::Client::UnauthorizedAccess' => :forbidden }.freeze
6
6
 
7
7
  config.app_middleware.use RailsWarden::Manager do |manager|
8
8
  manager.default_strategies :sso_ticket, :sso_http_auth
9
9
  manager.failure_app = Bsm::Sso::Client::FailureApp
10
- Bsm::Sso::Client.warden_configuration.call(manager) if Bsm::Sso::Client.warden_configuration
10
+ Bsm::Sso::Client.warden_configuration&.call(manager)
11
11
  end
12
-
13
- if config.action_dispatch.key?(:rescue_responses)
14
- config.action_dispatch.rescue_responses.merge!(RESCUE_RESPONSES)
15
- end
16
-
12
+ config.action_dispatch.rescue_responses.merge!(RESCUE_RESPONSES) if config.action_dispatch.key?(:rescue_responses)
17
13
  end
@@ -15,9 +15,9 @@ class Bsm::Sso::Client::Strategies::HttpAuth < Bsm::Sso::Client::Strategies::Bas
15
15
 
16
16
  def token
17
17
  return nil unless request.authorization && request.authorization =~ /^Basic (.*)/m
18
- @token ||= Base64.decode64($1).split(/:/, 2).first
18
+
19
+ @token ||= Base64.decode64(Regexp.last_match(1)).split(/:/, 2).first
19
20
  end
20
21
 
21
22
  Warden::Strategies.add :sso_http_auth, self
22
23
  end
23
-
@@ -12,5 +12,3 @@ class Bsm::Sso::Client::Strategies::Ticket < Bsm::Sso::Client::Strategies::Base
12
12
 
13
13
  Warden::Strategies.add :sso_ticket, self
14
14
  end
15
-
16
-
@@ -5,7 +5,6 @@ module Bsm
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
-
9
8
  before do
10
9
  @request.env['action_controller.instance'] = @controller
11
10
  @request.env['warden'] = warden
@@ -14,9 +13,8 @@ module Bsm
14
13
  let :warden do
15
14
  Warden::Proxy.new @request.env, Warden::Manager.new(nil)
16
15
  end
17
-
18
16
  end
19
17
  end
20
18
  end
21
19
  end
22
- end
20
+ end
@@ -1,8 +1,6 @@
1
1
  module Bsm::Sso::Client::UrlHelpers
2
-
3
- def service_url(path = request.fullpath)
2
+ def service_url(path=request.fullpath)
4
3
  part = Regexp.escape({ ticket: params.fetch(:ticket, '') }.to_query)
5
- request.base_url + path.sub(/#{part}\&?/, '').chomp("&").chomp("?")
4
+ request.base_url + path.sub(/#{part}\&?/, '').chomp('&').chomp('?')
6
5
  end
7
-
8
6
  end
@@ -3,48 +3,48 @@ class Bsm::Sso::Client::User < Bsm::Sso::Client::AbstractResource
3
3
  class << self
4
4
 
5
5
  def all(options={})
6
- get("/users", options.reverse_merge(:expects => [200, 404, 422], :collection => true))
6
+ get('/users', options.reverse_merge(expects: [200, 404, 422], collection: true))
7
7
  end
8
8
 
9
9
  def sso_find(id)
10
- Bsm::Sso::Client.cache_store.fetch "users:#{id}", :expires_in => Bsm::Sso::Client.expire_after do
11
- get "/users/#{id}", :expects => [200, 404, 422]
10
+ Bsm::Sso::Client.cache_store.fetch "users:#{id}", expires_in: Bsm::Sso::Client.expire_after do
11
+ get "/users/#{id}", expects: [200, 404, 422]
12
12
  end
13
13
  end
14
14
 
15
15
  def sso_consume(ticket, service)
16
- get "/consume", :query => { :ticket => ticket, :service => service }
16
+ get '/consume', query: { ticket: ticket, service: service }
17
17
  end
18
18
 
19
19
  def sso_authorize(token)
20
- get "/authorize", :query => { :auth_token => token }
20
+ get '/authorize', query: { auth_token: token }
21
21
  end
22
22
 
23
23
  def sso_authenticate(credentials)
24
- get "/authenticate", :query => credentials.slice(:email, :password)
24
+ get '/authenticate', query: credentials.slice(:email, :password)
25
25
  end
26
26
 
27
- def sso_sign_in_url(params = {})
27
+ def sso_sign_in_url(params={})
28
28
  sso_custom_absolute_method_root_url(:sign_in, params)
29
29
  end
30
30
 
31
- def sso_sign_out_url(params = {})
31
+ def sso_sign_out_url(params={})
32
32
  sso_custom_absolute_method_root_url(:sign_out, params)
33
33
  end
34
34
 
35
35
  private
36
36
 
37
- def sso_custom_absolute_method_root_url(method_name, params = {})
38
- conn = site.data
39
- port = ""
40
- unless conn[:port].blank? || (conn[:scheme] == "http" && conn[:port].to_i == 80) || (conn[:scheme] == "https" && conn[:port].to_i == 443)
41
- port = ":#{conn[:port]}"
42
- end
43
-
44
- url = "#{conn[:scheme]}://#{conn[:host]}#{port}/#{method_name.to_s}"
45
- url << "?#{params.to_h.to_query}" unless params.empty?
46
- url
37
+ def sso_custom_absolute_method_root_url(method_name, params={})
38
+ conn = site.data
39
+ port = ''
40
+ unless conn[:port].blank? || (conn[:scheme] == 'http' && conn[:port].to_i == 80) || (conn[:scheme] == 'https' && conn[:port].to_i == 443)
41
+ port = ":#{conn[:port]}"
47
42
  end
48
43
 
44
+ url = "#{conn[:scheme]}://#{conn[:host]}#{port}/#{method_name}"
45
+ url << "?#{params.to_h.to_query}" unless params.empty?
46
+ url
47
+ end
48
+
49
49
  end
50
50
  end
@@ -3,36 +3,33 @@ module Bsm::Sso::Client::UserMethods
3
3
 
4
4
  included do
5
5
  class << self
6
- delegate :sso_sign_in_url, :sso_sign_out_url, :to => :"Bsm::Sso::Client::User"
6
+ delegate :sso_sign_in_url, :sso_sign_out_url, to: :"Bsm::Sso::Client::User"
7
7
  end
8
8
  end
9
9
 
10
10
  module ClassMethods
11
-
12
11
  def sso_find(id)
13
12
  resource = Bsm::Sso::Client::User.sso_find(id)
14
13
  sso_cache(resource, :find) if resource
15
14
  end
16
15
 
17
- def sso_consume(*a)
18
- resource = Bsm::Sso::Client::User.sso_consume(*a)
16
+ def sso_consume(*args)
17
+ resource = Bsm::Sso::Client::User.sso_consume(*args)
19
18
  sso_cache(resource, :consume) if resource
20
19
  end
21
20
 
22
- def sso_authenticate(*a)
23
- resource = Bsm::Sso::Client::User.sso_authenticate(*a)
21
+ def sso_authenticate(*args)
22
+ resource = Bsm::Sso::Client::User.sso_authenticate(*args)
24
23
  sso_cache(resource, :authenticate) if resource
25
24
  end
26
25
 
27
- def sso_authorize(*a)
28
- resource = Bsm::Sso::Client::User.sso_authorize(*a)
26
+ def sso_authorize(*args)
27
+ resource = Bsm::Sso::Client::User.sso_authorize(*args)
29
28
  sso_cache(resource, :authorize) if resource
30
29
  end
31
30
 
32
- def sso_cache(resource, action = nil)
31
+ def sso_cache(resource, _action=nil)
33
32
  new(resource.attributes)
34
33
  end
35
-
36
34
  end
37
35
  end
38
-
@@ -17,8 +17,8 @@ Warden::Manager.after_set_user do |user, warden, opts|
17
17
  warden.session(scope)['expire_at'] = Bsm::Sso::Client.expire_after.from_now.to_i
18
18
  elsif opts[:event] == :fetch &&
19
19
  warden.session(scope)['expire_at'].to_i < Time.now.to_i &&
20
- warden.request.env["REQUEST_METHOD"] == "GET"
20
+ warden.request.env['REQUEST_METHOD'] == 'GET'
21
21
  warden.logout(scope)
22
- throw :warden, :scope => scope, :message => :timeout
22
+ throw :warden, scope: scope, message: :timeout
23
23
  end
24
24
  end
metadata CHANGED
@@ -1,37 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bsm-sso-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dimitrij Denissenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-24 00:00:00.000000000 Z
11
+ date: 2019-08-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: railties
14
+ name: actionpack
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 5.0.0
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: 6.0.0
19
+ version: '0'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - ">="
28
25
  - !ruby/object:Gem::Version
29
- version: 5.0.0
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: 6.0.0
26
+ version: '0'
33
27
  - !ruby/object:Gem::Dependency
34
- name: actionpack
28
+ name: activesupport
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
31
  - - ">="
@@ -45,19 +39,25 @@ dependencies:
45
39
  - !ruby/object:Gem::Version
46
40
  version: '0'
47
41
  - !ruby/object:Gem::Dependency
48
- name: activesupport
42
+ name: excon
49
43
  requirement: !ruby/object:Gem::Requirement
50
44
  requirements:
51
45
  - - ">="
52
46
  - !ruby/object:Gem::Version
53
- version: '0'
47
+ version: 0.27.5
48
+ - - "<"
49
+ - !ruby/object:Gem::Version
50
+ version: '1'
54
51
  type: :runtime
55
52
  prerelease: false
56
53
  version_requirements: !ruby/object:Gem::Requirement
57
54
  requirements:
58
55
  - - ">="
59
56
  - !ruby/object:Gem::Version
60
- version: '0'
57
+ version: 0.27.5
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '1'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rails_warden
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -73,27 +73,27 @@ dependencies:
73
73
  - !ruby/object:Gem::Version
74
74
  version: 0.5.0
75
75
  - !ruby/object:Gem::Dependency
76
- name: excon
76
+ name: railties
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - ">="
80
80
  - !ruby/object:Gem::Version
81
- version: 0.27.5
81
+ version: 5.0.0
82
82
  - - "<"
83
83
  - !ruby/object:Gem::Version
84
- version: '1'
84
+ version: 7.0.0
85
85
  type: :runtime
86
86
  prerelease: false
87
87
  version_requirements: !ruby/object:Gem::Requirement
88
88
  requirements:
89
89
  - - ">="
90
90
  - !ruby/object:Gem::Version
91
- version: 0.27.5
91
+ version: 5.0.0
92
92
  - - "<"
93
93
  - !ruby/object:Gem::Version
94
- version: '1'
94
+ version: 7.0.0
95
95
  - !ruby/object:Gem::Dependency
96
- name: cancan
96
+ name: activerecord
97
97
  requirement: !ruby/object:Gem::Requirement
98
98
  requirements:
99
99
  - - ">="
@@ -107,7 +107,7 @@ dependencies:
107
107
  - !ruby/object:Gem::Version
108
108
  version: '0'
109
109
  - !ruby/object:Gem::Dependency
110
- name: activerecord
110
+ name: cancan
111
111
  requirement: !ruby/object:Gem::Requirement
112
112
  requirements:
113
113
  - - ">="
@@ -121,7 +121,7 @@ dependencies:
121
121
  - !ruby/object:Gem::Version
122
122
  version: '0'
123
123
  - !ruby/object:Gem::Dependency
124
- name: rake
124
+ name: inherited_resources
125
125
  requirement: !ruby/object:Gem::Requirement
126
126
  requirements:
127
127
  - - ">="
@@ -148,6 +148,20 @@ dependencies:
148
148
  - - ">="
149
149
  - !ruby/object:Gem::Version
150
150
  version: '0'
151
+ - !ruby/object:Gem::Dependency
152
+ name: rake
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
151
165
  - !ruby/object:Gem::Dependency
152
166
  name: rspec
153
167
  requirement: !ruby/object:Gem::Requirement
@@ -177,7 +191,7 @@ dependencies:
177
191
  - !ruby/object:Gem::Version
178
192
  version: '0'
179
193
  - !ruby/object:Gem::Dependency
180
- name: shoulda-matchers
194
+ name: rubocop
181
195
  requirement: !ruby/object:Gem::Requirement
182
196
  requirements:
183
197
  - - ">="
@@ -191,7 +205,7 @@ dependencies:
191
205
  - !ruby/object:Gem::Version
192
206
  version: '0'
193
207
  - !ruby/object:Gem::Dependency
194
- name: webmock
208
+ name: shoulda-matchers
195
209
  requirement: !ruby/object:Gem::Requirement
196
210
  requirements:
197
211
  - - ">="
@@ -219,7 +233,7 @@ dependencies:
219
233
  - !ruby/object:Gem::Version
220
234
  version: '0'
221
235
  - !ruby/object:Gem::Dependency
222
- name: inherited_resources
236
+ name: webmock
223
237
  requirement: !ruby/object:Gem::Requirement
224
238
  requirements:
225
239
  - - ">="
@@ -267,15 +281,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
267
281
  requirements:
268
282
  - - ">="
269
283
  - !ruby/object:Gem::Version
270
- version: 2.2.2
284
+ version: '2.5'
271
285
  required_rubygems_version: !ruby/object:Gem::Requirement
272
286
  requirements:
273
287
  - - ">="
274
288
  - !ruby/object:Gem::Version
275
289
  version: '0'
276
290
  requirements: []
277
- rubyforge_project:
278
- rubygems_version: 2.7.7
291
+ rubygems_version: 3.0.3
279
292
  signing_key:
280
293
  specification_version: 4
281
294
  summary: BSM's internal SSO client