gistation 1.0.0
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/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +85 -0
- data/Rakefile +12 -0
- data/gistation.gemspec +22 -0
- data/lib/gistation/gist.rb +45 -0
- data/lib/gistation/gist_file.rb +26 -0
- data/lib/gistation/gist_user.rb +34 -0
- data/lib/gistation/version.rb +3 -0
- data/lib/gistation.rb +21 -0
- data/test/aux_methods.rb +22 -0
- data/test/fixtures/gist_file_content.txt +92 -0
- data/test/fixtures/gist_user.json +31 -0
- data/test/fixtures/user_gists.json +248 -0
- data/test/gist_test.rb +43 -0
- data/test/gist_user_test.rb +21 -0
- data/test/test_helper.rb +28 -0
- metadata +119 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Lukas Alexandre
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
# Gistation
|
2
|
+
|
3
|
+
Gistation provides an API layer for reading an user Github Gists detailed info
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'gistation'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install gistation
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
gist_user = Gistation::GistUser.new 'lukelex' # #<Gistation::GistUser:0x007fe136c615a0 … >
|
23
|
+
|
24
|
+
gists = gist_user.gists # [#<Gistation::Gist:0x007fedac1ef478 … >, #<Gistation::Gist:0x007fedac1eef28 … >]
|
25
|
+
|
26
|
+
files = gists.files # [#<Gistation::GistFile:0x007f863cc12ef0 … >, #<Gistation::GistFile:0x007f863bb17ar3 … >]
|
27
|
+
|
28
|
+
files.first.content
|
29
|
+
|
30
|
+
=begin
|
31
|
+
alias g='git'
|
32
|
+
compdef g=git
|
33
|
+
alias gs='git status'
|
34
|
+
compdef _git gst=git-status
|
35
|
+
alias gpl='git pull'
|
36
|
+
...
|
37
|
+
=end
|
38
|
+
```
|
39
|
+
|
40
|
+
## Avaiable Properties
|
41
|
+
### GistUser
|
42
|
+
|
43
|
+
* id
|
44
|
+
* login
|
45
|
+
* email
|
46
|
+
* type
|
47
|
+
* company
|
48
|
+
* public_gists
|
49
|
+
* updated_at
|
50
|
+
* followers
|
51
|
+
* following
|
52
|
+
* blog
|
53
|
+
* hireable
|
54
|
+
* public_repos
|
55
|
+
* created_at
|
56
|
+
* bio
|
57
|
+
* name
|
58
|
+
* location
|
59
|
+
* gravatar_id
|
60
|
+
|
61
|
+
### Gist
|
62
|
+
|
63
|
+
* name
|
64
|
+
* type
|
65
|
+
* filename
|
66
|
+
* size
|
67
|
+
* raw_url
|
68
|
+
* language
|
69
|
+
|
70
|
+
###GistFile
|
71
|
+
|
72
|
+
* filename
|
73
|
+
* type
|
74
|
+
* size
|
75
|
+
* raw_url
|
76
|
+
* language
|
77
|
+
* content
|
78
|
+
|
79
|
+
## Contributing
|
80
|
+
|
81
|
+
1. Fork it
|
82
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
83
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
84
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
85
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
data/gistation.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/gistation/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Lukas Alexandre"]
|
6
|
+
gem.email = ["lukeskytm@gmail.com"]
|
7
|
+
gem.description = %q{Github Gist read layer}
|
8
|
+
gem.summary = %q{Gistation provides an API layer for reading an user Github Gists detailed info}
|
9
|
+
gem.homepage = "https://github.com/lukelex/gistation"
|
10
|
+
|
11
|
+
gem.files = `git ls-files`.split($\)
|
12
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.name = "gistation"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = Gistation::VERSION
|
17
|
+
|
18
|
+
gem.add_dependency 'json', '~> 1.7.6'
|
19
|
+
|
20
|
+
gem.add_development_dependency 'minitest', '~> 4.5.0'
|
21
|
+
gem.add_development_dependency 'fakeweb', '~> 1.3.0'
|
22
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require_relative 'gist_file'
|
2
|
+
|
3
|
+
class Gistation::Gist
|
4
|
+
FIELDS = [
|
5
|
+
:description, :forks_url, :updated_at,
|
6
|
+
:url, :html_url, :git_pull_url,
|
7
|
+
:public, :comments_url, :git_push_url,
|
8
|
+
:comments, :created_at, :id
|
9
|
+
]
|
10
|
+
|
11
|
+
attr_accessor *FIELDS
|
12
|
+
|
13
|
+
attr
|
14
|
+
|
15
|
+
def initialize(params={})
|
16
|
+
params.each do |key, value|
|
17
|
+
if FIELDS.include? key
|
18
|
+
self.send "#{key}=", value
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
@raw_files = params['files']
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.gists_for(user)
|
26
|
+
self.request_user_gists_info user
|
27
|
+
end
|
28
|
+
|
29
|
+
def files
|
30
|
+
@files ||= Gistation::GistFile.from_hash @raw_files
|
31
|
+
end
|
32
|
+
|
33
|
+
protected
|
34
|
+
def self.request_user_gists_info(user)
|
35
|
+
uri = URI("https://api.github.com/users/#{user.login}/gists")
|
36
|
+
|
37
|
+
Gistation.request_to_gist uri do |response|
|
38
|
+
gists = []
|
39
|
+
response.each do |gist_info|
|
40
|
+
gists << Gistation::Gist.new(gist_info)
|
41
|
+
end
|
42
|
+
gists
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Gistation::GistFile
|
2
|
+
FIELDS = [
|
3
|
+
:filename, :type, :language,
|
4
|
+
:size, :raw_url
|
5
|
+
]
|
6
|
+
|
7
|
+
attr_accessor *FIELDS
|
8
|
+
|
9
|
+
def initialize(params={})
|
10
|
+
params.values.first.each do |key, value|
|
11
|
+
if FIELDS.include? key.to_sym
|
12
|
+
instance_variable_set "@#{key}", value
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.from_hash(raw_files)
|
18
|
+
raw_files.map do |key, value|
|
19
|
+
new raw_files
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def content
|
24
|
+
@content ||= Gistation.request_to_gist URI(self.raw_url)
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'gistation/gist'
|
2
|
+
|
3
|
+
class Gistation::GistUser
|
4
|
+
API_URL = 'https://api.github.com/users/'
|
5
|
+
|
6
|
+
attr_reader :login
|
7
|
+
|
8
|
+
def initialize(user)
|
9
|
+
@login = user
|
10
|
+
self.request_user_info
|
11
|
+
end
|
12
|
+
|
13
|
+
def gists
|
14
|
+
@gists ||= Gistation::Gist.gists_for self
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
def request_user_info
|
19
|
+
uri = URI(API_URL + self.login)
|
20
|
+
|
21
|
+
Gistation.request_to_gist uri do |response|
|
22
|
+
self.fill_user_object response
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def fill_user_object(user_info)
|
27
|
+
user_info.each do |key, value|
|
28
|
+
unless value =~ /^http/
|
29
|
+
instance_variable_set "@#{key}".to_sym, value
|
30
|
+
self.class.send :attr_reader, key
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/gistation.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
require 'gistation/version'
|
5
|
+
|
6
|
+
require 'gistation/gist_user'
|
7
|
+
|
8
|
+
module Gistation
|
9
|
+
def self.request_to_gist(uri)
|
10
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
11
|
+
http.use_ssl = true if uri.scheme == 'https'
|
12
|
+
|
13
|
+
response = http.start do |http|
|
14
|
+
http.request Net::HTTP::Get.new(uri.request_uri)
|
15
|
+
end
|
16
|
+
|
17
|
+
return nil unless response.is_a?(Net::HTTPSuccess)
|
18
|
+
return response.body unless block_given?
|
19
|
+
yield JSON.parse(response.body)
|
20
|
+
end
|
21
|
+
end
|
data/test/aux_methods.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'fakeweb'
|
2
|
+
|
3
|
+
module AuxMethods
|
4
|
+
BASE_PATH = File.expand_path("../fixtures", __FILE__)
|
5
|
+
|
6
|
+
def fetch_fixture_path(path)
|
7
|
+
File.join(BASE_PATH, path)
|
8
|
+
end
|
9
|
+
|
10
|
+
def fake_get_url(uri, response, params={})
|
11
|
+
uri += with_params(uri, params) unless params.empty?
|
12
|
+
FakeWeb.register_uri(:get, uri, :body => response)
|
13
|
+
end
|
14
|
+
|
15
|
+
def fake_put_url(uri, response)
|
16
|
+
FakeWeb.register_uri(:put, uri, :body => response)
|
17
|
+
end
|
18
|
+
|
19
|
+
def with_params(url, params)
|
20
|
+
url.request_uri + "?" + params.map {|k,v| CGI.escape(k.to_s)+'='+CGI.escape(v.to_s) }.join("&")
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# Aliases
|
2
|
+
# simple stuff
|
3
|
+
alias g='git'
|
4
|
+
compdef g=git
|
5
|
+
alias gs='git status'
|
6
|
+
compdef _git gst=git-status
|
7
|
+
alias gpl='git pull'
|
8
|
+
compdef _git gl=git-pull
|
9
|
+
alias gplr='git pull --rebase'
|
10
|
+
compdef _git gup=git-fetch
|
11
|
+
alias gps='git push'
|
12
|
+
compdef _git gp=git-push
|
13
|
+
alias gd='git diff'
|
14
|
+
gdv() { git diff -w "$@" | view - }
|
15
|
+
compdef _git gdv=git-diff
|
16
|
+
alias gcm='git commit -v'
|
17
|
+
compdef _git gc=git-commit
|
18
|
+
alias gcma='git commit -v -a'
|
19
|
+
compdef _git gca=git-commit
|
20
|
+
alias gc='git checkout'
|
21
|
+
compdef _git gco=git-checkout
|
22
|
+
alias gcam='git commit -m'
|
23
|
+
alias gal='git add .'
|
24
|
+
|
25
|
+
# fancy stuff
|
26
|
+
alias gr='git remote'
|
27
|
+
compdef _git gr=git-remote
|
28
|
+
alias grv='git remote -v'
|
29
|
+
compdef _git grv=git-remote
|
30
|
+
alias grmv='git remote rename'
|
31
|
+
compdef _git grmv=git-remote
|
32
|
+
alias grrm='git remote remove'
|
33
|
+
compdef _git grrm=git-remote
|
34
|
+
alias grset='git remote set-url'
|
35
|
+
compdef _git grset=git-remote
|
36
|
+
alias grup='git remote update'
|
37
|
+
compdef _git grset=git-remote
|
38
|
+
alias gb='git branch'
|
39
|
+
compdef _git gb=git-branch
|
40
|
+
alias gba='git branch -a'
|
41
|
+
compdef _git gba=git-branch
|
42
|
+
alias gcount='git shortlog -sn'
|
43
|
+
compdef gcount=git
|
44
|
+
alias gcfl='git config --list'
|
45
|
+
alias gcp='git cherry-pick'
|
46
|
+
compdef _git gcp=git-cherry-pick
|
47
|
+
alias glg='git log --stat --max-count=5'
|
48
|
+
compdef _git glg=git-log
|
49
|
+
alias glgg='git log --graph --max-count=5'
|
50
|
+
compdef _git glgg=git-log
|
51
|
+
alias glgga='git log --graph --decorate --all'
|
52
|
+
compdef _git glgga=git-log
|
53
|
+
alias gss='git status -s'
|
54
|
+
compdef _git gss=git-status
|
55
|
+
alias ga='git add'
|
56
|
+
compdef _git ga=git-add
|
57
|
+
alias gm='git merge'
|
58
|
+
compdef _git gm=git-merge
|
59
|
+
alias grh='git reset HEAD'
|
60
|
+
alias grhh='git reset HEAD --hard'
|
61
|
+
alias gwc='git whatchanged -p --abbrev-commit --pretty=medium'
|
62
|
+
alias gf='git ls-files | grep'
|
63
|
+
alias gpoat='git push origin --all && git push origin --tags'
|
64
|
+
|
65
|
+
# Will cd into the top of the current repository
|
66
|
+
# or submodule.
|
67
|
+
alias grt='cd $(git rev-parse --show-toplevel || echo ".")'
|
68
|
+
|
69
|
+
#
|
70
|
+
# Will return the current branch name
|
71
|
+
# Usage example: git pull origin $(current_branch)
|
72
|
+
#
|
73
|
+
function current_branch() {
|
74
|
+
ref=$(git symbolic-ref HEAD 2> /dev/null) || \
|
75
|
+
ref=$(git rev-parse --short HEAD 2> /dev/null) || return
|
76
|
+
echo ${ref#refs/heads/}
|
77
|
+
}
|
78
|
+
|
79
|
+
function current_repository() {
|
80
|
+
ref=$(git symbolic-ref HEAD 2> /dev/null) || \
|
81
|
+
ref=$(git rev-parse --short HEAD 2> /dev/null) || return
|
82
|
+
echo $(git remote -v | cut -d':' -f 2)
|
83
|
+
}
|
84
|
+
|
85
|
+
# these aliases take advantage of the previous function
|
86
|
+
alias ggpull='git pull origin $(current_branch)'
|
87
|
+
compdef ggpull=git
|
88
|
+
alias ggpush='git push origin $(current_branch)'
|
89
|
+
compdef ggpush=git
|
90
|
+
alias ggpnp='git pull origin $(current_branch) && git push origin $(current_branch)'
|
91
|
+
compdef ggpnp=git
|
92
|
+
alias gplrb='git pull --rebase origin $(current_branch)'
|
@@ -0,0 +1,31 @@
|
|
1
|
+
{
|
2
|
+
"email": "lukasalexandre@me.com",
|
3
|
+
"type": "User",
|
4
|
+
"gists_url": "https://api.github.com/users/lukelex/gists{/gist_id}",
|
5
|
+
"url": "https://api.github.com/users/lukelex",
|
6
|
+
"received_events_url": "https://api.github.com/users/lukelex/received_events",
|
7
|
+
"company": "CodeLogic",
|
8
|
+
"login": "lukelex",
|
9
|
+
"public_gists": 19,
|
10
|
+
"updated_at": "2013-01-27T19:05:46Z",
|
11
|
+
"organizations_url": "https://api.github.com/users/lukelex/orgs",
|
12
|
+
"followers": 10,
|
13
|
+
"following": 13,
|
14
|
+
"blog": "www.codelogic.me",
|
15
|
+
"hireable": true,
|
16
|
+
"public_repos": 20,
|
17
|
+
"starred_url": "https://api.github.com/users/lukelex/starred{/owner}{/repo}",
|
18
|
+
"created_at": "2011-06-10T19:34:46Z",
|
19
|
+
"bio": "Web and mobile developer",
|
20
|
+
"name": "Lukas Alexandre",
|
21
|
+
"location": "Recife - PE",
|
22
|
+
"repos_url": "https://api.github.com/users/lukelex/repos",
|
23
|
+
"followers_url": "https://api.github.com/users/lukelex/followers",
|
24
|
+
"following_url": "https://api.github.com/users/lukelex/following",
|
25
|
+
"gravatar_id": "2d24a9678f3ebb040379dd6597adce7f",
|
26
|
+
"avatar_url": "https://secure.gravatar.com/avatar/2d24a9678f3ebb040379dd6597adce7f?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png",
|
27
|
+
"id": 842850,
|
28
|
+
"html_url": "https://github.com/lukelex",
|
29
|
+
"events_url": "https://api.github.com/users/lukelex/events{/privacy}",
|
30
|
+
"subscriptions_url": "https://api.github.com/users/lukelex/subscriptions"
|
31
|
+
}
|
@@ -0,0 +1,248 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"url": "https://api.github.com/gists/4643343",
|
4
|
+
"user": {
|
5
|
+
"type": "User",
|
6
|
+
"gists_url": "https://api.github.com/users/lukelex/gists{/gist_id}",
|
7
|
+
"url": "https://api.github.com/users/lukelex",
|
8
|
+
"events_url": "https://api.github.com/users/lukelex/events{/privacy}",
|
9
|
+
"avatar_url": "https://secure.gravatar.com/avatar/2d24a9678f3ebb040379dd6597adce7f?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png",
|
10
|
+
"login": "lukelex",
|
11
|
+
"organizations_url": "https://api.github.com/users/lukelex/orgs",
|
12
|
+
"starred_url": "https://api.github.com/users/lukelex/starred{/owner}{/repo}",
|
13
|
+
"repos_url": "https://api.github.com/users/lukelex/repos",
|
14
|
+
"received_events_url": "https://api.github.com/users/lukelex/received_events",
|
15
|
+
"followers_url": "https://api.github.com/users/lukelex/followers",
|
16
|
+
"following_url": "https://api.github.com/users/lukelex/following",
|
17
|
+
"gravatar_id": "2d24a9678f3ebb040379dd6597adce7f",
|
18
|
+
"id": 842850,
|
19
|
+
"subscriptions_url": "https://api.github.com/users/lukelex/subscriptions"
|
20
|
+
},
|
21
|
+
"updated_at": "2013-01-27T01:37:13Z",
|
22
|
+
"comments": 0,
|
23
|
+
"public": true,
|
24
|
+
"forks_url": "https://api.github.com/gists/4643343/forks",
|
25
|
+
"created_at": "2013-01-26T17:14:19Z",
|
26
|
+
"git_pull_url": "https://gist.github.com/4643343.git",
|
27
|
+
"html_url": "https://gist.github.com/4643343",
|
28
|
+
"commits_url": "https://api.github.com/gists/4643343/commits",
|
29
|
+
"comments_url": "https://api.github.com/gists/4643343/comments",
|
30
|
+
"description": "Git aliases",
|
31
|
+
"git_push_url": "https://gist.github.com/4643343.git",
|
32
|
+
"id": "4643343",
|
33
|
+
"files": {
|
34
|
+
"git.plugin.zsh": {
|
35
|
+
"type": "text/plain",
|
36
|
+
"filename": "git.plugin.zsh",
|
37
|
+
"size": 2649,
|
38
|
+
"raw_url": "https://gist.github.com/raw/4643343/f77f1e49e1aece457b0095ac847afc01af2d335d/git.plugin.zsh",
|
39
|
+
"language": "Shell"
|
40
|
+
}
|
41
|
+
}
|
42
|
+
},
|
43
|
+
{
|
44
|
+
"url": "https://api.github.com/gists/4499269",
|
45
|
+
"user": {
|
46
|
+
"type": "User",
|
47
|
+
"gists_url": "https://api.github.com/users/lukelex/gists{/gist_id}",
|
48
|
+
"url": "https://api.github.com/users/lukelex",
|
49
|
+
"events_url": "https://api.github.com/users/lukelex/events{/privacy}",
|
50
|
+
"avatar_url": "https://secure.gravatar.com/avatar/2d24a9678f3ebb040379dd6597adce7f?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png",
|
51
|
+
"login": "lukelex",
|
52
|
+
"organizations_url": "https://api.github.com/users/lukelex/orgs",
|
53
|
+
"starred_url": "https://api.github.com/users/lukelex/starred{/owner}{/repo}",
|
54
|
+
"repos_url": "https://api.github.com/users/lukelex/repos",
|
55
|
+
"received_events_url": "https://api.github.com/users/lukelex/received_events",
|
56
|
+
"followers_url": "https://api.github.com/users/lukelex/followers",
|
57
|
+
"following_url": "https://api.github.com/users/lukelex/following",
|
58
|
+
"gravatar_id": "2d24a9678f3ebb040379dd6597adce7f",
|
59
|
+
"id": 842850,
|
60
|
+
"subscriptions_url": "https://api.github.com/users/lukelex/subscriptions"
|
61
|
+
},
|
62
|
+
"updated_at": "2013-01-10T03:49:01Z",
|
63
|
+
"comments": 0,
|
64
|
+
"public": true,
|
65
|
+
"forks_url": "https://api.github.com/gists/4499269/forks",
|
66
|
+
"created_at": "2013-01-10T03:49:00Z",
|
67
|
+
"git_pull_url": "https://gist.github.com/4499269.git",
|
68
|
+
"html_url": "https://gist.github.com/4499269",
|
69
|
+
"commits_url": "https://api.github.com/gists/4499269/commits",
|
70
|
+
"comments_url": "https://api.github.com/gists/4499269/comments",
|
71
|
+
"description": "Require all ruby files from a directory",
|
72
|
+
"git_push_url": "https://gist.github.com/4499269.git",
|
73
|
+
"id": "4499269",
|
74
|
+
"files": {
|
75
|
+
"require_dir": {
|
76
|
+
"type": "text/plain",
|
77
|
+
"filename": "require_dir",
|
78
|
+
"size": 59,
|
79
|
+
"raw_url": "https://gist.github.com/raw/4499269/528e16d468cf739497908162995d2d0077410218/require_dir",
|
80
|
+
"language": null
|
81
|
+
}
|
82
|
+
}
|
83
|
+
},
|
84
|
+
{
|
85
|
+
"url": "https://api.github.com/gists/4370359",
|
86
|
+
"user": {
|
87
|
+
"type": "User",
|
88
|
+
"gists_url": "https://api.github.com/users/lukelex/gists{/gist_id}",
|
89
|
+
"url": "https://api.github.com/users/lukelex",
|
90
|
+
"events_url": "https://api.github.com/users/lukelex/events{/privacy}",
|
91
|
+
"avatar_url": "https://secure.gravatar.com/avatar/2d24a9678f3ebb040379dd6597adce7f?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png",
|
92
|
+
"login": "lukelex",
|
93
|
+
"organizations_url": "https://api.github.com/users/lukelex/orgs",
|
94
|
+
"starred_url": "https://api.github.com/users/lukelex/starred{/owner}{/repo}",
|
95
|
+
"repos_url": "https://api.github.com/users/lukelex/repos",
|
96
|
+
"received_events_url": "https://api.github.com/users/lukelex/received_events",
|
97
|
+
"followers_url": "https://api.github.com/users/lukelex/followers",
|
98
|
+
"following_url": "https://api.github.com/users/lukelex/following",
|
99
|
+
"gravatar_id": "2d24a9678f3ebb040379dd6597adce7f",
|
100
|
+
"id": 842850,
|
101
|
+
"subscriptions_url": "https://api.github.com/users/lukelex/subscriptions"
|
102
|
+
},
|
103
|
+
"updated_at": "2012-12-24T18:59:03Z",
|
104
|
+
"comments": 0,
|
105
|
+
"public": true,
|
106
|
+
"forks_url": "https://api.github.com/gists/4370359/forks",
|
107
|
+
"created_at": "2012-12-24T18:59:02Z",
|
108
|
+
"git_pull_url": "https://gist.github.com/4370359.git",
|
109
|
+
"html_url": "https://gist.github.com/4370359",
|
110
|
+
"commits_url": "https://api.github.com/gists/4370359/commits",
|
111
|
+
"comments_url": "https://api.github.com/gists/4370359/comments",
|
112
|
+
"description": "Toggle an attribute",
|
113
|
+
"git_push_url": "https://gist.github.com/4370359.git",
|
114
|
+
"id": "4370359",
|
115
|
+
"files": {
|
116
|
+
"toggle_attribute.js": {
|
117
|
+
"type": "application/javascript",
|
118
|
+
"filename": "toggle_attribute.js",
|
119
|
+
"size": 83,
|
120
|
+
"raw_url": "https://gist.github.com/raw/4370359/876e05b40f27ceb193c49d3b96cbcfd795536cfa/toggle_attribute.js",
|
121
|
+
"language": "JavaScript"
|
122
|
+
}
|
123
|
+
}
|
124
|
+
},
|
125
|
+
{
|
126
|
+
"url": "https://api.github.com/gists/4369401",
|
127
|
+
"user": {
|
128
|
+
"type": "User",
|
129
|
+
"gists_url": "https://api.github.com/users/lukelex/gists{/gist_id}",
|
130
|
+
"url": "https://api.github.com/users/lukelex",
|
131
|
+
"events_url": "https://api.github.com/users/lukelex/events{/privacy}",
|
132
|
+
"avatar_url": "https://secure.gravatar.com/avatar/2d24a9678f3ebb040379dd6597adce7f?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png",
|
133
|
+
"login": "lukelex",
|
134
|
+
"organizations_url": "https://api.github.com/users/lukelex/orgs",
|
135
|
+
"starred_url": "https://api.github.com/users/lukelex/starred{/owner}{/repo}",
|
136
|
+
"repos_url": "https://api.github.com/users/lukelex/repos",
|
137
|
+
"received_events_url": "https://api.github.com/users/lukelex/received_events",
|
138
|
+
"followers_url": "https://api.github.com/users/lukelex/followers",
|
139
|
+
"following_url": "https://api.github.com/users/lukelex/following",
|
140
|
+
"gravatar_id": "2d24a9678f3ebb040379dd6597adce7f",
|
141
|
+
"id": 842850,
|
142
|
+
"subscriptions_url": "https://api.github.com/users/lukelex/subscriptions"
|
143
|
+
},
|
144
|
+
"updated_at": "2012-12-24T14:17:25Z",
|
145
|
+
"comments": 0,
|
146
|
+
"public": true,
|
147
|
+
"forks_url": "https://api.github.com/gists/4369401/forks",
|
148
|
+
"created_at": "2012-12-24T14:17:24Z",
|
149
|
+
"git_pull_url": "https://gist.github.com/4369401.git",
|
150
|
+
"html_url": "https://gist.github.com/4369401",
|
151
|
+
"commits_url": "https://api.github.com/gists/4369401/commits",
|
152
|
+
"comments_url": "https://api.github.com/gists/4369401/comments",
|
153
|
+
"description": "Installing latest version of MongoDB on ubuntu",
|
154
|
+
"git_push_url": "https://gist.github.com/4369401.git",
|
155
|
+
"id": "4369401",
|
156
|
+
"files": {
|
157
|
+
"install.md": {
|
158
|
+
"type": "text/plain",
|
159
|
+
"filename": "install.md",
|
160
|
+
"size": 1916,
|
161
|
+
"raw_url": "https://gist.github.com/raw/4369401/d6b77a3ac0f741ad1f2215c3b76690824684b38f/install.md",
|
162
|
+
"language": "Markdown"
|
163
|
+
}
|
164
|
+
}
|
165
|
+
},
|
166
|
+
{
|
167
|
+
"url": "https://api.github.com/gists/4242153",
|
168
|
+
"user": {
|
169
|
+
"type": "User",
|
170
|
+
"gists_url": "https://api.github.com/users/lukelex/gists{/gist_id}",
|
171
|
+
"url": "https://api.github.com/users/lukelex",
|
172
|
+
"events_url": "https://api.github.com/users/lukelex/events{/privacy}",
|
173
|
+
"avatar_url": "https://secure.gravatar.com/avatar/2d24a9678f3ebb040379dd6597adce7f?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png",
|
174
|
+
"login": "lukelex",
|
175
|
+
"organizations_url": "https://api.github.com/users/lukelex/orgs",
|
176
|
+
"starred_url": "https://api.github.com/users/lukelex/starred{/owner}{/repo}",
|
177
|
+
"repos_url": "https://api.github.com/users/lukelex/repos",
|
178
|
+
"received_events_url": "https://api.github.com/users/lukelex/received_events",
|
179
|
+
"followers_url": "https://api.github.com/users/lukelex/followers",
|
180
|
+
"following_url": "https://api.github.com/users/lukelex/following",
|
181
|
+
"gravatar_id": "2d24a9678f3ebb040379dd6597adce7f",
|
182
|
+
"id": 842850,
|
183
|
+
"subscriptions_url": "https://api.github.com/users/lukelex/subscriptions"
|
184
|
+
},
|
185
|
+
"updated_at": "2012-12-08T21:58:20Z",
|
186
|
+
"comments": 0,
|
187
|
+
"public": true,
|
188
|
+
"forks_url": "https://api.github.com/gists/4242153/forks",
|
189
|
+
"created_at": "2012-12-08T21:58:20Z",
|
190
|
+
"git_pull_url": "https://gist.github.com/4242153.git",
|
191
|
+
"html_url": "https://gist.github.com/4242153",
|
192
|
+
"commits_url": "https://api.github.com/gists/4242153/commits",
|
193
|
+
"comments_url": "https://api.github.com/gists/4242153/comments",
|
194
|
+
"description": "Generic table item sorter in coffeescript & jquery",
|
195
|
+
"git_push_url": "https://gist.github.com/4242153.git",
|
196
|
+
"id": "4242153",
|
197
|
+
"files": {
|
198
|
+
"sorter.coffee": {
|
199
|
+
"type": "text/coffescript",
|
200
|
+
"filename": "sorter.coffee",
|
201
|
+
"size": 1799,
|
202
|
+
"raw_url": "https://gist.github.com/raw/4242153/5f365c79adff88d1bbbe5a3a826188efdf9a8121/sorter.coffee",
|
203
|
+
"language": "CoffeeScript"
|
204
|
+
}
|
205
|
+
}
|
206
|
+
},
|
207
|
+
{
|
208
|
+
"url": "https://api.github.com/gists/3379523",
|
209
|
+
"user": {
|
210
|
+
"type": "User",
|
211
|
+
"gists_url": "https://api.github.com/users/lukelex/gists{/gist_id}",
|
212
|
+
"url": "https://api.github.com/users/lukelex",
|
213
|
+
"events_url": "https://api.github.com/users/lukelex/events{/privacy}",
|
214
|
+
"avatar_url": "https://secure.gravatar.com/avatar/2d24a9678f3ebb040379dd6597adce7f?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png",
|
215
|
+
"login": "lukelex",
|
216
|
+
"organizations_url": "https://api.github.com/users/lukelex/orgs",
|
217
|
+
"starred_url": "https://api.github.com/users/lukelex/starred{/owner}{/repo}",
|
218
|
+
"repos_url": "https://api.github.com/users/lukelex/repos",
|
219
|
+
"received_events_url": "https://api.github.com/users/lukelex/received_events",
|
220
|
+
"followers_url": "https://api.github.com/users/lukelex/followers",
|
221
|
+
"following_url": "https://api.github.com/users/lukelex/following",
|
222
|
+
"gravatar_id": "2d24a9678f3ebb040379dd6597adce7f",
|
223
|
+
"id": 842850,
|
224
|
+
"subscriptions_url": "https://api.github.com/users/lukelex/subscriptions"
|
225
|
+
},
|
226
|
+
"updated_at": "2012-08-17T14:57:53Z",
|
227
|
+
"comments": 0,
|
228
|
+
"public": true,
|
229
|
+
"forks_url": "https://api.github.com/gists/3379523/forks",
|
230
|
+
"created_at": "2012-08-17T14:57:53Z",
|
231
|
+
"git_pull_url": "https://gist.github.com/3379523.git",
|
232
|
+
"html_url": "https://gist.github.com/3379523",
|
233
|
+
"commits_url": "https://api.github.com/gists/3379523/commits",
|
234
|
+
"comments_url": "https://api.github.com/gists/3379523/comments",
|
235
|
+
"description": "Converts brazilian money to american money",
|
236
|
+
"git_push_url": "https://gist.github.com/3379523.git",
|
237
|
+
"id": "3379523",
|
238
|
+
"files": {
|
239
|
+
"money2float": {
|
240
|
+
"type": "text/plain",
|
241
|
+
"filename": "money2float",
|
242
|
+
"size": 133,
|
243
|
+
"raw_url": "https://gist.github.com/raw/3379523/82ed864cb06dea2a49a2b7184681494bc637b8d9/money2float",
|
244
|
+
"language": null
|
245
|
+
}
|
246
|
+
}
|
247
|
+
}
|
248
|
+
]
|
data/test/gist_test.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
describe Gistation::Gist do
|
4
|
+
describe 'Getting gist files' do
|
5
|
+
it 'type check' do
|
6
|
+
gist.files.first.must_be_instance_of Gistation::GistFile
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'remotely' do
|
10
|
+
gist.files.size.must_equal 1
|
11
|
+
end
|
12
|
+
|
13
|
+
# it 'from cache'
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'cheking properties initalization' do
|
17
|
+
it 'filename' do
|
18
|
+
gist_file.filename.must_equal 'git.plugin.zsh'
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'type' do
|
22
|
+
gist_file.type.must_equal 'text/plain'
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'size' do
|
26
|
+
gist_file.size.must_equal 2649
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'language' do
|
30
|
+
gist_file.language.must_equal 'Shell'
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'raw_url' do
|
34
|
+
gist_file.raw_url.must_equal 'https://gist.github.com/raw/4643343/f77f1e49e1aece457b0095ac847afc01af2d335d/git.plugin.zsh'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe 'getting the file content' do
|
39
|
+
it 'remotely' do
|
40
|
+
gist_file.content.must_equal gist_file_content
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
describe Gistation::GistUser do
|
4
|
+
describe 'Getting the user' do
|
5
|
+
it 'remotely' do
|
6
|
+
gist_user.email.must_equal 'lukasalexandre@me.com'
|
7
|
+
end
|
8
|
+
|
9
|
+
# it 'from cache'
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'getting its Gists' do
|
13
|
+
it 'remotely' do
|
14
|
+
gist_user.gists.wont_be_empty
|
15
|
+
gist_user.gists.size.must_equal 6
|
16
|
+
gist_user.gists.first.must_be_instance_of Gistation::Gist
|
17
|
+
end
|
18
|
+
|
19
|
+
# it ('from cache')
|
20
|
+
end
|
21
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'minitest/spec'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'turn'
|
4
|
+
require 'gistation'
|
5
|
+
|
6
|
+
require_relative 'aux_methods'
|
7
|
+
|
8
|
+
class MiniTest::Spec
|
9
|
+
include AuxMethods
|
10
|
+
|
11
|
+
let (:gist_user) { Gistation::GistUser.new 'lukelex' }
|
12
|
+
let (:gist) { gist_user.gists.first }
|
13
|
+
let (:gist_file) { gist.files.first }
|
14
|
+
|
15
|
+
let (:gist_user_response) { fetch_fixture_path('gist_user.json') }
|
16
|
+
let (:user_gists_response) { fetch_fixture_path('user_gists.json') }
|
17
|
+
let (:gist_file_content_response) { fetch_fixture_path('gist_file_content.txt') }
|
18
|
+
|
19
|
+
let (:gist_file_content) { File.read gist_file_content_response }
|
20
|
+
|
21
|
+
before do
|
22
|
+
FakeWeb.allow_net_connect = false
|
23
|
+
|
24
|
+
fake_get_url 'https://api.github.com/users/lukelex', gist_user_response
|
25
|
+
fake_get_url 'https://api.github.com/users/lukelex/gists', user_gists_response
|
26
|
+
fake_get_url 'https://gist.github.com/raw/4643343/f77f1e49e1aece457b0095ac847afc01af2d335d/git.plugin.zsh', gist_file_content_response
|
27
|
+
end
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gistation
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Lukas Alexandre
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-01-27 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: json
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.7.6
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.7.6
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: minitest
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 4.5.0
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 4.5.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: fakeweb
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.3.0
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.3.0
|
62
|
+
description: Github Gist read layer
|
63
|
+
email:
|
64
|
+
- lukeskytm@gmail.com
|
65
|
+
executables: []
|
66
|
+
extensions: []
|
67
|
+
extra_rdoc_files: []
|
68
|
+
files:
|
69
|
+
- .gitignore
|
70
|
+
- Gemfile
|
71
|
+
- LICENSE
|
72
|
+
- README.md
|
73
|
+
- Rakefile
|
74
|
+
- gistation.gemspec
|
75
|
+
- lib/gistation.rb
|
76
|
+
- lib/gistation/gist.rb
|
77
|
+
- lib/gistation/gist_file.rb
|
78
|
+
- lib/gistation/gist_user.rb
|
79
|
+
- lib/gistation/version.rb
|
80
|
+
- test/aux_methods.rb
|
81
|
+
- test/fixtures/gist_file_content.txt
|
82
|
+
- test/fixtures/gist_user.json
|
83
|
+
- test/fixtures/user_gists.json
|
84
|
+
- test/gist_test.rb
|
85
|
+
- test/gist_user_test.rb
|
86
|
+
- test/test_helper.rb
|
87
|
+
homepage: https://github.com/lukelex/gistation
|
88
|
+
licenses: []
|
89
|
+
post_install_message:
|
90
|
+
rdoc_options: []
|
91
|
+
require_paths:
|
92
|
+
- lib
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ! '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
requirements: []
|
106
|
+
rubyforge_project:
|
107
|
+
rubygems_version: 1.8.25
|
108
|
+
signing_key:
|
109
|
+
specification_version: 3
|
110
|
+
summary: Gistation provides an API layer for reading an user Github Gists detailed
|
111
|
+
info
|
112
|
+
test_files:
|
113
|
+
- test/aux_methods.rb
|
114
|
+
- test/fixtures/gist_file_content.txt
|
115
|
+
- test/fixtures/gist_user.json
|
116
|
+
- test/fixtures/user_gists.json
|
117
|
+
- test/gist_test.rb
|
118
|
+
- test/gist_user_test.rb
|
119
|
+
- test/test_helper.rb
|