From 06e2b151536ecca58585545ce28d10bd2c064887 Mon Sep 17 00:00:00 2001 From: jasl Date: Wed, 13 Mar 2019 04:09:06 +0800 Subject: [PATCH] scopes field accepts Array --- NEWS.md | 1 + lib/doorkeeper/models/concerns/scopes.rb | 4 ++++ spec/lib/models/scopes_spec.rb | 14 +++++++++++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index 44e3e3b44..ce41aa71a 100644 --- a/NEWS.md +++ b/NEWS.md @@ -8,6 +8,7 @@ User-visible changes worth mentioning. ## master - [#1215] Fix deprecates for Rails 6. +- [#1214] Scopes field accepts array. - [#1209] Fix tokens validation for Token Introspection request. - [#1202] Use correct HTTP status codes for error responses. diff --git a/lib/doorkeeper/models/concerns/scopes.rb b/lib/doorkeeper/models/concerns/scopes.rb index cdec0b656..9ec2ab0de 100644 --- a/lib/doorkeeper/models/concerns/scopes.rb +++ b/lib/doorkeeper/models/concerns/scopes.rb @@ -7,6 +7,10 @@ def scopes OAuth::Scopes.from_string(scopes_string) end + def scopes=(value) + super Array(value).join(' ') + end + def scopes_string self[:scopes] end diff --git a/spec/lib/models/scopes_spec.rb b/spec/lib/models/scopes_spec.rb index 43da71f7a..bd65fe053 100644 --- a/spec/lib/models/scopes_spec.rb +++ b/spec/lib/models/scopes_spec.rb @@ -2,7 +2,7 @@ describe 'Doorkeeper::Models::Scopes' do subject do - Class.new(Hash) do + Class.new(Struct.new(:scopes)) do include Doorkeeper::Models::Scopes end.new end @@ -21,6 +21,18 @@ end end + describe :scopes= do + it 'accepts String' do + subject.scopes = 'private admin' + expect(subject.scopes_string).to eq('private admin') + end + + it 'accepts Array' do + subject.scopes = %w[private admin] + expect(subject.scopes_string).to eq('private admin') + end + end + describe :scopes_string do it 'is a `Scopes` class' do expect(subject.scopes_string).to eq('public admin')