net-github-upload 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -62,6 +62,7 @@ respect to http://github.com/typester/net-github-upload-perl
62
62
  == DEPENDENCY
63
63
 
64
64
  * nokogiri
65
+ * json
65
66
  * faster_xml_simple
66
67
  * httpclient
67
68
 
data/Rakefile CHANGED
@@ -7,7 +7,7 @@ require 'rake/packagetask'
7
7
  require 'rake/gempackagetask'
8
8
  require 'rake/rdoctask'
9
9
  require 'rake/contrib/sshpublisher'
10
- require 'lib/net/github-upload'
10
+ require './lib/net/github-upload'
11
11
 
12
12
  $version = Net::GitHub::Upload::VERSION
13
13
  $readme = 'README.rdoc'
@@ -51,6 +51,7 @@ spec = Gem::Specification.new do |s|
51
51
  s.test_files = Dir["test/*_test.rb"]
52
52
  s.add_dependency('nokogiri', '>=1.4.0')
53
53
  s.add_dependency('faster_xml_simple')
54
+ s.add_dependency('json')
54
55
  s.add_dependency('httpclient')
55
56
  s.files = %w(README.rdoc Rakefile) + Dir["{bin,test,lib}/**/*"]
56
57
  end
@@ -1,12 +1,14 @@
1
+ require 'tempfile'
1
2
  require 'nokogiri'
2
3
  require 'httpclient'
3
4
  require 'stringio'
5
+ require 'json'
4
6
  require 'faster_xml_simple'
5
7
 
6
8
  module Net
7
9
  module GitHub
8
10
  class Upload
9
- VERSION = '0.0.4'
11
+ VERSION = '0.0.5'
10
12
  def initialize params=nil
11
13
  @login = params[:login]
12
14
  @token = params[:token]
@@ -40,18 +42,14 @@ module Net
40
42
  if info[:replace]
41
43
  list_files(info[:repos]).each { |obj|
42
44
  next unless obj[:name] == info[:name]
43
- HTTPClient.post("http://github.com/#{info[:repos]}/downloads/#{obj[:id].gsub( "download_", '')}", {
44
- "_method" => "delete",
45
- "login" => @login,
46
- "token" => @token
47
- })
45
+ delete info[:repos], obj[:id]
48
46
  }
49
47
  elsif list_files(info[:repos]).any?{|obj| obj[:name] == info[:name]}
50
48
  raise "file '#{info[:name]}' is already uploaded. please try different name"
51
49
  end
52
50
 
53
51
  info[:content_type] ||= 'application/octet-stream'
54
- stat = HTTPClient.post("http://github.com/#{info[:repos]}/downloads", {
52
+ stat = HTTPClient.post("https://github.com/#{info[:repos]}/downloads", {
55
53
  "file_size" => info[:file] ? File.stat(info[:file]).size : info[:data].size,
56
54
  "content_type" => info[:content_type],
57
55
  "file_name" => info[:name],
@@ -64,32 +62,26 @@ module Net
64
62
  raise "Failed to post file info"
65
63
  end
66
64
 
67
- upload_info = FasterXmlSimple.xml_in(stat.content)['hash']
65
+ upload_info = JSON.parse(stat.content)
68
66
  if info[:file]
69
67
  f = File.open(info[:file], 'rb')
70
- stat = HTTPClient.post("http://github.s3.amazonaws.com/", [
71
- ['Filename', info[:name]],
72
- ['policy', upload_info['policy']],
73
- ['success_action_status', 201],
74
- ['key', upload_info['prefix'] + info[:name]],
75
- ['AWSAccessKeyId', upload_info['accesskeyid']],
76
- ['signature', upload_info['signature']],
77
- ['acl', upload_info['acl']],
78
- ['file', f]
79
- ])
80
- f.close
81
68
  else
82
- stat = HTTPClient.post("http://github.s3.amazonaws.com/", [
83
- ['Filename', info[:name]],
84
- ['policy', upload_info['policy']],
85
- ['success_action_status', 201],
86
- ['key', upload_info['prefix'] + info[:name]],
87
- ['AWSAccessKeyId', upload_info['accesskeyid']],
88
- ['signature', upload_info['signature']],
89
- ['acl', upload_info['acl']],
90
- ['file', StringIO.new(info[:data])]
91
- ])
69
+ f = Tempfile.open('net-github-upload')
70
+ f << info[:data]
71
+ f.flush
92
72
  end
73
+ stat = HTTPClient.post("http://github.s3.amazonaws.com/", [
74
+ ['Filename', info[:name]],
75
+ ['policy', upload_info['policy']],
76
+ ['success_action_status', 201],
77
+ ['key', upload_info['path']],
78
+ ['AWSAccessKeyId', upload_info['accesskeyid']],
79
+ ['Content-Type', upload_info['content_type'] || 'application/octet-stream'],
80
+ ['signature', upload_info['signature']],
81
+ ['acl', upload_info['acl']],
82
+ ['file', f]
83
+ ])
84
+ f.close
93
85
 
94
86
  if stat.code == 201
95
87
  return FasterXmlSimple.xml_in(stat.content)['PostResponse']['Location']
@@ -102,8 +94,17 @@ module Net
102
94
  upload info.merge( :replace => true )
103
95
  end
104
96
 
105
- private
97
+ def delete_all repos
98
+ unless repos
99
+ raise "required repository name"
100
+ end
101
+ repos = @login + '/' + repos unless repos.include? '/'
102
+ list_files(repos).each { |obj|
103
+ delete repos, obj[:id]
104
+ }
105
+ end
106
106
 
107
+ private
107
108
 
108
109
  def extract_error_message(stat)
109
110
  # @see http://docs.amazonwebservices.com/AmazonS3/2006-03-01/ErrorResponses.html
@@ -113,21 +114,28 @@ module Net
113
114
  ''
114
115
  end
115
116
 
117
+ def delete repos, id
118
+ HTTPClient.post("https://github.com/#{repos}/downloads/#{id.gsub( "download_", '')}", {
119
+ "_method" => "delete",
120
+ "login" => @login,
121
+ "token" => @token
122
+ })
123
+ end
116
124
 
117
125
  def list_files repos
118
126
  raise "required repository name" unless repos
119
- res = HTTPClient.get_content("http://github.com/#{repos}/downloads", {
127
+ res = HTTPClient.get_content("https://github.com/#{repos}/downloads", {
120
128
  "login" => @login,
121
129
  "token" => @token
122
130
  })
123
- Nokogiri::HTML(res).xpath('id("browser")/descendant::tr[contains(@id, "download")]').map do |fileinfo|
131
+ Nokogiri::HTML(res).xpath('id("manual_downloads")/li').map do |fileinfo|
124
132
  obj = {
125
- :id => fileinfo.attribute('id').text,
126
- :description => fileinfo.at_xpath('descendant::td[3]').text,
127
- :date => fileinfo.at_xpath('descendant::td[4]').text,
128
- :size => fileinfo.at_xpath('descendant::td[5]').text
133
+ :description => fileinfo.at_xpath('descendant::h4').text,
134
+ :date => fileinfo.at_xpath('descendant::p/abbr').attribute('title').text,
135
+ :size => fileinfo.at_xpath('descendant::p/strong').text,
136
+ :id => /\d+$/.match(fileinfo.at_xpath('a').attribute('href').text)[0]
129
137
  }
130
- anchor = fileinfo.at_xpath('descendant::td[2]/a')
138
+ anchor = fileinfo.at_xpath('descendant::h4/a')
131
139
  obj[:link] = anchor.attribute('href').text
132
140
  obj[:name] = anchor.text
133
141
  obj
@@ -1,5 +1,5 @@
1
1
  require 'test/unit'
2
- require File.dirname(__FILE__) + '/../lib/net/github-upload'
2
+ require 'net/github-upload'
3
3
 
4
4
  class GitHubUploadTest < Test::Unit::TestCase
5
5
  def setup
@@ -10,7 +10,8 @@ class GitHubUploadTest < Test::Unit::TestCase
10
10
  :token => token
11
11
  )
12
12
  @repos = 'ruby-net-github-upload'
13
- end
13
+ @gh.delete_all @repos
14
+ end
14
15
 
15
16
  def test_file_upload
16
17
  direct_link = nil
@@ -18,6 +19,7 @@ class GitHubUploadTest < Test::Unit::TestCase
18
19
  direct_link = @gh.upload(
19
20
  :repos => @repos,
20
21
  :file => 'test/test',
22
+ :content_type => 'text/plain',
21
23
  :description => "test file"
22
24
  )
23
25
  }
@@ -28,6 +30,7 @@ class GitHubUploadTest < Test::Unit::TestCase
28
30
  direct_link = @gh.replace(
29
31
  :repos => @repos,
30
32
  :file => 'test/test',
33
+ :content_type => 'text/plain',
31
34
  :description => "test file"
32
35
  )
33
36
  }
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net-github-upload
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 0
9
- - 4
10
- version: 0.0.4
8
+ - 5
9
+ version: 0.0.5
11
10
  platform: ruby
12
11
  authors:
13
12
  - Constellation
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-08-12 00:00:00 +09:00
17
+ date: 2010-11-11 00:00:00 +09:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
@@ -26,7 +25,6 @@ dependencies:
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
29
- hash: 7
30
28
  segments:
31
29
  - 1
32
30
  - 4
@@ -42,26 +40,37 @@ dependencies:
42
40
  requirements:
43
41
  - - ">="
44
42
  - !ruby/object:Gem::Version
45
- hash: 3
46
43
  segments:
47
44
  - 0
48
45
  version: "0"
49
46
  type: :runtime
50
47
  version_requirements: *id002
51
48
  - !ruby/object:Gem::Dependency
52
- name: httpclient
49
+ name: json
53
50
  prerelease: false
54
51
  requirement: &id003 !ruby/object:Gem::Requirement
55
52
  none: false
56
53
  requirements:
57
54
  - - ">="
58
55
  - !ruby/object:Gem::Version
59
- hash: 3
60
56
  segments:
61
57
  - 0
62
58
  version: "0"
63
59
  type: :runtime
64
60
  version_requirements: *id003
61
+ - !ruby/object:Gem::Dependency
62
+ name: httpclient
63
+ prerelease: false
64
+ requirement: &id004 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 0
71
+ version: "0"
72
+ type: :runtime
73
+ version_requirements: *id004
65
74
  description: |
66
75
  Ruby Net::GitHub::Upload is upload user agent for GitHub Downloads
67
76
 
@@ -75,8 +84,8 @@ extra_rdoc_files:
75
84
  files:
76
85
  - README.rdoc
77
86
  - Rakefile
78
- - test/test
79
87
  - test/github_test.rb
88
+ - test/test
80
89
  - lib/net/github-upload.rb
81
90
  has_rdoc: true
82
91
  homepage: http://github.com/Constellation/ruby-net-github-upload
@@ -97,7 +106,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
97
106
  requirements:
98
107
  - - ">="
99
108
  - !ruby/object:Gem::Version
100
- hash: 3
101
109
  segments:
102
110
  - 0
103
111
  version: "0"
@@ -106,7 +114,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
114
  requirements:
107
115
  - - ">="
108
116
  - !ruby/object:Gem::Version
109
- hash: 3
110
117
  segments:
111
118
  - 0
112
119
  version: "0"