riaction 1.3.3 → 1.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +4 -0
- data/lib/riaction/constants.rb +6 -0
- data/lib/riaction/event_performer.rb +20 -5
- data/lib/riaction/version.rb +1 -1
- data/riaction.gemspec +1 -1
- data/spec/event_performer_spec.rb +31 -0
- metadata +23 -23
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# CHANGELOG #
|
2
2
|
|
3
|
+
## 1.3.4 ##
|
4
|
+
|
5
|
+
* background logging of events will first check if the profile exists, and re-enqueue the job if it doesn't, up to a max number of retries, at which point it will log the event regardless.
|
6
|
+
|
3
7
|
## 1.3.3 ##
|
4
8
|
|
5
9
|
* fixed serious bug where object-wrapping of the API response was defaulting to false, instead of true
|
data/lib/riaction/constants.rb
CHANGED
@@ -9,6 +9,12 @@ module Riaction
|
|
9
9
|
def self.retry_attempts_for_internal_error
|
10
10
|
3
|
11
11
|
end
|
12
|
+
|
13
|
+
# sets the default number of attempts to retry to log an event when the profile is missing
|
14
|
+
# this is for when the logging of an event accidentally happens before, or too soon afterwards, the creation of a profile
|
15
|
+
def self.retry_attempts_for_missing_profile
|
16
|
+
4
|
17
|
+
end
|
12
18
|
|
13
19
|
# sets the valid supported identifiers
|
14
20
|
# @return returns an array of symbols
|
@@ -16,11 +16,26 @@ module Riaction
|
|
16
16
|
klass_name.constantize.riaction_events? &&
|
17
17
|
klass_name.constantize.riaction_defines_event?(event_name_sym) )
|
18
18
|
if event_params.has_key?(event_name_sym)
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
begin
|
20
|
+
iactionable_api.get_profile_summary(event_params[event_name_sym][:profile][:type],
|
21
|
+
event_params[event_name_sym][:profile][:id_type],
|
22
|
+
event_params[event_name_sym][:profile][:id])
|
23
|
+
iactionable_api.log_event( event_params[event_name_sym][:profile][:type],
|
24
|
+
event_params[event_name_sym][:profile][:id_type],
|
25
|
+
event_params[event_name_sym][:profile][:id],
|
26
|
+
event_name_sym,
|
27
|
+
event_params[event_name_sym][:params])
|
28
|
+
rescue IActionable::Error::BadRequest => e
|
29
|
+
if attempt < ::Riaction::Constants.retry_attempts_for_missing_profile
|
30
|
+
Resque.enqueue(self, event_name, klass_name, id, attempt+1)
|
31
|
+
else
|
32
|
+
iactionable_api.log_event( event_params[event_name_sym][:profile][:type],
|
33
|
+
event_params[event_name_sym][:profile][:id_type],
|
34
|
+
event_params[event_name_sym][:profile][:id],
|
35
|
+
event_name_sym,
|
36
|
+
event_params[event_name_sym][:params])
|
37
|
+
end
|
38
|
+
end
|
24
39
|
else
|
25
40
|
raise ::Riaction::ConfigurationError.new("Instance of #{klass_name} with ID #{id} could not construct event parameters for event #{event_name}. Is the profile a valid one?")
|
26
41
|
end
|
data/lib/riaction/version.rb
CHANGED
data/riaction.gemspec
CHANGED
@@ -29,5 +29,5 @@ Gem::Specification.new do |s|
|
|
29
29
|
s.add_runtime_dependency "activerecord", ">= 3.0.0"
|
30
30
|
s.add_runtime_dependency "activesupport", ">= 3.0.0"
|
31
31
|
s.add_runtime_dependency "resque"
|
32
|
-
s.add_runtime_dependency "ruby-iactionable", ">= 0.1.
|
32
|
+
s.add_runtime_dependency "ruby-iactionable", ">= 0.1.1"
|
33
33
|
end
|
@@ -31,6 +31,7 @@ describe "sending an event to IActionable from the name of a riaction class and
|
|
31
31
|
ActiveRecord::Base.connection.begin_db_transaction
|
32
32
|
|
33
33
|
@api = mock("mocked IActionable API")
|
34
|
+
@api.stub!(:get_profile_summary)
|
34
35
|
IActionable::Api.stub!(:new).and_return(@api)
|
35
36
|
Resque.stub(:enqueue).and_return true
|
36
37
|
|
@@ -92,6 +93,36 @@ describe "sending an event to IActionable from the name of a riaction class and
|
|
92
93
|
end
|
93
94
|
end
|
94
95
|
|
96
|
+
describe "when the profile attached to the event does not exist on IActionable" do
|
97
|
+
before do
|
98
|
+
Comment.class_eval do
|
99
|
+
riaction :event, :name => :make_a_comment, :trigger => :create, :profile => :user, :profile_type => :player
|
100
|
+
end
|
101
|
+
|
102
|
+
@comment = Comment.riactionless{ Comment.create(:user_id => @user.id, :content => 'this is a comment') }
|
103
|
+
|
104
|
+
@api.stub!(:get_profile_summary).and_raise(IActionable::Error::BadRequest.new(nil))
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should not log the event, but reschedule the job with an incremented attempt count" do
|
108
|
+
@api.should_not_receive(:log_event)
|
109
|
+
Resque.should_receive(:enqueue).once.with(Riaction::EventPerformer, :make_a_comment, 'Comment', @comment.id, 1)
|
110
|
+
::Riaction::EventPerformer.perform(:make_a_comment, 'Comment', @comment.id)
|
111
|
+
end
|
112
|
+
|
113
|
+
describe "and the number of attempts has reached the max" do
|
114
|
+
it "should log the event, and not re-enqueue" do
|
115
|
+
@api.should_receive(:log_event).once.with(@comment.riaction_event_params[:make_a_comment][:profile][:type],
|
116
|
+
@comment.riaction_event_params[:make_a_comment][:profile][:id_type],
|
117
|
+
@comment.riaction_event_params[:make_a_comment][:profile][:id],
|
118
|
+
:make_a_comment,
|
119
|
+
{})
|
120
|
+
Resque.should_not_receive(:enqueue)
|
121
|
+
::Riaction::EventPerformer.perform(:make_a_comment, 'Comment', @comment.id, Riaction::Constants.retry_attempts_for_missing_profile)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
95
126
|
describe "when fetching the event params raises a" do
|
96
127
|
before do
|
97
128
|
Comment.class_eval do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riaction
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-
|
14
|
+
date: 2012-05-03 00:00:00.000000000Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rspec
|
18
|
-
requirement: &
|
18
|
+
requirement: &2156249940 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
@@ -23,10 +23,10 @@ dependencies:
|
|
23
23
|
version: '2.8'
|
24
24
|
type: :development
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *2156249940
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: sqlite3
|
29
|
-
requirement: &
|
29
|
+
requirement: &2156249240 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - ! '>='
|
@@ -34,10 +34,10 @@ dependencies:
|
|
34
34
|
version: '0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *2156249240
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: ruby-debug19
|
40
|
-
requirement: &
|
40
|
+
requirement: &2156248380 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ! '>='
|
@@ -45,10 +45,10 @@ dependencies:
|
|
45
45
|
version: '0'
|
46
46
|
type: :development
|
47
47
|
prerelease: false
|
48
|
-
version_requirements: *
|
48
|
+
version_requirements: *2156248380
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: yard
|
51
|
-
requirement: &
|
51
|
+
requirement: &2156247540 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
53
53
|
requirements:
|
54
54
|
- - ! '>='
|
@@ -56,10 +56,10 @@ dependencies:
|
|
56
56
|
version: '0'
|
57
57
|
type: :development
|
58
58
|
prerelease: false
|
59
|
-
version_requirements: *
|
59
|
+
version_requirements: *2156247540
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: redcarpet
|
62
|
-
requirement: &
|
62
|
+
requirement: &2156246220 !ruby/object:Gem::Requirement
|
63
63
|
none: false
|
64
64
|
requirements:
|
65
65
|
- - ! '>='
|
@@ -67,10 +67,10 @@ dependencies:
|
|
67
67
|
version: '0'
|
68
68
|
type: :development
|
69
69
|
prerelease: false
|
70
|
-
version_requirements: *
|
70
|
+
version_requirements: *2156246220
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: rake
|
73
|
-
requirement: &
|
73
|
+
requirement: &2156244600 !ruby/object:Gem::Requirement
|
74
74
|
none: false
|
75
75
|
requirements:
|
76
76
|
- - ! '>='
|
@@ -78,10 +78,10 @@ dependencies:
|
|
78
78
|
version: '0'
|
79
79
|
type: :runtime
|
80
80
|
prerelease: false
|
81
|
-
version_requirements: *
|
81
|
+
version_requirements: *2156244600
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: activerecord
|
84
|
-
requirement: &
|
84
|
+
requirement: &2156243000 !ruby/object:Gem::Requirement
|
85
85
|
none: false
|
86
86
|
requirements:
|
87
87
|
- - ! '>='
|
@@ -89,10 +89,10 @@ dependencies:
|
|
89
89
|
version: 3.0.0
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
|
-
version_requirements: *
|
92
|
+
version_requirements: *2156243000
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
94
|
name: activesupport
|
95
|
-
requirement: &
|
95
|
+
requirement: &2156241380 !ruby/object:Gem::Requirement
|
96
96
|
none: false
|
97
97
|
requirements:
|
98
98
|
- - ! '>='
|
@@ -100,10 +100,10 @@ dependencies:
|
|
100
100
|
version: 3.0.0
|
101
101
|
type: :runtime
|
102
102
|
prerelease: false
|
103
|
-
version_requirements: *
|
103
|
+
version_requirements: *2156241380
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: resque
|
106
|
-
requirement: &
|
106
|
+
requirement: &2156240400 !ruby/object:Gem::Requirement
|
107
107
|
none: false
|
108
108
|
requirements:
|
109
109
|
- - ! '>='
|
@@ -111,18 +111,18 @@ dependencies:
|
|
111
111
|
version: '0'
|
112
112
|
type: :runtime
|
113
113
|
prerelease: false
|
114
|
-
version_requirements: *
|
114
|
+
version_requirements: *2156240400
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
116
|
name: ruby-iactionable
|
117
|
-
requirement: &
|
117
|
+
requirement: &2156238780 !ruby/object:Gem::Requirement
|
118
118
|
none: false
|
119
119
|
requirements:
|
120
120
|
- - ! '>='
|
121
121
|
- !ruby/object:Gem::Version
|
122
|
-
version: 0.1.
|
122
|
+
version: 0.1.1
|
123
123
|
type: :runtime
|
124
124
|
prerelease: false
|
125
|
-
version_requirements: *
|
125
|
+
version_requirements: *2156238780
|
126
126
|
description: Wrapper for IActionable's restful API and an "acts-as" style interface
|
127
127
|
for models to behave as profiles and drive game events.
|
128
128
|
email:
|