twiauth 0.1.0 → 1.0.0.rc1

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/.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