riaction 1.3.3 → 1.3.4
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/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:
|