badgeville_berlin 0.1.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -0
- data/README_ADVANCED.md +4 -4
- data/badgeville.gemspec +1 -1
- data/lib/badgeville_berlin/base_resource.rb +43 -8
- data/lib/badgeville_berlin/formats/badgeville_berlin_json_format.rb +4 -10
- data/lib/badgeville_berlin/version.rb +1 -1
- data/spec/factories.rb +10 -10
- data/spec/integration/basic_spec.rb +6 -5
- data/spec/response_json.yml +4 -3
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/badgeville_berlin_json_format_spec.rb +1 -2
- data/spec/unit/base_resource_spec.rb +21 -17
- data/spec/use_case/readme_use_case_spec.rb +31 -7
- metadata +75 -25
data/README.md
CHANGED
@@ -15,6 +15,7 @@ This is an open source Ruby wrapper for interacting with the [Badgeville RESTful
|
|
15
15
|
:host_name => "http://example.com",
|
16
16
|
:api_key => MY_API_KEY)
|
17
17
|
```
|
18
|
+
:host_name should be the Badgeville endpoint that receives your calls, NOT your site URL. Example: "http://sandbox.v2.badgeville.com"
|
18
19
|
|
19
20
|
### 2. Add a new site to your network. Find your network ID the Publisher Module's tabbed menu ( Develop > Home ) or contact <support@badgeville.com>
|
20
21
|
```ruby
|
data/README_ADVANCED.md
CHANGED
@@ -28,10 +28,10 @@ This is an open source Ruby wrapper for interacting with the [Badgeville RESTful
|
|
28
28
|
</ul>
|
29
29
|
```ruby
|
30
30
|
new_activity_definition = ActivityDefinition.new(
|
31
|
-
:adjustment =>
|
31
|
+
:adjustment => {:points => 4},
|
32
32
|
:name => 'A Cool Comment Behavior',
|
33
33
|
:site_id => new_site.id,
|
34
|
-
:selector =>
|
34
|
+
:selector => {:verb => "comment"} )
|
35
35
|
success = new_activity_definition.save
|
36
36
|
```
|
37
37
|
|
@@ -42,11 +42,11 @@ This is an open source Ruby wrapper for interacting with the [Badgeville RESTful
|
|
42
42
|
<li>See the API Explorer for a full list of activity definition properties to update.</li>
|
43
43
|
</ul>
|
44
44
|
```ruby
|
45
|
-
new_activity_definition.adjustment
|
45
|
+
new_activity_definition.adjustment = {:points => 3}
|
46
46
|
success = new_activity_definition.save
|
47
47
|
|
48
48
|
activity_def_points_updated = BadgevilleBerlin::ActivityDefinition.find(new_activity_definition.id)
|
49
|
-
puts activity_def_points_updated
|
49
|
+
puts activity_def_points_updated["points"]["definition"] # 3
|
50
50
|
```
|
51
51
|
|
52
52
|
### 4. Update the properties of activity definition: enable rate-limiting. [(more on rate-limiting)](http://rules.badgeville.com/display/doc/Creating+and+Managing+Behaviors#CreatingandManagingBehaviors-BehaviorRateLimits)
|
data/badgeville.gemspec
CHANGED
@@ -31,6 +31,6 @@ Gem::Specification.new do |s|
|
|
31
31
|
s.add_development_dependency "autotest-growl"
|
32
32
|
s.add_development_dependency "logger", ">=1.2.8"
|
33
33
|
|
34
|
-
s.add_runtime_dependency "activeresource", '
|
34
|
+
s.add_runtime_dependency "activeresource", '>= 3.1.3'
|
35
35
|
# s.add_runtime_dependency "rest-client"
|
36
36
|
end
|
@@ -4,15 +4,50 @@ module BadgevilleBerlin
|
|
4
4
|
# Subclasses ActiveResource::Base as BaseResource
|
5
5
|
class BaseResource < ActiveResource::Base
|
6
6
|
|
7
|
+
def initialize(attributes = {}, persisted = false)
|
8
|
+
#we return a nested JSON response with player rewards keyed off of mongo id's
|
9
|
+
#on groups endpoint which causes activeresource to break when looking up a
|
10
|
+
#physical id as an attribute on an activeresource model. fix:
|
11
|
+
attributes["rewards"] = attributes["rewards"].try(:values) if self.class.to_s == "BadgevilleBerlin::Group"
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
def load(attributes, remove_root = false)
|
16
|
+
raise ArgumentError, "expected an attributes Hash, got #{attributes.inspect}" unless attributes.is_a?(Hash)
|
17
|
+
@prefix_options, attributes = split_options(attributes)
|
18
|
+
|
19
|
+
if attributes.keys.size == 1
|
20
|
+
remove_root = self.class.element_name == attributes.keys.first.to_s
|
21
|
+
end
|
22
|
+
|
23
|
+
attributes = ActiveResource::Formats.remove_root(attributes) if remove_root
|
7
24
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
25
|
+
attributes.each do |key, value|
|
26
|
+
@attributes[key.to_s] =
|
27
|
+
case value
|
28
|
+
when Array
|
29
|
+
resource = nil
|
30
|
+
value.map do |attrs|
|
31
|
+
if attrs.is_a?(Hash)
|
32
|
+
resource ||= find_or_create_resource_for_collection(key)
|
33
|
+
resource.new(attrs)
|
34
|
+
else
|
35
|
+
attrs.duplicable? ? attrs.dup : attrs
|
36
|
+
end
|
37
|
+
end
|
38
|
+
when Hash
|
39
|
+
if [:selector, :adjustment].include?(key)
|
40
|
+
#if the key is selector or adjustment, as on the ActivityDefinition object, we don't want to create a nested resource
|
41
|
+
value
|
42
|
+
else
|
43
|
+
resource = find_or_create_resource_for(key)
|
44
|
+
resource.new(value)
|
45
|
+
end
|
46
|
+
else
|
47
|
+
value.duplicable? ? value.dup : value
|
48
|
+
end
|
15
49
|
end
|
50
|
+
self
|
16
51
|
end
|
17
52
|
|
18
53
|
# Overrides encode call to prevent to_json from converting non-valid type
|
@@ -24,7 +59,7 @@ module BadgevilleBerlin
|
|
24
59
|
end
|
25
60
|
|
26
61
|
def sanitize_request
|
27
|
-
valid_types = ["String", "Fixnum", "NilClass", "TrueClass", "FalseClass", "Float"]
|
62
|
+
valid_types = ["String", "Fixnum", "NilClass", "TrueClass", "FalseClass", "ActiveSupport::HashWithIndifferentAccess", "Float", "Array"]
|
28
63
|
self.attributes.values.each_with_index do |k,index|
|
29
64
|
if !valid_types.include?(self.attributes[self.attributes.keys[index]].class.to_s)
|
30
65
|
self.attributes[self.attributes.keys[index]] = self.attributes[self.attributes.keys[index]].attributes.to_json
|
@@ -1,10 +1,8 @@
|
|
1
1
|
# For custom BadgevilleBerlinJson
|
2
2
|
require 'active_support/json'
|
3
|
+
require 'active_support/hash_with_indifferent_access'
|
3
4
|
require "badgeville_berlin/version"
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
6
|
# Handles the fact that a JSON formatted GET response does not meet the
|
9
7
|
# ActiveResource standard, and is instead preceded by the root key :data.
|
10
8
|
module BadgevilleBerlinJsonFormat
|
@@ -43,13 +41,9 @@ module BadgevilleBerlinJsonFormat
|
|
43
41
|
json = ActiveResource::Formats.remove_root(ActiveSupport::JSON.decode(json))
|
44
42
|
if json.kind_of?(Array)
|
45
43
|
json
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
else
|
50
|
-
json
|
51
|
-
end
|
44
|
+
elsif json.kind_of?(Hash)
|
45
|
+
json = ActiveSupport::HashWithIndifferentAccess.new(json)
|
46
|
+
json.keys.first == "data" ? json["data"] : json
|
52
47
|
end
|
53
|
-
|
54
48
|
end
|
55
49
|
end
|
data/spec/factories.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
FactoryGirl.define do
|
2
2
|
factory :activity, :class => BadgevilleBerlin::Activity do
|
3
|
-
|
3
|
+
id '4f0b435ea768656ca400001b'
|
4
4
|
end
|
5
5
|
|
6
6
|
factory :activity_definition, :class => BadgevilleBerlin::ActivityDefinition do
|
7
|
-
|
7
|
+
id '4f0b435ea768656ca400001b'
|
8
8
|
name 'A Cool Comment Behavior'
|
9
9
|
site_id '4f079a04a76865329a000087'
|
10
10
|
selector '{"verb" : "comment"}'
|
@@ -12,39 +12,39 @@ FactoryGirl.define do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
factory :group, :class => BadgevilleBerlin::Group do
|
15
|
-
|
15
|
+
id "4f05ef5ea768651b3500009f"
|
16
16
|
end
|
17
17
|
|
18
18
|
factory :leaderboard, :class => BadgevilleBerlin::Leaderboard do
|
19
|
-
|
19
|
+
id "4f05ef5ea768651b3500009f"
|
20
20
|
end
|
21
21
|
|
22
22
|
factory :player, :class => BadgevilleBerlin::Player do
|
23
|
-
|
23
|
+
id '4f0b29bca76865329a0000ae'
|
24
24
|
email 'supraja220494@BadgevilleBerlin-berlin.com'
|
25
25
|
end
|
26
26
|
|
27
27
|
factory :reward, :class => BadgevilleBerlin::Reward do
|
28
|
-
|
28
|
+
id '4f0b29bca76865329a0000ae'
|
29
29
|
end
|
30
30
|
|
31
31
|
factory :reward_definition, :class => BadgevilleBerlin::RewardDefinition do
|
32
|
-
|
32
|
+
id '4f0b29bca76865329a0000ae'
|
33
33
|
end
|
34
34
|
|
35
35
|
factory :site, :class => BadgevilleBerlin::Site do
|
36
|
-
|
36
|
+
id '4f079a04a76865329a000087'
|
37
37
|
name "My Website"
|
38
38
|
url "mydomain.com"
|
39
39
|
network_id 'mynetworkid'
|
40
40
|
end
|
41
41
|
|
42
42
|
factory :track, :class => BadgevilleBerlin::Track do
|
43
|
-
|
43
|
+
id '4f0b29bca76865329a0000ae'
|
44
44
|
end
|
45
45
|
|
46
46
|
factory :user, :class => BadgevilleBerlin::User do
|
47
|
-
|
47
|
+
id "4f05ef5ea768651b3500009f"
|
48
48
|
name "visitor_username"
|
49
49
|
network_id "mynetworkid"
|
50
50
|
email "visitor@emailserver.com"
|
@@ -21,14 +21,15 @@ module BadgevilleBerlin
|
|
21
21
|
before do
|
22
22
|
@mock = Factory.build(klass)
|
23
23
|
@mock_json = BadgevilleBerlin.response_json["valid_" + klass + "_find"]
|
24
|
-
@path = ENDPOINTKEY + "/" + klass.pluralize + "/" + @mock.
|
24
|
+
@path = ENDPOINTKEY + "/" + klass.pluralize + "/" + @mock.id + ".json"
|
25
25
|
@method = :get
|
26
26
|
@mock_http = MockHTTP.new(@method, @path, {:body => @mock_json, :status => [200, "Ok"]})
|
27
27
|
end
|
28
28
|
|
29
29
|
it "should make the correct http request and return the correct object." do
|
30
30
|
@mock_http.request.should_receive(:send).with(@method, @path, {"Accept"=>"application/json"}).and_return(@mock_http.response)
|
31
|
-
@mock = module_klass.find(@mock.
|
31
|
+
@mock = module_klass.find(@mock.id)
|
32
|
+
(@mock.id).should_not be_nil
|
32
33
|
BadgevilleBerlin.test_attr(@mock, @mock_json)
|
33
34
|
end
|
34
35
|
end
|
@@ -37,7 +38,7 @@ module BadgevilleBerlin
|
|
37
38
|
before do
|
38
39
|
@mock = Factory.build(klass)
|
39
40
|
@mock_json = BadgevilleBerlin.response_json["valid_" + klass + "_update"]
|
40
|
-
@path = ENDPOINTKEY + "/" + klass.pluralize + "/" + @mock.
|
41
|
+
@path = ENDPOINTKEY + "/" + klass.pluralize + "/" + @mock.id + ".json"
|
41
42
|
@method = :put
|
42
43
|
@mock_http = MockHTTP.new(@method, @path, {:body => @mock_json, :status => [200, "Ok"]})
|
43
44
|
@mock.stub(:persisted?).and_return(true) # Force ActiveResource to use put
|
@@ -54,14 +55,14 @@ module BadgevilleBerlin
|
|
54
55
|
before do
|
55
56
|
@mock = Factory.build(klass)
|
56
57
|
@mock_json = "{\"data\":{\"name\":\"visitor_username\",\"created_at\":\"2012-01-05T10:43:42-08:00\",\"email\":\"revised_visitor@emailserver.com\",\"_id\":\"4f05ef5ea768651b3500009f\"},\"paging\":null}" #Factory.build(klass + '_json_save')
|
57
|
-
@path = ENDPOINTKEY + "/" + klass.pluralize + "/" + @mock.
|
58
|
+
@path = ENDPOINTKEY + "/" + klass.pluralize + "/" + @mock.id + ".json"
|
58
59
|
@method = :delete
|
59
60
|
@mock_http = MockHTTP.new(@method, @path, {:body => @mock_json, :status => [200, "Ok"]})
|
60
61
|
end
|
61
62
|
|
62
63
|
it "should make the correct http request." do
|
63
64
|
@mock_http.request.should_receive(:send).with(@method, @path, {"Accept"=>"application/json"}).and_return(@mock_http.response)
|
64
|
-
module_klass.delete(@mock.
|
65
|
+
module_klass.delete(@mock.id)
|
65
66
|
end
|
66
67
|
end
|
67
68
|
end
|
data/spec/response_json.yml
CHANGED
@@ -5,7 +5,7 @@ valid_group_find: "{\"data\":{\"id\":\"4f20561ca7686573bb0003e3\",\"name\":\"hmG
|
|
5
5
|
valid_leaderboard_create: "{\"id\":\"4f20561da7686573bb0003e4\",\"type\":\"Leaderboard\",\"name\":\"rcXUaKNRcaeDfAkO\",\"target_model\":\"Activity\",\"command\":\"sum\",\"field\":\"+5\",\"selector\":{},\"label\":\"rcXUaKNRcaeDfAkO\",\"data\":{}}"
|
6
6
|
valid_leaderboard_find: "{\"data\":{\"id\":\"4f20561da7686573bb0003e4\",\"type\":\"Leaderboard\",\"name\":\"rcXUaKNRcaeDfAkO\",\"target_model\":\"Activity\",\"command\":\"sum\",\"field\":\"+5\",\"selector\":{},\"label\":\"rcXUaKNRcaeDfAkO\",\"data\":{}},\"paging\":null}"
|
7
7
|
valid_user_create: "{\"name\":\"UQrQtllBUanUCSoj\",\"created_at\":\"2012-01-25T11:21:01-08:00\",\"email\":\"UQrQtllBUanUCSoj@badgeville.com\",\"_id\":\"4f20561da7686573bb0003e5\"}"
|
8
|
-
valid_user_find: "{\"
|
8
|
+
valid_user_find: "{\"name\":null,\"created_at\":\"2011-04-19T16:50:51-07:00\",\"email\":\"admin@ibadgedyou.com\",\"_id\":\"4dae1fdaf05f304a9700000a\",\"id\":\"4dae1fdaf05f304a9700000a\"}"
|
9
9
|
valid_player_create: "{\"_id\":\"4f20561ea7686573bb0003e6\",\"id\":\"4f20561ea7686573bb0003e6\",\"name\":\"UQrQtllBUanUCSoj\",\"first_name\":\"FYRCjkgJfGQVkchR\",\"last_name\":\"FYRCjkgJfGQVkchR\",\"display_name\":null,\"nick_name\":null,\"email\":\"UQrQtllBUanUCSoj@badgeville.com\",\"user_email\":\"UQrQtllBUanUCSoj@badgeville.com\",\"created_at\":\"2012-01-25T11:21:02-08:00\",\"user_id\":\"4f20561da7686573bb0003e5\",\"site_id\":\"4f20561ca7686573bb0003e2\",\"site_url\":\"TsOjhaGEmkewjSrD.com\",\"admin\":false,\"points_day\":0.0,\"points_week\":0.0,\"points_month\":0.0,\"points_all\":0.0,\"facebook_id\":null,\"facebook_link\":null,\"twitter_id\":null,\"twitter_username\":null,\"twitter_link\":null,\"email_notifications\":true,\"custom_picture_url\":null,\"picture_url\":null,\"preferences\":{\"email_notifications\":true,\"hide_notifications\":false,\"publish_activity\":true},\"tracks\":{},\"units\":{\"points_day\":0.0,\"points_week\":0.0,\"points_month\":0.0,\"points_all\":0.0,\"badges_day\":0,\"badges_week\":0,\"badges_month\":0,\"badges_all\":0}}"
|
10
10
|
valid_player_find: "{\"data\":{\"_id\":\"4f20561ea7686573bb0003e6\",\"id\":\"4f20561ea7686573bb0003e6\",\"name\":\"UQrQtllBUanUCSoj\",\"first_name\":\"FYRCjkgJfGQVkchR\",\"last_name\":\"FYRCjkgJfGQVkchR\",\"display_name\":null,\"nick_name\":null,\"email\":\"UQrQtllBUanUCSoj@badgeville.com\",\"user_email\":\"UQrQtllBUanUCSoj@badgeville.com\",\"created_at\":\"2012-01-25T11:21:02-08:00\",\"user_id\":\"4f20561da7686573bb0003e5\",\"site_id\":\"4f20561ca7686573bb0003e2\",\"site_url\":\"TsOjhaGEmkewjSrD.com\",\"admin\":false,\"points_day\":0.0,\"points_week\":0.0,\"points_month\":0.0,\"points_all\":0.0,\"facebook_id\":null,\"facebook_link\":null,\"twitter_id\":null,\"twitter_username\":null,\"twitter_link\":null,\"email_notifications\":true,\"custom_picture_url\":null,\"picture_url\":null,\"preferences\":{\"email_notifications\":true,\"hide_notifications\":false,\"publish_activity\":true},\"tracks\":{},\"units\":{\"points_day\":0.0,\"points_week\":0.0,\"points_month\":0.0,\"points_all\":0.0,\"badges_day\":0,\"badges_week\":0,\"badges_month\":0,\"badges_all\":0}},\"paging\":null}"
|
11
11
|
valid_reward_definition_create: "{\"type\":\"rewarddefinition\",\"name\":\"VIFsIFJOJffENkDx\",\"created_at\":\"2012-01-25T11:21:02-08:00\",\"assignable\":false,\"allow_duplicates\":false,\"components\":\"[]\",\"reward_template\":{},\"tags\":null,\"site_id\":\"4f20561ca7686573bb0003e2\",\"image_url\":\"http://staging.badgeville.com/images/misc/missing_badge.png\",\"image_file_name\":null,\"data\":{},\"_id\":\"4f20561ea7686573bb0003e7\",\"id\":\"4f20561ea7686573bb0003e7\",\"active\":false,\"hint\":null,\"message\":null,\"active_start_at\":null,\"active_end_at\":null}"
|
@@ -13,9 +13,9 @@ valid_reward_definition_find: "{\"data\":{\"type\":\"rewarddefinition\",\"name\"
|
|
13
13
|
valid_reward_create: "{\"name\":\"VIFsIFJOJffENkDx\",\"created_at\":\"2012-01-25T11:21:03-08:00\",\"activity_id\":null,\"id\":\"4f20561fa7686573bb0003e8\",\"user_id\":\"4f20561da7686573bb0003e5\",\"site_id\":\"4f20561ca7686573bb0003e2\",\"definition\":{\"type\":\"rewarddefinition\",\"name\":\"VIFsIFJOJffENkDx\",\"created_at\":\"2012-01-25T11:21:02-08:00\",\"assignable\":false,\"allow_duplicates\":false,\"components\":\"[]\",\"reward_template\":{},\"tags\":null,\"site_id\":\"4f20561ca7686573bb0003e2\",\"image_url\":\"http://staging.badgeville.com/images/misc/missing_badge.png\",\"image_file_name\":null,\"data\":{},\"_id\":\"4f20561ea7686573bb0003e7\",\"id\":\"4f20561ea7686573bb0003e7\",\"active\":false,\"hint\":null,\"message\":null,\"active_start_at\":null,\"active_end_at\":null},\"image\":\"http://staging.badgeville.com/images/misc/missing_badge.png\",\"tags\":[],\"status\":null,\"message\":null,\"history\":null,\"next_reward_id\":null}"
|
14
14
|
valid_reward_find: "{\"data\":{\"name\":\"VIFsIFJOJffENkDx\",\"created_at\":\"2012-01-25T11:21:03-08:00\",\"activity_id\":null,\"id\":\"4f20561fa7686573bb0003e8\",\"user_id\":\"4f20561da7686573bb0003e5\",\"site_id\":\"4f20561ca7686573bb0003e2\",\"definition\":{\"type\":\"rewarddefinition\",\"name\":\"VIFsIFJOJffENkDx\",\"created_at\":\"2012-01-25T11:21:02-08:00\",\"assignable\":false,\"allow_duplicates\":false,\"components\":\"[]\",\"reward_template\":{},\"tags\":null,\"site_id\":\"4f20561ca7686573bb0003e2\",\"image_url\":\"http://staging.badgeville.com/images/misc/missing_badge.png\",\"image_file_name\":null,\"data\":{},\"_id\":\"4f20561ea7686573bb0003e7\",\"id\":\"4f20561ea7686573bb0003e7\",\"active\":false,\"hint\":null,\"message\":null,\"active_start_at\":null,\"active_end_at\":null},\"image\":\"http://staging.badgeville.com/images/misc/missing_badge.png\",\"tags\":[],\"status\":null,\"message\":null,\"history\":null,\"next_reward_id\":null},\"paging\":null}"
|
15
15
|
valid_activity_definition_create: "{\"_id\":\"4f20561fa7686573bb0003e9\",\"name\":\"pQAwIayIcbVhQdns\",\"selector\":{\"verb\":\"read\"},\"adjustment\":{\"points\":5},\"bucket_drain_rate\":null,\"bucket_max_capacity\":null,\"limit_per_player\":null,\"limit_field_scope\":null,\"site_id\":\"4f20561ca7686573bb0003e2\",\"verb\":\"read\",\"icon\":null,\"tool_tip\":null,\"hide_in_widgets\":true,\"enable_rate_limiting\":false,\"enable_count_limiting\":false,\"enable_site_notification\":null,\"enable_user_notification\":null,\"enable_auto_subscription\":null,\"description\":null}"
|
16
|
-
valid_activity_definition_find: "{\"data\":{\"_id\":\"
|
16
|
+
valid_activity_definition_find: "{\"data\":{\"_id\":\"4dae202ff05f306a85000005\",\"id\":\"4dae202ff05f306a85000005\",\"name\":\"Read\",\"selector\":{\"verb\":\"read\"},\"adjustment\":{\"points\":{\"definition\":5}},\"bucket_drain_rate\":3600.0,\"bucket_max_capacity\":1.0,\"limit_per_player\":null,\"limit_field_scope\":null,\"site_id\":\"4dae2017f05f306a77000003\",\"verb\":\"read\",\"icon\":\"play\",\"tool_tip\":\"<h1>Read more and earn rewards.</h1>\",\"hide_in_widgets\":false,\"enable_rate_limiting\":true,\"enable_count_limiting\":false,\"enable_site_notification\":null,\"enable_user_notification\":null,\"enable_auto_subscription\":null,\"description\":\"read\",\"credit_teams\":false},\"paging\":null}"
|
17
17
|
valid_activity_create: "{\"_id\":\"4f205620a7686573aa0003f2\",\"created_at\":\"2012-01-25T11:21:04-08:00\",\"definition_ids\":[],\"deleted_at\":null,\"internal\":false,\"player_id\":\"4f20561ea7686573bb0003e6\",\"points\":0,\"shard_id\":\"690d7a5709dd29851a4546744fc34d2a\",\"site_id\":\"4f20561ca7686573bb0003e2\",\"team_ids\":[],\"user_id\":\"4f20561da7686573bb0003e5\",\"verb\":\"cVjEEoViLttiyAYT\",\"rewards\":[],\"contents\":[]}"
|
18
|
-
valid_activity_find: "{\"data\":{\"_id\":\"
|
18
|
+
valid_activity_find: "{\"data\":{\"_id\":\"4db1e5587d39374ed1000005\",\"created_at\":\"2011-04-22T13:30:16-07:00\",\"definition_ids\":[],\"deleted_at\":null,\"email\":\"wedge@badgeville.com\",\"internal\":false,\"player_id\":\"4db1e5577d39374ed1000004\",\"player_type\":null,\"points\":0,\"shard_id\":\"abbc13a4921220eb4c6448fff41ca736\",\"site_id\":\"4db1dc977d39374c8d00000a\",\"src_player\":null,\"team_ids\":[],\"url\":\"http://support.badgeville.com/widgets/20012021/edit\",\"user_id\":\"4db1e5577d39374ed1000003\",\"verb\":\"visit\",\"rewards\":[{\"name\":\"First Visit Badge\",\"created_at\":\"2011-04-22T13:30:16-07:00\",\"activity_id\":\"4db1e5587d39374ed1000005\",\"id\":\"4db1e5587d39374ed1000006\",\"user_id\":\"4db1e5577d39374ed1000003\",\"site_id\":\"4db1dc977d39374c8d00000a\",\"player_id\":\"4db1e5577d39374ed1000004\",\"definition\":{\"type\":\"achievement\",\"name\":\"First Visit Badge\",\"created_at\":\"2011-04-22T13:14:09-07:00\",\"assignable\":false,\"allow_duplicates\":false,\"components\":\"[{\\\"comparator\\\":{\\\"$gte\\\":1},\\\"command\\\":\\\"count\\\",\\\"where\\\":{\\\"verb\\\":\\\"visit\\\",\\\"player_id\\\":\\\"%player_id\\\"},\\\"config\\\":{}}]\",\"reward_template\":{\"message\":\"You've unlocked the first visit badge!\"},\"tags\":null,\"site_id\":\"4db1dc977d39374c8d00000a\",\"image_url\":\"//s3.amazonaws.com/badgeville-development-reward-definitions/images/4db1e1917d39374ed1000001/original.png?1303503248\",\"image_file_name\":\"Visits1.png\",\"data\":{\"verb\":\"visit\",\"threshold\":1},\"_id\":\"4db1e1917d39374ed1000001\",\"id\":\"4db1e1917d39374ed1000001\",\"active\":true,\"hint\":\"\",\"message\":\"You've unlocked the first visit badge!\",\"adjustment\":{},\"active_start_at\":null,\"active_end_at\":null,\"performed_by\":null,\"reward_team_members\":false},\"image\":\"http://s3.amazonaws.com/badgeville-development-reward-definitions/images/4db1e1917d39374ed1000001/original.png?1303503248\",\"tags\":[],\"status\":null,\"message\":\"You've unlocked the first visit badge!\",\"history\":{\"toast\":{\"4db1e5577d39374ed1000004\":\"2011-07-20T23:02:25Z\"},\"facebook\":null,\"twitter\":null,\"email\":null},\"next_reward_id\":null}],\"contents\":[],\"id\":\"4db1e5587d39374ed1000005\"},\"paging\":null}"
|
19
19
|
valid_track_create: "{\"id\":\"4f205620a7686573aa0003f3\",\"label\":\"KAPPuWMooBMFAyAl\",\"type\":\"Track\",\"image_url\":null,\"hint\":null,\"missionList\":[],\"nextMission\":null}"
|
20
20
|
valid_track_find: "{\"data\":{\"id\":\"4f205620a7686573aa0003f3\",\"label\":\"KAPPuWMooBMFAyAl\",\"type\":\"Track\",\"image_url\":null,\"hint\":null,\"missionList\":[],\"nextMission\":null},\"paging\":null}"
|
21
21
|
valid_site_update: "{}"
|
@@ -34,3 +34,4 @@ valid_player_delete: "{}"
|
|
34
34
|
valid_user_delete: "{}"
|
35
35
|
valid_group_delete: "{}"
|
36
36
|
valid_site_delete: "{}"
|
37
|
+
valid_group_all: "{\"id\":\"4df7be31888bae50c2000003\",\"name\":\"Comments\",\"type\":\"ladder\",\"image_url\":null,\"tip\":\"\",\"message\":\"\",\"privileges\":null,\"note\":\"\",\"display_priority\":1,\"reward_definitions\":[{\"type\":\"achievement\",\"name\":\"1st Comment\",\"created_at\":\"2011-06-14T12:44:05-07:00\",\"assignable\":false,\"allow_duplicates\":false,\"components\":\"[{\\\"comparator\\\":{\\\"$gte\\\":1},\\\"command\\\":\\\"count\\\",\\\"where\\\":{\\\"verb\\\":\\\"comment\\\",\\\"player_id\\\":\\\"%player_id\\\"},\\\"config\\\":{}}]\",\"reward_template\":{\"message\":\"You've left your first comment!\"},\"tags\":null,\"site_id\":\"4df7b2f2888bae446200001d\",\"image_url\":\"http://s3.amazonaws.com/badgeville-staging-reward-definitions/images/4df7ba05888bae4a20000009/original.png?1308080644\",\"image_file_name\":\"comments_1.png\",\"data\":{\"verb\":\"comment\",\"threshold\":1},\"_id\":\"4df7ba05888bae4a20000009\",\"id\":\"4df7ba05888bae4a20000009\",\"active\":true,\"hint\":\"Leave a comment.\",\"message\":\"You've left your first comment!\",\"adjustment\":{},\"active_start_at\":null,\"active_end_at\":null,\"performed_by\":null,\"reward_team_members\":false},{\"type\":\"achievement\",\"name\":\"5th Comment\",\"created_at\":\"2011-06-14T12:44:31-07:00\",\"assignable\":false,\"allow_duplicates\":false,\"components\":\"[{\\\"comparator\\\":{\\\"$gte\\\":5},\\\"command\\\":\\\"count\\\",\\\"where\\\":{\\\"verb\\\":\\\"comment\\\",\\\"player_id\\\":\\\"%player_id\\\"},\\\"config\\\":{}}]\",\"reward_template\":{\"message\":\"You've left your 5th comment!\"},\"tags\":null,\"site_id\":\"4df7b2f2888bae446200001d\",\"image_url\":\"http://s3.amazonaws.com/badgeville-staging-reward-definitions/images/4df7ba1f888bae4a2000000c/original.png?1308080671\",\"image_file_name\":\"comments_5.png\",\"data\":{\"verb\":\"comment\",\"threshold\":5},\"_id\":\"4df7ba1f888bae4a2000000c\",\"id\":\"4df7ba1f888bae4a2000000c\",\"active\":true,\"hint\":\"Leave 5 comments\",\"message\":\"You've left your 5th comment!\",\"adjustment\":{},\"active_start_at\":null,\"active_end_at\":null,\"performed_by\":null,\"reward_team_members\":false},{\"type\":\"achievement\",\"name\":\"10th Comment\",\"created_at\":\"2011-06-14T12:44:58-07:00\",\"assignable\":false,\"allow_duplicates\":false,\"components\":\"[{\\\"comparator\\\":{\\\"$gte\\\":10},\\\"command\\\":\\\"count\\\",\\\"where\\\":{\\\"verb\\\":\\\"comment\\\",\\\"player_id\\\":\\\"%player_id\\\"},\\\"config\\\":{}}]\",\"reward_template\":{\"message\":\"You've left 10 comments!\"},\"tags\":null,\"site_id\":\"4df7b2f2888bae446200001d\",\"image_url\":\"http://s3.amazonaws.com/badgeville-staging-reward-definitions/images/4df7ba3a888bae4a2000000e/original.png?1308080698\",\"image_file_name\":\"comments_10.png\",\"data\":{\"verb\":\"comment\",\"threshold\":10},\"_id\":\"4df7ba3a888bae4a2000000e\",\"id\":\"4df7ba3a888bae4a2000000e\",\"active\":true,\"hint\":\"Leave 10 comments.\",\"message\":\"You've left 10 comments!\",\"adjustment\":{},\"active_start_at\":null,\"active_end_at\":null,\"performed_by\":null,\"reward_team_members\":false},{\"type\":\"achievement\",\"name\":\"25th Comment\",\"created_at\":\"2011-06-14T12:46:07-07:00\",\"assignable\":false,\"allow_duplicates\":false,\"components\":\"[{\\\"comparator\\\":{\\\"$gte\\\":25},\\\"command\\\":\\\"count\\\",\\\"where\\\":{\\\"verb\\\":\\\"comment\\\",\\\"player_id\\\":\\\"%player_id\\\"},\\\"config\\\":{}}]\",\"reward_template\":{\"message\":\"You've left 25 comments!\"},\"tags\":null,\"site_id\":\"4df7b2f2888bae446200001d\",\"image_url\":\"http://s3.amazonaws.com/badgeville-staging-reward-definitions/images/4df7ba7f888bae4d6a000001/original.png?1308080766\",\"image_file_name\":\"comments_25.png\",\"data\":{\"verb\":\"comment\",\"threshold\":25},\"_id\":\"4df7ba7f888bae4d6a000001\",\"id\":\"4df7ba7f888bae4d6a000001\",\"active\":true,\"hint\":\"Leave 25 comments.\",\"message\":\"You've left 25 comments!\",\"adjustment\":{},\"active_start_at\":null,\"active_end_at\":null,\"performed_by\":null,\"reward_team_members\":false},{\"type\":\"achievement\",\"name\":\"50th Comment\",\"created_at\":\"2011-06-14T12:47:44-07:00\",\"assignable\":false,\"allow_duplicates\":false,\"components\":\"[{\\\"comparator\\\":{\\\"$gte\\\":50},\\\"command\\\":\\\"count\\\",\\\"where\\\":{\\\"verb\\\":\\\"comment\\\",\\\"player_id\\\":\\\"%player_id\\\"},\\\"config\\\":{}}]\",\"reward_template\":{\"message\":\"You've left A LOT of comments!\"},\"tags\":null,\"site_id\":\"4df7b2f2888bae446200001d\",\"image_url\":\"http://s3.amazonaws.com/badgeville-staging-reward-definitions/images/4df7bae0888bae4d6a000007/original.png?1308080864\",\"image_file_name\":\"comments_50.png\",\"data\":{\"verb\":\"comment\",\"threshold\":50},\"_id\":\"4df7bae0888bae4d6a000007\",\"id\":\"4df7bae0888bae4d6a000007\",\"active\":true,\"hint\":\"Leave 50 comments.\",\"message\":\"You've left A LOT of comments!\",\"adjustment\":{},\"active_start_at\":null,\"active_end_at\":null,\"performed_by\":null,\"reward_team_members\":false}],\"reward_image_url\":null,\"track_member\":true,\"adjustment\":{},\"units_possible\":{},\"progress\":{\"percent\":40,\"earned\":2,\"possible\":5},\"last_reward\":{\"name\":\"5th Comment\",\"created_at\":\"2011-11-02T16:41:24-07:00\",\"activity_id\":\"4eb1d524a7686531a6000377\",\"id\":\"4eb1d524a7686531a6000379\",\"user_id\":\"4eb1d507a7686531a6000363\",\"site_id\":\"4df7b2f2888bae446200001d\",\"player_id\":\"4eb1d507a7686531a6000364\",\"definition\":{\"type\":\"achievement\",\"name\":\"5th Comment\",\"created_at\":\"2011-06-14T12:44:31-07:00\",\"assignable\":false,\"allow_duplicates\":false,\"components\":\"[{\\\"comparator\\\":{\\\"$gte\\\":5},\\\"command\\\":\\\"count\\\",\\\"where\\\":{\\\"verb\\\":\\\"comment\\\",\\\"player_id\\\":\\\"%player_id\\\"},\\\"config\\\":{}}]\",\"reward_template\":{\"message\":\"You've left your 5th comment!\"},\"tags\":null,\"site_id\":\"4df7b2f2888bae446200001d\",\"image_url\":\"http://s3.amazonaws.com/badgeville-staging-reward-definitions/images/4df7ba1f888bae4a2000000c/original.png?1308080671\",\"image_file_name\":\"comments_5.png\",\"data\":{\"verb\":\"comment\",\"threshold\":5},\"_id\":\"4df7ba1f888bae4a2000000c\",\"id\":\"4df7ba1f888bae4a2000000c\",\"active\":true,\"hint\":\"Leave 5 comments\",\"message\":\"You've left your 5th comment!\",\"adjustment\":{},\"active_start_at\":null,\"active_end_at\":null,\"performed_by\":null,\"reward_team_members\":false},\"image\":\"http://s3.amazonaws.com/badgeville-staging-reward-definitions/images/4df7ba1f888bae4a2000000c/original.png?1308080671\",\"tags\":[],\"status\":null,\"message\":\"You've left your 5th comment!\",\"history\":{\"toast\":{\"4eb1d507a7686531a6000364\":\"2011-11-02T23:41:25Z\"},\"facebook\":null,\"twitter\":null,\"email\":null},\"next_reward_id\":null},\"earned\":0,\"rewards\":{\"4df7ba05888bae4a20000009\":{\"name\":\"1st Comment\",\"created_at\":\"2011-11-02T16:41:03-07:00\",\"activity_id\":\"4eb1d50ea76865319f0003a2\",\"id\":\"4eb1d50fa76865319f0003a6\",\"user_id\":\"4eb1d507a7686531a6000363\",\"site_id\":\"4df7b2f2888bae446200001d\",\"player_id\":\"4eb1d507a7686531a6000364\",\"definition\":{\"type\":\"achievement\",\"name\":\"1st Comment\",\"created_at\":\"2011-06-14T12:44:05-07:00\",\"assignable\":false,\"allow_duplicates\":false,\"components\":\"[{\\\"comparator\\\":{\\\"$gte\\\":1},\\\"command\\\":\\\"count\\\",\\\"where\\\":{\\\"verb\\\":\\\"comment\\\",\\\"player_id\\\":\\\"%player_id\\\"},\\\"config\\\":{}}]\",\"reward_template\":{\"message\":\"You've left your first comment!\"},\"tags\":null,\"site_id\":\"4df7b2f2888bae446200001d\",\"image_url\":\"http://s3.amazonaws.com/badgeville-staging-reward-definitions/images/4df7ba05888bae4a20000009/original.png?1308080644\",\"image_file_name\":\"comments_1.png\",\"data\":{\"verb\":\"comment\",\"threshold\":1},\"_id\":\"4df7ba05888bae4a20000009\",\"id\":\"4df7ba05888bae4a20000009\",\"active\":true,\"hint\":\"Leave a comment.\",\"message\":\"You've left your first comment!\",\"adjustment\":{},\"active_start_at\":null,\"active_end_at\":null,\"performed_by\":null,\"reward_team_members\":false},\"image\":\"http://s3.amazonaws.com/badgeville-staging-reward-definitions/images/4df7ba05888bae4a20000009/original.png?1308080644\",\"tags\":[],\"status\":null,\"message\":\"You've left your first comment!\",\"history\":{\"toast\":{\"4eb1d507a7686531a6000364\":\"2011-11-02T23:41:05Z\"},\"facebook\":null,\"twitter\":null,\"email\":null},\"next_reward_id\":null},\"4df7ba1f888bae4a2000000c\":{\"name\":\"5th Comment\",\"created_at\":\"2011-11-02T16:41:24-07:00\",\"activity_id\":\"4eb1d524a7686531a6000377\",\"id\":\"4eb1d524a7686531a6000379\",\"user_id\":\"4eb1d507a7686531a6000363\",\"site_id\":\"4df7b2f2888bae446200001d\",\"player_id\":\"4eb1d507a7686531a6000364\",\"definition\":{\"type\":\"achievement\",\"name\":\"5th Comment\",\"created_at\":\"2011-06-14T12:44:31-07:00\",\"assignable\":false,\"allow_duplicates\":false,\"components\":\"[{\\\"comparator\\\":{\\\"$gte\\\":5},\\\"command\\\":\\\"count\\\",\\\"where\\\":{\\\"verb\\\":\\\"comment\\\",\\\"player_id\\\":\\\"%player_id\\\"},\\\"config\\\":{}}]\",\"reward_template\":{\"message\":\"You've left your 5th comment!\"},\"tags\":null,\"site_id\":\"4df7b2f2888bae446200001d\",\"image_url\":\"http://s3.amazonaws.com/badgeville-staging-reward-definitions/images/4df7ba1f888bae4a2000000c/original.png?1308080671\",\"image_file_name\":\"comments_5.png\",\"data\":{\"verb\":\"comment\",\"threshold\":5},\"_id\":\"4df7ba1f888bae4a2000000c\",\"id\":\"4df7ba1f888bae4a2000000c\",\"active\":true,\"hint\":\"Leave 5 comments\",\"message\":\"You've left your 5th comment!\",\"adjustment\":{},\"active_start_at\":null,\"active_end_at\":null,\"performed_by\":null,\"reward_team_members\":false},\"image\":\"http://s3.amazonaws.com/badgeville-staging-reward-definitions/images/4df7ba1f888bae4a2000000c/original.png?1308080671\",\"tags\":[],\"status\":null,\"message\":\"You've left your 5th comment!\",\"history\":{\"toast\":{\"4eb1d507a7686531a6000364\":\"2011-11-02T23:41:25Z\"},\"facebook\":null,\"twitter\":null,\"email\":null},\"next_reward_id\":null}}}"
|
data/spec/spec_helper.rb
CHANGED
@@ -37,8 +37,7 @@ describe BadgevilleBerlinJsonFormat, ".decode" do
|
|
37
37
|
it "should return entire hash when there is an empty hash at root key 'data'" do
|
38
38
|
@json_record_data_empty =
|
39
39
|
"{\"data\":{}, \"name\":\"visitor_username\",\"created_at\":\"2012-01-05T10:43:42-08:00\",\"email\":\"revised_visitor@emailserver.com\",\"_id\":\"4f05ef5ea768651b3500009f\"}"
|
40
|
-
BadgevilleBerlinJsonFormat.decode(@json_record_data_empty).should ==
|
41
|
-
{"data"=>{}, "name"=>"visitor_username", "created_at"=>"2012-01-05T10:43:42-08:00", "email"=>"revised_visitor@emailserver.com", "_id"=>"4f05ef5ea768651b3500009f"}
|
40
|
+
BadgevilleBerlinJsonFormat.decode(@json_record_data_empty).should == {}
|
42
41
|
end
|
43
42
|
|
44
43
|
end
|
@@ -26,22 +26,26 @@ module BadgevilleBerlin
|
|
26
26
|
|
27
27
|
end
|
28
28
|
|
29
|
-
describe BaseResource, ".encode" do
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
29
|
+
#describe BaseResource, ".encode" do
|
30
|
+
# before do
|
31
|
+
# @mock_activity_definition = Factory.create(:activity_definition)
|
32
|
+
# @mock_activity_definition.selector = {:verb => "comment"}
|
33
|
+
# @mock_activity_definition.adjustment = {:points => 5 }
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
# context "BaseResource passes correct arguments to send method" do
|
37
|
+
# it "should call sanitize request and update record." do
|
38
|
+
# @mock_activity_definition.bucket_drain_rate = 180
|
39
|
+
# debugger
|
40
|
+
# @path = ENDPOINTKEY + "/activity_definitions/" + @mock_activity_definition._id + ".json"
|
41
|
+
# FakeWeb.allow_net_connect = false
|
42
|
+
#
|
43
|
+
# @mock_activity_definition.should_receive(:sanitize_request)
|
44
|
+
# @mock_http = MockHTTP.new(:put, @path, {:body => BadgevilleBerlin.response_json["valid_activity_definition_update"], :status => [200, "Ok"]})
|
45
|
+
# @mock_activity_definition.save()
|
46
|
+
# end
|
47
|
+
# end
|
48
|
+
#
|
49
|
+
#end
|
46
50
|
|
47
51
|
end
|
@@ -6,7 +6,7 @@ module BadgevilleBerlin
|
|
6
6
|
# Initializations
|
7
7
|
@rand1 = rand(5000)
|
8
8
|
@rand2 = rand(5000)
|
9
|
-
@my_network_id = '
|
9
|
+
@my_network_id = '<my_network_id>'
|
10
10
|
|
11
11
|
# Set FakeWeb to allow a real connection to the Badgeville server as
|
12
12
|
# configured in spec_helper.rb
|
@@ -57,17 +57,17 @@ module BadgevilleBerlin
|
|
57
57
|
# Advanced README: Create an activity definition to specify that a player will earn 4
|
58
58
|
# points each time they perform the "comment" behavior.
|
59
59
|
@new_activity_definition = ActivityDefinition.new(
|
60
|
-
:selector =>
|
60
|
+
:selector => {:verb => :comment},
|
61
61
|
:name => "A Cool Comment Behavior #{@rand1}",
|
62
62
|
:site_id => @new_site.id,
|
63
|
-
:adjustment =>
|
63
|
+
:adjustment => {:points => 3}
|
64
64
|
)
|
65
65
|
@new_activity_defn_created = @new_activity_definition.save
|
66
66
|
|
67
67
|
# Advanced README: Update the activity definition such that a player
|
68
68
|
# on your site will earn 3 points rather than 4 each time they
|
69
69
|
# perform the "comment" behavior.
|
70
|
-
@new_activity_definition.adjustment
|
70
|
+
@new_activity_definition.adjustment = {:points => 3}
|
71
71
|
@new_activity_defn_updated = @new_activity_definition.save
|
72
72
|
|
73
73
|
# Advanced README: Update the activity definition to include a rate
|
@@ -86,6 +86,13 @@ module BadgevilleBerlin
|
|
86
86
|
:active => true )
|
87
87
|
@new_reward_defn_created = @new_reward_defn.save
|
88
88
|
|
89
|
+
# Create a mission which includes this reward definition
|
90
|
+
@new_group = Group.new(
|
91
|
+
:site_id => @new_site.id,
|
92
|
+
:name => 'Comment Rockstar Mission'
|
93
|
+
)
|
94
|
+
@new_group_created = @new_group.save
|
95
|
+
|
89
96
|
# Advanced README: Register a player behavior (e.g. comment) for an
|
90
97
|
# existing player.
|
91
98
|
@comment_activity = Activity.new(
|
@@ -194,7 +201,8 @@ module BadgevilleBerlin
|
|
194
201
|
|
195
202
|
it "should have updated the activity definition points for comment", :affects_bv_server => true do
|
196
203
|
@updated_activity_definition = ActivityDefinition.find(@new_activity_definition.id)
|
197
|
-
@updated_activity_definition.adjustment.
|
204
|
+
@updated_activity_definition.adjustment.should == {"points" => { "definition" => 3}}
|
205
|
+
@updated_activity_definition.selector.should == {"verb" => "comment"}
|
198
206
|
end
|
199
207
|
|
200
208
|
# UPDATE ActivityDefinition (rate-limiting)
|
@@ -215,6 +223,12 @@ module BadgevilleBerlin
|
|
215
223
|
Player.find(@new_player.id).display_name.should == "Elite Player"
|
216
224
|
end
|
217
225
|
|
226
|
+
it "should update picture_url on the player object", :affects_bv_server => true do
|
227
|
+
@new_player.picture_url = "http://i.imgur.com/OsbzX.png"
|
228
|
+
@new_player.save
|
229
|
+
Player.find(@new_player.id).picture_url.should == "http://i.imgur.com/OsbzX.png"
|
230
|
+
end
|
231
|
+
|
218
232
|
# UPDATE RewardDefinition
|
219
233
|
it "should update the reward definition with the name \"Comment Superstar\"", :affects_bv_server => true do
|
220
234
|
@new_reward_defn.name = "Comment Superstar"
|
@@ -224,9 +238,9 @@ module BadgevilleBerlin
|
|
224
238
|
|
225
239
|
#UPDATE Site
|
226
240
|
it "should update the site", :affects_bv_server => true do
|
227
|
-
@new_site.name = "New Site Name"
|
241
|
+
@new_site.name = "New Site Name #{rand(5000)}"
|
228
242
|
@new_site.save
|
229
|
-
Site.find(@new_site.id).name.should ==
|
243
|
+
Site.find(@new_site.id).name.should == @new_site.name
|
230
244
|
end
|
231
245
|
|
232
246
|
# DELETE RewardDefinition
|
@@ -258,5 +272,15 @@ module BadgevilleBerlin
|
|
258
272
|
Site.delete(@new_site.id)
|
259
273
|
lambda { Site.find(@new_site.id) }.should raise_error(ActiveResource::ResourceNotFound)
|
260
274
|
end
|
275
|
+
|
276
|
+
#FIND Group
|
277
|
+
# Not integration test!
|
278
|
+
it "should parse correctly a group index call which includes rewards keyed under reward definitions", :affects_bv_server => true do
|
279
|
+
BadgevilleBerlinJsonFormat.stub!(:decode).and_return([JSON.parse(BadgevilleBerlin.response_json["valid_group_all"])])
|
280
|
+
response = Group.all
|
281
|
+
#(params: {site: @new_site.url, per_page: 50, player_id: @new_player.id.to_s})
|
282
|
+
response.first.rewards.count.should == 2
|
283
|
+
end
|
284
|
+
|
261
285
|
end
|
262
286
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: badgeville_berlin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,11 +12,11 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2012-
|
15
|
+
date: 2012-09-08 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: ruby-debug19
|
19
|
-
requirement:
|
19
|
+
requirement: !ruby/object:Gem::Requirement
|
20
20
|
none: false
|
21
21
|
requirements:
|
22
22
|
- - ! '>='
|
@@ -24,10 +24,15 @@ dependencies:
|
|
24
24
|
version: '0'
|
25
25
|
type: :development
|
26
26
|
prerelease: false
|
27
|
-
version_requirements:
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
28
33
|
- !ruby/object:Gem::Dependency
|
29
34
|
name: rake
|
30
|
-
requirement:
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
31
36
|
none: false
|
32
37
|
requirements:
|
33
38
|
- - ! '>='
|
@@ -35,10 +40,15 @@ dependencies:
|
|
35
40
|
version: '0'
|
36
41
|
type: :development
|
37
42
|
prerelease: false
|
38
|
-
version_requirements:
|
43
|
+
version_requirements: !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
45
|
+
requirements:
|
46
|
+
- - ! '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
39
49
|
- !ruby/object:Gem::Dependency
|
40
50
|
name: rspec
|
41
|
-
requirement:
|
51
|
+
requirement: !ruby/object:Gem::Requirement
|
42
52
|
none: false
|
43
53
|
requirements:
|
44
54
|
- - ! '>='
|
@@ -46,10 +56,15 @@ dependencies:
|
|
46
56
|
version: '0'
|
47
57
|
type: :development
|
48
58
|
prerelease: false
|
49
|
-
version_requirements:
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ! '>='
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
50
65
|
- !ruby/object:Gem::Dependency
|
51
66
|
name: fakeweb
|
52
|
-
requirement:
|
67
|
+
requirement: !ruby/object:Gem::Requirement
|
53
68
|
none: false
|
54
69
|
requirements:
|
55
70
|
- - ! '>='
|
@@ -57,21 +72,31 @@ dependencies:
|
|
57
72
|
version: '0'
|
58
73
|
type: :development
|
59
74
|
prerelease: false
|
60
|
-
version_requirements:
|
75
|
+
version_requirements: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ! '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
61
81
|
- !ruby/object:Gem::Dependency
|
62
82
|
name: factory_girl
|
63
|
-
requirement:
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
64
84
|
none: false
|
65
85
|
requirements:
|
66
|
-
- - =
|
86
|
+
- - '='
|
67
87
|
- !ruby/object:Gem::Version
|
68
88
|
version: 2.4.0
|
69
89
|
type: :development
|
70
90
|
prerelease: false
|
71
|
-
version_requirements:
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
93
|
+
requirements:
|
94
|
+
- - '='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 2.4.0
|
72
97
|
- !ruby/object:Gem::Dependency
|
73
98
|
name: ZenTest
|
74
|
-
requirement:
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
75
100
|
none: false
|
76
101
|
requirements:
|
77
102
|
- - ! '>='
|
@@ -79,10 +104,15 @@ dependencies:
|
|
79
104
|
version: '0'
|
80
105
|
type: :development
|
81
106
|
prerelease: false
|
82
|
-
version_requirements:
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
109
|
+
requirements:
|
110
|
+
- - ! '>='
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
83
113
|
- !ruby/object:Gem::Dependency
|
84
114
|
name: autotest
|
85
|
-
requirement:
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
86
116
|
none: false
|
87
117
|
requirements:
|
88
118
|
- - ! '>='
|
@@ -90,10 +120,15 @@ dependencies:
|
|
90
120
|
version: '0'
|
91
121
|
type: :development
|
92
122
|
prerelease: false
|
93
|
-
version_requirements:
|
123
|
+
version_requirements: !ruby/object:Gem::Requirement
|
124
|
+
none: false
|
125
|
+
requirements:
|
126
|
+
- - ! '>='
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0'
|
94
129
|
- !ruby/object:Gem::Dependency
|
95
130
|
name: autotest-growl
|
96
|
-
requirement:
|
131
|
+
requirement: !ruby/object:Gem::Requirement
|
97
132
|
none: false
|
98
133
|
requirements:
|
99
134
|
- - ! '>='
|
@@ -101,10 +136,15 @@ dependencies:
|
|
101
136
|
version: '0'
|
102
137
|
type: :development
|
103
138
|
prerelease: false
|
104
|
-
version_requirements:
|
139
|
+
version_requirements: !ruby/object:Gem::Requirement
|
140
|
+
none: false
|
141
|
+
requirements:
|
142
|
+
- - ! '>='
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
105
145
|
- !ruby/object:Gem::Dependency
|
106
146
|
name: logger
|
107
|
-
requirement:
|
147
|
+
requirement: !ruby/object:Gem::Requirement
|
108
148
|
none: false
|
109
149
|
requirements:
|
110
150
|
- - ! '>='
|
@@ -112,18 +152,28 @@ dependencies:
|
|
112
152
|
version: 1.2.8
|
113
153
|
type: :development
|
114
154
|
prerelease: false
|
115
|
-
version_requirements:
|
155
|
+
version_requirements: !ruby/object:Gem::Requirement
|
156
|
+
none: false
|
157
|
+
requirements:
|
158
|
+
- - ! '>='
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: 1.2.8
|
116
161
|
- !ruby/object:Gem::Dependency
|
117
162
|
name: activeresource
|
118
|
-
requirement:
|
163
|
+
requirement: !ruby/object:Gem::Requirement
|
119
164
|
none: false
|
120
165
|
requirements:
|
121
|
-
- -
|
166
|
+
- - ! '>='
|
122
167
|
- !ruby/object:Gem::Version
|
123
168
|
version: 3.1.3
|
124
169
|
type: :runtime
|
125
170
|
prerelease: false
|
126
|
-
version_requirements:
|
171
|
+
version_requirements: !ruby/object:Gem::Requirement
|
172
|
+
none: false
|
173
|
+
requirements:
|
174
|
+
- - ! '>='
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: 3.1.3
|
127
177
|
description: This is an open source Ruby wrapper for interacting with the Badgeville
|
128
178
|
RESTful Berlin API.
|
129
179
|
email:
|
@@ -265,7 +315,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
265
315
|
version: '0'
|
266
316
|
requirements: []
|
267
317
|
rubyforge_project: badgeville_berlin
|
268
|
-
rubygems_version: 1.8.
|
318
|
+
rubygems_version: 1.8.24
|
269
319
|
signing_key:
|
270
320
|
specification_version: 3
|
271
321
|
summary: A Ruby wrapper for the Badgeville RESTful Berlin API.
|