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 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
@@ -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
- iactionable_api.log_event( event_params[event_name_sym][:profile][:type],
20
- event_params[event_name_sym][:profile][:id_type],
21
- event_params[event_name_sym][:profile][:id],
22
- event_name_sym,
23
- event_params[event_name_sym][:params])
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
@@ -1,3 +1,3 @@
1
1
  module Riaction
2
- VERSION = "1.3.3"
2
+ VERSION = "1.3.4"
3
3
  end
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.0"
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.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-04-26 00:00:00.000000000Z
14
+ date: 2012-05-03 00:00:00.000000000Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rspec
18
- requirement: &2152390720 !ruby/object:Gem::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: *2152390720
26
+ version_requirements: *2156249940
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: sqlite3
29
- requirement: &2152389660 !ruby/object:Gem::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: *2152389660
37
+ version_requirements: *2156249240
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: ruby-debug19
40
- requirement: &2152388620 !ruby/object:Gem::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: *2152388620
48
+ version_requirements: *2156248380
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: yard
51
- requirement: &2152387840 !ruby/object:Gem::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: *2152387840
59
+ version_requirements: *2156247540
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: redcarpet
62
- requirement: &2152386820 !ruby/object:Gem::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: *2152386820
70
+ version_requirements: *2156246220
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: rake
73
- requirement: &2152386020 !ruby/object:Gem::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: *2152386020
81
+ version_requirements: *2156244600
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: activerecord
84
- requirement: &2152384740 !ruby/object:Gem::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: *2152384740
92
+ version_requirements: *2156243000
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: activesupport
95
- requirement: &2152383340 !ruby/object:Gem::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: *2152383340
103
+ version_requirements: *2156241380
104
104
  - !ruby/object:Gem::Dependency
105
105
  name: resque
106
- requirement: &2152382840 !ruby/object:Gem::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: *2152382840
114
+ version_requirements: *2156240400
115
115
  - !ruby/object:Gem::Dependency
116
116
  name: ruby-iactionable
117
- requirement: &2152381880 !ruby/object:Gem::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.0
122
+ version: 0.1.1
123
123
  type: :runtime
124
124
  prerelease: false
125
- version_requirements: *2152381880
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: