travis-api/lib/travis/api/v3/access_control/generic.rb
2015-02-11 10:05:08 +01:00

73 lines
1.9 KiB
Ruby

module Travis::API::V3
class AccessControl::Generic
DEFAULT_LIMIT = 25
MAX_LIMT = 100
NO_LIMIT = 2 ** 62 - 1 # larges Fixnum on MRI
def self.for_request(type, payload, env)
end
def self.auth_type(*list)
list.each { |e| (AccessControl::REGISTER[e] ||= []) << self }
end
def visible?(object)
full_access? or dispatch(object)
end
def user
end
def logged_in?
false
end
# def limit(resource_type, value = nil)
# case value
# when ''.freeze, 'true'.freeze, true, nil then DEFAULT_LIMIT
# when 'false'.freeze, false then NO_LIMIT
# when /^\d+$/ then limit(resource_type, Integer(value))
# when 0..MAX_LIMIT then value
# end
# # # TODO move to config
# # value = Time.now.to_i if value == false or value == 'false'.freeze
# # value = 25 if value.nil? or value == ''.freezee or value ==
# # value = Integer(value)
# # value = 100 if value > 100 and not full_access?
# # value = 0 if value < 0
# rescue TypeError
# raise WrongParams, 'limit must be a positive integer'.freeze, resource_type: resource_type
# end
protected
def repository_visible?(repository)
return true if unrestricted_api? and not repository.private?
private_repository_visible?(repository)
end
def private_repository_visible?(repository)
false
end
def full_access?
false
end
def public_api?
!Travis.config.private_api
end
def unrestricted_api?
full_access? or logged_in? or public_api?
end
private
def dispatch(object, method = caller_locations.first.base_label)
method = object.class.name.underscore + ?_.freeze + method
send(method, object) if respond_to?(method, true)
end
end
end