class Github::API
@private
def self.inherited(klass)
def self.inherited(klass) klass.class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 def self.actions self.new.api_methods_in(#{klass}) end def actions api_methods_in(#{klass}) end RUBY_EVAL super end
def _create_instance(klass, options)
def _create_instance(klass, options) options.symbolize_keys! instance = klass.send :new, options Github.api_client = instance instance end
def _extract_parameters(array)
def _extract_parameters(array) if array.last.is_a?(Hash) && array.last.instance_of?(Hash) pop else {} end end
def _filter_params_keys(keys, params) # :nodoc:
Removes any keys from nested hashes that don't match predefiend keys
def _filter_params_keys(keys, params) # :nodoc: case params when Hash params.keys.each do |k, v| unless (keys.include?(k) or VALID_API_KEYS.include?(k)) params.delete(k) else _filter_params_keys(keys, params[k]) end end when Array params.map! do |el| _filter_params_keys(keys, el) end else params end return params end
def _hash_traverse(hash, &block)
def _hash_traverse(hash, &block) hash.each do |key, val| block.call(key) case val when Hash val.keys.each do |k| _hash_traverse(val, &block) end when Array val.each do |item| _hash_traverse(item, &block) end end end return hash end
def _merge_mime_type(resource, params) # :nodoc:
def _merge_mime_type(resource, params) # :nodoc: params['resource'] = resource params['mime_type'] = params['mime_type'] || :raw end
def _merge_user_into_params!(params) # :nodoc:
def _merge_user_into_params!(params) # :nodoc: params.merge!({ 'user' => self.user }) if user? end
def _merge_user_repo_into_params!(params) # :nodoc:
def _merge_user_repo_into_params!(params) # :nodoc: { 'user' => self.user, 'repo' => self.repo }.merge!(params) end
def _normalize_params_keys(params) # :nodoc:
Turns any keys from nested hashes including nested arrays into strings
def _normalize_params_keys(params) # :nodoc: case params when Hash params.keys.each do |k| params[k.to_s] = params.delete(k) _normalize_params_keys(params[k.to_s]) end when Array params.map! do |el| _normalize_params_keys(el) end else params.to_s end return params end
def _process_basic_auth(auth)
def _process_basic_auth(auth) case auth when String self.login = auth.split(':').first self.password = auth.split(':').last when Hash self.login = auth[:login] self.password = auth[:password] end end
def _set_api_client
def _set_api_client Github.api_client = self end
def _token_required
def _token_required end
def _update_user_repo_params(user_name, repo_name=nil) # :nodoc:
def _update_user_repo_params(user_name, repo_name=nil) # :nodoc: self.user = user_name || self.user self.repo = repo_name || self.repo end
def _validate_inputs(required, provided) # :nodoc:
def _validate_inputs(required, provided) # :nodoc: required.all? do |key| provided.has_deep_key? key end end
def _validate_params_values(options, params) # :nodoc:
Ensures that hash values contain predefined values
def _validate_params_values(options, params) # :nodoc: params.each do |k, v| next unless options.keys.include?(k) if options[k].is_a?(Array) && !options[k].include?(params[k]) raise ArgumentError, "Wrong value for #{k}, allowed: #{options[k].join(', ')}" elsif options[k].is_a?(Regexp) && !(options[k] =~ params[k]) raise ArgumentError, "String does not match the parameter value." end end end
def _validate_presence_of(*params) # :nodoc:
def _validate_presence_of(*params) # :nodoc: params.each do |param| raise ArgumentError, "parameter cannot be nil" if param.nil? end end
def _validate_user_repo_params(user_name, repo_name) # :nodoc:
def _validate_user_repo_params(user_name, repo_name) # :nodoc: raise ArgumentError, "[user] parameter cannot be nil" if user_name.nil? raise ArgumentError, "[repo] parameter cannot be nil" if repo_name.nil? end
def api_methods_in(klass)
def api_methods_in(klass) puts "---" (klass.send(:instance_methods, false) - ['actions']).sort.each do |rest_met| puts "|--> #{rest_met}" end klass.included_modules.each do |mod| if mod.to_s =~ /#{klass}/ puts "| \\ #{mod.to_s}" mod.instance_methods(false).each do |met| puts "| |--> #{met}" end puts "| /" end end puts "---" nil end
def initialize(options = {}, &block)
def initialize(options = {}, &block) options = Github.options.merge(options) Configuration::VALID_OPTIONS_KEYS.each do |key| send("#{key}=", options[key]) end _process_basic_auth(options[:basic_auth]) _set_api_client client if client_id? && client_secret? self.instance_eval(&block) if block_given? end
def method_missing(method, *args, &block) # :nodoc:
Responds to attribute query or attribute clear
def method_missing(method, *args, &block) # :nodoc: case method.to_s when /^(.*)\?$/ return !self.send($1.to_s).nil? when /^clear_(.*)$/ self.send("#{$1.to_s}=", nil) else super end end