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 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: