oauth-cli-twitter 0.0.2
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/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.md +98 -0
- data/Rakefile +49 -0
- data/VERSION +1 -0
- data/example/define_constant.rb +14 -0
- data/example/inclusion.rb +27 -0
- data/example/simple.rb +10 -0
- data/lib/oauth/cli/twitter.rb +114 -0
- data/oauth-cli-twitter.gemspec +67 -0
- data/spec/oauth_cli_twitter_spec.rb +212 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +9 -0
- metadata +139 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 tily
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
OAuth::CLI::Twitter
|
2
|
+
===================
|
3
|
+
|
4
|
+
Description
|
5
|
+
-----------
|
6
|
+
|
7
|
+
Twitter OAuth interface for CLI applications.
|
8
|
+
|
9
|
+
Usage
|
10
|
+
-----
|
11
|
+
|
12
|
+
### Interface
|
13
|
+
|
14
|
+
* simple
|
15
|
+
|
16
|
+
require 'oauth/cli/twitter'
|
17
|
+
|
18
|
+
access_token = OAuth::CLI::Twitter.get_access_token(:pit => 'oauth-cli-twitter-simple')
|
19
|
+
access_token.post(
|
20
|
+
'http://twitter.com/statuses/update.json',
|
21
|
+
'status'=> 'hello from ruby-oauth-cli-twitter simple example'
|
22
|
+
)
|
23
|
+
|
24
|
+
* define constants
|
25
|
+
|
26
|
+
require 'rubygems'
|
27
|
+
require 'rubytter'
|
28
|
+
require 'oauth/cli/twitter'
|
29
|
+
|
30
|
+
CONSUMER_TOKEN = '358RyJ77o4BYJUViVRQ'
|
31
|
+
CONSUMER_SECRET = 'aOHsTInoyOjNewpvC9c5uwBqF3XOd5xSGlHFtaB8A'
|
32
|
+
|
33
|
+
access_token = OAuth::CLI::Twitter.get_access_token(:pit => 'oauth-cli-twitter-dc')
|
34
|
+
rubytter = OAuthRubytter.new(access_token)
|
35
|
+
rubytter.update('hello from ruby-oauth-cli-twitter define constant example')
|
36
|
+
|
37
|
+
* include
|
38
|
+
|
39
|
+
require 'rubygems'
|
40
|
+
require 'twitter'
|
41
|
+
require 'oauth/cli/twitter'
|
42
|
+
|
43
|
+
class MyApplication
|
44
|
+
include OAuth::CLI::Twitter
|
45
|
+
|
46
|
+
CONSUMER_TOKEN = '358RyJ77o4BYJUViVRQ'
|
47
|
+
CONSUMER_SECRET = 'aOHsTInoyOjNewpvC9c5uwBqF3XOd5xSGlHFtaB8A'
|
48
|
+
|
49
|
+
def initialize
|
50
|
+
access_token = get_access_token(:pit => 'oauth-cli-twitter-inclusion')
|
51
|
+
oauth = Twitter::OAuth.new(CONSUMER_TOKEN, CONSUMER_SECRET)
|
52
|
+
oauth.authorize_from_access(access_token.token, access_token.secret)
|
53
|
+
@twitter = Twitter::Base.new(oauth)
|
54
|
+
end
|
55
|
+
|
56
|
+
def update(status)
|
57
|
+
@twitter.update(status)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
app = MyApplication.new
|
62
|
+
app.update('hello from ruby-oauth-cli-twitter inclusion example')
|
63
|
+
|
64
|
+
### Save Config
|
65
|
+
|
66
|
+
* save config to file
|
67
|
+
|
68
|
+
include OAuth::CLI::Twitter
|
69
|
+
p get_acccess_token(:file => ENV['HOME'] + '/.my_app')
|
70
|
+
|
71
|
+
* save config to pit
|
72
|
+
|
73
|
+
include OAuth::CLI::Twitter
|
74
|
+
p get_acccess_token(:pit => 'my_app')
|
75
|
+
|
76
|
+
Requirement
|
77
|
+
-----------
|
78
|
+
|
79
|
+
* oauth
|
80
|
+
* readline
|
81
|
+
* termtter
|
82
|
+
* pit
|
83
|
+
|
84
|
+
Install
|
85
|
+
-------
|
86
|
+
|
87
|
+
### Archive Installation
|
88
|
+
|
89
|
+
rake install
|
90
|
+
|
91
|
+
### Gem Installation
|
92
|
+
|
93
|
+
gem install oauth-cli-twitter
|
94
|
+
|
95
|
+
Copyright
|
96
|
+
---------
|
97
|
+
|
98
|
+
Copyright (c) 2010 tily. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "oauth-cli-twitter"
|
8
|
+
gem.summary = %Q{Twitter OAuth Interface for CLI Applications}
|
9
|
+
gem.description = %Q{Twitter OAuth Interface for CLI Applications}
|
10
|
+
gem.email = "tily05@gmail.com"
|
11
|
+
gem.homepage = "http://github.com/tily/ruby-oauth-cli-twitter"
|
12
|
+
gem.authors = ["tily"]
|
13
|
+
gem.add_development_dependency "rspec", ">= 1.2.9"
|
14
|
+
gem.add_dependency "oauth"
|
15
|
+
gem.add_dependency "termtter"
|
16
|
+
gem.add_dependency "pit"
|
17
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
18
|
+
end
|
19
|
+
Jeweler::GemcutterTasks.new
|
20
|
+
rescue LoadError
|
21
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
22
|
+
end
|
23
|
+
|
24
|
+
require 'spec/rake/spectask'
|
25
|
+
Spec::Rake::SpecTask.new(:spec) do |spec|
|
26
|
+
spec.libs << 'lib' << 'spec'
|
27
|
+
spec.spec_files = FileList['spec/**/*_spec.rb']
|
28
|
+
end
|
29
|
+
|
30
|
+
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
31
|
+
spec.libs << 'lib' << 'spec'
|
32
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
33
|
+
spec.rcov = true
|
34
|
+
spec.rcov_opts = ["--gcc"]
|
35
|
+
end
|
36
|
+
|
37
|
+
task :spec => :check_dependencies
|
38
|
+
|
39
|
+
task :default => :spec
|
40
|
+
|
41
|
+
require 'rake/rdoctask'
|
42
|
+
Rake::RDocTask.new do |rdoc|
|
43
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
44
|
+
|
45
|
+
rdoc.rdoc_dir = 'rdoc'
|
46
|
+
rdoc.title = "ruby-oauth-cli-twitter #{version}"
|
47
|
+
rdoc.rdoc_files.include('README*')
|
48
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
49
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.2
|
@@ -0,0 +1,14 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'rubytter'
|
6
|
+
require 'oauth/cli/twitter'
|
7
|
+
|
8
|
+
CONSUMER_TOKEN = '358RyJ77o4BYJUViVRQ'
|
9
|
+
CONSUMER_SECRET = 'aOHsTInoyOjNewpvC9c5uwBqF3XOd5xSGlHFtaB8A'
|
10
|
+
|
11
|
+
access_token = OAuth::CLI::Twitter.get_access_token(:pit => 'oauth-cli-twitter-dc')
|
12
|
+
rubytter = OAuthRubytter.new(access_token)
|
13
|
+
rubytter.update('hello from ruby-oauth-cli-twitter define constant example')
|
14
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'twitter'
|
6
|
+
require 'oauth/cli/twitter'
|
7
|
+
|
8
|
+
class MyApplication
|
9
|
+
include OAuth::CLI::Twitter
|
10
|
+
|
11
|
+
CONSUMER_TOKEN = '358RyJ77o4BYJUViVRQ'
|
12
|
+
CONSUMER_SECRET = 'aOHsTInoyOjNewpvC9c5uwBqF3XOd5xSGlHFtaB8A'
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
access_token = get_access_token(:pit => 'oauth-cli-twitter-inclusion')
|
16
|
+
oauth = Twitter::OAuth.new(CONSUMER_TOKEN, CONSUMER_SECRET)
|
17
|
+
oauth.authorize_from_access(access_token.token, access_token.secret)
|
18
|
+
@twitter = Twitter::Base.new(oauth)
|
19
|
+
end
|
20
|
+
|
21
|
+
def update(status)
|
22
|
+
@twitter.update(status)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
app = MyApplication.new
|
27
|
+
app.update('hello from ruby-oauth-cli-twitter inclusion example')
|
data/example/simple.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
|
4
|
+
require 'oauth/cli/twitter'
|
5
|
+
|
6
|
+
access_token = OAuth::CLI::Twitter.get_access_token(:pit => 'oauth-cli-twitter-simple')
|
7
|
+
access_token.post(
|
8
|
+
'http://twitter.com/statuses/update.json',
|
9
|
+
'status'=> 'hello from ruby-oauth-cli-twitter simple example'
|
10
|
+
)
|
@@ -0,0 +1,114 @@
|
|
1
|
+
|
2
|
+
require 'rubygems'
|
3
|
+
require 'oauth'
|
4
|
+
require 'readline'
|
5
|
+
require 'termtter/system_extensions'
|
6
|
+
require 'pit'
|
7
|
+
|
8
|
+
module OAuth
|
9
|
+
class CLI
|
10
|
+
module Twitter
|
11
|
+
extend self
|
12
|
+
|
13
|
+
CONSUMER_TOKEN = 'UWhf189fDdtCZz6rq8Q5gA'
|
14
|
+
CONSUMER_SECRET = 'QQHee9yFJqWeztLvGRj5A552gCGIJ7N0yLtpsJPZeU'
|
15
|
+
|
16
|
+
def self.included(includer)
|
17
|
+
@includer = includer
|
18
|
+
end
|
19
|
+
attr_accessor :includer
|
20
|
+
|
21
|
+
def get_access_token(*args)
|
22
|
+
case args.size
|
23
|
+
when 1
|
24
|
+
@options = args[0]
|
25
|
+
# TODO: add extender ?
|
26
|
+
if Twitter.includer &&
|
27
|
+
Twitter.includer.const_defined?(:CONSUMER_TOKEN) &&
|
28
|
+
Twitter.includer.const_defined?(:CONSUMER_SECRET)
|
29
|
+
@consumer_token = Twitter.includer::CONSUMER_TOKEN
|
30
|
+
@consumer_secret = Twitter.includer::CONSUMER_SECRET
|
31
|
+
elsif Object.const_defined?(:CONSUMER_TOKEN) &&
|
32
|
+
Object.const_defined?(:CONSUMER_SECRET)
|
33
|
+
@consumer_token = Object::CONSUMER_TOKEN
|
34
|
+
@consumer_secret = Object::CONSUMER_SECRET
|
35
|
+
else
|
36
|
+
@consumer_token = CONSUMER_TOKEN
|
37
|
+
@consumer_secret = CONSUMER_SECRET
|
38
|
+
end
|
39
|
+
when 2, 3
|
40
|
+
@consumer_token, @consumer_secret, @options = args
|
41
|
+
else
|
42
|
+
raise ArgumentError
|
43
|
+
end
|
44
|
+
execute
|
45
|
+
end
|
46
|
+
|
47
|
+
def execute
|
48
|
+
config = load_config
|
49
|
+
if config && config['oauth_token'] && config['oauth_token_secret']
|
50
|
+
@access_token = OAuth::AccessToken.new(
|
51
|
+
consumer,
|
52
|
+
config['oauth_token'],
|
53
|
+
config['oauth_token_secret']
|
54
|
+
)
|
55
|
+
@access_token.params = config
|
56
|
+
else
|
57
|
+
@access_token = authorize
|
58
|
+
save_config(config)
|
59
|
+
end
|
60
|
+
@access_token
|
61
|
+
end
|
62
|
+
|
63
|
+
def load_config
|
64
|
+
if @options[:pit]
|
65
|
+
Pit.get(@options[:pit])
|
66
|
+
elsif @options[:file] && File.exist?(@options[:file])
|
67
|
+
YAML.load(File.read(@options[:file]))
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def save_config(config)
|
72
|
+
config = {} if !config
|
73
|
+
config.update(@access_token.params)
|
74
|
+
if @options[:pit]
|
75
|
+
Pit.set(@options[:pit], :data => config)
|
76
|
+
elsif @options[:file]
|
77
|
+
File.open(@options[:file], 'w') do |f|
|
78
|
+
f.write(config.to_yaml)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def authorize
|
84
|
+
if @options[:browser]
|
85
|
+
Kernel.send(:open_browser, request_token.authorize_url)
|
86
|
+
else
|
87
|
+
STDOUT.puts 'Visit URL below to allow this application.'
|
88
|
+
STDOUT.puts request_token.authorize_url
|
89
|
+
end
|
90
|
+
request_token.get_access_token(:oauth_verifier => prompt_pin)
|
91
|
+
end
|
92
|
+
|
93
|
+
def request_token
|
94
|
+
@request_token ||= consumer.get_request_token
|
95
|
+
end
|
96
|
+
|
97
|
+
def consumer
|
98
|
+
@consumer ||= OAuth::Consumer.new(
|
99
|
+
@consumer_token,
|
100
|
+
@consumer_secret,
|
101
|
+
:site => 'http://api.twitter.com',
|
102
|
+
:proxy => ENV['http_proxy']
|
103
|
+
)
|
104
|
+
end
|
105
|
+
|
106
|
+
def prompt_pin
|
107
|
+
while pin = Readline.readline('Enter pin > ')
|
108
|
+
break pin if pin =~ /^\d+$/
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{oauth-cli-twitter}
|
8
|
+
s.version = "0.0.2"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["tily"]
|
12
|
+
s.date = %q{2010-10-31}
|
13
|
+
s.description = %q{Twitter OAuth Interface for CLI Applications}
|
14
|
+
s.email = %q{tily05@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.md"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"LICENSE",
|
23
|
+
"README.md",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"example/define_constant.rb",
|
27
|
+
"example/inclusion.rb",
|
28
|
+
"example/simple.rb",
|
29
|
+
"lib/oauth/cli/twitter.rb",
|
30
|
+
"oauth-cli-twitter.gemspec",
|
31
|
+
"spec/oauth_cli_twitter_spec.rb",
|
32
|
+
"spec/spec.opts",
|
33
|
+
"spec/spec_helper.rb"
|
34
|
+
]
|
35
|
+
s.homepage = %q{http://github.com/tily/ruby-oauth-cli-twitter}
|
36
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
37
|
+
s.require_paths = ["lib"]
|
38
|
+
s.rubygems_version = %q{1.3.7}
|
39
|
+
s.summary = %q{Twitter OAuth Interface for CLI Applications}
|
40
|
+
s.test_files = [
|
41
|
+
"spec/oauth_cli_twitter_spec.rb",
|
42
|
+
"spec/spec_helper.rb"
|
43
|
+
]
|
44
|
+
|
45
|
+
if s.respond_to? :specification_version then
|
46
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
47
|
+
s.specification_version = 3
|
48
|
+
|
49
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
50
|
+
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
51
|
+
s.add_runtime_dependency(%q<oauth>, [">= 0"])
|
52
|
+
s.add_runtime_dependency(%q<termtter>, [">= 0"])
|
53
|
+
s.add_runtime_dependency(%q<pit>, [">= 0"])
|
54
|
+
else
|
55
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
56
|
+
s.add_dependency(%q<oauth>, [">= 0"])
|
57
|
+
s.add_dependency(%q<termtter>, [">= 0"])
|
58
|
+
s.add_dependency(%q<pit>, [">= 0"])
|
59
|
+
end
|
60
|
+
else
|
61
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
62
|
+
s.add_dependency(%q<oauth>, [">= 0"])
|
63
|
+
s.add_dependency(%q<termtter>, [">= 0"])
|
64
|
+
s.add_dependency(%q<pit>, [">= 0"])
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
@@ -0,0 +1,212 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe OAuth::CLI::Twitter do
|
4
|
+
before do
|
5
|
+
@twitter = Object.new.extend(OAuth::CLI::Twitter)
|
6
|
+
end
|
7
|
+
|
8
|
+
describe 'taking arguments' do
|
9
|
+
before do
|
10
|
+
@consumer_token = 'dummy consumer token'
|
11
|
+
@consumer_secret = 'dummy consumer secret'
|
12
|
+
@options = {}
|
13
|
+
@access_token = 'dummy access token'
|
14
|
+
end
|
15
|
+
|
16
|
+
it '#get_access_token with 1 arg' do
|
17
|
+
@twitter.should_receive(:execute).and_return(@access_token)
|
18
|
+
@twitter.get_access_token(@options).should == @access_token
|
19
|
+
end
|
20
|
+
|
21
|
+
it '#get_access_token with 2 arg' do
|
22
|
+
@twitter.should_receive(:execute).and_return(@access_token)
|
23
|
+
@twitter.get_access_token(@consumer_token, @consumer_secret).should == @access_token
|
24
|
+
end
|
25
|
+
|
26
|
+
it '#get_access_token with 3 arg' do
|
27
|
+
@twitter.should_receive(:execute).and_return(@access_token)
|
28
|
+
@twitter.get_access_token(@consumer_token, @consumer_secret, @options).should == @access_token
|
29
|
+
end
|
30
|
+
|
31
|
+
it '#get_access_token with no arg (raise error)' do
|
32
|
+
lambda { @twitter.get_access_token }.should raise_error ArgumentError
|
33
|
+
end
|
34
|
+
|
35
|
+
it '#get_access_token with 4 (raise error)' do
|
36
|
+
lambda {
|
37
|
+
@twitter.get_access_token(@consumer_token, @consumer_secret, @options, 'extra arg')
|
38
|
+
}.should raise_error ArgumentError
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe 'getting constants' do
|
43
|
+
it '#get_access_token gets constants of itself' do
|
44
|
+
@twitter.should_receive(:execute).and_return(@access_token)
|
45
|
+
@twitter.get_access_token(@options)
|
46
|
+
@twitter.instance_variable_get('@consumer_token').should == OAuth::CLI::Twitter::CONSUMER_TOKEN
|
47
|
+
@twitter.instance_variable_get('@consumer_secret').should == OAuth::CLI::Twitter::CONSUMER_SECRET
|
48
|
+
end
|
49
|
+
|
50
|
+
it '#get_access_token gets constants of Object' do
|
51
|
+
@twitter.should_receive(:execute).and_return(@access_token)
|
52
|
+
Object::CONSUMER_TOKEN = 'object consumer token'
|
53
|
+
Object::CONSUMER_SECRET = 'object consumer secret'
|
54
|
+
@twitter.get_access_token(@options)
|
55
|
+
@twitter.instance_variable_get('@consumer_token').should == Object::CONSUMER_TOKEN
|
56
|
+
@twitter.instance_variable_get('@consumer_secret').should == Object::CONSUMER_SECRET
|
57
|
+
end
|
58
|
+
|
59
|
+
it '#get_access_token gets constants of includer' do
|
60
|
+
@twitter.should_receive(:execute).and_return(@access_token)
|
61
|
+
@klass = Class.new
|
62
|
+
@klass::CONSUMER_TOKEN = 'includer consumer token'
|
63
|
+
@klass::CONSUMER_SECRET = 'includer consumer secret'
|
64
|
+
@klass.send(:include, OAuth::CLI::Twitter)
|
65
|
+
@twitter.get_access_token(@options)
|
66
|
+
@twitter.instance_variable_get('@consumer_token').should == @klass::CONSUMER_TOKEN
|
67
|
+
@twitter.instance_variable_get('@consumer_secret').should == @klass::CONSUMER_SECRET
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe 'execution' do
|
72
|
+
before do
|
73
|
+
@access_token = 'dummy access token'
|
74
|
+
end
|
75
|
+
|
76
|
+
it '#execute and config loaded' do
|
77
|
+
config = {'oauth_token' => 'dummy oauth token', 'oauth_token_secret' => 'dummy oauth token secret'}
|
78
|
+
consumer = 'dummy consumer'
|
79
|
+
@twitter.should_receive(:load_config).and_return(config)
|
80
|
+
@twitter.should_receive(:consumer).and_return(consumer)
|
81
|
+
OAuth::AccessToken.should_receive(:new).with(consumer, config['oauth_token'], config['oauth_token_secret']).and_return(@access_token)
|
82
|
+
@twitter.execute.should == @access_token
|
83
|
+
end
|
84
|
+
|
85
|
+
it '#execute and config not loaded' do
|
86
|
+
config = {}
|
87
|
+
@twitter.should_receive(:load_config).and_return(config)
|
88
|
+
@twitter.should_receive(:authorize).and_return(@access_token)
|
89
|
+
@twitter.should_receive(:save_config).with(config)
|
90
|
+
@twitter.execute.should == @access_token
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe 'loading config' do
|
95
|
+
before do
|
96
|
+
@config = 'dummy config'
|
97
|
+
end
|
98
|
+
|
99
|
+
it '#load_config from pit' do
|
100
|
+
pit = 'pit key'
|
101
|
+
|
102
|
+
Pit.should_receive(:get).with(pit).and_return(@config)
|
103
|
+
|
104
|
+
@twitter.instance_variable_set('@options', {:pit => pit})
|
105
|
+
@twitter.load_config.should == @config
|
106
|
+
end
|
107
|
+
|
108
|
+
it '#load_config from file' do
|
109
|
+
file = '/path/to/.conf'
|
110
|
+
yaml = '- dummy yaml'
|
111
|
+
|
112
|
+
File.should_receive(:read).with(file).and_return(yaml)
|
113
|
+
YAML.should_receive(:load).with(yaml).and_return(@config)
|
114
|
+
|
115
|
+
@twitter.instance_variable_set('@options', {:file => file})
|
116
|
+
@twitter.load_config.should == @config
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
describe 'saving config' do
|
121
|
+
before do
|
122
|
+
@twitter.instance_variable_set('@access_token', mock.tap {|m|
|
123
|
+
m.should_receive(:params).and_return('dummy access token params')
|
124
|
+
})
|
125
|
+
@config = mock.tap {|m| m.should_receive(:update).with('dummy access token params') }
|
126
|
+
end
|
127
|
+
|
128
|
+
it '#save_config to pit' do
|
129
|
+
pit = 'pit key'
|
130
|
+
|
131
|
+
Pit.should_receive(:set).with(pit, :data => @config)
|
132
|
+
|
133
|
+
@twitter.instance_variable_set('@options', {:pit => pit})
|
134
|
+
end
|
135
|
+
|
136
|
+
it '#save_config to file' do
|
137
|
+
file = '/path/to/.conf'
|
138
|
+
yaml = '- dummy yaml'
|
139
|
+
|
140
|
+
File.should_receive(:open).with(file, 'w').and_yield(
|
141
|
+
mock.tap {|m| m.should_receive(:write).with(yaml) }
|
142
|
+
)
|
143
|
+
@config.should_receive(:to_yaml).and_return(yaml)
|
144
|
+
|
145
|
+
@twitter.instance_variable_set('@options', {:file => file})
|
146
|
+
end
|
147
|
+
|
148
|
+
after do
|
149
|
+
@twitter.save_config(@config)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
describe 'authorization' do
|
154
|
+
before do
|
155
|
+
@url, @pin = 'dummy url', '123456'
|
156
|
+
@twitter.should_receive(:prompt_pin).and_return(@pin)
|
157
|
+
@request_token = mock()
|
158
|
+
@request_token.should_receive(:authorize_url).and_return(@url)
|
159
|
+
@request_token.should_receive(:get_access_token).with(:oauth_verifier => @pin).and_return(@url)
|
160
|
+
@twitter.should_receive(:request_token).twice.and_return(@request_token)
|
161
|
+
end
|
162
|
+
|
163
|
+
it '#authorize without browser' do
|
164
|
+
STDOUT.should_receive(:puts).with('Visit URL below to allow this application.')
|
165
|
+
STDOUT.should_receive(:puts).with(@url)
|
166
|
+
|
167
|
+
@twitter.instance_variable_set('@options', {})
|
168
|
+
end
|
169
|
+
|
170
|
+
it '#authorize with browser' do
|
171
|
+
Kernel.should_receive(:open_browser).with(@url)
|
172
|
+
|
173
|
+
@twitter.instance_variable_set('@options', {:browser => true})
|
174
|
+
end
|
175
|
+
|
176
|
+
after do
|
177
|
+
@twitter.authorize
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
describe 'prompting' do
|
182
|
+
it '#prompt_pin' do
|
183
|
+
expect = '1234567'
|
184
|
+
Readline.should_receive(:readline).once.with('Enter pin > ').and_return("not number")
|
185
|
+
Readline.should_receive(:readline).once.with('Enter pin > ').and_return("#{expect}")
|
186
|
+
@twitter.prompt_pin.should == expect
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
describe 'OAuth wrapper methods' do
|
191
|
+
it '#request_token' do
|
192
|
+
expect = 'dummy request token'
|
193
|
+
@twitter.should_receive(:consumer).once.and_return(
|
194
|
+
mock.tap {|m| m.should_receive(:get_request_token).once.and_return(expect) }
|
195
|
+
)
|
196
|
+
2.times { @twitter.request_token.should == expect }
|
197
|
+
end
|
198
|
+
|
199
|
+
it '#consumer' do
|
200
|
+
consumer = 'dummy consumer'
|
201
|
+
OAuth::Consumer.should_receive(:new).once.with(
|
202
|
+
@consumer_token,
|
203
|
+
@consumer_secret,
|
204
|
+
:site => 'http://api.twitter.com',
|
205
|
+
:proxy => ENV['http_proxy']
|
206
|
+
).and_return(consumer)
|
207
|
+
@twitter.instance_variable_set('@consumer_token', @consumer_token)
|
208
|
+
@twitter.instance_variable_set('@consumer_secret', @consumer_secret)
|
209
|
+
2.times { @twitter.consumer.should == consumer }
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
-fs -color
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: oauth-cli-twitter
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- tily
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-10-31 00:00:00 +09:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: rspec
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 13
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 2
|
33
|
+
- 9
|
34
|
+
version: 1.2.9
|
35
|
+
type: :development
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: oauth
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 3
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
version: "0"
|
49
|
+
type: :runtime
|
50
|
+
version_requirements: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: termtter
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 3
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
version: "0"
|
63
|
+
type: :runtime
|
64
|
+
version_requirements: *id003
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: pit
|
67
|
+
prerelease: false
|
68
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
hash: 3
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
version: "0"
|
77
|
+
type: :runtime
|
78
|
+
version_requirements: *id004
|
79
|
+
description: Twitter OAuth Interface for CLI Applications
|
80
|
+
email: tily05@gmail.com
|
81
|
+
executables: []
|
82
|
+
|
83
|
+
extensions: []
|
84
|
+
|
85
|
+
extra_rdoc_files:
|
86
|
+
- LICENSE
|
87
|
+
- README.md
|
88
|
+
files:
|
89
|
+
- .document
|
90
|
+
- .gitignore
|
91
|
+
- LICENSE
|
92
|
+
- README.md
|
93
|
+
- Rakefile
|
94
|
+
- VERSION
|
95
|
+
- example/define_constant.rb
|
96
|
+
- example/inclusion.rb
|
97
|
+
- example/simple.rb
|
98
|
+
- lib/oauth/cli/twitter.rb
|
99
|
+
- oauth-cli-twitter.gemspec
|
100
|
+
- spec/oauth_cli_twitter_spec.rb
|
101
|
+
- spec/spec.opts
|
102
|
+
- spec/spec_helper.rb
|
103
|
+
has_rdoc: true
|
104
|
+
homepage: http://github.com/tily/ruby-oauth-cli-twitter
|
105
|
+
licenses: []
|
106
|
+
|
107
|
+
post_install_message:
|
108
|
+
rdoc_options:
|
109
|
+
- --charset=UTF-8
|
110
|
+
require_paths:
|
111
|
+
- lib
|
112
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
hash: 3
|
118
|
+
segments:
|
119
|
+
- 0
|
120
|
+
version: "0"
|
121
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
hash: 3
|
127
|
+
segments:
|
128
|
+
- 0
|
129
|
+
version: "0"
|
130
|
+
requirements: []
|
131
|
+
|
132
|
+
rubyforge_project:
|
133
|
+
rubygems_version: 1.3.7
|
134
|
+
signing_key:
|
135
|
+
specification_version: 3
|
136
|
+
summary: Twitter OAuth Interface for CLI Applications
|
137
|
+
test_files:
|
138
|
+
- spec/oauth_cli_twitter_spec.rb
|
139
|
+
- spec/spec_helper.rb
|