class Doorkeeper::OAuth::Scopes

def self.from_array(array)

def self.from_array(array)
  new.tap do |scope|
    scope.add(*array)
  end
end

def self.from_string(string)

def self.from_string(string)
  string ||= ""
  new.tap do |scope|
    scope.add(*string.split)
  end
end

def &(other)

def &(other)
  self.class.from_array(all & to_array(other))
end

def +(other)

def +(other)
  self.class.from_array(all + to_array(other))
end

def <=>(other)

def <=>(other)
  if other.respond_to?(:map)
    map(&:to_s).sort <=> other.map(&:to_s).sort
  else
    super
  end
end

def add(*scopes)

def add(*scopes)
  @scopes.push(*scopes.map(&:to_s))
  @scopes.uniq!
end

def all

def all
  @scopes
end

def exists?(scope)

def exists?(scope)
  @scopes.include? scope.to_s
end

def initialize

def initialize
  @scopes = []
end

def scopes?(scopes)

def scopes?(scopes)
  scopes.all? { |scope| exists?(scope) }
end

def to_array(other)

def to_array(other)
  case other
  when Scopes
    other.all
  else
    other.to_a
  end
end

def to_s

def to_s
  @scopes.join(" ")
end