twitpic 0.2.0 → 0.3.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/README.rdoc CHANGED
@@ -10,6 +10,12 @@ Library for TwitPic API.
10
10
 
11
11
  == SYNOPSIS:
12
12
 
13
+ Use ad command line tool:
14
+
15
+ twitpic Picture.png
16
+
17
+ Use as library:
18
+
13
19
  twitpic = TwitPic.new(username, password)
14
20
  twitpic.upload('Picture.png', 'My Picture')
15
21
 
data/Rakefile CHANGED
@@ -16,6 +16,7 @@ spec = Gem::Specification.new do |s|
16
16
  s.files = %w(Rakefile README.rdoc History.txt) + Dir.glob("{bin,lib,spec}/**/*")
17
17
  s.add_dependency("mime-types", ">= 1.15")
18
18
  s.add_dependency("highline", ">= 1.5.1")
19
+ s.add_dependency("rubytter", ">= 0.8.0")
19
20
  s.executables = ["twitpic"]
20
21
  s.authors = %w(jugyo)
21
22
  s.email = 'jugyo.org@gmail.com'
data/bin/twitpic CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'rubygems'
4
4
  require 'twitpic'
5
+ require 'rubytter'
5
6
  require 'optparse'
6
7
  require "highline"
7
8
 
@@ -18,6 +19,16 @@ OptionParser.new do |o|
18
19
  o.on('-p', '--password=PASSWORD') {|v| password = v}
19
20
  o.on('-m', '--message=MESSAGE') {|v| message = v}
20
21
  o.on('-s', '--screencapture') {|v| screencapture = true}
22
+ o.on('-c', '--conf=CONFNAME') { |v|
23
+ begin
24
+ conf = Pit.get v
25
+ username = conf["username"]
26
+ password = conf["password"]
27
+ rescue
28
+ puts 'You don\'t have pit module. Please install pit.'
29
+ puts 'for example: gem install pit'
30
+ end
31
+ }
21
32
  o.permute!(ARGV)
22
33
  file = ARGV.first
23
34
  if file.nil? && screencapture.nil?
@@ -29,7 +40,7 @@ end
29
40
  if file.nil? && screencapture
30
41
  file = '/tmp/twitpic_screencapture.png'
31
42
  File.delete(file) if File.exists?(file)
32
- puts 'Please capture screen...'
43
+ puts 'Please capture screen!'
33
44
  system 'screencapture', '-i', '-f', file
34
45
  unless File.exists?(file)
35
46
  puts 'Aboat!'
@@ -37,10 +48,30 @@ if file.nil? && screencapture
37
48
  end
38
49
  end
39
50
 
51
+ # try pit
52
+ if username.nil? && password.nil?
53
+ begin
54
+ require 'pit'
55
+ puts 'Load twitter config from pit...'
56
+ config = Pit.get('twitter')
57
+ username = config['username']
58
+ password = config['password']
59
+ rescue LoadError
60
+ end
61
+ end
62
+
63
+ # try highline
40
64
  highline = HighLine.new
41
65
  username = highline.ask('USERNAME: ') unless username
42
66
  password = highline.ask('PASSWORD: ') {|q| q.echo = '*'} unless password
43
67
  message = highline.ask('MESSAGE: ') unless message
44
68
 
45
69
  puts 'Uploading...'
46
- TwitPic.new(username, password).upload(file, message)
70
+ url = TwitPic.new(username, password).upload(file)[:mediaurl]
71
+ puts " => \"#{url}\""
72
+
73
+ message.strip!
74
+ post_message = "#{message} #{url}"
75
+ puts "Post to Twitter..."
76
+ Rubytter.new(username, password).update(post_message) if message
77
+ puts " => \"#{post_message}\""
data/lib/twitpic.rb CHANGED
@@ -1,9 +1,12 @@
1
1
  require "net/https"
2
2
  require "uri"
3
3
  require 'mime/types'
4
+ require "rexml/document"
4
5
 
5
6
  class TwitPic
6
- VERSION = '0.2.0'
7
+ VERSION = '0.3.0'
8
+
9
+ class APIError < StandardError; end
7
10
 
8
11
  def initialize(username, password)
9
12
  @username = username
@@ -37,7 +40,21 @@ class TwitPic
37
40
  response = http.post(uri.path, body, headers)
38
41
  response.body
39
42
  end
40
- xml
43
+ parse_response(xml)
44
+ end
45
+
46
+ def parse_response(xml)
47
+ doc = REXML::Document.new(xml)
48
+ error_element = REXML::XPath.match(doc, "/rsp/err").first
49
+ if error_element
50
+ raise APIError, error_element.attribute('code').value + ': ' + error_element.attribute('code').value
51
+ else
52
+ result = {}
53
+ [:statusid, :userid, :mediaid, :mediaurl].each do |key|
54
+ result[key] = REXML::XPath.match(doc, "/rsp/#{key}").first.text rescue nil
55
+ end
56
+ result
57
+ end
41
58
  end
42
59
 
43
60
  def create_body(parts, file_path, boundary)
data/spec/twitpic_spec.rb CHANGED
@@ -32,6 +32,40 @@ password\r
32
32
  EOS
33
33
  end
34
34
 
35
+ describe 'response data is valid' do
36
+ before(:each) do
37
+ @xml = <<-XML
38
+ <?xml version="1.0" encoding="UTF-8"?>
39
+ <rsp status="ok">
40
+ <statusid>1111</statusid>
41
+ <userid>11111</userid>
42
+ <mediaid>abc123</mediaid>
43
+ <mediaurl>http://twitpic.com/abc123</mediaurl>
44
+ </rsp>
45
+ XML
46
+ end
47
+
48
+ it 'should parse xml' do
49
+ result = @twitpic.parse_response(@xml)
50
+ result.should == {:statusid=>"1111", :userid=>"11111", :mediaid=>"abc123", :mediaurl=>"http://twitpic.com/abc123"}
51
+ end
52
+ end
53
+
54
+ describe 'response data is invalid' do
55
+ before(:each) do
56
+ @xml = <<-XML
57
+ <?xml version="1.0" encoding="UTF-8"?>
58
+ <rsp stat="fail">
59
+ <err code="1001" msg="Invalid twitter username or password" />
60
+ </rsp>
61
+ XML
62
+ end
63
+
64
+ it 'should raise error' do
65
+ lambda {@twitpic.parse_response(@xml)}.should raise_error(TwitPic::APIError)
66
+ end
67
+ end
68
+
35
69
  describe 'with message' do
36
70
  it 'should call method "post"' do
37
71
  file_path = File.dirname(__FILE__) + '/test.txt'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitpic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - jugyo
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-20 00:00:00 +09:00
12
+ date: 2009-07-06 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -32,6 +32,16 @@ dependencies:
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.5.1
34
34
  version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: rubytter
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.8.0
44
+ version:
35
45
  description: Library for TwitPic API.
36
46
  email: jugyo.org@gmail.com
37
47
  executables:
@@ -51,6 +61,8 @@ files:
51
61
  - spec/twitpic_spec.rb
52
62
  has_rdoc: true
53
63
  homepage: http://github.com/jugyo/twitpic
64
+ licenses: []
65
+
54
66
  post_install_message:
55
67
  rdoc_options:
56
68
  - --main
@@ -74,9 +86,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
74
86
  requirements: []
75
87
 
76
88
  rubyforge_project: twitpic
77
- rubygems_version: 1.3.1
89
+ rubygems_version: 1.3.4
78
90
  signing_key:
79
- specification_version: 2
91
+ specification_version: 3
80
92
  summary: Library for TwitPic API.
81
93
  test_files: []
82
94