badgeville 0.0.8 → 0.1.0

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.
@@ -0,0 +1,53 @@
1
+ examples/my*
2
+ # rcov generated
3
+ coverage
4
+
5
+ # rdoc generated
6
+ rdoc
7
+
8
+ # yard generated
9
+ doc
10
+ .yardoc
11
+
12
+ # bundler
13
+ .bundle
14
+
15
+ # jeweler generated
16
+ pkg
17
+
18
+ keys.json
19
+
20
+ # Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
21
+ #
22
+ # * Create a file at ~/.gitignore
23
+ # * Include files you want ignored
24
+ # * Run: git config --global core.excludesfile ~/.gitignore
25
+ #
26
+ # After doing this, these files will be ignored in all your git projects,
27
+ # saving you from having to 'pollute' every project you touch with them
28
+ #
29
+ # Not sure what to needs to be ignored for particular editors/OSes? Here's some ideas to get you started. (Remember, remove the leading # of the line)
30
+ #
31
+ # For MacOS:
32
+ #
33
+ #.DS_Store
34
+
35
+ # For TextMate
36
+ #*.tmproj
37
+ #tmtags
38
+
39
+ # For emacs:
40
+ #*~
41
+ #\#*
42
+ #.\#*
43
+
44
+ # For vim:
45
+ #*.swp
46
+
47
+ # For redcar:
48
+ #.redcar
49
+
50
+ # For rubinius:
51
+ #*.rbc
52
+ keys.json.dev
53
+ keys.json.pro
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
5
+ script: "bundle exec rspec"
@@ -0,0 +1,47 @@
1
+ 0.1.0 (May 5, 2012)
2
+ ===================
3
+
4
+ * Fixed support for new response format in tags
5
+ * Added support for protocol relative image urls
6
+ * Tests are now run by TravisCI against 1.9.2 / 1.9.3
7
+ * Dropping support for 1.8.x if there every was one
8
+ * add debug flag
9
+ * create a user / player
10
+
11
+ 0.0.8 (November 30, 2011)
12
+ =========================
13
+
14
+ * support pagination and get all pages for rewards and rewards definitions
15
+ * misc bug fixes
16
+
17
+ 0.0.7 (November 30, 2011)
18
+ =========================
19
+
20
+ * HAS MAJOR BUG DO NOT USE
21
+
22
+ 0.0.6 (November 15, 2011)
23
+ =========================
24
+
25
+ * change set player to use new players/info end point
26
+ * add delete method for earned rewards
27
+ * add definition_id to reward
28
+
29
+ 0.0.5 (October 10, 2011)
30
+ ========================
31
+
32
+ * set default timeout to 3s
33
+ * add timeout parameter
34
+
35
+ 0.0.4 (September 18, 2011)
36
+ ==========================
37
+
38
+ * count activities
39
+ * better error handling
40
+ * add tags to rewards
41
+
42
+ 0.0.3 (September 12, 2011)
43
+ ==========================
44
+
45
+ * Activity.rewards includes reward objects not reward definitions
46
+ * Reward has verb and threshold data for achievments type rewards
47
+ * Raise non json errors
data/Gemfile CHANGED
@@ -1,19 +1,3 @@
1
- source 'http://rubygems.org'
1
+ source :rubygems
2
2
 
3
- # Please keep me alphabetized!
4
- gem 'json'
5
- gem 'rest-client'
6
- # Please keep me alphabetized!
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"
12
- gem "bundler"
13
- gem "jeweler"
14
- gem "rcov", ">= 0"
15
- end
16
-
17
- group :test do
18
- gem "webmock"
19
- end
3
+ gemspec
@@ -1,40 +1,40 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ badgeville (0.0.8)
5
+ json
6
+ rest-client
7
+
1
8
  GEM
2
9
  remote: http://rubygems.org/
3
10
  specs:
4
- addressable (2.2.6)
11
+ addressable (2.2.8)
5
12
  crack (0.3.1)
6
13
  diff-lcs (1.1.3)
7
- git (1.2.5)
8
- jeweler (1.6.4)
9
- bundler (~> 1.0)
10
- git (>= 1.2.5)
11
- rake
12
- json (1.6.1)
13
- mime-types (1.17.2)
14
- rake (0.9.2.2)
15
- rcov (0.9.11)
14
+ json (1.7.0)
15
+ mime-types (1.18)
16
+ rdoc (3.12)
17
+ json (~> 1.4)
16
18
  rest-client (1.6.7)
17
19
  mime-types (>= 1.16)
18
- rspec (2.7.0)
19
- rspec-core (~> 2.7.0)
20
- rspec-expectations (~> 2.7.0)
21
- rspec-mocks (~> 2.7.0)
22
- rspec-core (2.7.1)
23
- rspec-expectations (2.7.0)
24
- diff-lcs (~> 1.1.2)
25
- rspec-mocks (2.7.0)
26
- webmock (1.7.7)
27
- addressable (~> 2.2, > 2.2.5)
20
+ rspec (2.10.0)
21
+ rspec-core (~> 2.10.0)
22
+ rspec-expectations (~> 2.10.0)
23
+ rspec-mocks (~> 2.10.0)
24
+ rspec-core (2.10.0)
25
+ rspec-expectations (2.10.0)
26
+ diff-lcs (~> 1.1.3)
27
+ rspec-mocks (2.10.1)
28
+ webmock (1.8.6)
29
+ addressable (>= 2.2.7)
28
30
  crack (>= 0.1.7)
29
31
 
30
32
  PLATFORMS
31
33
  ruby
32
34
 
33
35
  DEPENDENCIES
36
+ badgeville!
34
37
  bundler
35
- jeweler
36
- json
37
- rcov
38
- rest-client
38
+ rdoc
39
39
  rspec
40
40
  webmock
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
+ [![Build Status](https://secure.travis-ci.org/rmehner/badgeville.png)](http://travis-ci.org/rmehner/badgeville)
2
+
1
3
  Badgeville API
2
- ============
4
+ ==============
3
5
 
4
6
  Client for Badgeville API http://rules.badgeville.com/
5
7
 
6
- (not complete)
7
-
8
8
  Usage
9
9
  --------
10
10
  First, checkout the examples folder. TL;DR:
@@ -17,6 +17,18 @@ settings = JSON.parse(File.read('keys.json.example'))
17
17
  badgeville = Badgeville::Client.new(email, settings)
18
18
  ```
19
19
 
20
+ * register user and player on site
21
+
22
+ ```ruby
23
+ badgeville.create_player
24
+ ```
25
+
26
+ * get player id
27
+
28
+ ```ruby
29
+ badgeville.player_info
30
+ ```
31
+
20
32
  * log actions
21
33
 
22
34
  ```ruby
data/Rakefile CHANGED
@@ -1,48 +1,11 @@
1
- # encoding: utf-8
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require 'rdoc/task'
2
4
 
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 = "badgeville"
18
- gem.homepage = "http://github.com/Keasinc/badgeville"
19
- gem.license = "MIT"
20
- gem.summary = "Client for Badgeville's Core API"
21
- gem.description = "Client for Badgeville's Core API v2. http://rules.badgeville.com"
22
- gem.authors = ["Gilad Buchman"]
23
- # dependencies defined in Gemfile
24
- end
25
- Jeweler::RubygemsDotOrgTasks.new
26
-
27
- require 'rspec/core'
28
- require 'rspec/core/rake_task'
29
- RSpec::Core::RakeTask.new(:spec) do |spec|
30
- spec.pattern = FileList['spec/**/*_spec.rb']
31
- end
32
-
33
- RSpec::Core::RakeTask.new(:rcov) do |spec|
34
- spec.pattern = 'spec/**/*_spec.rb'
35
- spec.rcov = true
36
- end
37
-
38
- task :default => :spec
39
-
40
- require 'rake/rdoctask'
41
5
  Rake::RDocTask.new do |rdoc|
42
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
43
-
44
6
  rdoc.rdoc_dir = 'rdoc'
45
- rdoc.title = "badgeville #{version}"
7
+ rdoc.title = "badgeville"
8
+
46
9
  rdoc.rdoc_files.include('README*')
47
10
  rdoc.rdoc_files.include('lib/**/*.rb')
48
11
  end
@@ -1,69 +1,26 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
1
  # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/badgeville/version', __FILE__)
5
3
 
6
- Gem::Specification.new do |s|
7
- s.name = %q{badgeville}
8
- s.version = "0.0.7"
4
+ Gem::Specification.new do |gem|
5
+ gem.name = "badgeville"
6
+ gem.description = "Badgeville API client"
7
+ gem.summary = "Client for Badgeville's Core API v2. http://rules.badgeville.com"
8
+ gem.version = Badgeville::VERSION
9
+ gem.authors = ["Gilad Buchman", "Robin Mehner"]
10
+ gem.homepage = "http://github.com/rmehner/badgeville"
11
+ gem.date = Time.now.utc.strftime("%Y-%m-%d")
12
+ gem.licenses = ["MIT"]
9
13
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Gilad Buchman"]
12
- s.date = %q{2011-11-30}
13
- s.description = %q{Client for Badgeville's Core API v2. http://rules.badgeville.com}
14
- s.extra_rdoc_files = [
15
- "README.md"
16
- ]
17
- s.files = [
18
- ".document",
19
- "CHANGELOG",
20
- "Gemfile",
21
- "Gemfile.lock",
22
- "README.md",
23
- "Rakefile",
24
- "VERSION",
25
- "badgeville.gemspec",
26
- "examples/log_and_check_status.rb",
27
- "keys.json.example",
28
- "lib/badgeville.rb",
29
- "lib/badgeville/activity.rb",
30
- "lib/badgeville/helpers.rb",
31
- "lib/badgeville/reward.rb",
32
- "spec/badgeville_spec.rb",
33
- "spec/reward_spec.rb",
34
- "spec/spec_helper.rb"
35
- ]
36
- s.homepage = %q{http://github.com/Keasinc/badgeville}
37
- s.licenses = ["MIT"]
38
- s.require_paths = ["lib"]
39
- s.rubygems_version = %q{1.6.2}
40
- s.summary = %q{Client for Badgeville's Core API}
14
+ gem.files = `git ls-files`.split("\n")
15
+ gem.test_files = `git ls-files -- {spec}/*`.split("\n")
16
+ gem.require_paths = ["lib"]
17
+ gem.rubygems_version = %q{1.6.2}
41
18
 
42
- if s.respond_to? :specification_version then
43
- s.specification_version = 3
19
+ gem.add_dependency 'rest-client'
20
+ gem.add_dependency 'json'
44
21
 
45
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
- s.add_runtime_dependency(%q<json>, [">= 0"])
47
- s.add_runtime_dependency(%q<rest-client>, [">= 0"])
48
- s.add_development_dependency(%q<rspec>, [">= 0"])
49
- s.add_development_dependency(%q<bundler>, [">= 0"])
50
- s.add_development_dependency(%q<jeweler>, [">= 0"])
51
- s.add_development_dependency(%q<rcov>, [">= 0"])
52
- else
53
- s.add_dependency(%q<json>, [">= 0"])
54
- s.add_dependency(%q<rest-client>, [">= 0"])
55
- s.add_dependency(%q<rspec>, [">= 0"])
56
- s.add_dependency(%q<bundler>, [">= 0"])
57
- s.add_dependency(%q<jeweler>, [">= 0"])
58
- s.add_dependency(%q<rcov>, [">= 0"])
59
- end
60
- else
61
- s.add_dependency(%q<json>, [">= 0"])
62
- s.add_dependency(%q<rest-client>, [">= 0"])
63
- s.add_dependency(%q<rspec>, [">= 0"])
64
- s.add_dependency(%q<bundler>, [">= 0"])
65
- s.add_dependency(%q<jeweler>, [">= 0"])
66
- s.add_dependency(%q<rcov>, [">= 0"])
67
- end
22
+ gem.add_development_dependency 'bundler'
23
+ gem.add_development_dependency 'rspec'
24
+ gem.add_development_dependency 'rdoc'
25
+ gem.add_development_dependency 'webmock'
68
26
  end
69
-
@@ -4,22 +4,29 @@ require 'badgeville'
4
4
  require 'pp'
5
5
 
6
6
  settings = JSON.parse(File.read('keys.json'))
7
- badgeville = Badgeville::Client.new('me@example.com', settings)
7
+ badgeville = Badgeville::Client.new('test_8@example.com', settings)
8
8
 
9
- pp badgeville.reward_definitions #all defined definitions for site
9
+ #turn on debugging
10
+ badgeville.debug = true
10
11
 
11
- pp badgeville.log_activity "commented"
12
+ #create player on site
13
+ pp badgeville.create_player
14
+ pp badgeville.player_info
12
15
 
13
- pp badgeville.log_activity "join_team", :team => "myteam"
16
+ #pp badgeville.reward_definitions #all defined definitions for site
17
+
18
+ #pp badgeville.log_activity "commented"
19
+
20
+ #pp badgeville.log_activity "join_team", :team => "myteam"
14
21
 
15
22
  #check histoy for user
16
- pp badgeville.get_activities
17
- pp badgeville.count_activities
18
- pp badgeville.count_activities :verb => "commented"
19
- pp badgeville.count_activities :verb => "junk"
23
+ #pp badgeville.get_activities
24
+ #pp badgeville.count_activities
25
+ #pp badgeville.count_activities :verb => "commented"
26
+ #pp badgeville.count_activities :verb => "junk"
20
27
 
21
- pp badgeville.get_rewards #earned for user
28
+ #pp badgeville.get_rewards #earned for user
22
29
 
23
30
  #award and delete rewards
24
- reward = badgeville.award "The First Step"
25
- badgeville.delete reward
31
+ #reward = badgeville.award "The First Step"
32
+ #badgeville.delete reward
@@ -3,6 +3,7 @@ require 'rest_client'
3
3
  require 'badgeville/helpers'
4
4
  require 'badgeville/activity'
5
5
  require 'badgeville/reward'
6
+ require 'badgeville/version'
6
7
 
7
8
  module Badgeville
8
9
  TIMEOUT_SECS = 3
@@ -24,7 +25,8 @@ module Badgeville
24
25
  end
25
26
 
26
27
  class Client
27
- attr_accessor :user, :site, :player_id, :site_id, :timeout
28
+ include Helpers
29
+ attr_accessor :user, :site, :player_id, :site_id, :timeout, :debug
28
30
 
29
31
  def initialize (email, opts={})
30
32
  # Required Parameters
@@ -38,15 +40,38 @@ module Badgeville
38
40
  @per_page = opts['per_page']
39
41
  end
40
42
 
41
- def log_activity(activity, opts={})
42
- params = {
43
- "activity[verb]" => activity,
44
- }
45
- opts.inject(params) do |params, entry|
46
- k, v = entry
47
- params["activity[#{k.to_s}]"] = v
48
- params
43
+ def create_player(opts={})
44
+ #try to see if player already exists
45
+ begin
46
+ return player_info
47
+ rescue
48
+ end
49
+
50
+ #try to create user
51
+ begin
52
+ params = property_params(:user, {email: @user}.merge(opts))
53
+ response = make_call(:post, :users, params)
54
+ rescue BadgevilleError => e
55
+ if e.code != 422
56
+ if ensure_array(e.data["email"]).none? {|erorr_msg|
57
+ error_msg =~ "is already taken"
58
+ }
59
+ raise e
60
+ end
61
+ end
49
62
  end
63
+
64
+ #create player
65
+ params = {email: @user, site: @site}.merge(
66
+ property_params(:player, {email: @user}.merge(
67
+ opts)))
68
+ json = make_call(:post, :players, params)
69
+ @site_id = json["site_id"]
70
+ @player_id = json["id"]
71
+ end
72
+
73
+ def log_activity(activity, opts={})
74
+ params = property_params(:activity, {verb: activity}.merge(opts))
50
75
  response = make_call(:post, :activities, params)
51
76
  Activity.new(response)
52
77
  end
@@ -110,20 +135,26 @@ module Badgeville
110
135
  end
111
136
  end
112
137
 
113
- def set_player
138
+ def debug=(flag)
139
+ log_file = flag ? "stdout" : nil
140
+ RestClient.log = log_file
141
+ @debug = flag
142
+ end
143
+
144
+ def player_info
114
145
  end_point = "/players/info.json"
115
146
  begin
116
- response = session[end_point].get(:params =>
117
- {:email => @user, :site => @site})
147
+ params = {:email => @user, :site => @site}
148
+ response = session[end_point].get(:params => params)
118
149
  data = response.body
119
150
  json = JSON.parse(data)
120
151
  json = json["data"]
121
- @player_id = json["id"]
122
152
  @site_id = json["site_id"]
153
+ @player_id = json["id"]
123
154
  rescue => e
124
- if e.respond_to? :response
155
+ if e.respond_to? :response && e.response
125
156
  data = JSON.parse(e.response)
126
- raise BadgevilleError.new(e.http_code, data["error"])
157
+ raise BadgevilleError.new(e.http_code, data["errors"]["error"])
127
158
  else
128
159
  raise e
129
160
  end
@@ -132,14 +163,14 @@ module Badgeville
132
163
 
133
164
  def site_id
134
165
  unless @site_id
135
- set_player
166
+ player_info
136
167
  end
137
168
  @site_id
138
169
  end
139
170
 
140
171
  def player_id
141
172
  unless @player_id
142
- set_player
173
+ player_info
143
174
  end
144
175
  @player_id
145
176
  end
@@ -161,15 +192,11 @@ module Badgeville
161
192
 
162
193
  def make_call(method, action, params={})
163
194
  end_point = "#{action.to_s}.json"
164
- unless params.keys.any? { |k| k =~ /player_id/ }
165
- params.merge!(:user => @user, :site => @site)
166
- end
195
+ params = add_default_params(method, action, params)
196
+
167
197
  begin
168
198
  case method
169
199
  when :get
170
- unless @per_page.nil? || params.has_key?(:per_page)
171
- params[:per_page] = @per_page
172
- end
173
200
  response = session[end_point].send(method, :params => params)
174
201
  when :post, :put, :delete
175
202
  response = session[end_point].send(method, to_query(params))
@@ -177,6 +204,7 @@ module Badgeville
177
204
  data = response.body
178
205
  json = JSON.parse(data)
179
206
  rescue => e
207
+ puts e if debug
180
208
  if e.respond_to? :response
181
209
  begin
182
210
  data = JSON.parse(e.response)
@@ -198,6 +226,18 @@ module Badgeville
198
226
  URI.escape(params.map { |k,v| "#{k.to_s}=#{v.to_s}" }.join("&"))
199
227
  end
200
228
 
229
+ def add_default_params(method, action, params)
230
+ should_not_add = params.keys.none? { |k| k =~ /player_id/ }
231
+ should_not_add &= [:users, :players].include? action
232
+ unless should_not_add
233
+ params.merge!(:user => @user, :site => @site)
234
+ end
235
+ if method == :get && @per_page && !params.has_key?(:per_page)
236
+ params[:per_page] = @per_page
237
+ end
238
+ params
239
+ end
240
+
201
241
  def rewards_from_response(response)
202
242
  response["data"].map do |reward_json|
203
243
  Reward.new(reward_json)
@@ -1,5 +1,13 @@
1
1
  module Badgeville
2
2
  module Helpers
3
+ def property_params(object_name, params)
4
+ params.inject({}) do |new_params, entry|
5
+ k, v = entry
6
+ new_params["#{object_name.to_s}[#{k.to_s}]"] = v
7
+ new_params
8
+ end
9
+ end
10
+
3
11
  def ensure_array(items)
4
12
  items.is_a?(Array) ? items : [items]
5
13
  end
@@ -46,7 +46,7 @@ module Badgeville
46
46
  end
47
47
 
48
48
  def image_url(format = :original)
49
- @image_url.sub('original', format.to_s)
49
+ @image_url.sub('original', format.to_s).sub(/^https?:/, '')
50
50
  end
51
51
 
52
52
  # <b>DEPRECATED:</b> Please use <tt>image_url('grayscale')</tt> instead.
@@ -68,10 +68,8 @@ module Badgeville
68
68
  @verb = json["data"]["verb"]
69
69
  @threshold = json["data"]["threshold"].to_i
70
70
  end
71
- @tags = []
72
- if json["tags"]
73
- @tags = json["tags"].split(',').map(&:strip)
74
- end
71
+
72
+ @tags = json['tags'] || []
75
73
  end
76
74
  end
77
75
  end
@@ -0,0 +1,3 @@
1
+ module Badgeville
2
+ VERSION = '0.1.0'
3
+ end
@@ -174,7 +174,7 @@ describe Badgeville do
174
174
  end
175
175
  end
176
176
 
177
- describe "#set_player" do
177
+ describe "#player_info" do
178
178
  before do
179
179
  @url = /http:\/\/#{Badgeville::HOST}.*\/players\/info\.json.*email=#{@user}.*/
180
180
  stub_http_request(:get, @url).to_return(:body => {"data" => {"id" => "1", "site_id" => "site"}}.to_json)
@@ -194,4 +194,71 @@ describe Badgeville do
194
194
  it {new_badgeville.timeout.should == 10}
195
195
  end
196
196
 
197
+ describe "#create_player" do
198
+ before do
199
+ url = /http:\/\/#{Badgeville::HOST}.*\/players\/info\.json.*email=#{@user}.*/
200
+ stub_http_request(:get, url).to_return(:status => 404,
201
+ :body => {"errors" => {"error" => "invalid player"}}.to_json)
202
+
203
+ players_url = /http:\/\/#{Badgeville::HOST}.*\/players\.json/
204
+ body = "email=#{@user}&site=example.com&player[email]=#{@user}"
205
+ result = {"_id" => "1","id" => "1", "site_id" => "site_id"}
206
+ stub_http_request(:post, players_url).with(body: body).
207
+ to_return(:body => result.to_json)
208
+
209
+ @users_url = /http:\/\/#{Badgeville::HOST}.*\/users\.json/
210
+ @users_body = "user[email]=#{@user}"
211
+ end
212
+
213
+ context "with new user" do
214
+ before do
215
+ result = {"_id" => "1","email" => @user}
216
+ stub_http_request(:post, @users_url).with(body: @users_body).
217
+ to_return(:body => result.to_json)
218
+ @response = @badgeville.create_player
219
+ end
220
+
221
+ it "returns the created player id" do
222
+ @response.should == "1"
223
+ end
224
+
225
+ it "sets player id" do
226
+ @badgeville.player_id.should == "1"
227
+ end
228
+
229
+ context "with existing user on new site" do
230
+ before do
231
+ result = {"errors" => {"email" => ["user email is already taken"]}}
232
+ stub_http_request(:post, @users_url).with(body: @users_body).
233
+ to_return(:status => 422, :body => result.to_json)
234
+ @response = @badgeville.create_player
235
+ end
236
+ end
237
+
238
+ it "returns the created player id" do
239
+ @response.should == "1"
240
+ end
241
+
242
+ it "sets player id" do
243
+ @badgeville.player_id.should == "1"
244
+ end
245
+ end
246
+
247
+ context "when player already exists" do
248
+ before do
249
+ url = /http:\/\/#{Badgeville::HOST}.*\/players\/info\.json.*email=#{@user}.*/
250
+ stub_http_request(:get, url).
251
+ to_return(:body => {"data" => {"id" => "1", "site_id" => "site"}}.to_json)
252
+ @response = @badgeville.create_player
253
+ end
254
+
255
+ it "returns the created player id" do
256
+ @response.should == "1"
257
+ end
258
+
259
+ it "sets player id" do
260
+ @badgeville.player_id.should == "1"
261
+ end
262
+ end
263
+ end
197
264
  end
@@ -40,39 +40,57 @@ describe Badgeville::Reward do
40
40
  @reward.name.should == "A Way with Words"
41
41
  @reward.active.should be_true
42
42
  @reward.id.should == "4e4dfab6c47eed727b005c38"
43
- @reward.tags.should == []
44
43
  @reward.definition_id.should == '4e4dfab6c47eed727b005c38'
45
44
  @reward.message.should == 'You won the internet!'
46
45
  end
47
46
 
48
47
  describe "image_url" do
49
48
  it "returns the original url by default" do
50
- @reward.image_url.should == 'http://s3.amazon.com/original.png?1'
49
+ @reward.image_url.should == '//s3.amazon.com/original.png?1'
51
50
  end
52
51
 
53
52
  it "allows to request specific formats" do
54
53
  [:original, :large, :medium, :grayscale, :grayscale_small].each do |format|
55
- @reward.image_url(format).should == "http://s3.amazon.com/#{format}.png?1"
54
+ @reward.image_url(format).should == "//s3.amazon.com/#{format}.png?1"
56
55
  end
57
56
  end
58
- end
59
57
 
60
- context "has one tag" do
61
- before do
62
- @parsed_json["tags"] = "tag"
63
- @reward = Badgeville::Reward.new(@parsed_json)
58
+ it "returns a protocol relative url for a http original image url" do
59
+ @reward.image_url.should == '//s3.amazon.com/original.png?1'
64
60
  end
65
61
 
66
- it {@reward.tags.should == ["tag"]}
62
+ it "returns a protocol relative url for a https original image url" do
63
+ @parsed_json['image_url'] = 'https://s3.amazon.com/original.png?1'
64
+ reward = Badgeville::Reward.new(@parsed_json)
65
+
66
+ @reward.image_url.should == '//s3.amazon.com/original.png?1'
67
+ end
67
68
  end
68
69
 
69
- context "has multiple tags" do
70
- before do
71
- @parsed_json["tags"] = "tag1, tag2"
72
- @reward = Badgeville::Reward.new(@parsed_json)
70
+ describe "tags" do
71
+ it "returns an empty array if no tag key is in the parsed json" do
72
+ @reward = Badgeville::Reward.new({})
73
+
74
+ @reward.tags.should == []
75
+ end
76
+
77
+ it "returns an empty array if no tags are defined" do
78
+ @reward = Badgeville::Reward.new('tags' => nil)
79
+
80
+ @reward.tags.should == []
81
+ end
82
+
83
+ it "returns the defined tag" do
84
+ @reward = Badgeville::Reward.new('tags' => ['tag'])
85
+
86
+ @reward.tags.should == ["tag"]
73
87
  end
74
88
 
75
- it {@reward.tags.should == ["tag1", "tag2"]}
89
+ it "returns all defined tags" do
90
+ @reward = Badgeville::Reward.new('tags' =>['tag1', 'tag2'])
91
+
92
+ @reward.tags.should == ['tag1', 'tag2']
93
+ end
76
94
  end
77
95
  end
78
96
 
metadata CHANGED
@@ -1,20 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: badgeville
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Gilad Buchman
9
+ - Robin Mehner
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2011-11-30 00:00:00.000000000 -08:00
13
- default_executable:
13
+ date: 2012-05-06 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: json
17
- requirement: &2161684900 !ruby/object:Gem::Requirement
16
+ name: rest-client
17
+ requirement: &70255487231240 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2161684900
25
+ version_requirements: *70255487231240
26
26
  - !ruby/object:Gem::Dependency
27
- name: rest-client
28
- requirement: &2161682040 !ruby/object:Gem::Requirement
27
+ name: json
28
+ requirement: &70255487230420 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2161682040
36
+ version_requirements: *70255487230420
37
37
  - !ruby/object:Gem::Dependency
38
- name: rspec
39
- requirement: &2161679280 !ruby/object:Gem::Requirement
38
+ name: bundler
39
+ requirement: &70255487230000 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *2161679280
47
+ version_requirements: *70255487230000
48
48
  - !ruby/object:Gem::Dependency
49
- name: bundler
50
- requirement: &2161676920 !ruby/object:Gem::Requirement
49
+ name: rspec
50
+ requirement: &70255487229540 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *2161676920
58
+ version_requirements: *70255487229540
59
59
  - !ruby/object:Gem::Dependency
60
- name: jeweler
61
- requirement: &2161675240 !ruby/object:Gem::Requirement
60
+ name: rdoc
61
+ requirement: &70255487228800 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *2161675240
69
+ version_requirements: *70255487228800
70
70
  - !ruby/object:Gem::Dependency
71
- name: rcov
72
- requirement: &2161673960 !ruby/object:Gem::Requirement
71
+ name: webmock
72
+ requirement: &70255487228100 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,21 +77,21 @@ dependencies:
77
77
  version: '0'
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *2161673960
81
- description: Client for Badgeville's Core API v2. http://rules.badgeville.com
80
+ version_requirements: *70255487228100
81
+ description: Badgeville API client
82
82
  email:
83
83
  executables: []
84
84
  extensions: []
85
- extra_rdoc_files:
86
- - README.md
85
+ extra_rdoc_files: []
87
86
  files:
88
87
  - .document
89
- - CHANGELOG
88
+ - .gitignore
89
+ - .travis.yml
90
+ - CHANGELOG.md
90
91
  - Gemfile
91
92
  - Gemfile.lock
92
93
  - README.md
93
94
  - Rakefile
94
- - VERSION
95
95
  - badgeville.gemspec
96
96
  - examples/log_and_check_status.rb
97
97
  - keys.json.example
@@ -99,11 +99,11 @@ files:
99
99
  - lib/badgeville/activity.rb
100
100
  - lib/badgeville/helpers.rb
101
101
  - lib/badgeville/reward.rb
102
+ - lib/badgeville/version.rb
102
103
  - spec/badgeville_spec.rb
103
104
  - spec/reward_spec.rb
104
105
  - spec/spec_helper.rb
105
- has_rdoc: true
106
- homepage: http://github.com/Keasinc/badgeville
106
+ homepage: http://github.com/rmehner/badgeville
107
107
  licenses:
108
108
  - MIT
109
109
  post_install_message:
@@ -116,9 +116,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
116
116
  - - ! '>='
117
117
  - !ruby/object:Gem::Version
118
118
  version: '0'
119
- segments:
120
- - 0
121
- hash: 3687302667246409787
122
119
  required_rubygems_version: !ruby/object:Gem::Requirement
123
120
  none: false
124
121
  requirements:
@@ -127,8 +124,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
124
  version: '0'
128
125
  requirements: []
129
126
  rubyforge_project:
130
- rubygems_version: 1.6.2
127
+ rubygems_version: 1.8.11
131
128
  signing_key:
132
129
  specification_version: 3
133
- summary: Client for Badgeville's Core API
130
+ summary: Client for Badgeville's Core API v2. http://rules.badgeville.com
134
131
  test_files: []
132
+ has_rdoc:
data/CHANGELOG DELETED
@@ -1,31 +0,0 @@
1
- * 0.0.8
2
-
3
- * support pagination and get all pages for rewards and rewards definitions
4
- * misc bug fixes
5
- * 0.0.7
6
-
7
- * HAS MAJOR BUG DO NOT USE
8
-
9
- * 0.0.6
10
-
11
- * change set player to use new players/info end point
12
- * add delete method for earned rewards
13
- * add definition_id to reward
14
-
15
- * 0.0.5
16
-
17
- * set default timeout to 3s
18
- * add timeout paramater
19
-
20
- * 0.0.4
21
-
22
- * count activities
23
- * better error handling
24
- * add tags to rewards
25
-
26
-
27
- * 0.0.3
28
-
29
- * Activity.rewards includes reward objects not reward definitions
30
- * Reward has verb and threshold data for achievments type rewards
31
- * Raise non json errors
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.0.8