twiauth 0.1.0 → 1.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -17,9 +17,10 @@ tmtags
17
17
  coverage
18
18
  rdoc
19
19
  pkg
20
-
21
- ## PROJECT::SPECIFIC
20
+ doc
21
+ .yardoc
22
+ capybara*.html
22
23
  .idea
23
- **/config.yml
24
- access_token.yml
25
- *.pstore
24
+ **/*.yml
25
+ spec/config/*.yml
26
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
data/Rakefile CHANGED
@@ -1,44 +1,17 @@
1
- require 'rake'
2
- require 'rubygems'
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
3
 
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "twiauth"
8
- gem.summary = %Q{a very simple twitter authentication wrapper}
9
- gem.description = %Q{simple twitter authentication wrapper}
10
- gem.email = "swessel@gr4yweb.de"
11
- gem.homepage = "http://github.com/gr4y/twiauth"
12
- gem.authors = ["Sascha Wessel"]
13
- gem.add_dependency "oauth", ">= 0.4.0"
14
- gem.add_dependency "rspec", "1.3.0"
15
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
- end
17
- Jeweler::GemcutterTasks.new
18
- rescue LoadError
19
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
- end
21
-
22
- desc "generate rdoc"
23
- require 'rake/rdoctask'
24
- Rake::RDocTask.new do |rdoc|
25
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
26
- rdoc.rdoc_dir = 'rdoc'
27
- rdoc.title = "twiauth #{version}"
28
- rdoc.rdoc_files.include('README*')
29
- rdoc.rdoc_files.include('lib/**/*.rb')
4
+ desc "generate documentation"
5
+ require 'yard'
6
+ YARD::Rake::YardocTask.new do |yard|
7
+ yard.files = ['lib/**/*.rb']
8
+ yard.options = ["--no-private"]
30
9
  end
31
10
 
32
11
  desc "run all specs"
33
- begin
34
- gem 'rspec','1.3.0'
35
- require 'spec/rake/spectask'
36
- Spec::Rake::SpecTask.new do |t|
37
- t.spec_files = FileList['spec/**/*_spec.rb']
38
- end
39
- rescue LoadError
40
- warn "[twiauth] rspec is not installed. install it with: gem install rspec --version 1.3.0"
41
- end
12
+ require 'rspec/core/rake_task'
13
+ RSpec::Core::RakeTask.new(:spec)
42
14
 
43
- task :test => [:check_dependencies, :spec]
44
- task :default => [:test, :build]
15
+ task :test => [:spec]
16
+ task :doc => [:yard]
17
+ task :default => [:test, :doc, :build]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 1.0.0.rc1
@@ -0,0 +1,86 @@
1
+ module TwiAuth
2
+ # oauth client
3
+ class Client
4
+
5
+ attr_accessor :consumer, :request_token, :access_token, :parser
6
+
7
+ # we only need to set the site
8
+ # all other configuration is default configuration
9
+ TWITTER_OAUTH_SPEC = { :site => 'https://api.twitter.com' }
10
+
11
+ #
12
+ # connect to the twitter api
13
+ #
14
+ # @client = TwiAuth::Client.new( {:key => @consumer_key, :secret => @consumer_secret})
15
+ #
16
+ def initialize(consumer, options = {})
17
+ # raise "options are nil" if options.nil?
18
+ self.access_token = nil # options[:access_token]
19
+ if self.access_token.nil?
20
+ raise "consumer could not be nil!" if consumer.nil?
21
+ self.consumer = connect(consumer['key'], consumer['secret'])
22
+ end
23
+ end
24
+
25
+ def get_request_token
26
+ if self.request_token.nil?
27
+ self.request_token = self.consumer.get_request_token
28
+ end
29
+ self.request_token
30
+ end
31
+
32
+ #
33
+ # get access token
34
+ #
35
+ def get_access_token(pin = nil)
36
+ if self.access_token.nil?
37
+ self.access_token = self.request_token.get_access_token(:oauth_verifier => pin)
38
+ end
39
+ self.access_token
40
+ end
41
+
42
+ #
43
+ # get something from the api
44
+ #
45
+ def get(url, options = nil)
46
+ request(url, options, :get)
47
+ end
48
+
49
+ #
50
+ # post something to the api
51
+ #
52
+ def post(url, options = nil)
53
+ request(url, options, :post)
54
+ end
55
+
56
+ private
57
+
58
+ #
59
+ # create an oauth consumer
60
+ #
61
+ def connect(key, secret)
62
+ OAuth::Consumer.new(key, secret, TWITTER_OAUTH_SPEC)
63
+ end
64
+
65
+ #
66
+ # send an post or get request with the specified options to the given url
67
+ #
68
+ def request(url, options = nil, http_method)
69
+ if http_method.eql?(:post)
70
+ response = get_access_token.post(url, options).body
71
+ elsif http_method.eql?(:get)
72
+ response = get_access_token.get(url).body
73
+ else
74
+ raise "invalid http_method"
75
+ end
76
+ parse_json(response)
77
+ end
78
+
79
+ #
80
+ # parse the json string into an nice ruby hash
81
+ #
82
+ def parse_json(string)
83
+ Yajl::Parser.parse(string)
84
+ end
85
+ end
86
+ end
data/lib/twiauth.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'oauth'
2
- require 'twiauth/oauth'
3
- require 'twiauth/store'
4
- require 'yaml'
2
+ require 'twiauth/client'
3
+ require 'yajl'
5
4
 
6
5
  module TwiAuth
7
6
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ describe TwiAuth::Client do
4
+
5
+ before :all do
6
+ @client = TwiAuth::Client.new(@consumer, @options)
7
+ @session = Capybara::Session.new(:akephalos)
8
+ end
9
+
10
+ it 'should not be nil' do
11
+ @client.should_not be_nil
12
+ end
13
+
14
+ it 'should have an method called get_request_token' do
15
+ (@client.public_methods.include?(:get_request_token)).should be_true
16
+ end
17
+
18
+ it 'should get an request_token' do
19
+ @client.get_request_token.should_not be_nil
20
+ end
21
+
22
+ it 'visits the authorize url' do
23
+ @session.visit(@client.get_request_token.authorize_url)
24
+ end
25
+
26
+ it 'has an signin form' do
27
+ @session.has_selector?('div#signin_form').should be_true
28
+ end
29
+
30
+ it 'fills out the form' do
31
+ @session.within('#signin_form') do
32
+ @session.fill_in 'username_or_email', :with => @test['user']
33
+ @session.fill_in 'password', :with => @test['password']
34
+ end
35
+ end
36
+
37
+ it 'has an allow button' do
38
+ @session.has_button?('allow').should be_true
39
+ end
40
+
41
+ it 'clicks the allow botton' do
42
+ @session.click_button('allow')
43
+ end
44
+
45
+ it 'should get an access_token' do
46
+ oauth_pin = @session.find_by_id('oauth_pin')
47
+ pin = oauth_pin.text.chomp!
48
+ @client.get_access_token(pin).should_not be_nil
49
+ end
50
+
51
+ it 'should have an public get method' do
52
+ (@client.public_methods.include? :get).should be_true
53
+ end
54
+
55
+ it "should get an ok" do
56
+ response = @client.get('/1/help/test.json')
57
+ response.should_not be_nil
58
+ response.should == "ok"
59
+ end
60
+
61
+ it 'should have an public post method' do
62
+ (@client.public_methods.include? :post).should be_true
63
+ end
64
+
65
+ it "should post and delete a status" do
66
+ response = @client.post("/1/statuses/update.json", {:status => 'test status'})
67
+ response.should_not be_nil
68
+ destroy_response = @client.post("/1/statuses/destroy/#{response['id']}.json")
69
+ destroy_response.should_not be_nil
70
+ end
71
+
72
+ end
@@ -0,0 +1,4 @@
1
+ # copy this file and rename it to config.yml
2
+
3
+ oauth_key: {your oauth key}
4
+ oauth_secret: {your oauth secret}
@@ -0,0 +1,4 @@
1
+ # copy this file and rename it to test.yml
2
+
3
+ user: {your username}
4
+ password: {your password}
data/spec/spec_helper.rb CHANGED
@@ -1,14 +1,12 @@
1
+ require 'capybara'
2
+ require 'akephalos'
1
3
  require 'twiauth'
2
4
  require 'yaml'
3
- require 'json'
4
5
 
5
- def pull_config
6
- yml_config = YAML.load_file(File.dirname(__FILE__) + "/config.yml")
7
- yml_config.each do |key, value|
8
- instance_variable_set("@#{key}", value)
6
+ RSpec.configure do |config|
7
+ config.before(:all) do
8
+ path = File.dirname(__FILE__)
9
+ @consumer = YAML::load_file("#{path}/config/config.yml")
10
+ @test = YAML::load_file("#{path}/config/test.yml")
9
11
  end
10
- end
11
-
12
- def parse_json(object)
13
- JSON.parser.new(object).parse
14
12
  end
data/twiauth.gemspec CHANGED
@@ -1,61 +1,26 @@
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 -*-
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+ require 'twiauth'
5
3
 
6
- Gem::Specification.new do |s|
7
- s.name = %q{twiauth}
8
- s.version = "0.1.0"
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "twiauth"
6
+ spec.version = TwiAuth::VERSION
7
+ spec.platform = Gem::Platform::RUBY
8
+ spec.authors = ["Sascha Wessel"]
9
+ spec.email = "swessel@gr4yweb.de"
10
+ spec.homepage = "http://github.com/gr4y/twiauth"
11
+ spec.summary = %Q{a very simple twitter authentication wrapper}
12
+ spec.description = %Q{simple twitter authentication wrapper}
9
13
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Sascha Wessel"]
12
- s.date = %q{2010-09-12}
13
- s.description = %q{simple twitter authentication wrapper}
14
- s.email = %q{swessel@gr4yweb.de}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.rdoc"
18
- ]
19
- s.files = [
20
- ".gitignore",
21
- "LICENSE",
22
- "README.rdoc",
23
- "Rakefile",
24
- "VERSION",
25
- "lib/twiauth.rb",
26
- "lib/twiauth/oauth.rb",
27
- "lib/twiauth/store.rb",
28
- "spec/config.yml.sample",
29
- "spec/oauth_spec.rb",
30
- "spec/spec_helper.rb",
31
- "spec/store_spec.rb",
32
- "twiauth.gemspec"
33
- ]
34
- s.homepage = %q{http://github.com/gr4y/twiauth}
35
- s.rdoc_options = ["--charset=UTF-8"]
36
- s.require_paths = ["lib"]
37
- s.rubygems_version = %q{1.3.7}
38
- s.summary = %q{a very simple twitter authentication wrapper}
39
- s.test_files = [
40
- "spec/spec_helper.rb",
41
- "spec/oauth_spec.rb",
42
- "spec/store_spec.rb"
43
- ]
14
+ spec.rubyforge_project = "twiauth"
44
15
 
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_runtime_dependency(%q<oauth>, [">= 0.4.0"])
51
- s.add_runtime_dependency(%q<rspec>, ["= 1.3.0"])
52
- else
53
- s.add_dependency(%q<oauth>, [">= 0.4.0"])
54
- s.add_dependency(%q<rspec>, ["= 1.3.0"])
55
- end
56
- else
57
- s.add_dependency(%q<oauth>, [">= 0.4.0"])
58
- s.add_dependency(%q<rspec>, ["= 1.3.0"])
59
- end
60
- end
16
+ spec.files = `git ls-files`.split("\n")
17
+ spec.test_files = `git ls-files -- {test, spec, features}/*`.split("\n")
18
+ spec.require_paths = ["lib"]
61
19
 
20
+ spec.add_dependency "oauth", "~> 0.4.0"
21
+ spec.add_dependency "yajl-ruby", "~> 0.8.2"
22
+ spec.add_dependency "rspec", "~> 2.5.0"
23
+ spec.add_development_dependency "capybara", "~> 0.4.1"
24
+ spec.add_development_dependency "akephalos", "~> 0.2.5"
25
+ # see http://www.rubygems.org/read/chapter/20 for additional settings
26
+ end
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twiauth
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 0
9
- version: 0.1.0
4
+ prerelease: 6
5
+ version: 1.0.0.rc1
10
6
  platform: ruby
11
7
  authors:
12
8
  - Sascha Wessel
@@ -14,7 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2010-09-12 00:00:00 +02:00
13
+ date: 2011-04-02 00:00:00 +02:00
18
14
  default_executable:
19
15
  dependencies:
20
16
  - !ruby/object:Gem::Dependency
@@ -23,60 +19,84 @@ dependencies:
23
19
  requirement: &id001 !ruby/object:Gem::Requirement
24
20
  none: false
25
21
  requirements:
26
- - - ">="
22
+ - - ~>
27
23
  - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- - 4
31
- - 0
32
24
  version: 0.4.0
33
25
  type: :runtime
34
26
  version_requirements: *id001
35
27
  - !ruby/object:Gem::Dependency
36
- name: rspec
28
+ name: yajl-ruby
37
29
  prerelease: false
38
30
  requirement: &id002 !ruby/object:Gem::Requirement
39
31
  none: false
40
32
  requirements:
41
- - - "="
33
+ - - ~>
42
34
  - !ruby/object:Gem::Version
43
- segments:
44
- - 1
45
- - 3
46
- - 0
47
- version: 1.3.0
35
+ version: 0.8.2
48
36
  type: :runtime
49
37
  version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: rspec
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 2.5.0
47
+ type: :runtime
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: capybara
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ version: 0.4.1
58
+ type: :development
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: akephalos
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 0.2.5
69
+ type: :development
70
+ version_requirements: *id005
50
71
  description: simple twitter authentication wrapper
51
72
  email: swessel@gr4yweb.de
52
73
  executables: []
53
74
 
54
75
  extensions: []
55
76
 
56
- extra_rdoc_files:
57
- - LICENSE
58
- - README.rdoc
77
+ extra_rdoc_files: []
78
+
59
79
  files:
60
80
  - .gitignore
81
+ - Gemfile
61
82
  - LICENSE
62
83
  - README.rdoc
63
84
  - Rakefile
64
85
  - VERSION
65
86
  - lib/twiauth.rb
66
- - lib/twiauth/oauth.rb
67
- - lib/twiauth/store.rb
68
- - spec/config.yml.sample
69
- - spec/oauth_spec.rb
87
+ - lib/twiauth/client.rb
88
+ - spec/client_spec.rb
89
+ - spec/config/config.yml.sample
90
+ - spec/config/test.yml.sample
70
91
  - spec/spec_helper.rb
71
- - spec/store_spec.rb
72
92
  - twiauth.gemspec
73
93
  has_rdoc: true
74
94
  homepage: http://github.com/gr4y/twiauth
75
95
  licenses: []
76
96
 
77
97
  post_install_message:
78
- rdoc_options:
79
- - --charset=UTF-8
98
+ rdoc_options: []
99
+
80
100
  require_paths:
81
101
  - lib
82
102
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -84,25 +104,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
84
104
  requirements:
85
105
  - - ">="
86
106
  - !ruby/object:Gem::Version
87
- segments:
88
- - 0
89
107
  version: "0"
90
108
  required_rubygems_version: !ruby/object:Gem::Requirement
91
109
  none: false
92
110
  requirements:
93
- - - ">="
111
+ - - ">"
94
112
  - !ruby/object:Gem::Version
95
- segments:
96
- - 0
97
- version: "0"
113
+ version: 1.3.1
98
114
  requirements: []
99
115
 
100
- rubyforge_project:
101
- rubygems_version: 1.3.7
116
+ rubyforge_project: twiauth
117
+ rubygems_version: 1.5.2
102
118
  signing_key:
103
119
  specification_version: 3
104
120
  summary: a very simple twitter authentication wrapper
105
- test_files:
106
- - spec/spec_helper.rb
107
- - spec/oauth_spec.rb
108
- - spec/store_spec.rb
121
+ test_files: []
122
+
data/lib/twiauth/oauth.rb DELETED
@@ -1,67 +0,0 @@
1
- module TwiAuth
2
- # oauth communication wrapper
3
- class OAuth
4
- TWITTER_OAUTH_SPEC = {
5
- :site => 'https://api.twitter.com',
6
- :request_token_path => '/oauth/request_token',
7
- :access_token_path => '/oauth/access_token',
8
- :authorize_path => '/oauth/authorize'
9
- }
10
-
11
- # key for access token
12
- ACCESS_TOKEN = 'ACCESS_TOKEN'
13
-
14
- public
15
- def initialize(key, secret)
16
- @store = TwiAuth::Store.new
17
- @oauth_consumer = ::OAuth::Consumer.new(key, secret, TWITTER_OAUTH_SPEC)
18
- get_access_token
19
- end
20
-
21
- def get(path)
22
- @access_token.get(path)
23
- end
24
-
25
- def post(path, body = nil)
26
- @access_token.post(path, body)
27
- end
28
-
29
- def drop_access_token
30
- @store.delete(ACCESS_TOKEN)
31
- end
32
-
33
- private
34
- def get_request_token
35
- @oauth_consumer.get_request_token
36
- end
37
-
38
- def get_access_token
39
- pull_access_token
40
- if @access_token.nil?
41
- get_initial_access_token
42
- end
43
- end
44
-
45
- def get_initial_access_token
46
- request_token = get_request_token
47
- puts "point your browser to \"#{request_token.authorize_url}\" and enter the pin: "
48
- pin = STDIN.readline.chomp!
49
-
50
- if pin.nil? || pin.empty?
51
- raise Error
52
- end
53
-
54
- @access_token = request_token.get_access_token(:oauth_verifier => pin)
55
- persist_access_token
56
- end
57
-
58
- def pull_access_token
59
- @access_token = @store.get(ACCESS_TOKEN)
60
- end
61
-
62
- def persist_access_token
63
- @store.put(ACCESS_TOKEN,@access_token)
64
- end
65
-
66
- end
67
- end
data/lib/twiauth/store.rb DELETED
@@ -1,35 +0,0 @@
1
- require 'pstore'
2
-
3
- module TwiAuth
4
- # A simple key value store using PStore, provided by ruby
5
- class Store
6
- # Filename for pstore data file
7
- DATA_FILE = "data.pstore"
8
- # :nodoc:
9
- def initialize
10
- @store = PStore.new("#{PATH}#{DATA_FILE}")
11
- end
12
-
13
- # put a key with value
14
- def put(key, value)
15
- @store.transaction do
16
- @store[key] = value
17
- end
18
- end
19
-
20
- # get the value of the key
21
- def get(key)
22
- @store.transaction do
23
- @value = @store[key]
24
- end
25
- @value
26
- end
27
-
28
- # delete a key
29
- def delete(key)
30
- @store.transaction do
31
- @store.delete(key)
32
- end
33
- end
34
- end
35
- end
@@ -1,2 +0,0 @@
1
- oauth_key: {your oauth key}
2
- oauth_secret: {your oauth secret}
data/spec/oauth_spec.rb DELETED
@@ -1,24 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe TwiAuth::OAuth do
4
-
5
- before :all do
6
- pull_config
7
- @oauth = TwiAuth::OAuth.new(@oauth_key, @oauth_secret)
8
- end
9
-
10
- it "should be not nil" do
11
- @oauth.should_not be_nil
12
- end
13
-
14
- it "should get an ok" do
15
- @oauth.get("/1/help/test.json").eql?("ok")
16
- end
17
-
18
- it "should post and delete a status" do
19
- response = @oauth.post("/1/statuses/update.json", {:status => 'test status'})
20
- json = parse_json(response.body)
21
- @oauth.get("/1/statuses/destroy/#{json['id']}.json")
22
- end
23
-
24
- end
data/spec/store_spec.rb DELETED
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe TwiAuth::Store do
4
-
5
- before :all do
6
- @store = TwiAuth::Store.new
7
- end
8
-
9
- it "should store some data" do
10
- @store.put("test", "test-value")
11
- end
12
-
13
- it "should return some data" do
14
- @store.get("test").should.eql?("test-value")
15
- end
16
-
17
- it "should delete some data" do
18
- @store.delete("test")
19
- @store.get("test").should be_nil
20
- end
21
-
22
- end