checkdin 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,18 +1,4 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gem 'faraday', '>= 0.6', '< 0.8'
4
- gem 'faraday_middleware', '>= 0.8'
5
- gem 'hashie', '~> 1.0'
6
-
7
-
8
- # Add dependencies to develop your gem here.
9
- # Include everything needed to run rake, tests, features, etc.
10
- group :development do
11
- gem "rspec", "~> 2.8.0"
12
- gem "rdoc", "~> 3.12"
13
- gem "bundler", "~> 1.0.0"
14
- gem "jeweler", "~> 1.8.3"
15
- gem "simplecov"
16
- gem 'webmock'
17
- gem 'vcr'
18
- end
3
+ # Specify your gem's dependencies in checkdin.gemspec
4
+ gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,19 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ checkdin (0.2.0)
5
+ activesupport (>= 2.0.3)
6
+ faraday (>= 0.6, < 0.8)
7
+ faraday_middleware (>= 0.8)
8
+ hashie (~> 1.0)
9
+
1
10
  GEM
2
11
  remote: http://rubygems.org/
3
12
  specs:
4
- addressable (2.2.6)
13
+ activesupport (3.2.2)
14
+ i18n (~> 0.6)
15
+ multi_json (~> 1.0)
16
+ addressable (2.2.7)
5
17
  crack (0.3.1)
6
18
  diff-lcs (1.1.3)
7
19
  faraday (0.7.6)
@@ -10,18 +22,12 @@ GEM
10
22
  rack (~> 1.1)
11
23
  faraday_middleware (0.8.4)
12
24
  faraday (>= 0.7.4, < 0.9)
13
- git (1.2.5)
14
25
  hashie (1.2.0)
15
- jeweler (1.8.3)
16
- bundler (~> 1.0)
17
- git (>= 1.2.5)
18
- rake
19
- rdoc
26
+ i18n (0.6.0)
20
27
  json (1.6.5)
21
28
  multi_json (1.0.4)
22
29
  multipart-post (1.1.5)
23
30
  rack (1.4.1)
24
- rake (0.9.2.2)
25
31
  rdoc (3.12)
26
32
  json (~> 1.4)
27
33
  rspec (2.8.0)
@@ -36,6 +42,7 @@ GEM
36
42
  multi_json (~> 1.0.3)
37
43
  simplecov-html (~> 0.5.3)
38
44
  simplecov-html (0.5.3)
45
+ timecop (0.3.5)
39
46
  vcr (1.11.3)
40
47
  webmock (1.7.10)
41
48
  addressable (~> 2.2, > 2.2.5)
@@ -46,12 +53,10 @@ PLATFORMS
46
53
 
47
54
  DEPENDENCIES
48
55
  bundler (~> 1.0.0)
49
- faraday (>= 0.6, < 0.8)
50
- faraday_middleware (>= 0.8)
51
- hashie (~> 1.0)
52
- jeweler (~> 1.8.3)
56
+ checkdin!
53
57
  rdoc (~> 3.12)
54
58
  rspec (~> 2.8.0)
55
- simplecov
56
- vcr
57
- webmock
59
+ simplecov (~> 0.5.4)
60
+ timecop
61
+ vcr (~> 1.11.3)
62
+ webmock (~> 1.7.10)
data/Rakefile CHANGED
@@ -1,29 +1,6 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'rubygems'
4
- require 'bundler'
5
- begin
6
- Bundler.setup(:default, :development)
7
- rescue Bundler::BundlerError => e
8
- $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
10
- exit e.status_code
11
- end
12
- require 'rake'
13
-
14
- require 'jeweler'
15
- Jeweler::Tasks.new do |gem|
16
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = "checkdin"
18
- gem.homepage = "http://github.com/mattmueller/checkdin"
19
- gem.license = "MIT"
20
- gem.summary = %Q{Ruby gem for interacting with the checkd.in API.}
21
- gem.description = %Q{Ruby gem for interacting with the checkd.in API. See http://checkd.in or http://developer.checkd.in for more information.}
22
- gem.email = "muellermr@gmail.com"
23
- gem.authors = ["Matt Mueller"]
24
- # dependencies defined in Gemfile
25
- end
26
- Jeweler::RubygemsDotOrgTasks.new
3
+ require "bundler/gem_tasks"
27
4
 
28
5
  require 'rspec/core'
29
6
  require 'rspec/core/rake_task'
@@ -40,7 +17,8 @@ task :default => :spec
40
17
 
41
18
  require 'rdoc/task'
42
19
  Rake::RDocTask.new do |rdoc|
43
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
20
+ require 'checkdin/version'
21
+ version = Checkdin::VERSION
44
22
 
45
23
  rdoc.rdoc_dir = 'rdoc'
46
24
  rdoc.title = "checkdin #{version}"
@@ -74,7 +74,7 @@ module Checkdin
74
74
  def default_headers
75
75
  headers = {
76
76
  :accept => 'application/json',
77
- :user_agent => 'Ruby gem'
77
+ :user_agent => "checkdin ruby gem #{Checkdin::VERSION}"
78
78
  }
79
79
  end
80
80
 
@@ -0,0 +1,85 @@
1
+ module Checkdin
2
+ class UserBridge
3
+ CHECKDIN_DEFAULT_LANDING = 'https://app.checkd.in/user_landing?'
4
+
5
+ attr :client_identifier, :bridge_secret
6
+ attr :checkdin_landing_url
7
+
8
+ # Used to build the authenticated parameters for logging in an end-user on
9
+ # checkd.in via a redirect.
10
+ #
11
+ # options - a hash with a the following values defined:
12
+ # :client_identifier - REQUIRED, the same client identifier used when accessing the regular
13
+ # API methods.
14
+ # :bridge_secret - REQUIRED, previously agreed upon shared secret for the user bridge.
15
+ # This is NOT the shared secret used for accessing the backend API,
16
+ # please do not confuse the two.
17
+ # :checkdin_landing_url - OPTIONAL, the value will default to CHECKDIN_DEFAULT_LANDING
18
+ # if not given. Please set this value as directed by Checkd In.
19
+ #
20
+ # Examples
21
+ #
22
+ # bridge = Checkdin::UserBridge.new(:client_identifier => 'YOUR_ASSIGNED_CLIENT_IDENTIFIER',
23
+ # :bridge_secret => 'YOUR_ASSIGNED_BRIDGE_SECRET')
24
+ # redirect_to bridge.login_url(:email => 'bob@example.com',
25
+ # :user_identifier => '112-fixed-user-identifier')
26
+ #
27
+ def initialize options
28
+ @client_identifier = options.delete(:client_identifier) or raise ArgumentError.new("No :client_identifier given")
29
+ @bridge_secret = options.delete(:bridge_secret) or raise ArgumentError.new("No :bridge_secret given")
30
+
31
+ @checkdin_landing_url = options.delete(:checkdin_landing_url) || CHECKDIN_DEFAULT_LANDING
32
+
33
+ raise ArgumentError.new("Unknown arguments given: #{options.keys.inspect}") unless options.empty?
34
+ end
35
+
36
+ # Public: Build a full signed url for logging a specific user into checkd.in. Notice:
37
+ # you MUST NOT reuse the result of this method, as it expires automatically based on time.
38
+ #
39
+ # options - a hash with the following values defined:
40
+ # email - REQUIRED, email address of the user, MAY have different values for a given
41
+ # user over time.
42
+ # user_identifier - REQUIRED, your unique identifier for the user, MUST NOT change over time.
43
+ # authentication_action - OPTIONAL, the given action will be performed immediately,
44
+ # and the user redirected back to your site afterwards.
45
+ #
46
+ # Returns a URL you can use for redirecting a user. Notice this will expire, so it should
47
+ # be generated and used only when a user actually wants to log into checkd.in.
48
+ def login_url options
49
+ email = options.delete(:email) or raise ArgumentError.new("No :email passed for user")
50
+ user_identifier = options.delete(:user_identifier) or raise ArgumentError.new("No :user_identifier passed for user")
51
+ authentication_action = options.delete(:authentication_action)
52
+
53
+ authenticated_parameters = build_authenticated_parameters(email, user_identifier, authentication_action)
54
+
55
+ [checkdin_landing_url, authenticated_parameters.to_query].join
56
+ end
57
+
58
+ # Private: Build a signed hash of parameters for redirecting the user to checkd.in.
59
+ #
60
+ # Returns a hash including a secure message digest and the current timestamp
61
+ def build_authenticated_parameters email, user_identifier, authentication_action = nil
62
+ build_request(email, user_identifier, authentication_action).tap do |request|
63
+ request['digest'] = digest_request(request)
64
+ end
65
+ end
66
+
67
+ private
68
+ def build_request email, user_identifier, authentication_action
69
+ {
70
+ 'auth_timestamp' => Time.now.to_i,
71
+ 'client_id' => client_identifier,
72
+ 'client_uid' => user_identifier,
73
+ 'email' => email,
74
+ }.tap do |request|
75
+ request['authentication_action'] = authentication_action if authentication_action
76
+ end
77
+ end
78
+
79
+ def digest_request request
80
+ encoded_request = request.to_query
81
+ OpenSSL::HMAC.hexdigest(OpenSSL::Digest::SHA256.new, bridge_secret, encoded_request)
82
+ end
83
+
84
+ end
85
+ end
@@ -0,0 +1,3 @@
1
+ module Checkdin
2
+ VERSION = '0.2.0'
3
+ end
data/lib/checkdin.rb CHANGED
@@ -1,19 +1,17 @@
1
1
  require 'faraday'
2
2
  require 'faraday_middleware'
3
3
 
4
- directory = File.expand_path(File.dirname(__FILE__))
4
+ require 'openssl'
5
+ require 'active_support/core_ext/object/to_query'
5
6
 
6
- module Checkdin
7
-
8
- require 'checkdin/leaderboard'
9
- require 'checkdin/custom_activities'
10
- require 'checkdin/users'
11
- require 'checkdin/activities'
12
- require 'checkdin/won_rewards'
13
- require 'checkdin/promotions'
14
- require 'checkdin/campaigns'
15
- require 'checkdin/client'
16
- require 'checkdin/api_error'
17
-
18
-
19
- end
7
+ require 'checkdin/version'
8
+ require 'checkdin/leaderboard'
9
+ require 'checkdin/custom_activities'
10
+ require 'checkdin/users'
11
+ require 'checkdin/user_bridge'
12
+ require 'checkdin/activities'
13
+ require 'checkdin/won_rewards'
14
+ require 'checkdin/promotions'
15
+ require 'checkdin/campaigns'
16
+ require 'checkdin/client'
17
+ require 'checkdin/api_error'
@@ -10,5 +10,9 @@ describe Checkdin::Client do
10
10
  it "should be a Checkdin::Client" do
11
11
  Checkdin::Client.new.should be_a(Checkdin::Client)
12
12
  end
13
- end
13
+
14
+ it "has the version available" do
15
+ Checkdin::VERSION.should =~ /^\d\.\d\.\d/
16
+ end
17
+ end
14
18
  end
@@ -0,0 +1,135 @@
1
+ require 'spec_helper'
2
+ require 'timecop'
3
+
4
+ describe Checkdin::UserBridge, 'constructor' do
5
+ let(:default_options) {{
6
+ :client_identifier => 'my-client',
7
+ :bridge_secret => 'never-tell-123'
8
+ }}
9
+
10
+ it "can be instantiated with identifier and bridge secret" do
11
+ instance = Checkdin::UserBridge.new(default_options)
12
+ instance.client_identifier.should == 'my-client'
13
+ instance.bridge_secret.should == 'never-tell-123'
14
+ end
15
+
16
+ it "has a usable default checkdin_landing_url" do
17
+ instance = Checkdin::UserBridge.new(default_options)
18
+ instance.checkdin_landing_url.should == 'https://app.checkd.in/user_landing?'
19
+ end
20
+
21
+ it "can optionally set the checkdin_landing_url directly" do
22
+ landing_url = stub('land here')
23
+ instance = Checkdin::UserBridge.new(default_options.merge(:checkdin_landing_url => landing_url))
24
+ instance.checkdin_landing_url.should == landing_url
25
+ end
26
+
27
+ it "raises an error on unknown arguments" do
28
+ expect do
29
+ Checkdin::UserBridge.new(default_options.merge(:misspelled_option => 'error me'))
30
+ end.to raise_error(ArgumentError, /misspelled_option/)
31
+ end
32
+ end
33
+
34
+ describe Checkdin::UserBridge, '#login_url' do
35
+ let(:instance) { Checkdin::UserBridge.new(:client_identifier => client_identifier,
36
+ :bridge_secret => bridge_secret,
37
+ :checkdin_landing_url => checkdin_landing_url) }
38
+ subject { instance.login_url(:email => user_email,
39
+ :user_identifier => user_identifier,
40
+ :authentication_action => authentication_action) }
41
+ let(:client_identifier) { 'client-1704' }
42
+ let(:bridge_secret) { '123-shared-secret' }
43
+ let(:user_email) { 'bob@example.com' }
44
+ let(:user_identifier) { '17-batch1-bob' }
45
+ let(:authentication_action) { nil }
46
+ let(:checkdin_landing_url) { nil }
47
+ let(:timestamp) { 1325605589 }
48
+
49
+ context "no custom domain set" do
50
+ it "should output a url for app.checkd.in using https" do
51
+ subject.should =~ /^https:\/\/app\.checkd\.in/
52
+ end
53
+
54
+ it "should include the correct timestamp" do
55
+ Timecop.freeze(Time.at(timestamp)) do
56
+ subject.should include('auth_timestamp=1325605589')
57
+ end
58
+ end
59
+
60
+ it "returns a fully usable result" do
61
+ Timecop.freeze(Time.at(timestamp)) do
62
+ subject.should == "https://app.checkd.in/user_landing?auth_timestamp=1325605589&client_id=client-1704&client_uid=17-batch1-bob&digest=2ca9aca03aa115495e7ce50c941e0efce6e8aeb11480cde04fd1b03110c174ff&email=bob%40example.com"
63
+ end
64
+ end
65
+
66
+ context "with an optional action set" do
67
+ let(:authentication_action) { 'authenticate_facebook' }
68
+
69
+ it "includes the authentication_action" do
70
+ Timecop.freeze(Time.at(timestamp)) do
71
+ subject.should == "https://app.checkd.in/user_landing?auth_timestamp=1325605589&authentication_action=authenticate_facebook&client_id=client-1704&client_uid=17-batch1-bob&digest=f27f0b46e8fb383f53e48d02da51be05f573d4aa80d727acfe08d2cc76db2861&email=bob%40example.com"
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ context "custom subdomain" do
78
+ let(:checkdin_landing_url) { 'https://grace.checkd.in/user_landing?' }
79
+ it "uses it" do
80
+ Timecop.freeze(Time.at(timestamp)) do
81
+ subject.should == "https://grace.checkd.in/user_landing?auth_timestamp=1325605589&client_id=client-1704&client_uid=17-batch1-bob&digest=2ca9aca03aa115495e7ce50c941e0efce6e8aeb11480cde04fd1b03110c174ff&email=bob%40example.com"
82
+ end
83
+ end
84
+ end
85
+
86
+ context "custom domain" do
87
+ let(:checkdin_landing_url) { 'http://checkin.example.com/my_landing?' }
88
+ it "uses it" do
89
+ Timecop.freeze(Time.at(timestamp)) do
90
+ subject.should == "http://checkin.example.com/my_landing?auth_timestamp=1325605589&client_id=client-1704&client_uid=17-batch1-bob&digest=2ca9aca03aa115495e7ce50c941e0efce6e8aeb11480cde04fd1b03110c174ff&email=bob%40example.com"
91
+ end
92
+ end
93
+ end
94
+ end
95
+
96
+ describe Checkdin::UserBridge, '#build_authenticated_parameters' do
97
+ let(:instance) { Checkdin::UserBridge.new(:client_identifier => client_identifier, :bridge_secret => bridge_secret) }
98
+ subject { instance.build_authenticated_parameters(user_email, user_identifier) }
99
+ let(:client_identifier) { 'client-1704' }
100
+ let(:bridge_secret) { '123-shared-secret' }
101
+ let(:user_email) { 'bob@example.com' }
102
+ let(:user_identifier) { '17-batch1-bob' }
103
+ let(:timestamp) { 1325605589 }
104
+
105
+ it "should output a hash with timestamp and digest included" do
106
+ Timecop.freeze(Time.at(timestamp)) do
107
+ subject.should == {
108
+ 'auth_timestamp' => timestamp,
109
+ 'client_id' => client_identifier,
110
+ 'client_uid' => user_identifier,
111
+ 'email' => user_email,
112
+ 'digest' => '2ca9aca03aa115495e7ce50c941e0efce6e8aeb11480cde04fd1b03110c174ff'
113
+ }
114
+ end
115
+ end
116
+
117
+ context "with an authenticated action" do
118
+ subject { instance.build_authenticated_parameters(user_email, user_identifier, authentication_action) }
119
+ let(:authentication_action) { 'authenticate_facebook' }
120
+
121
+ it "should output a hash with a different digest and the authenticated_action included" do
122
+ Timecop.freeze(Time.at(timestamp)) do
123
+ subject.should == {
124
+ 'auth_timestamp' => timestamp,
125
+ 'authentication_action' => authentication_action,
126
+ 'client_id' => client_identifier,
127
+ 'client_uid' => user_identifier,
128
+ 'email' => user_email,
129
+ 'digest' => 'f27f0b46e8fb383f53e48d02da51be05f573d4aa80d727acfe08d2cc76db2861'
130
+ }
131
+ end
132
+ end
133
+ end
134
+
135
+ end
metadata CHANGED
@@ -1,138 +1,152 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: checkdin
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.0
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease:
5
+ version: 0.2.0
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Matt Mueller
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-14 00:00:00.000000000Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
12
+
13
+ date: 2012-02-14 00:00:00 -06:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
15
17
  name: faraday
16
- requirement: &70339789391300 !ruby/object:Gem::Requirement
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
17
20
  none: false
18
- requirements:
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0.6"
19
25
  - - <
20
- - !ruby/object:Gem::Version
21
- version: '0.8'
22
- - - ! '>='
23
- - !ruby/object:Gem::Version
24
- version: '0.6'
26
+ - !ruby/object:Gem::Version
27
+ version: "0.8"
25
28
  type: :runtime
26
- prerelease: false
27
- version_requirements: *70339789391300
28
- - !ruby/object:Gem::Dependency
29
+ version_requirements: *id001
30
+ - !ruby/object:Gem::Dependency
29
31
  name: faraday_middleware
30
- requirement: &70339789390440 !ruby/object:Gem::Requirement
32
+ prerelease: false
33
+ requirement: &id002 !ruby/object:Gem::Requirement
31
34
  none: false
32
- requirements:
33
- - - ! '>='
34
- - !ruby/object:Gem::Version
35
- version: '0.8'
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: "0.8"
36
39
  type: :runtime
37
- prerelease: false
38
- version_requirements: *70339789390440
39
- - !ruby/object:Gem::Dependency
40
+ version_requirements: *id002
41
+ - !ruby/object:Gem::Dependency
40
42
  name: hashie
41
- requirement: &70339789389820 !ruby/object:Gem::Requirement
43
+ prerelease: false
44
+ requirement: &id003 !ruby/object:Gem::Requirement
42
45
  none: false
43
- requirements:
46
+ requirements:
44
47
  - - ~>
45
- - !ruby/object:Gem::Version
46
- version: '1.0'
48
+ - !ruby/object:Gem::Version
49
+ version: "1.0"
47
50
  type: :runtime
51
+ version_requirements: *id003
52
+ - !ruby/object:Gem::Dependency
53
+ name: activesupport
48
54
  prerelease: false
49
- version_requirements: *70339789389820
50
- - !ruby/object:Gem::Dependency
55
+ requirement: &id004 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 2.0.3
61
+ type: :runtime
62
+ version_requirements: *id004
63
+ - !ruby/object:Gem::Dependency
51
64
  name: rspec
52
- requirement: &70339789389340 !ruby/object:Gem::Requirement
65
+ prerelease: false
66
+ requirement: &id005 !ruby/object:Gem::Requirement
53
67
  none: false
54
- requirements:
68
+ requirements:
55
69
  - - ~>
56
- - !ruby/object:Gem::Version
70
+ - !ruby/object:Gem::Version
57
71
  version: 2.8.0
58
72
  type: :development
59
- prerelease: false
60
- version_requirements: *70339789389340
61
- - !ruby/object:Gem::Dependency
73
+ version_requirements: *id005
74
+ - !ruby/object:Gem::Dependency
62
75
  name: rdoc
63
- requirement: &70339789388780 !ruby/object:Gem::Requirement
76
+ prerelease: false
77
+ requirement: &id006 !ruby/object:Gem::Requirement
64
78
  none: false
65
- requirements:
79
+ requirements:
66
80
  - - ~>
67
- - !ruby/object:Gem::Version
68
- version: '3.12'
81
+ - !ruby/object:Gem::Version
82
+ version: "3.12"
69
83
  type: :development
70
- prerelease: false
71
- version_requirements: *70339789388780
72
- - !ruby/object:Gem::Dependency
84
+ version_requirements: *id006
85
+ - !ruby/object:Gem::Dependency
73
86
  name: bundler
74
- requirement: &70339789388300 !ruby/object:Gem::Requirement
87
+ prerelease: false
88
+ requirement: &id007 !ruby/object:Gem::Requirement
75
89
  none: false
76
- requirements:
90
+ requirements:
77
91
  - - ~>
78
- - !ruby/object:Gem::Version
92
+ - !ruby/object:Gem::Version
79
93
  version: 1.0.0
80
94
  type: :development
95
+ version_requirements: *id007
96
+ - !ruby/object:Gem::Dependency
97
+ name: simplecov
81
98
  prerelease: false
82
- version_requirements: *70339789388300
83
- - !ruby/object:Gem::Dependency
84
- name: jeweler
85
- requirement: &70339789387820 !ruby/object:Gem::Requirement
99
+ requirement: &id008 !ruby/object:Gem::Requirement
86
100
  none: false
87
- requirements:
101
+ requirements:
88
102
  - - ~>
89
- - !ruby/object:Gem::Version
90
- version: 1.8.3
103
+ - !ruby/object:Gem::Version
104
+ version: 0.5.4
91
105
  type: :development
106
+ version_requirements: *id008
107
+ - !ruby/object:Gem::Dependency
108
+ name: webmock
92
109
  prerelease: false
93
- version_requirements: *70339789387820
94
- - !ruby/object:Gem::Dependency
95
- name: simplecov
96
- requirement: &70339789387340 !ruby/object:Gem::Requirement
110
+ requirement: &id009 !ruby/object:Gem::Requirement
97
111
  none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '0'
112
+ requirements:
113
+ - - ~>
114
+ - !ruby/object:Gem::Version
115
+ version: 1.7.10
102
116
  type: :development
117
+ version_requirements: *id009
118
+ - !ruby/object:Gem::Dependency
119
+ name: vcr
103
120
  prerelease: false
104
- version_requirements: *70339789387340
105
- - !ruby/object:Gem::Dependency
106
- name: webmock
107
- requirement: &70339789386860 !ruby/object:Gem::Requirement
121
+ requirement: &id010 !ruby/object:Gem::Requirement
108
122
  none: false
109
- requirements:
110
- - - ! '>='
111
- - !ruby/object:Gem::Version
112
- version: '0'
123
+ requirements:
124
+ - - ~>
125
+ - !ruby/object:Gem::Version
126
+ version: 1.11.3
113
127
  type: :development
128
+ version_requirements: *id010
129
+ - !ruby/object:Gem::Dependency
130
+ name: timecop
114
131
  prerelease: false
115
- version_requirements: *70339789386860
116
- - !ruby/object:Gem::Dependency
117
- name: vcr
118
- requirement: &70339789386380 !ruby/object:Gem::Requirement
132
+ requirement: &id011 !ruby/object:Gem::Requirement
119
133
  none: false
120
- requirements:
121
- - - ! '>='
122
- - !ruby/object:Gem::Version
123
- version: '0'
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: "0"
124
138
  type: :development
125
- prerelease: false
126
- version_requirements: *70339789386380
127
- description: Ruby gem for interacting with the checkd.in API. See http://checkd.in
128
- or http://developer.checkd.in for more information.
139
+ version_requirements: *id011
140
+ description: Ruby gem for interacting with the checkd.in API. See http://checkd.in or http://developer.checkd.in for more information.
129
141
  email: muellermr@gmail.com
130
142
  executables: []
143
+
131
144
  extensions: []
132
- extra_rdoc_files:
145
+
146
+ extra_rdoc_files:
133
147
  - LICENSE.txt
134
148
  - README.rdoc
135
- files:
149
+ files:
136
150
  - .document
137
151
  - .rspec
138
152
  - Gemfile
@@ -140,7 +154,6 @@ files:
140
154
  - LICENSE.txt
141
155
  - README.rdoc
142
156
  - Rakefile
143
- - VERSION
144
157
  - lib/checkdin.rb
145
158
  - lib/checkdin/activities.rb
146
159
  - lib/checkdin/api_error.rb
@@ -150,6 +163,8 @@ files:
150
163
  - lib/checkdin/leaderboard.rb
151
164
  - lib/checkdin/promotions.rb
152
165
  - lib/checkdin/users.rb
166
+ - lib/checkdin/user_bridge.rb
167
+ - lib/checkdin/version.rb
153
168
  - lib/checkdin/won_rewards.rb
154
169
  - spec/checkdin/activities_spec.rb
155
170
  - spec/checkdin/campaigns_spec.rb
@@ -158,8 +173,8 @@ files:
158
173
  - spec/checkdin/leaderboard_spec.rb
159
174
  - spec/checkdin/promotions_spec.rb
160
175
  - spec/checkdin/users_spec.rb
176
+ - spec/checkdin/user_bridge_spec.rb
161
177
  - spec/checkdin/won_rewards_spec.rb
162
- - spec/checkdin_spec.rb
163
178
  - spec/fixtures/vcr_cassettes/Checkdin_Activities/viewing_a_list_of_activities.yml
164
179
  - spec/fixtures/vcr_cassettes/Checkdin_Activities/viewing_a_single_activity.yml
165
180
  - spec/fixtures/vcr_cassettes/Checkdin_Campaigns/viewing_a_list_of_campaigns.yml
@@ -173,32 +188,33 @@ files:
173
188
  - spec/fixtures/vcr_cassettes/Checkdin_WonRewards/viewing_a_list_of_won_rewards.yml
174
189
  - spec/fixtures/vcr_cassettes/Checkdin_WonRewards/viewing_a_single_won_reward.yml
175
190
  - spec/spec_helper.rb
191
+ has_rdoc: true
176
192
  homepage: http://github.com/mattmueller/checkdin
177
- licenses:
193
+ licenses:
178
194
  - MIT
179
195
  post_install_message:
180
196
  rdoc_options: []
181
- require_paths:
197
+
198
+ require_paths:
182
199
  - lib
183
- required_ruby_version: !ruby/object:Gem::Requirement
200
+ required_ruby_version: !ruby/object:Gem::Requirement
184
201
  none: false
185
- requirements:
186
- - - ! '>='
187
- - !ruby/object:Gem::Version
188
- version: '0'
189
- segments:
190
- - 0
191
- hash: -3772188839643581347
192
- required_rubygems_version: !ruby/object:Gem::Requirement
202
+ requirements:
203
+ - - ">="
204
+ - !ruby/object:Gem::Version
205
+ version: "0"
206
+ required_rubygems_version: !ruby/object:Gem::Requirement
193
207
  none: false
194
- requirements:
195
- - - ! '>='
196
- - !ruby/object:Gem::Version
197
- version: '0'
208
+ requirements:
209
+ - - ">="
210
+ - !ruby/object:Gem::Version
211
+ version: "0"
198
212
  requirements: []
213
+
199
214
  rubyforge_project:
200
- rubygems_version: 1.8.10
215
+ rubygems_version: 1.6.2
201
216
  signing_key:
202
217
  specification_version: 3
203
218
  summary: Ruby gem for interacting with the checkd.in API.
204
219
  test_files: []
220
+
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.1.0
@@ -1,6 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Checkdin do
4
-
5
- end
6
-