githubris 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +5 -5
- data/Rakefile +11 -2
- data/githubris.gemspec +3 -2
- data/lib/githubris.rb +1 -11
- data/lib/githubris/api.rb +61 -40
- data/lib/githubris/api/gist.rb +40 -3
- data/lib/githubris/api/http.rb +13 -4
- data/lib/githubris/api/json.rb +16 -0
- data/lib/githubris/base.rb +2 -64
- data/lib/githubris/custom_attributes.rb +40 -0
- data/lib/githubris/gist.rb +53 -7
- data/lib/githubris/oauth.rb +23 -18
- data/lib/githubris/publicity.rb +2 -2
- data/lib/githubris/version.rb +1 -1
- data/spec/githubris/api/gist_spec.rb +2 -6
- data/spec/githubris/api_spec.rb +3 -22
- data/spec/githubris/base_spec.rb +1 -1
- data/spec/githubris/gist_spec.rb +117 -26
- data/spec/githubris/oauth_spec.rb +12 -0
- data/spec/githubris/publicity_spec.rb +4 -4
- data/spec/githubris/user_spec.rb +2 -10
- data/spec/githubris_spec.rb +2 -5
- data/spec/support/fixtures/vcr_cassettes/Githubris.yml +137 -0
- data/spec/support/fixtures/vcr_cassettes/Githubris_API.yml +118 -0
- data/spec/support/fixtures/vcr_cassettes/Githubris_API/_authenticated_/when_authenticated_with_good_credentials.yml +6 -6
- data/spec/support/fixtures/vcr_cassettes/Githubris_API_Gist.yml +197 -0
- data/spec/support/fixtures/vcr_cassettes/Githubris_API_User/_get_authenticated_user/without_credentials.yml +3 -3
- data/spec/support/fixtures/vcr_cassettes/Githubris_API_User/_get_user.yml +5 -5
- data/spec/support/fixtures/vcr_cassettes/Githubris_Gist.yml +1009 -0
- data/spec/support/fixtures/vcr_cassettes/Githubris_User.yml +196 -0
- data/spec/support/vcr.rb +1 -0
- metadata +78 -39
- data/lib/githubris/comment.rb +0 -1
- data/lib/githubris/gist/file.rb +0 -2
- data/lib/githubris/issue.rb +0 -6
- data/lib/githubris/organization.rb +0 -5
- data/lib/githubris/repository.rb +0 -7
- data/spec/support/fixtures/vcr_cassettes/Githubris/_find_gist.yml +0 -44
- data/spec/support/fixtures/vcr_cassettes/Githubris/_find_user.yml +0 -40
- data/spec/support/fixtures/vcr_cassettes/Githubris/_public_gists.yml +0 -55
- data/spec/support/fixtures/vcr_cassettes/Githubris_API/_authenticated_/when_authenticated_with_bad_credentials.yml +0 -40
- data/spec/support/fixtures/vcr_cassettes/Githubris_API/_authenticated_/when_there_are_no_credentials.yml +0 -42
- data/spec/support/fixtures/vcr_cassettes/Githubris_API_Gist/_get_gist.yml +0 -44
- data/spec/support/fixtures/vcr_cassettes/Githubris_API_Gist/_get_public_gists.yml +0 -107
- data/spec/support/fixtures/vcr_cassettes/Githubris_API_Gist/_get_user_gists.yml +0 -43
- data/spec/support/fixtures/vcr_cassettes/Githubris_Gist/_save.yml +0 -42
- data/spec/support/fixtures/vcr_cassettes/Githubris_Gist/_save/when_authenticated.yml +0 -44
- data/spec/support/fixtures/vcr_cassettes/Githubris_Gist/any_gist.yml +0 -44
- data/spec/support/fixtures/vcr_cassettes/Githubris_Gist/given_a_gist_full_of_data.yml +0 -44
- data/spec/support/fixtures/vcr_cassettes/Githubris_Gist/on_a_gist_with_an_id.yml +0 -44
- data/spec/support/fixtures/vcr_cassettes/Githubris_Gist/on_a_gist_with_an_id/_reload.yml +0 -44
- data/spec/support/fixtures/vcr_cassettes/Githubris_User/_gists.yml +0 -43
- data/spec/support/fixtures/vcr_cassettes/Githubris_User/_reload.yml +0 -40
- data/spec/support/fixtures/vcr_cassettes/Githubris_User/_reload/on_a_user_with_a_login.yml +0 -40
- data/spec/support/fixtures/vcr_cassettes/Githubris_User/_reload/on_a_user_without_a_login.yml +0 -40
- data/spec/support/fixtures/vcr_cassettes/Githubris_User/_starred_gists/on_an_authenticated_user.yml +0 -82
data/.travis.yml
CHANGED
data/Rakefile
CHANGED
@@ -1,7 +1,16 @@
|
|
1
1
|
require 'bundler/gem_tasks'
|
2
|
+
require 'bundler/setup'
|
2
3
|
require 'rspec/core/rake_task'
|
3
4
|
require 'flay_task'
|
4
5
|
require 'flog_task'
|
6
|
+
require 'pry'
|
7
|
+
|
8
|
+
Bundler.setup
|
9
|
+
|
10
|
+
task :console do
|
11
|
+
Bundler.require
|
12
|
+
pry
|
13
|
+
end
|
5
14
|
|
6
15
|
RSpec::Core::RakeTask.new :spec do |t|
|
7
16
|
t.rspec_opts = '--color --format=documentation'
|
@@ -20,5 +29,5 @@ FlayTask.new &FLAY_FLOG_OPTS_BLOCK
|
|
20
29
|
FlogTask.new &FLAY_FLOG_OPTS_BLOCK
|
21
30
|
|
22
31
|
task :ci => [:spec]
|
23
|
-
task :
|
24
|
-
task :default => [:cov, :spec]
|
32
|
+
task :specs => :spec
|
33
|
+
task :default => [:cov, :spec, :flay, :flog]
|
data/githubris.gemspec
CHANGED
@@ -16,7 +16,8 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
17
|
s.require_paths = ["lib"]
|
18
18
|
|
19
|
-
s.add_dependency('httparty', '
|
20
|
-
s.add_dependency('multi_json'
|
19
|
+
s.add_dependency('httparty', '>= 0.8.3')
|
20
|
+
s.add_dependency('multi_json')
|
21
|
+
s.add_dependency('yajl-ruby')
|
21
22
|
s.add_dependency('addressable', '~> 2.2.7')
|
22
23
|
end
|
data/lib/githubris.rb
CHANGED
@@ -1,21 +1,11 @@
|
|
1
1
|
class Githubris
|
2
2
|
autoload :API, 'githubris/api'
|
3
3
|
autoload :Base, 'githubris/base'
|
4
|
-
autoload :
|
5
|
-
autoload :Comment, 'githubris/comment'
|
6
|
-
autoload :Commit, 'githubris/commit'
|
4
|
+
autoload :CustomAttributes, 'githubris/custom_attributes'
|
7
5
|
autoload :Error, 'githubris/error'
|
8
|
-
autoload :Event, 'githubris/event'
|
9
6
|
autoload :Gist, 'githubris/gist'
|
10
|
-
autoload :Issue, 'githubris/issue'
|
11
7
|
autoload :OAuth, 'githubris/oauth'
|
12
|
-
autoload :Organization, 'githubris/organization'
|
13
8
|
autoload :Publicity, 'githubris/publicity'
|
14
|
-
autoload :PullRequest, 'githubris/pull_request'
|
15
|
-
autoload :Reference, 'githubris/reference'
|
16
|
-
autoload :Repository, 'githubris/repository'
|
17
|
-
autoload :Tag, 'githubris/tag'
|
18
|
-
autoload :Tree, 'githubris/tree'
|
19
9
|
autoload :User, 'githubris/user'
|
20
10
|
autoload :Version, 'githubris/version'
|
21
11
|
|
data/lib/githubris/api.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
require 'addressable/uri'
|
2
|
+
require 'yajl'
|
2
3
|
|
3
4
|
class Githubris::API
|
4
|
-
|
5
|
-
autoload :HTTP, 'githubris/api/http'
|
6
|
-
include Githubris::API::HTTP
|
7
|
-
autoload :Gist, 'githubris/api/gist'
|
5
|
+
require 'githubris/api/gist'
|
8
6
|
include Githubris::API::Gist
|
9
|
-
|
7
|
+
require 'githubris/api/http'
|
8
|
+
include Githubris::API::HTTP
|
9
|
+
require 'githubris/api/json'
|
10
|
+
include Githubris::API::JSON
|
11
|
+
require 'githubris/api/user'
|
10
12
|
include Githubris::API::User
|
11
13
|
|
12
14
|
def initialize
|
@@ -18,6 +20,7 @@ class Githubris::API
|
|
18
20
|
{
|
19
21
|
:scheme => 'https',
|
20
22
|
:host => 'api.github.com',
|
23
|
+
:query => ''
|
21
24
|
}
|
22
25
|
end
|
23
26
|
|
@@ -29,7 +32,7 @@ class Githubris::API
|
|
29
32
|
end
|
30
33
|
|
31
34
|
def oauth(client_id, client_secret)
|
32
|
-
|
35
|
+
Githubris::OAuth.new client_id, client_secret, self
|
33
36
|
end
|
34
37
|
|
35
38
|
def authenticated?
|
@@ -39,59 +42,77 @@ class Githubris::API
|
|
39
42
|
end
|
40
43
|
|
41
44
|
def get_data_from(path, options={})
|
42
|
-
|
43
|
-
data = get(path, options)
|
44
|
-
data = MultiJson.decode(data, :symbolize_keys => true)
|
45
|
-
raise build_error data if error_data?(data)
|
46
|
-
|
47
|
-
embed_self_in data
|
48
|
-
end
|
49
|
-
|
50
|
-
def build_error data
|
51
|
-
words = data[:message].split(' ')
|
52
|
-
error_class_name = words.map {|word| word.capitalize}.join
|
53
|
-
Githubris::Error.const_get(error_class_name)
|
45
|
+
handle_request_data get(path, options)
|
54
46
|
end
|
55
47
|
|
56
48
|
def get(path, options={})
|
57
|
-
|
49
|
+
set_request_path(path)
|
58
50
|
@target.query_values = options
|
59
|
-
|
60
|
-
end
|
61
|
-
|
62
|
-
def error_data?(data)
|
63
|
-
data.is_a?(Hash) and data[:message]
|
51
|
+
dump_json(_get.parsed_response)
|
64
52
|
end
|
65
53
|
|
66
54
|
def post_oauth_access_token(params)
|
67
|
-
@target.query ||= ''
|
68
55
|
@target.query += _post(oauth_access_token_url, :query => params)
|
69
|
-
@
|
56
|
+
@options[:default_params] ||= {}
|
57
|
+
@options[:default_params][:access_token] = @target.query_values['access_token']
|
70
58
|
end
|
71
59
|
|
72
60
|
def post_data_to(path, params)
|
73
|
-
|
74
|
-
|
75
|
-
|
61
|
+
handle_request_data post(path, dump_json(params))
|
62
|
+
end
|
63
|
+
|
64
|
+
def post(path, params)
|
65
|
+
set_request(path, params)
|
66
|
+
dump_json(_post.parsed_response)
|
67
|
+
end
|
68
|
+
|
69
|
+
def patch_data_to(path, params)
|
70
|
+
handle_request_data patch(path, dump_json(params))
|
71
|
+
end
|
72
|
+
|
73
|
+
def patch(path, params)
|
74
|
+
set_request(path, params)
|
75
|
+
dump_json(_patch.parsed_response)
|
76
|
+
end
|
76
77
|
|
78
|
+
private
|
79
|
+
|
80
|
+
def set_request(path, params)
|
81
|
+
set_request_path(path)
|
82
|
+
set_request_params(params)
|
83
|
+
end
|
84
|
+
|
85
|
+
def set_request_params(params)
|
86
|
+
@options[:body] = params
|
87
|
+
end
|
88
|
+
|
89
|
+
def set_request_path(path)
|
90
|
+
@target.path = path
|
91
|
+
end
|
92
|
+
|
93
|
+
def handle_request_data(data)
|
94
|
+
data = load_json(data) if data.is_a? String
|
95
|
+
raise build_error data if error_data?(data)
|
77
96
|
embed_self_in data
|
78
97
|
end
|
79
98
|
|
99
|
+
def build_error data
|
100
|
+
words = data[:message].split(' ')
|
101
|
+
error_class_name = words.map {|word| word.capitalize}.join
|
102
|
+
Githubris::Error.const_get(error_class_name)
|
103
|
+
end
|
104
|
+
|
105
|
+
def error_data?(data)
|
106
|
+
data.is_a?(Hash) and data[:message]
|
107
|
+
end
|
108
|
+
|
80
109
|
def embed_self_in(data)
|
81
|
-
this = self
|
82
110
|
if data.is_a? Array
|
83
|
-
data.
|
111
|
+
data.map {|data_el| embed_self_in(data_el) }
|
84
112
|
else
|
85
|
-
data[:_api] =
|
113
|
+
data[:_api] = self
|
114
|
+
data
|
86
115
|
end
|
87
|
-
|
88
|
-
data
|
89
|
-
end
|
90
|
-
|
91
|
-
def post(path, params)
|
92
|
-
@target.path = path
|
93
|
-
@options[:body] = params
|
94
|
-
MultiJson.encode(_post(@target.to_s))
|
95
116
|
end
|
96
117
|
|
97
118
|
def oauth_access_token_url
|
data/lib/githubris/api/gist.rb
CHANGED
@@ -16,10 +16,39 @@ module Githubris::API::Gist
|
|
16
16
|
get_gist_from(gist_path(id))
|
17
17
|
end
|
18
18
|
|
19
|
+
def put_gist_star(id)
|
20
|
+
set_request_path(gist_star_path(id))
|
21
|
+
_put(@target.to_s, @options.merge(:headers => {'Content-Length' => '0'}))
|
22
|
+
end
|
23
|
+
|
24
|
+
def delete_gist_star(id)
|
25
|
+
set_request_path(gist_star_path(id))
|
26
|
+
_delete
|
27
|
+
end
|
28
|
+
|
29
|
+
def delete_gist(id)
|
30
|
+
set_request_path(gist_path(id))
|
31
|
+
_delete
|
32
|
+
end
|
33
|
+
|
34
|
+
def get_gist_starred?(id)
|
35
|
+
set_request_path(gist_star_path(id))
|
36
|
+
case _get.code
|
37
|
+
when 204
|
38
|
+
true
|
39
|
+
when 404
|
40
|
+
false
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
19
44
|
def post_gist(params)
|
20
45
|
post_gist_to(gists_path, params)
|
21
46
|
end
|
22
47
|
|
48
|
+
def patch_gist(id, params)
|
49
|
+
patch_gist_to(gist_path(id), params)
|
50
|
+
end
|
51
|
+
|
23
52
|
private
|
24
53
|
def get_gists_from(path, options={})
|
25
54
|
get_data_from(path, options).map do |gist_data|
|
@@ -35,8 +64,12 @@ module Githubris::API::Gist
|
|
35
64
|
Githubris::Gist.new post_data_to(path, params)
|
36
65
|
end
|
37
66
|
|
67
|
+
def patch_gist_to(path, params)
|
68
|
+
Githubris::Gist.new patch_data_to(path, params)
|
69
|
+
end
|
70
|
+
|
38
71
|
def public_gists_path
|
39
|
-
|
72
|
+
'/gists/public'
|
40
73
|
end
|
41
74
|
|
42
75
|
def user_gists_path(login)
|
@@ -44,11 +77,15 @@ module Githubris::API::Gist
|
|
44
77
|
end
|
45
78
|
|
46
79
|
def user_starred_gists_path
|
47
|
-
|
80
|
+
'/gists/starred'
|
81
|
+
end
|
82
|
+
|
83
|
+
def gist_star_path(id)
|
84
|
+
"/gists/#{id}/star"
|
48
85
|
end
|
49
86
|
|
50
87
|
def gist_path(id)
|
51
|
-
"
|
88
|
+
"/gists/#{id}"
|
52
89
|
end
|
53
90
|
|
54
91
|
def gists_path
|
data/lib/githubris/api/http.rb
CHANGED
@@ -2,11 +2,20 @@ require 'httparty'
|
|
2
2
|
|
3
3
|
module Githubris::API::HTTP
|
4
4
|
private
|
5
|
-
|
6
|
-
|
5
|
+
|
6
|
+
def self.define_httparty_method(*http_methods)
|
7
|
+
http_methods.each do |http_method|
|
8
|
+
module_eval http_method_string(http_method)
|
9
|
+
end
|
7
10
|
end
|
8
11
|
|
9
|
-
def
|
10
|
-
|
12
|
+
def self.http_method_string(http_method)
|
13
|
+
"""
|
14
|
+
def _#{http_method}(path=@target.to_s, options=@options)
|
15
|
+
HTTParty.#{http_method}(path, options)
|
16
|
+
end
|
17
|
+
"""
|
11
18
|
end
|
19
|
+
|
20
|
+
define_httparty_method :get, :post, :patch, :put, :delete
|
12
21
|
end
|
data/lib/githubris/base.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
class Githubris::Base
|
2
|
+
extend Githubris::CustomAttributes
|
3
|
+
|
2
4
|
def initialize attributes={}
|
3
5
|
@api = attributes.delete(:_api) || Githubris::API.new
|
4
6
|
@attributes = attributes
|
@@ -13,68 +15,4 @@ class Githubris::Base
|
|
13
15
|
other.instance_variable_get(:@attributes))
|
14
16
|
self
|
15
17
|
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
class << self
|
20
|
-
def accessible_attribute(*attr_names)
|
21
|
-
attr_names.each do |name|
|
22
|
-
class_eval accessible_methods_called(name)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def accessible_methods_called(name)
|
27
|
-
"""
|
28
|
-
def #{name}
|
29
|
-
@attributes[:#{name}]
|
30
|
-
end
|
31
|
-
|
32
|
-
def #{name}=(#{name})
|
33
|
-
@attributes[:#{name}] = #{name}
|
34
|
-
end
|
35
|
-
"""
|
36
|
-
end
|
37
|
-
|
38
|
-
def uri_attribute(*attr_names)
|
39
|
-
attr_names.each do |name|
|
40
|
-
class_eval uri_method_called(name)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def uri_method_called(name)
|
45
|
-
"""
|
46
|
-
def #{name}
|
47
|
-
URI.parse @attributes[:#{name}]
|
48
|
-
end
|
49
|
-
"""
|
50
|
-
end
|
51
|
-
|
52
|
-
def datetime_attribute(*attr_names)
|
53
|
-
attr_names.each do |name|
|
54
|
-
class_eval datetime_method_called(name)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def datetime_method_called(name)
|
59
|
-
"""
|
60
|
-
def #{name}
|
61
|
-
DateTime.parse @attributes[:#{name}]
|
62
|
-
end
|
63
|
-
"""
|
64
|
-
end
|
65
|
-
|
66
|
-
def readable_attribute(*attr_names)
|
67
|
-
attr_names.each do |name|
|
68
|
-
class_eval readable_method_called(name)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def readable_method_called(name)
|
73
|
-
"""
|
74
|
-
def #{name}
|
75
|
-
@attributes[:#{name}]
|
76
|
-
end
|
77
|
-
"""
|
78
|
-
end
|
79
|
-
end
|
80
18
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Githubris::CustomAttributes
|
2
|
+
private
|
3
|
+
|
4
|
+
def accessible_attribute(*attr_names)
|
5
|
+
readable_attribute(*attr_names)
|
6
|
+
writable_attribute(*attr_names)
|
7
|
+
end
|
8
|
+
|
9
|
+
def uri_attribute(*attr_names)
|
10
|
+
attr_names.each do |name|
|
11
|
+
define_method name do
|
12
|
+
URI.parse @attributes[name]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def datetime_attribute(*attr_names)
|
18
|
+
attr_names.each do |name|
|
19
|
+
define_method name do
|
20
|
+
DateTime.parse @attributes[name]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def readable_attribute(*attr_names)
|
26
|
+
attr_names.each do |name|
|
27
|
+
define_method name do
|
28
|
+
@attributes[name]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def writable_attribute(*attr_names)
|
34
|
+
attr_names.each do |name|
|
35
|
+
define_method "#{name}=" do |new_value|
|
36
|
+
@attributes[name] = new_value
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|