forked from piotrmurach/github
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi.rb
More file actions
133 lines (111 loc) · 3.17 KB
/
Copy pathapi.rb
File metadata and controls
133 lines (111 loc) · 3.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# encoding: utf-8
require 'github/configuration'
require 'github/connection'
require 'github/request'
module Github
# @private
class API
include Connection
include Request
VALID_API_KEYS = [
:per_page,
:pagination
]
attr_reader *Configuration::VALID_OPTIONS_KEYS
attr_accessor *VALID_API_KEYS
# Callback to update global configuration options
class_eval do
Configuration::VALID_OPTIONS_KEYS.each do |key|
define_method "#{key}=" do |arg|
self.instance_variable_set("@#{key}", arg)
Github.send("#{key}=", arg)
end
end
end
# Creates new API
def initialize(options = {})
options = Github.options.merge(options)
Configuration::VALID_OPTIONS_KEYS.each do |key|
send("#{key}=", options[key])
end
@cached = Hash.new
end
private
# Responds to attribute query
def method_missing(method, *args, &block)
if method.to_s =~ /^(.*)\?$/
return !self.send($1.to_s).nil?
else
super
end
end
def _validate_inputs(required, provided)
required.all? do |key|
provided.has_key? key
end
end
def _validate_presence_of(*params)
params.each do |param|
raise ArgumentError, "parameter cannot be nil" if param.nil?
end
end
def _validate_user_repo_params(user_name, repo_name)
raise ArgumentError, "[user] parameter cannot be nil" if user_name.nil?
raise ArgumentError, "[repo] parameter cannot be nil" if repo_name.nil?
end
def _update_user_repo_params(user_name, repo_name=nil)
self.user = user_name || self.user
self.repo = repo_name || self.repo
end
def _merge_user_into_params!(params)
params.merge!({ 'user' => self.user }) if user?
end
def _merge_user_repo_into_params!(params)
{ 'user' => self.user, 'repo' => self.repo }.merge!(params)
end
def _normalize_params_keys(params)
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! { |el| el.to_s }
else
params
end
return params
end
def _filter_params_keys(keys, params)
params.reject! { |k,v| !keys.include? k }
end
def _validate_params_values(options, params)
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 _merge_parameters(params)
end
def _extract_parameters(array)
if array.last.is_a?(Hash) && array.last.instance_of?(Hash)
pop
else
{}
end
end
# Passes configuration options to instantiated class
# TODO implement
# @private
def _create_instance(klass)
klass.new(options)
end
def _token_required
end
end # API
end # Github