badgeville_berlin 0.1.1 → 1.0.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.
- 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.
|