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
118 lines (102 loc) · 2.89 KB
/
Copy pathapi.rb
File metadata and controls
118 lines (102 loc) · 2.89 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
# -*- encoding: utf-8 -*-
require 'github_api/configuration'
require 'github_api/connection'
require 'github_api/validations'
require 'github_api/request'
require 'github_api/mime_type'
require 'github_api/rate_limit'
require 'github_api/core_ext/hash'
require 'github_api/core_ext/array'
require 'github_api/compatibility'
require 'github_api/api/actions'
require 'github_api/api_factory'
module Github
class API
include Constants
include Authorization
include MimeType
include Connection
include Request
include RateLimit
# TODO consider these optional in a stack
include Validations
include ParameterFilter
include Normalizer
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={}, &block)
super()
setup options
set_api_client
client if client_id? && client_secret?
self.instance_eval(&block) if block_given?
end
def setup(options={})
options = Github.options.merge(options)
Configuration::VALID_OPTIONS_KEYS.each do |key|
send("#{key}=", options[key])
end
process_basic_auth(options[:basic_auth])
end
# Extract login and password from basic_auth parameter
def process_basic_auth(auth)
case auth
when String
self.login, self.password = auth.split(':', 2)
when Hash
self.login = auth[:login]
self.password = auth[:password]
end
end
# Assigns current api class
def set_api_client
Github.api_client = self
end
# 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
def _update_user_repo_params(user_name, repo_name=nil) # :nodoc:
self.user = user_name || self.user
self.repo = repo_name || self.repo
end
# TODO: See whether still needed, consider adding to core_exts
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:
# params['resource'] = resource
# params['mime_type'] = params['mime_type'] || :raw
end
end # API
end # Github