gamifier 1.0.5 → 1.0.6

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.
@@ -131,4 +131,4 @@ module Gamifier
131
131
  end
132
132
  end
133
133
  end
134
- end
134
+ end
@@ -67,7 +67,7 @@ module Gamifier
67
67
  def uri_to(path = "")
68
68
  URI.join(File.join(::Gamifier.config[:uri], ::Gamifier.config[:key], ""), path)
69
69
  end
70
-
70
+
71
71
  MODELS.each do |model|
72
72
  underscored = Gamifier.underscore(model)
73
73
  require "gamifier/models/#{underscored}"
@@ -13,8 +13,12 @@ module Gamifier
13
13
 
14
14
  def attributes; @table.dup; end
15
15
 
16
- def save
17
- new? ? create : update
16
+ def save(options = {})
17
+ if new?
18
+ options.has_key?(:async) ? async_create : create
19
+ else
20
+ update
21
+ end
18
22
  end
19
23
 
20
24
  # Allow to update only the specific attributes given in the +opts+ Hash.
@@ -148,7 +152,7 @@ module Gamifier
148
152
  response
149
153
  end
150
154
  end
151
-
155
+
152
156
  def map_to_models(response)
153
157
  response['data'].map{|h| build(h)}
154
158
  end
@@ -207,6 +211,11 @@ module Gamifier
207
211
  replace_if_successful(res)
208
212
  end
209
213
 
214
+ def async_create
215
+ res = engine.transmit :post, 'activities/async_create', :body => payload_for_submission
216
+ replace_if_successful(res)
217
+ end
218
+
210
219
  def update(opts = {})
211
220
  res = engine.transmit :put, path, :body => payload_for_submission(opts)
212
221
  replace_if_successful(res)
@@ -2,5 +2,15 @@ require 'gamifier/model'
2
2
 
3
3
  module Gamifier
4
4
  class ActivityDefinition < Model
5
+ def limit_per_day(times_per_day)
6
+ self.enable_rate_limiting = true
7
+ self.bucket_max_capacity = times_per_day
8
+ self.bucket_drain_rate = times_per_day/24.0
9
+ end
10
+
11
+ def limit_once_per_day
12
+ limit_per_day 1
13
+ end
14
+
5
15
  end
6
16
  end
@@ -7,22 +7,22 @@ module Gamifier
7
7
  mutable_attributes :first_name, :last_name, :nickname, :display_name, :picture_url, :admin
8
8
 
9
9
  module FinderMethods
10
-
10
+
11
11
  def find_by_site_and_email(site, email, params = {})
12
12
  res = engine.transmit(:get, path, :query => params.merge({:site => site, :email => email}))
13
13
  select_first_entry_if_any(res)
14
14
  end
15
-
16
- def find_by_player_id(player_id, params = {})
15
+
16
+ def find_by_player_id(player_id, params = {})
17
17
  res = engine.transmit(:get, [path, player_id].join('/'))
18
18
  select_first_entry_if_any(res)
19
19
  end
20
-
20
+
21
21
  end
22
22
 
23
- def credit(verb, metadata = {})
24
- engine.activities.build(metadata.merge({:player_id => _id, :verb => verb})).save
23
+ def credit(verb, metadata = {}, options = {})
24
+ engine.activities.build(metadata.merge({:player_id => _id, :verb => verb})).save(options)
25
25
  end
26
-
26
+
27
27
  end
28
- end
28
+ end
@@ -1,3 +1,3 @@
1
1
  module Gamifier
2
- VERSION = "1.0.5" unless defined?(Gamifier::VERSION)
2
+ VERSION = "1.0.6" unless defined?(Gamifier::VERSION)
3
3
  end
data/lib/gamifier.rb CHANGED
@@ -73,4 +73,4 @@ module Gamifier
73
73
  end
74
74
 
75
75
  require 'gamifier/engine'
76
- require 'gamifier/dsl'
76
+ require 'gamifier/dsl'
@@ -102,7 +102,7 @@ describe Gamifier::Model do
102
102
  expect{ @model.update_attributes(:key => "value") }.to raise_error(Gamifier::Error)
103
103
  end
104
104
  end
105
-
105
+
106
106
  describe "#payload_for_submission" do
107
107
  it "should reject any attribute not in the list of the mutable_attributes (if any)" do
108
108
  @model.class.mutable_attributes :last_name
@@ -126,7 +126,7 @@ describe Gamifier::Model do
126
126
  end
127
127
 
128
128
  end
129
-
129
+
130
130
  describe "FinderMethods" do
131
131
  before do
132
132
  @engine = mock(Gamifier::Engine)
@@ -177,6 +177,6 @@ describe Gamifier::Model do
177
177
  entry.should be_nil
178
178
  end
179
179
  end
180
-
180
+
181
181
  end
182
- end
182
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Gamifier::Player do
4
+ before do
5
+ @engine = mock(Gamifier::Engine)
6
+ end
7
+ describe "limit_per_day" do
8
+ it "should set rate limits" do
9
+ a = Gamifier::ActivityDefinition.new
10
+
11
+ a.limit_per_day(1)
12
+ a.attributes.should include({:enable_rate_limiting => true, :bucket_max_capacity => 1})
13
+
14
+ end
15
+ end
16
+
17
+ describe "limit_once_per_day" do
18
+ it "should set rate limits" do
19
+ a = Gamifier::ActivityDefinition.new
20
+ a.should_receive(:limit_per_day).with(1)
21
+ a.limit_once_per_day
22
+ end
23
+ end
24
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gamifier
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 5
10
- version: 1.0.5
9
+ - 6
10
+ version: 1.0.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Cyril Rohr
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-09-19 00:00:00 Z
18
+ date: 2012-09-24 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: faraday
@@ -139,6 +139,7 @@ files:
139
139
  - spec/unit/engine_spec.rb
140
140
  - spec/unit/gamifier_spec.rb
141
141
  - spec/unit/model_spec.rb
142
+ - spec/unit/models/activity_definition_spec.rb
142
143
  - spec/unit/models/player_spec.rb
143
144
  homepage: ""
144
145
  licenses: []
@@ -187,4 +188,5 @@ test_files:
187
188
  - spec/unit/engine_spec.rb
188
189
  - spec/unit/gamifier_spec.rb
189
190
  - spec/unit/model_spec.rb
191
+ - spec/unit/models/activity_definition_spec.rb
190
192
  - spec/unit/models/player_spec.rb