github-api-client 0.2.5 → 0.2.6

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.5
1
+ 0.2.6
data/bin/api-browser.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ $:.unshift File.expand_path('../lib', File.dirname(__FILE__))
4
+
3
5
  require 'github-api-client'
4
6
 
5
7
  puts GitHub::Config::Version
@@ -14,6 +16,7 @@ else # launches all-features code
14
16
  # Performance tests
15
17
  GitHub::Organization.get('rails').fetch(:repositories).repositories
16
18
  GitHub::Repo.get('parndt/hub').parent.fetch(:self, :watchers).watchers
19
+ GitHub::Repo.get('rails/rails', :organization).fetch(:self)
17
20
  GitHub::User.get('kneath').fetch(:followers, :followings)
18
21
  GitHub::User.get('schacon').fetch(:organizations).organizations
19
22
  GitHub::Organization.get('github').fetch(:members, :repositories).members
@@ -5,16 +5,18 @@ class CreateRepos < ActiveRecord::Migration
5
5
  t.string attr
6
6
  end
7
7
 
8
- %w(owner parent organization).each do |attr|
8
+ %w(parent).each do |attr|
9
9
  t.references attr
10
10
  end
11
11
 
12
+ t.references :owner, :polymorphic => true
13
+
12
14
  # TODO: organization temporarily a string, only when there's no organization model
13
15
  %w(size score).each do |attr|
14
16
  t.integer attr
15
17
  end
16
18
 
17
- %w(has_downloads b_fork b_org deleted locked has_wiki private open_issues has_issues).each do |attr|
19
+ %w(has_downloads b_fork deleted locked has_wiki private open_issues has_issues).each do |attr|
18
20
  t.boolean attr
19
21
  end
20
22
 
@@ -1,5 +1,5 @@
1
1
  Before do
2
- %w(Repo User).each do |attr|
2
+ %w(Repo User Organization).each do |attr|
3
3
  GitHub.const_get(attr).delete_all
4
4
  end
5
5
  end
@@ -45,9 +45,10 @@ module GitHub
45
45
  hash = case resource
46
46
  when :user_get then {:public_repo_count => :nil, :public_gist_count => :nil, :created => :nil, :permission => :nil, :followers_count => :nil, :following_count => :nil}
47
47
  when :user_search then {:name => :login, :username => :login, :fullname => :name, :followers => :nil, :repos => :nil, :created => :nil, :permission => :nil}
48
- when :repo_get then {:fork => :b_fork, :watchers => nil, :owner => :owner_login, :organization => :organization_login, :forks => nil, :followers_count => nil, :forks_count => nil}
48
+ when :repo_get then {:fork => :b_fork, :watchers => nil, :owner => :owner_login, :forks => nil, :followers_count => nil, :forks_count => nil}
49
49
  when :org_get then {:public_gist_count => nil, :public_repo_count => nil, :following_count => :nil, :followers_count => :nil}
50
50
  when :org_repo_index then {:owner => nil, :open_issues => nil, :has_issues => nil, :watchers => nil, :forks => nil, :fork => :b_fork, :gravatar_id => nil, :organization => :organization_login}
51
+ when :org_repo_get then {:owner => nil, :open_issues => nil, :has_issues => nil, :watchers => nil, :forks => nil, :fork => :b_fork, :gravatar_id => nil, :organization => :organization_login}
51
52
  end
52
53
  # Provides abstraction layer between YAML :keys and 'keys' returned by Hub
53
54
  symbolized_resources = [:repo_get, :org_repo_index, :org_repo_get]
@@ -1,7 +1,7 @@
1
1
  module GitHub
2
2
  class Organization < ActiveRecord::Base
3
3
  has_and_belongs_to_many :members, :class_name => 'GitHub::User', :join_table => 'organizations_members'
4
- has_many :repositories, :class_name => 'GitHub::Repo'
4
+ has_many :repositories, :class_name => 'GitHub::Repo', :as => :owner
5
5
 
6
6
  def get
7
7
  self.update_attributes(
@@ -1,24 +1,36 @@
1
1
  module GitHub
2
2
  class Repo < ActiveRecord::Base
3
- belongs_to :owner, :class_name => 'GitHub::User'
4
- belongs_to :organization, :class_name => 'GitHub::Organization'
3
+ belongs_to :owner, :polymorphic => true
5
4
  belongs_to :parent, :class_name => 'GitHub::Repo'
6
5
  has_and_belongs_to_many :watchers, :class_name => 'GitHub::User', :join_table => 'repo_watchings', :foreign_key => 'repo_id', :association_foreign_key => 'watcher_id'
7
6
 
8
7
  def get
9
- self.update_attributes GitHub::Base.parse_attributes(:repo_get,
8
+ parser = case self.owner_type
9
+ when 'GitHub::User'
10
+ :repo_get
11
+ when 'GitHub::Organization'
12
+ :org_repo_get
13
+ end
14
+ self.update_attributes GitHub::Base.parse_attributes(parser,
10
15
  YAML::load(
11
16
  GitHub::Browser.get("/repos/show/#{self.permalink}"))['repository'])
12
17
  self
13
18
  end
14
19
 
15
- def self.get(information)
20
+ def self.get(information, o_type = :user)
16
21
  #FIXME: permalink column must be present, comparing url's is surely not the most efficient way for the db
17
- conditions = {:name => information.split('/').last, :owner_id => GitHub::User.find_or_create_by_login(information.split('/').first).id}
22
+ conditions = {:name => information.split('/').last}
23
+ if o_type == :user
24
+ conditions.merge! :owner_id => GitHub::User.find_or_create_by_login(information.split('/').first).id, :owner_type => 'GitHub::User'
25
+ else
26
+ conditions.merge! :owner_id => GitHub::Organization.find_or_create_by_login(information.split('/').first).id, :owner_type => 'GitHub::Organization'
27
+ end
18
28
  if r = GitHub::Repo.where(conditions).first
19
29
  r.get
20
30
  else
21
31
  r = GitHub::Repo.new(conditions).get
32
+ p r.parent
33
+ r
22
34
  end
23
35
  end
24
36
 
@@ -52,29 +64,27 @@ module GitHub
52
64
  public
53
65
  def owner_login=(user)
54
66
  if user
55
- self.b_org = false
56
67
  self.owner = GitHub::User.find_or_create_by_login(user)
57
68
  end
58
69
  end
59
70
 
60
71
  def organization_login=(organization)
61
72
  if organization
62
- self.b_org = true
63
- self.organization = Organization.find_or_create_by_login(organization)
73
+ self.owner = Organization.find_or_create_by_login(organization)
64
74
  end
65
75
  end
66
76
 
67
77
  def parent=(permalink)
78
+ #FIXME: parent repo does not allow organization to be owner ATM
68
79
  owner = GitHub::User.find_or_create_by_login permalink.split('/').first
69
80
  name = permalink.split('/').last
70
- repo = GitHub::Repo.where(:owner_id => owner.id, :name => name).first
71
- repo ||= GitHub::Repo.create(:owner_id => owner.id, :name => name)
81
+ repo = GitHub::Repo.where(:owner_id => owner.id, :owner_type => 'GitHub::Repo', :name => name).first
82
+ repo ||= GitHub::Repo.create(:owner => owner, :name => name)
72
83
  self.parent_id = repo.id
73
84
  end
74
85
 
75
86
  def permalink
76
- o = owner.presence || organization.presence
77
- "#{o.login}/#{name}"
87
+ "#{owner.login}/#{name}"
78
88
  end
79
89
 
80
90
  # For future, when sql will be find_or_create_by_permalink
@@ -3,7 +3,7 @@ module GitHub
3
3
  class User < ActiveRecord::Base
4
4
  has_and_belongs_to_many :followers, :foreign_key => 'follower_id', :association_foreign_key => 'following_id', :join_table => 'user_followings', :class_name => 'User'
5
5
  has_and_belongs_to_many :followings, :foreign_key => 'following_id', :association_foreign_key => 'follower_id', :join_table => 'user_followings', :class_name => 'User'
6
- has_many :repos, :class_name => 'GitHub::Repo', :foreign_key => 'owner_id'
6
+ has_many :repos, :class_name => 'GitHub::Repo', :as => :owner
7
7
 
8
8
  # FIXME: Does GitHub allow a user to have multiple organizations?
9
9
  has_and_belongs_to_many :organizations, :join_table => 'organizations_members'
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 5
9
- version: 0.2.5
8
+ - 6
9
+ version: 0.2.6
10
10
  platform: ruby
11
11
  authors:
12
12
  - "Jakub Oko\xC5\x84ski"
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-26 00:00:00 +01:00
17
+ date: 2011-01-07 00:00:00 +01:00
18
18
  default_executable: api-browser.rb
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -219,7 +219,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
219
219
  requirements:
220
220
  - - ">="
221
221
  - !ruby/object:Gem::Version
222
- hash: -2220678579085750639
222
+ hash: 4308347029260914289
223
223
  segments:
224
224
  - 0
225
225
  version: "0"