badgeville 0.0.8 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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