githubris 0.0.3 → 0.0.4

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/Gemfile CHANGED
@@ -6,6 +6,8 @@ group :development, :test do
6
6
  gem 'rspec-spies'
7
7
  gem 'fakeweb'
8
8
  gem 'simplecov'
9
+ gem 'flog'
10
+ gem 'flay'
9
11
  end
10
12
 
11
13
  gem 'jruby-openssl', platform: 'jruby'
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rspec/core/rake_task'
3
3
  require 'cucumber/rake/task'
4
+ require 'flay_task'
5
+ require 'flog_task'
4
6
 
5
7
  RSpec::Core::RakeTask.new :spec do |t|
6
8
  t.rspec_opts = '--color --format=documentation'
@@ -16,5 +18,13 @@ Cucumber::Rake::Task.new :features do |t|
16
18
  t.cucumber_opts = '--tags ~@wip --tags ~@backlog'
17
19
  end
18
20
 
19
- task :all => [:spec, :features]
21
+ FLAY_FLOG_OPTS_BLOCK = lambda do |t|
22
+ t.dirs = ['lib']
23
+ t.verbose = true
24
+ end
25
+
26
+ FlayTask.new &FLAY_FLOG_OPTS_BLOCK
27
+ FlogTask.new &FLAY_FLOG_OPTS_BLOCK
28
+
29
+ task :all => [:spec, :features, :flay, :flog]
20
30
  task :default => :spec
@@ -0,0 +1,13 @@
1
+ Feature: Get a Gist
2
+ In order to retrieve the newest gist data for a given gist
3
+ As a developer
4
+ I want to be able to get a gist.
5
+
6
+ Scenario: Get a gist via the Githubris API
7
+ When I access "@githubris.find_gist(1)"
8
+ Then I have the first gist
9
+
10
+ Scenario: Reload a gist's information
11
+ Given @gist is a stale copy of the first gist
12
+ When I access "@gist.reload"
13
+ Then I have the newest version of the gist
@@ -2,6 +2,10 @@ Given /^@user is GithubrisTestUser$/ do
2
2
  @user = @githubris.find_user('GithubrisTestUser')
3
3
  end
4
4
 
5
+ Given /^@gist is a stale copy of the first gist$/ do
6
+ @gist = Githubris::Gist.new :id => 1
7
+ end
8
+
5
9
  When /^I access "([^"]*)"$/ do |api_code|
6
10
  @actual = binding.eval api_code
7
11
  end
@@ -17,3 +21,12 @@ end
17
21
  Then /^I have that user$/ do
18
22
  @actual.should == test_user
19
23
  end
24
+
25
+ Then /^I have the first gist$/ do
26
+ @actual.should == test_gist
27
+ end
28
+
29
+ Then /^I have the newest version of the gist$/ do
30
+ @actual.should == test_gist
31
+ end
32
+
@@ -8,3 +8,5 @@ FakeWeb.register_uri(:get, /users\/([^\/]*)\/gists\z/,
8
8
  :body => File.open("spec/support/user_public_gists.json"){|f| f.read })
9
9
  FakeWeb.register_uri(:get, /users\/\w+\z/,
10
10
  :body => File.open("spec/support/user.json"){|f| f.read })
11
+ FakeWeb.register_uri(:get, /gists\/\d+/,
12
+ :body => File.open('spec/support/gist.json'){|f| f.read })
@@ -11,10 +11,18 @@ module Fixtures
11
11
  build_user get_user_data
12
12
  end
13
13
 
14
+ def test_gist
15
+ build_gist get_gist_data
16
+ end
17
+
14
18
  def build_gists data
15
19
  Githubris::Builder.new.build_gists data
16
20
  end
17
21
 
22
+ def build_gist data
23
+ Githubris::Builder.new.build_gist data
24
+ end
25
+
18
26
  def build_user data
19
27
  Githubris::Builder.new.build_user data
20
28
  end
@@ -30,6 +38,10 @@ module Fixtures
30
38
  def get_user_data
31
39
  MultiJson.decode(File.open('spec/support/user.json') {|f| f.read })
32
40
  end
41
+
42
+ def get_gist_data
43
+ MultiJson.decode(File.open('spec/support/gist.json') {|f| f.read })
44
+ end
33
45
  end
34
46
 
35
47
  World(Fixtures)
@@ -1,26 +1,29 @@
1
- require 'githubris/builder/gist'
2
-
3
1
  module Githubris::API::Gist
4
2
  PUBLIC_GISTS_PATH = '/gists/public'
5
3
 
6
4
  def get_user_public_gists(login)
7
- data = self.class.get user_gists_path(login)
8
- gists = @builder.build_gists(data)
9
- gists.map do |gist|
10
- gist.set_attribute(:user, get_user(login))
11
- gist
12
- end
5
+ get user_gists_path(login)
13
6
  end
14
7
 
15
8
  def get_public_gists(options={})
16
9
  login = options.delete(:user)
17
10
  return get_user_public_gists(login) if login
18
11
 
19
- data = self.class.get public_gists_path_for_page(options[:page])
20
- @builder.build_gists data
12
+ get public_gists_path_for_page(options[:page])
13
+ end
14
+
15
+ def get_gist(id)
16
+ get gist_path(id)
17
+ end
18
+
19
+ def get(path)
20
+ @builder.build_gists attributes_from(path)
21
+ end
22
+
23
+ def attributes_from(path)
24
+ self.class.get(path)
21
25
  end
22
26
 
23
- private
24
27
  def public_gists_path_for_page page_number=1
25
28
  "#{PUBLIC_GISTS_PATH}?page=#{page_number}"
26
29
  end
@@ -28,4 +31,8 @@ module Githubris::API::Gist
28
31
  def user_gists_path(login)
29
32
  "/users/#{login}/gists"
30
33
  end
34
+
35
+ def gist_path(id)
36
+ "/gists/#{id}"
37
+ end
31
38
  end
@@ -1,5 +1,3 @@
1
- require 'githubris/builder/user'
2
-
3
1
  module Githubris::API::User
4
2
  USERS_PATH = '/users'
5
3
 
@@ -1,15 +1,28 @@
1
1
  class Githubris::Builder
2
- autoload :Gist, 'githubris/builder/gist'
3
- autoload :User, 'githubris/builder/user'
4
-
5
2
  def build_gists(data)
6
- data = [data].flatten
7
- data.map do |gist|
8
- Githubris::Builder::Gist.new.build gist
3
+ if data.is_a? Array
4
+ data = [data].flatten
5
+ data.map do |gist|
6
+ build_gist gist
7
+ end
8
+ else
9
+ build_gist data
9
10
  end
10
11
  end
11
12
 
13
+ def build_gist(data)
14
+ Githubris::Gist.new build(data)
15
+ end
16
+
12
17
  def build_user(data)
13
- Githubris::Builder::User.new.build(data)
18
+ Githubris::User.new build(data)
19
+ end
20
+
21
+ def build(data)
22
+ attributes = {}
23
+ data.each_pair do |key, value|
24
+ attributes[key.to_sym] = value
25
+ end
26
+ attributes
14
27
  end
15
28
  end
@@ -1,11 +1,13 @@
1
+ require 'date'
2
+
1
3
  class Githubris::Gist
2
4
  autoload :File, 'githubris/gist/file'
3
5
 
4
6
  def self.default_attributes
5
7
  {
6
- files: [],
7
- created_at: DateTime.now,
8
- updated_at: DateTime.now
8
+ :files => {},
9
+ :created_at => DateTime.now.to_s,
10
+ :updated_at => DateTime.now.to_s,
9
11
  }
10
12
  end
11
13
 
@@ -20,19 +22,23 @@ class Githubris::Gist
20
22
  end
21
23
 
22
24
  def id
23
- @attributes[:id]
25
+ Integer(@attributes[:id])
24
26
  end
25
27
 
26
28
  def user
27
- @attributes[:user]
29
+ unless @attributes[:user].instance_of? Githubris::User
30
+ @attributes[:user] = Githubris::Builder.new.build_user @attributes[:user]
31
+ else
32
+ @attributes[:user]
33
+ end
28
34
  end
29
35
 
30
36
  def created_at
31
- @attributes[:created_at]
37
+ DateTime.parse @attributes[:created_at]
32
38
  end
33
39
 
34
40
  def updated_at
35
- @attributes[:updated_at]
41
+ DateTime.parse @attributes[:updated_at]
36
42
  end
37
43
 
38
44
  def description
@@ -40,11 +46,11 @@ class Githubris::Gist
40
46
  end
41
47
 
42
48
  def files
43
- @attributes[:files]
49
+ @attributes[:files].values
44
50
  end
45
51
 
46
52
  def url
47
- @attributes[:url]
53
+ URI.parse @attributes[:url]
48
54
  end
49
55
 
50
56
  def public?
@@ -52,17 +58,16 @@ class Githubris::Gist
52
58
  end
53
59
 
54
60
  def comments
55
- @attributes[:comments]
61
+ Array.new @attributes[:comments], Githubris::Comment.new
56
62
  end
57
63
 
58
64
  def ==(other)
59
- self.class == other.class &&
60
- self.created_at == other.created_at &&
61
- self.files == other.files &&
62
- self.user == other.user
65
+ @attributes == other.instance_variable_get(:@attributes)
63
66
  end
64
67
 
65
- def set_attribute(attribute, value)
66
- @attributes[attribute] = value
68
+ def reload
69
+ other = Githubris::API.new.get_gist id
70
+ instance_variable_set(:@attributes, other.instance_variable_get(:@attributes))
71
+ self
67
72
  end
68
73
  end
@@ -12,15 +12,15 @@ class Githubris::User
12
12
  end
13
13
 
14
14
  def id
15
- @attributes[:id]
15
+ Integer(@attributes[:id])
16
16
  end
17
17
 
18
18
  def avatar_url
19
- @attributes[:avatar_url]
19
+ URI.parse @attributes[:avatar_url]
20
20
  end
21
21
 
22
22
  def url
23
- @attributes[:url]
23
+ URI.parse @attributes[:url]
24
24
  end
25
25
 
26
26
  def gravatar_id
@@ -1,3 +1,3 @@
1
1
  class Githubris
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/githubris.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  $:.push File.expand_path("../../config", __FILE__)
2
- require_relative "githubris/version"
3
2
 
4
3
  class Githubris
5
4
  autoload :API, 'githubris/api'
@@ -17,6 +16,7 @@ class Githubris
17
16
  autoload :Tag, 'githubris/tag'
18
17
  autoload :Tree, 'githubris/tree'
19
18
  autoload :User, 'githubris/user'
19
+ autoload :Version, 'githubris/version'
20
20
 
21
21
  attr_reader :authenticated_user
22
22
 
@@ -25,7 +25,7 @@ class Githubris
25
25
  end
26
26
 
27
27
  def authenticate(login, password)
28
- @api.authenticate! login: login, password: password
28
+ @api.authenticate! :login => login, :password => password
29
29
  @authenticated_user = Githubris::User.new
30
30
  end
31
31
 
@@ -33,6 +33,10 @@ class Githubris
33
33
  @api.get_user(login)
34
34
  end
35
35
 
36
+ def find_gist(id)
37
+ @api.get_gist(id)
38
+ end
39
+
36
40
  def public_gists(options={})
37
41
  @api.get_public_gists options
38
42
  end
@@ -14,15 +14,9 @@ describe Githubris::API::Gist do
14
14
  subject.should have_received(:user_gists_path).with(login)
15
15
  end
16
16
 
17
- it 'retrieves the full user' do
18
- subject.stub(:get_user)
19
- subject.get_public_gists(user: login)
20
- subject.should have_received(:get_user).with(login)
21
- end
22
-
23
17
  context 'given a user with 2 gists' do
24
18
  it 'returns 2 gists by the given user' do
25
- user_public_gists = subject.get_public_gists(user: login)
19
+ user_public_gists = subject.get_public_gists(:user => login)
26
20
  user_public_gists.should have(2).items
27
21
  user_public_gists.each do |gist|
28
22
  gist.should be_instance_of Githubris::Gist
@@ -42,14 +36,14 @@ describe Githubris::API::Gist do
42
36
 
43
37
  it 'accepts an options hash' do
44
38
  lambda do
45
- subject.get_public_gists({foo: 'bar'})
39
+ subject.get_public_gists({:foo => 'bar'})
46
40
  end.should_not raise_error
47
41
  end
48
42
 
49
43
  context 'given a page option' do
50
44
  it 'returns an array of 30 gists from that page' do
51
- page_one_gists = subject.get_public_gists(page: 1)
52
- page_two_gists = subject.get_public_gists(page: 2)
45
+ page_one_gists = subject.get_public_gists(:page => 1)
46
+ page_two_gists = subject.get_public_gists(:page => 2)
53
47
  page_one_gists.should have(30).items
54
48
  page_two_gists.should have(30).items
55
49
  end
@@ -59,8 +53,20 @@ describe Githubris::API::Gist do
59
53
  it 'delegates to #get_user_public_gists' do
60
54
  login = 'GithubrisTestUser'
61
55
  subject.should_receive(:get_user_public_gists).with(login)
62
- subject.get_public_gists(user: login)
56
+ subject.get_public_gists(:user => login)
63
57
  end
64
58
  end
65
59
  end
60
+
61
+ describe '#get_gist' do
62
+ let(:id) { 1 }
63
+ it 'uses GET' do
64
+ subject.should_receive(:get).with(subject.gist_path(id))
65
+ subject.get_gist(id)
66
+ end
67
+
68
+ it 'is a Githubris::Gist' do
69
+ subject.get_gist(id).should be_instance_of Githubris::Gist
70
+ end
71
+ end
66
72
  end
@@ -2,79 +2,91 @@ require 'spec_helper'
2
2
 
3
3
  describe Githubris::Gist do
4
4
 
5
- describe '#==' do
6
- let(:this) { Githubris::Gist.new }
7
- subject { this == other }
8
-
9
- context 'the other\'s class is Githubris::Gist' do
10
- let(:other) { Githubris::Gist.new }
11
-
12
- context 'the gists have the same creation times' do
13
- before { Githubris::Gist.any_instance.stub(created_at: stub) }
14
-
15
- context 'the files are the same' do
16
- before { Githubris::Gist.any_instance.stub(files: stub) }
17
-
18
- context 'the user is the same' do
19
- before { Githubris::Gist.any_instance.stub(user: stub) }
20
-
21
- it { should be_true }
22
-
23
- end
5
+ context 'when passed a specific gist' do
6
+ subject { Githubris::Gist.new gist_attributes }
7
+ let(:gist_attributes) { Githubris::Builder.new.build gist_data }
8
+ let(:gist_data) { Githubris::SpecHelper.gist_data }
24
9
 
25
- context 'the user isn\'t the same' do
26
- let(:this) { Githubris::Gist.new(user: :the_right_user) }
27
- let(:other) { Githubris::Gist.new(user: :not_the_right_user) }
28
10
 
29
- it { should be_false }
30
- end
31
-
32
- it { should be_true }
33
- end
11
+ it 'is public' do
12
+ subject.should be_public
13
+ end
34
14
 
35
- context 'the files are\'t the same' do
36
- let(:other) { Githubris::Gist.new(files: stub) }
15
+ its(:id) { should eql 1 }
37
16
 
38
- it { should be_false }
39
- end
40
- end
17
+ its(:description) { should eql 'the meaning of gist' }
41
18
 
42
- context 'the gists were created at different times' do
43
- let(:this) { Githubris::Gist.new(created_at: DateTime.new(2012))}
44
- let(:other) { Githubris::Gist.new(created_at: DateTime.new(1990)) }
19
+ it 'was created at 6:17:13 on July 15, 2008' do
20
+ subject.created_at.should eql DateTime.new(2008, 7, 15, 18, 17, 13)
21
+ end
45
22
 
46
- it { should be_false }
47
- end
23
+ it 'was updated at 2:58:22 on Feburary 22, 2011' do
24
+ subject.updated_at.should eql DateTime.new(2011, 2, 22, 2, 58, 22)
48
25
  end
49
26
 
50
- context 'the other\'s class is not Githubris::Gist' do
51
- let(:other) { stub }
27
+ its(:url) { should be_kind_of URI }
28
+ its(:id) { should be_instance_of Fixnum }
29
+ its(:description) { should be_instance_of String }
30
+ it { should be_public }
31
+ its(:created_at) { should be_instance_of DateTime }
32
+ its(:updated_at) { should be_instance_of DateTime }
33
+ its(:comments) { should be_instance_of Array }
34
+ its(:files) { should be_instance_of Array }
52
35
 
53
- it { should be_false }
54
- end
55
36
  end
56
37
 
57
38
  it 'new gists are created now' do
58
- DateTime.stub(now: DateTime.new(2012))
39
+ DateTime.stub(:now => DateTime.new(2012))
59
40
  subject.created_at.should eql DateTime.now
60
41
  end
61
42
 
62
43
  context 'Gist owned by Isaac' do
63
- subject { Githubris::Gist.new user: user }
44
+ subject { Githubris::Gist.new :user => user }
64
45
  let(:user) { Githubris::User.new }
65
46
  its(:user) { should eql user }
66
47
  end
67
48
 
68
-
69
49
  describe 'a gist without files' do
50
+ subject { Githubris::Gist.new }
70
51
  its(:files) { should be_empty }
71
52
  end
72
53
 
73
54
  describe 'a gist created with a file' do
74
55
  subject do
75
- Githubris::Gist.new(files: [stub])
56
+ Githubris::Gist.new(:files => {:stub => stub})
76
57
  end
77
58
 
78
59
  its(:files) { should have(1).items }
79
60
  end
61
+
62
+ describe '#==' do
63
+ it 'checks the attributes of each object' do
64
+ subject.should == Githubris::Gist.new
65
+ subject.should_not == stub
66
+ end
67
+ end
68
+
69
+ describe '#reload' do
70
+
71
+ it 'errors without an id' do
72
+ lambda do
73
+ subject.reload
74
+ end.should raise_error
75
+ end
76
+
77
+ context 'on a gist with an id' do
78
+ subject { Githubris::Gist.new :id => id }
79
+ let(:id) { 1 }
80
+
81
+ it 'hits the API' do
82
+ Githubris::API.any_instance.should_receive(:get_gist).with(id)
83
+ subject.reload
84
+ end
85
+
86
+ it 'returns the same object' do
87
+ obj_id = subject.object_id
88
+ subject.reload.object_id.should == obj_id
89
+ end
90
+ end
91
+ end
80
92
  end
@@ -18,7 +18,7 @@ describe Githubris do
18
18
 
19
19
  describe '#find_user' do
20
20
  it 'requests gets user from githubris api' do
21
- user = Githubris::User.new(login: "frank")
21
+ user = Githubris::User.new(:login => "frank")
22
22
  Githubris::API.any_instance.stub(:get_user).and_return(user)
23
23
  subject.find_user("frank").should == user
24
24
  end
@@ -36,13 +36,43 @@ describe Githubris do
36
36
  end
37
37
 
38
38
  it 'can take an options hash' do
39
- lambda { subject.public_gists(foo: 'bar') }.should_not raise_error
39
+ lambda { subject.public_gists(:foo => 'bar') }.should_not raise_error
40
40
  end
41
41
 
42
42
  it 'delegates and passes the options hash to the API' do
43
43
  Githubris::API.any_instance.stub(:get_public_gists)
44
- subject.public_gists({foo: 'bar'})
44
+ subject.public_gists({:foo => 'bar'})
45
45
  subject.instance_variable_get(:@api).should have_received(:get_public_gists).with({foo: 'bar'})
46
46
  end
47
47
  end
48
+
49
+ describe '#find_gist' do
50
+ let(:id) { 1 }
51
+
52
+ it 'takes a gist\'s id' do
53
+ lambda do
54
+ subject.find_gist(id)
55
+ end.should_not raise_error
56
+ end
57
+
58
+ it 'hits the API' do
59
+ Githubris::API.any_instance.should_receive(:get_gist).with(id)
60
+ subject.find_gist(id)
61
+ end
62
+
63
+ context 'the gist it returns' do
64
+ subject { Githubris.new.find_gist(id) }
65
+
66
+ it 'has the same id that was passed in' do
67
+ subject.should be_instance_of Githubris::Gist
68
+ subject.id.should == id
69
+ end
70
+
71
+ it 'has a user' do
72
+ lambda do
73
+ subject.user.should be_instance_of Githubris::User
74
+ end.should_not raise_error
75
+ end
76
+ end
77
+ end
48
78
  end
@@ -8,3 +8,5 @@ FakeWeb.register_uri(:get, /users\/([^\/]*)\/gists\z/,
8
8
  :body => File.open("spec/support/user_public_gists.json"){|f| f.read })
9
9
  FakeWeb.register_uri(:get, /users\/\w+\z/,
10
10
  :body => File.open("spec/support/user.json"){|f| f.read })
11
+ FakeWeb.register_uri(:get, /gists\/\d+/,
12
+ :body => File.open('spec/support/gist.json'){|f| f.read })
@@ -0,0 +1,335 @@
1
+ {
2
+ "url": "https://api.github.com/gists/1",
3
+ "files": {
4
+ "gistfile1.txt": {
5
+ "content": "This is gist. \nThere are many like it, but this one is mine. \nIt is my life. \nI must master it as I must master my life. \nWithout me gist is useless. \nWithout gist, I am useless.",
6
+ "type": "text/plain",
7
+ "language": "Text",
8
+ "size": 178,
9
+ "filename": "gistfile1.txt",
10
+ "raw_url": "https://gist.github.com/raw/1/9b2ac7c792209f19e157ddaf00f8946edc306a6b/gistfile1.txt"
11
+ }
12
+ },
13
+ "history": [
14
+ {
15
+ "url": "https://api.github.com/gists/1/3a641566d0a49014cea6f395e8be68c42b9e46d9",
16
+ "change_status": {
17
+ "deletions": 1,
18
+ "additions": 6,
19
+ "total": 7
20
+ },
21
+ "committed_at": "2011-02-22T02:58:22Z",
22
+ "user": {
23
+ "url": "https://api.github.com/users/schacon",
24
+ "gravatar_id": "9375a9529679f1b42b567a640d775e7d",
25
+ "login": "schacon",
26
+ "avatar_url": "https://secure.gravatar.com/avatar/9375a9529679f1b42b567a640d775e7d?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
27
+ "id": 70
28
+ },
29
+ "version": "3a641566d0a49014cea6f395e8be68c42b9e46d9"
30
+ },
31
+ {
32
+ "url": "https://api.github.com/gists/1/24c894e1ca5cefd36b3b6e914beb93a7068f6efb",
33
+ "change_status": {
34
+ "deletions": 6,
35
+ "additions": 1,
36
+ "total": 7
37
+ },
38
+ "committed_at": "2011-02-22T02:53:32Z",
39
+ "user": {
40
+ "url": "https://api.github.com/users/schacon",
41
+ "gravatar_id": "9375a9529679f1b42b567a640d775e7d",
42
+ "login": "schacon",
43
+ "avatar_url": "https://secure.gravatar.com/avatar/9375a9529679f1b42b567a640d775e7d?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
44
+ "id": 70
45
+ },
46
+ "version": "24c894e1ca5cefd36b3b6e914beb93a7068f6efb"
47
+ },
48
+ {
49
+ "url": "https://api.github.com/gists/1/0864db9cbe551088b2269128c5b5d145141f57ef",
50
+ "change_status": {
51
+ "deletions": 1,
52
+ "additions": 6,
53
+ "total": 7
54
+ },
55
+ "committed_at": "2008-07-15T18:17:27Z",
56
+ "user": {
57
+ "url": "https://api.github.com/users/schacon",
58
+ "gravatar_id": "9375a9529679f1b42b567a640d775e7d",
59
+ "login": "schacon",
60
+ "avatar_url": "https://secure.gravatar.com/avatar/9375a9529679f1b42b567a640d775e7d?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
61
+ "id": 70
62
+ },
63
+ "version": "0864db9cbe551088b2269128c5b5d145141f57ef"
64
+ },
65
+ {
66
+ "url": "https://api.github.com/gists/1/8afc134bf14f8f56ed2e7234128490d9946e8c16",
67
+ "change_status": {
68
+ "deletions": 0,
69
+ "additions": 1,
70
+ "total": 1
71
+ },
72
+ "committed_at": "2008-07-15T18:17:14Z",
73
+ "user": {
74
+ "url": "https://api.github.com/users/schacon",
75
+ "gravatar_id": "9375a9529679f1b42b567a640d775e7d",
76
+ "login": "schacon",
77
+ "avatar_url": "https://secure.gravatar.com/avatar/9375a9529679f1b42b567a640d775e7d?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
78
+ "id": 70
79
+ },
80
+ "version": "8afc134bf14f8f56ed2e7234128490d9946e8c16"
81
+ }
82
+ ],
83
+ "public": true,
84
+ "comments": 6,
85
+ "updated_at": "2011-02-22T02:58:22Z",
86
+ "user": {
87
+ "url": "https://api.github.com/users/schacon",
88
+ "gravatar_id": "9375a9529679f1b42b567a640d775e7d",
89
+ "login": "schacon",
90
+ "avatar_url": "https://secure.gravatar.com/avatar/9375a9529679f1b42b567a640d775e7d?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
91
+ "id": 70
92
+ },
93
+ "forks": [
94
+ {
95
+ "url": "https://api.github.com/gists/95",
96
+ "updated_at": "2009-10-14T10:23:33Z",
97
+ "user": {
98
+ "url": "https://api.github.com/users/danielmorrison",
99
+ "gravatar_id": "16ae5c2e160af3bdb60db447c092985d",
100
+ "login": "danielmorrison",
101
+ "avatar_url": "https://secure.gravatar.com/avatar/16ae5c2e160af3bdb60db447c092985d?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
102
+ "id": 125
103
+ },
104
+ "created_at": "2008-07-21T20:15:46Z",
105
+ "id": "95"
106
+ },
107
+ {
108
+ "url": "https://api.github.com/gists/140",
109
+ "updated_at": "2009-10-14T10:23:41Z",
110
+ "user": {
111
+ "url": "https://api.github.com/users/elliottcable",
112
+ "gravatar_id": "4eac78fe7a7a607dcc097a0d6fd63690",
113
+ "login": "elliottcable",
114
+ "avatar_url": "https://secure.gravatar.com/avatar/4eac78fe7a7a607dcc097a0d6fd63690?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
115
+ "id": 200
116
+ },
117
+ "created_at": "2008-07-21T20:34:51Z",
118
+ "id": "140"
119
+ },
120
+ {
121
+ "url": "https://api.github.com/gists/248",
122
+ "updated_at": "2009-10-14T10:24:01Z",
123
+ "user": {
124
+ "url": "https://api.github.com/users/mattetti",
125
+ "gravatar_id": "c69521d6e22fc0bbd69337ec8b1698df",
126
+ "login": "mattetti",
127
+ "avatar_url": "https://secure.gravatar.com/avatar/c69521d6e22fc0bbd69337ec8b1698df?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
128
+ "id": 113
129
+ },
130
+ "created_at": "2008-07-21T21:13:11Z",
131
+ "id": "248"
132
+ },
133
+ {
134
+ "url": "https://api.github.com/gists/582",
135
+ "updated_at": "2009-10-14T10:25:16Z",
136
+ "user": {
137
+ "url": "https://api.github.com/users/davidwparker",
138
+ "gravatar_id": "b7964c02372a1218c65f4a679f9d78d5",
139
+ "login": "davidwparker",
140
+ "avatar_url": "https://secure.gravatar.com/avatar/b7964c02372a1218c65f4a679f9d78d5?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
141
+ "id": 2379
142
+ },
143
+ "created_at": "2008-07-22T01:36:18Z",
144
+ "id": "582"
145
+ },
146
+ {
147
+ "url": "https://api.github.com/gists/591",
148
+ "updated_at": "2009-10-14T10:25:18Z",
149
+ "user": {
150
+ "url": "https://api.github.com/users/willcodeforfoo",
151
+ "gravatar_id": "6a2f7f7a997fab1dbf815d155cca50ee",
152
+ "login": "willcodeforfoo",
153
+ "avatar_url": "https://secure.gravatar.com/avatar/6a2f7f7a997fab1dbf815d155cca50ee?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
154
+ "id": 100
155
+ },
156
+ "created_at": "2008-07-22T01:51:28Z",
157
+ "id": "591"
158
+ },
159
+ {
160
+ "url": "https://api.github.com/gists/2398",
161
+ "updated_at": "2009-10-14T10:31:26Z",
162
+ "user": {
163
+ "url": "https://api.github.com/users/mattagar",
164
+ "gravatar_id": "c77e15da48833a5205255d0051460464",
165
+ "login": "mattagar",
166
+ "avatar_url": "https://secure.gravatar.com/avatar/c77e15da48833a5205255d0051460464?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
167
+ "id": 18075
168
+ },
169
+ "created_at": "2008-07-25T06:24:15Z",
170
+ "id": "2398"
171
+ },
172
+ {
173
+ "url": "https://api.github.com/gists/11539",
174
+ "updated_at": "2009-10-14T11:50:19Z",
175
+ "user": {
176
+ "url": "https://api.github.com/users/sunfmin",
177
+ "gravatar_id": "d4a7c04ca87944e7fb06518fb64f9c36",
178
+ "login": "sunfmin",
179
+ "avatar_url": "https://secure.gravatar.com/avatar/d4a7c04ca87944e7fb06518fb64f9c36?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
180
+ "id": 1014
181
+ },
182
+ "created_at": "2008-09-19T04:44:37Z",
183
+ "id": "11539"
184
+ },
185
+ {
186
+ "url": "https://api.github.com/gists/93488",
187
+ "updated_at": "2009-10-16T21:03:06Z",
188
+ "user": {
189
+ "url": "https://api.github.com/users/demonbane",
190
+ "gravatar_id": "881bd08b6b94e600475ce431e8e6ea35",
191
+ "login": "demonbane",
192
+ "avatar_url": "https://secure.gravatar.com/avatar/881bd08b6b94e600475ce431e8e6ea35?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
193
+ "id": 7385
194
+ },
195
+ "created_at": "2009-04-11T07:17:37Z",
196
+ "id": "93488"
197
+ },
198
+ {
199
+ "url": "https://api.github.com/gists/256016",
200
+ "updated_at": "2009-12-14T12:58:33Z",
201
+ "user": {
202
+ "url": "https://api.github.com/users/pedrodelgallego",
203
+ "gravatar_id": "f09383a4b8725aa99cf892813608de76",
204
+ "login": "pedrodelgallego",
205
+ "avatar_url": "https://secure.gravatar.com/avatar/f09383a4b8725aa99cf892813608de76?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
206
+ "id": 6951
207
+ },
208
+ "created_at": "2009-12-14T12:39:44Z",
209
+ "id": "256016"
210
+ },
211
+ {
212
+ "url": "https://api.github.com/gists/369414",
213
+ "updated_at": "2010-04-17T08:52:11Z",
214
+ "user": {
215
+ "url": "https://api.github.com/users/pedrodelgallego",
216
+ "gravatar_id": "f09383a4b8725aa99cf892813608de76",
217
+ "login": "pedrodelgallego",
218
+ "avatar_url": "https://secure.gravatar.com/avatar/f09383a4b8725aa99cf892813608de76?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
219
+ "id": 6951
220
+ },
221
+ "created_at": "2010-04-17T08:51:34Z",
222
+ "id": "369414"
223
+ },
224
+ {
225
+ "url": "https://api.github.com/gists/838269",
226
+ "updated_at": "2011-02-22T05:33:17Z",
227
+ "user": {
228
+ "url": "https://api.github.com/users/hz",
229
+ "gravatar_id": "a5556e47f603afb7695d05d2cd9883da",
230
+ "login": "hz",
231
+ "avatar_url": "https://secure.gravatar.com/avatar/a5556e47f603afb7695d05d2cd9883da?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
232
+ "id": 63441
233
+ },
234
+ "created_at": "2011-02-22T05:32:03Z",
235
+ "id": "838269"
236
+ },
237
+ {
238
+ "url": "https://api.github.com/gists/838371",
239
+ "updated_at": "2011-02-22T08:31:24Z",
240
+ "user": {
241
+ "url": "https://api.github.com/users/BlackBulletIV",
242
+ "gravatar_id": "5ccd0ef26cb0bd488c7e496f080f8dc5",
243
+ "login": "BlackBulletIV",
244
+ "avatar_url": "https://secure.gravatar.com/avatar/5ccd0ef26cb0bd488c7e496f080f8dc5?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
245
+ "id": 446397
246
+ },
247
+ "created_at": "2011-02-22T08:27:53Z",
248
+ "id": "838371"
249
+ },
250
+ {
251
+ "url": "https://api.github.com/gists/854804",
252
+ "updated_at": "2011-03-04T15:37:14Z",
253
+ "user": {
254
+ "url": "https://api.github.com/users/mtsoerin",
255
+ "gravatar_id": "50be7ccda1a6f9f895a2cdf4615eed6e",
256
+ "login": "mtsoerin",
257
+ "avatar_url": "https://secure.gravatar.com/avatar/50be7ccda1a6f9f895a2cdf4615eed6e?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
258
+ "id": 643236
259
+ },
260
+ "created_at": "2011-03-04T15:36:59Z",
261
+ "id": "854804"
262
+ },
263
+ {
264
+ "url": "https://api.github.com/gists/942242",
265
+ "updated_at": "2011-04-26T13:19:30Z",
266
+ "user": {
267
+ "url": "https://api.github.com/users/gbraad",
268
+ "gravatar_id": "e466994eea3c2a1672564e45aca844d0",
269
+ "login": "gbraad",
270
+ "avatar_url": "https://secure.gravatar.com/avatar/e466994eea3c2a1672564e45aca844d0?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
271
+ "id": 1894
272
+ },
273
+ "created_at": "2011-04-26T13:19:11Z",
274
+ "id": "942242"
275
+ },
276
+ {
277
+ "url": "https://api.github.com/gists/959681",
278
+ "updated_at": "2011-05-06T20:05:34Z",
279
+ "user": {
280
+ "url": "https://api.github.com/users/bry4n",
281
+ "gravatar_id": "bb108e4ccd3d3d79350b167b62e2db2a",
282
+ "login": "bry4n",
283
+ "avatar_url": "https://secure.gravatar.com/avatar/bb108e4ccd3d3d79350b167b62e2db2a?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
284
+ "id": 73400
285
+ },
286
+ "created_at": "2011-05-06T20:04:46Z",
287
+ "id": "959681"
288
+ },
289
+ {
290
+ "url": "https://api.github.com/gists/1020085",
291
+ "updated_at": "2011-06-11T00:34:11Z",
292
+ "user": {
293
+ "url": "https://api.github.com/users/hijolan",
294
+ "gravatar_id": "b5d1886ee10bb84b1d1db698a1ca922e",
295
+ "login": "hijolan",
296
+ "avatar_url": "https://secure.gravatar.com/avatar/b5d1886ee10bb84b1d1db698a1ca922e?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
297
+ "id": 404480
298
+ },
299
+ "created_at": "2011-06-11T00:29:06Z",
300
+ "id": "1020085"
301
+ },
302
+ {
303
+ "url": "https://api.github.com/gists/1086800",
304
+ "updated_at": "2011-07-16T21:14:13Z",
305
+ "user": {
306
+ "url": "https://api.github.com/users/ryanwcohen",
307
+ "gravatar_id": "71a33a634d5397ef8be84890365687d0",
308
+ "login": "ryanwcohen",
309
+ "avatar_url": "https://secure.gravatar.com/avatar/71a33a634d5397ef8be84890365687d0?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
310
+ "id": 730418
311
+ },
312
+ "created_at": "2011-07-16T21:14:13Z",
313
+ "id": "1086800"
314
+ },
315
+ {
316
+ "url": "https://api.github.com/gists/1509670",
317
+ "updated_at": "2011-12-22T09:29:22Z",
318
+ "user": {
319
+ "url": "https://api.github.com/users/dirkmc",
320
+ "gravatar_id": "364d08b8747ad5e230f49b65bb07805c",
321
+ "login": "dirkmc",
322
+ "avatar_url": "https://secure.gravatar.com/avatar/364d08b8747ad5e230f49b65bb07805c?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
323
+ "id": 169124
324
+ },
325
+ "created_at": "2011-12-22T09:29:22Z",
326
+ "id": "1509670"
327
+ }
328
+ ],
329
+ "html_url": "https://gist.github.com/1",
330
+ "created_at": "2008-07-15T18:17:13Z",
331
+ "git_pull_url": "git://gist.github.com/1.git",
332
+ "id": "1",
333
+ "description": "the meaning of gist",
334
+ "git_push_url": "git@gist.github.com:1.git"
335
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: githubris
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-17 00:00:00.000000000 Z
12
+ date: 2012-03-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
16
- requirement: &22501080 !ruby/object:Gem::Requirement
16
+ requirement: &19299620 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 0.8.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *22501080
24
+ version_requirements: *19299620
25
25
  description: Githubris is meant to make Github API interaction a breeze.
26
26
  email:
27
27
  - isaac@isaacbfsanders.com
@@ -35,6 +35,7 @@ files:
35
35
  - Gemfile
36
36
  - README.md
37
37
  - Rakefile
38
+ - features/get_a_gist.feature
38
39
  - features/get_a_user.feature
39
40
  - features/list_of_public_gists.feature
40
41
  - features/list_of_users_public_gists.feature
@@ -48,8 +49,6 @@ files:
48
49
  - lib/githubris/api/gist.rb
49
50
  - lib/githubris/api/user.rb
50
51
  - lib/githubris/builder.rb
51
- - lib/githubris/builder/gist.rb
52
- - lib/githubris/builder/user.rb
53
52
  - lib/githubris/comment.rb
54
53
  - lib/githubris/gist.rb
55
54
  - lib/githubris/gist/file.rb
@@ -61,7 +60,6 @@ files:
61
60
  - spec/githubris/api/gist_spec.rb
62
61
  - spec/githubris/api/user_spec.rb
63
62
  - spec/githubris/api_spec.rb
64
- - spec/githubris/builder/gist_spec.rb
65
63
  - spec/githubris/builder_spec.rb
66
64
  - spec/githubris/gist_spec.rb
67
65
  - spec/githubris/user_spec.rb
@@ -70,6 +68,7 @@ files:
70
68
  - spec/support/custom_matchers.rb
71
69
  - spec/support/fakeweb_responses.rb
72
70
  - spec/support/fixtures.rb
71
+ - spec/support/gist.json
73
72
  - spec/support/public_gists_page_1.json
74
73
  - spec/support/public_gists_page_2.json
75
74
  - spec/support/user.json
@@ -99,4 +98,3 @@ signing_key:
99
98
  specification_version: 3
100
99
  summary: Githubris is meant to make Github API interaction a breeze.
101
100
  test_files: []
102
- has_rdoc:
@@ -1,16 +0,0 @@
1
- class Githubris::Builder::Gist
2
- def build data
3
- gist_data = {}
4
- gist_data[:id] = Integer(data.delete('id'))
5
- gist_data[:public] = data.delete('public')
6
- gist_data[:description] = data.delete('description')
7
- gist_data[:files] = data.delete('files').values
8
- gist_data[:url] = URI.parse data.delete('url')
9
- gist_data[:created_at] = DateTime.parse data.delete('created_at')
10
- gist_data[:updated_at] = DateTime.parse data.delete('updated_at')
11
- tmp_arr = []
12
- data.delete('comments').times { tmp_arr << Githubris::Comment.new }
13
- gist_data[:comments] = tmp_arr
14
- Githubris::Gist.new gist_data
15
- end
16
- end
@@ -1,15 +0,0 @@
1
- require 'githubris/builder'
2
- require 'githubris/user'
3
-
4
- class Githubris::Builder::User
5
- def build data
6
- user_attributes = {
7
- :login => data.delete('login'),
8
- :id => Integer(data.delete('id')),
9
- :avatar_url => URI.parse(data.delete('avatar_url')),
10
- :url => URI.parse(data.delete('url')),
11
- :gravatar_id => data.delete('gravatar_id')
12
- }
13
- Githubris::User.new user_attributes
14
- end
15
- end
@@ -1,38 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Githubris::Builder::Gist do
4
- subject { Githubris::Builder::Gist.new.build gist_data }
5
- let(:gist_data) { Githubris::SpecHelper.gist_data }
6
-
7
- context 'schema' do
8
-
9
- it { should be_instance_of Githubris::Gist }
10
- its(:url) { should be_kind_of URI }
11
- its(:id) { should be_instance_of Fixnum }
12
- its(:description) { should be_instance_of String }
13
- it { should be_public }
14
- its(:created_at) { should be_instance_of DateTime }
15
- its(:updated_at) { should be_instance_of DateTime }
16
- its(:comments) { should be_instance_of Array }
17
- its(:files) { should be_instance_of Array }
18
- end
19
-
20
- context 'when passed a specific gist' do
21
-
22
- it 'is public' do
23
- subject.should be_public
24
- end
25
-
26
- its(:id) { should eql 1 }
27
-
28
- its(:description) { should eql 'the meaning of gist' }
29
-
30
- it 'was created at 6:17:13 on July 15, 2008' do
31
- subject.created_at.should eql DateTime.new(2008, 7, 15, 18, 17, 13)
32
- end
33
-
34
- it 'was updated at 2:58:22 on Feburary 22, 2011' do
35
- subject.updated_at.should eql DateTime.new(2011, 2, 22, 2, 58, 22)
36
- end
37
- end
38
- end