unipass_api 0.0.1
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 +32 -0
- data/Gemfile +4 -0
- data/README.md +67 -0
- data/Rakefile +24 -0
- data/lib/unipass_api/client.rb +65 -0
- data/lib/unipass_api/config.rb +30 -0
- data/lib/unipass_api/resource_invalid.rb +6 -0
- data/lib/unipass_api/resource_not_found.rb +6 -0
- data/lib/unipass_api/version.rb +3 -0
- data/lib/unipass_api.rb +11 -0
- data/test/client_test.rb +8 -0
- data/test/test_helper.rb +4 -0
- data/unipass_api.gemspec +20 -0
- metadata +123 -0
data/.gitignore
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
|
19
|
+
yardoc/
|
20
|
+
.rvmrc
|
21
|
+
|
22
|
+
# System/IDE files
|
23
|
+
Desktop.ini
|
24
|
+
Thumbs.db
|
25
|
+
nbproject
|
26
|
+
.DS_Store
|
27
|
+
.idea
|
28
|
+
.redcar
|
29
|
+
\#*#
|
30
|
+
*.swp
|
31
|
+
*.swo
|
32
|
+
*~
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# Unipass API #
|
2
|
+
|
3
|
+
[](http://travis-ci.org/tjeden/unipass_api)
|
4
|
+
|
5
|
+
This is wrapper for Unipass REST API. In order to use it, you will need to get unipas access token (see [omniauth-unipass](https://github.com/tjeden/omniauth-unipass))
|
6
|
+
|
7
|
+
# Installation #
|
8
|
+
|
9
|
+
Add to your `Gemfile` following line:
|
10
|
+
|
11
|
+
gem 'unipass_api'
|
12
|
+
|
13
|
+
Create `config/initializers/unipass_api.rb` with configuration options:
|
14
|
+
|
15
|
+
UnipassApi.configure do |config|
|
16
|
+
config.client_id = 'some_client_id'
|
17
|
+
config.client_secret = 'some_client_secret'
|
18
|
+
config.site = 'some_site'
|
19
|
+
config.api_site = 'some_api_site'
|
20
|
+
config.authorize_url = 'some_authorize_url'
|
21
|
+
config.token_url = 'some_token_url'
|
22
|
+
end
|
23
|
+
|
24
|
+
And you are ready to go.
|
25
|
+
|
26
|
+
# Usage #
|
27
|
+
|
28
|
+
Assuming you are using omniauth, and you are succesfull logged in into unipass, you can create client in your application controller:
|
29
|
+
|
30
|
+
def unipass_api(force_refresh_token = false)
|
31
|
+
@unipass_api ||= UnipassApi::Client.new(
|
32
|
+
:access_token => session[:access_token],
|
33
|
+
:expires_at => session[:access_token_expires_at],
|
34
|
+
:refresh_token => session[:refresh_token]
|
35
|
+
)
|
36
|
+
if @unipass_api.expired? || force_refresh_token
|
37
|
+
@unipass_api.refresh!
|
38
|
+
session[:access_token] = @unipass_api.access_token
|
39
|
+
session[:access_token_expires_at] = @unipass_api.expires_at
|
40
|
+
session[:refresh_token] = @unipass_api.refresh_token
|
41
|
+
end
|
42
|
+
@unipass_api
|
43
|
+
end
|
44
|
+
|
45
|
+
And then you can just use it as follows:
|
46
|
+
|
47
|
+
unipass_api.post('groups', :params => {:name => 'group_name'})
|
48
|
+
|
49
|
+
## Adding property ##
|
50
|
+
|
51
|
+
@property = begin
|
52
|
+
unipass_api.post("me/properties/weight", :params => {:value => '57 kg'})
|
53
|
+
rescue UnipassApi::ResourceInvalid => error
|
54
|
+
@errors = error.response.parsed
|
55
|
+
render :show and return
|
56
|
+
end
|
57
|
+
|
58
|
+
## Showing property ##
|
59
|
+
|
60
|
+
@property = begin
|
61
|
+
unipass_api.get("me/properties/#{key}")
|
62
|
+
rescue UnipassApi::ResourceNotFound
|
63
|
+
nil
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
|
3
|
+
require 'bundler'
|
4
|
+
begin
|
5
|
+
Bundler.setup(:default, :development)
|
6
|
+
rescue Bundler::BundlerError => e
|
7
|
+
$stderr.puts e.message
|
8
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
9
|
+
exit e.status_code
|
10
|
+
end
|
11
|
+
require "bundler/gem_tasks"
|
12
|
+
|
13
|
+
require 'rake/testtask'
|
14
|
+
|
15
|
+
desc 'Run test suite'
|
16
|
+
task 'test' do
|
17
|
+
Rake::TestTask.new do |t|
|
18
|
+
t.libs << "test"
|
19
|
+
t.test_files = FileList['test/*_test.rb']
|
20
|
+
t.verbose = true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
task :default => :test
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module UnipassApi
|
2
|
+
|
3
|
+
class Client
|
4
|
+
|
5
|
+
attr_accessor :access_token, :refresh_token, :expires_at
|
6
|
+
|
7
|
+
def initialize(options = {}, &block)
|
8
|
+
@client_id = options[:client_id] || UnipassApi.options[:client_id]
|
9
|
+
@client_secret = options[:client_secret] || UnipassApi.options[:client_secret]
|
10
|
+
@site = options[:site] || UnipassApi.options[:site]
|
11
|
+
@api_site = options[:api_site] || UnipassApi.options[:api_site]
|
12
|
+
@authorize_url = options[:authorize_url] || UnipassApi.options[:authorize_url]
|
13
|
+
@token_url = options[:token_url] || UnipassApi.options[:token_url]
|
14
|
+
|
15
|
+
self.access_token = options[:access_token]
|
16
|
+
self.refresh_token = options[:refresh_token]
|
17
|
+
self.expires_at = options[:expires_at]
|
18
|
+
end
|
19
|
+
|
20
|
+
def expired?
|
21
|
+
token.expired?
|
22
|
+
end
|
23
|
+
|
24
|
+
def refresh!
|
25
|
+
new_token = token.refresh!
|
26
|
+
self.access_token = new_token.token
|
27
|
+
self.refresh_token = new_token.refresh_token
|
28
|
+
self.expires_at = new_token.expires_at
|
29
|
+
new_token
|
30
|
+
end
|
31
|
+
|
32
|
+
def request(verb, url, options = {})
|
33
|
+
token.request(verb, url, options).parsed
|
34
|
+
rescue OAuth2::Error => error
|
35
|
+
case error.response.status
|
36
|
+
when 404 then raise ResourceNotFound.new(error.response)
|
37
|
+
when 422 then raise ResourceInvalid.new(error.response)
|
38
|
+
else raise
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def get(url, options = {})
|
43
|
+
request(:get, url, options)
|
44
|
+
end
|
45
|
+
|
46
|
+
def post(url, options = {})
|
47
|
+
request(:post, url, options)
|
48
|
+
end
|
49
|
+
|
50
|
+
def client
|
51
|
+
@client ||= ::OAuth2::Client.new(@client_id, @client_secret, {
|
52
|
+
:site => @api_site,
|
53
|
+
:authorize_url => @authorize_url,
|
54
|
+
:token_url => @token_url
|
55
|
+
})
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def token
|
61
|
+
::OAuth2::AccessToken.new(client, access_token, :refresh_token => refresh_token, :expires_at => expires_at, :mode => :query, :param_name => 'oauth_token')
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module UnipassApi
|
2
|
+
# Defines constants and methods related to configuration
|
3
|
+
module Config
|
4
|
+
# An array of valid keys in the options hash when configuring a {Twitter::Client}
|
5
|
+
VALID_OPTIONS_KEYS = [
|
6
|
+
:client_id,
|
7
|
+
:client_secret,
|
8
|
+
:site,
|
9
|
+
:api_site,
|
10
|
+
:authorize_url,
|
11
|
+
:token_url
|
12
|
+
]
|
13
|
+
|
14
|
+
attr_accessor *VALID_OPTIONS_KEYS
|
15
|
+
|
16
|
+
# Convenience method to allow configuration options to be set in a block
|
17
|
+
def configure
|
18
|
+
yield self
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
# Create a hash of options and their values
|
23
|
+
def options
|
24
|
+
options = {}
|
25
|
+
VALID_OPTIONS_KEYS.each{|k| options[k] = send(k)}
|
26
|
+
options
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
data/lib/unipass_api.rb
ADDED
data/test/client_test.rb
ADDED
data/test/test_helper.rb
ADDED
data/unipass_api.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.expand_path('../lib/unipass_api/version', __FILE__)
|
2
|
+
|
3
|
+
Gem::Specification.new do |gem|
|
4
|
+
gem.authors = ['Aleksadner Dąbrowski', 'Karol Sarnacki']
|
5
|
+
gem.email = ['aleksander.dabrowski@connectmedica.com', 'karol.sarnacki@connectmedica.pl']
|
6
|
+
gem.description = 'Unipass client API'
|
7
|
+
gem.summary = 'In order to use unipass API you can use it.'
|
8
|
+
gem.homepage = 'https://github.com/tjeden/unipass-api'
|
9
|
+
|
10
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
11
|
+
gem.files = `git ls-files`.split("\n")
|
12
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
13
|
+
gem.name = 'unipass_api'
|
14
|
+
gem.require_paths = ['lib']
|
15
|
+
gem.version = UnipassApi::VERSION
|
16
|
+
|
17
|
+
gem.add_dependency 'omniauth', '~> 0.3.2'
|
18
|
+
gem.add_dependency 'oauth2'
|
19
|
+
gem.add_dependency 'rake'
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: unipass_api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- "Aleksadner D\xC4\x85browski"
|
14
|
+
- Karol Sarnacki
|
15
|
+
autorequire:
|
16
|
+
bindir: bin
|
17
|
+
cert_chain: []
|
18
|
+
|
19
|
+
date: 2011-11-07 00:00:00 Z
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
type: :runtime
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 23
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 3
|
32
|
+
- 2
|
33
|
+
version: 0.3.2
|
34
|
+
prerelease: false
|
35
|
+
name: omniauth
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
type: :runtime
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 3
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
version: "0"
|
48
|
+
prerelease: false
|
49
|
+
name: oauth2
|
50
|
+
version_requirements: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
type: :runtime
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 3
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
version: "0"
|
62
|
+
prerelease: false
|
63
|
+
name: rake
|
64
|
+
version_requirements: *id003
|
65
|
+
description: Unipass client API
|
66
|
+
email:
|
67
|
+
- aleksander.dabrowski@connectmedica.com
|
68
|
+
- karol.sarnacki@connectmedica.pl
|
69
|
+
executables: []
|
70
|
+
|
71
|
+
extensions: []
|
72
|
+
|
73
|
+
extra_rdoc_files: []
|
74
|
+
|
75
|
+
files:
|
76
|
+
- .gitignore
|
77
|
+
- Gemfile
|
78
|
+
- README.md
|
79
|
+
- Rakefile
|
80
|
+
- lib/unipass_api.rb
|
81
|
+
- lib/unipass_api/client.rb
|
82
|
+
- lib/unipass_api/config.rb
|
83
|
+
- lib/unipass_api/resource_invalid.rb
|
84
|
+
- lib/unipass_api/resource_not_found.rb
|
85
|
+
- lib/unipass_api/version.rb
|
86
|
+
- test/client_test.rb
|
87
|
+
- test/test_helper.rb
|
88
|
+
- unipass_api.gemspec
|
89
|
+
homepage: https://github.com/tjeden/unipass-api
|
90
|
+
licenses: []
|
91
|
+
|
92
|
+
post_install_message:
|
93
|
+
rdoc_options: []
|
94
|
+
|
95
|
+
require_paths:
|
96
|
+
- lib
|
97
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
hash: 3
|
103
|
+
segments:
|
104
|
+
- 0
|
105
|
+
version: "0"
|
106
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
hash: 3
|
112
|
+
segments:
|
113
|
+
- 0
|
114
|
+
version: "0"
|
115
|
+
requirements: []
|
116
|
+
|
117
|
+
rubyforge_project:
|
118
|
+
rubygems_version: 1.8.10
|
119
|
+
signing_key:
|
120
|
+
specification_version: 3
|
121
|
+
summary: In order to use unipass API you can use it.
|
122
|
+
test_files: []
|
123
|
+
|