riaction 1.2.6 → 1.2.7

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.
Files changed (51) hide show
  1. data/.yardoc/checksums +11 -0
  2. data/.yardoc/objects/root.dat +0 -0
  3. data/.yardoc/proxy_types +0 -0
  4. data/CHANGELOG.md +5 -0
  5. data/Gemfile.lock +12 -8
  6. data/README.md +6 -1
  7. data/db/riaction.db +0 -0
  8. data/doc/Riaction/ConfigurationError.html +116 -0
  9. data/doc/Riaction/Constants.html +389 -0
  10. data/doc/Riaction/CrudEventCallback.html +402 -0
  11. data/doc/Riaction/EventPerformer.html +250 -0
  12. data/doc/Riaction/NoEventDefined.html +116 -0
  13. data/doc/Riaction/NoProfileDefined.html +116 -0
  14. data/doc/Riaction/ProfileCreationCallback.html +192 -0
  15. data/doc/Riaction/ProfileCreator.html +235 -0
  16. data/doc/Riaction/Railtie.html +116 -0
  17. data/doc/Riaction/Riaction/ClassMethods.html +837 -0
  18. data/doc/Riaction/Riaction/Event/InstanceMethods.html +301 -0
  19. data/doc/Riaction/Riaction/Event.html +108 -0
  20. data/doc/Riaction/Riaction/InstanceMethods.html +198 -0
  21. data/doc/Riaction/Riaction/Profile/InstanceMethods.html +746 -0
  22. data/doc/Riaction/Riaction/Profile.html +108 -0
  23. data/doc/Riaction/Riaction.html +125 -0
  24. data/doc/Riaction/RuntimeError.html +116 -0
  25. data/doc/Riaction.html +124 -0
  26. data/doc/RiactionGenerator.html +188 -0
  27. data/doc/_index.html +263 -0
  28. data/doc/class_list.html +47 -0
  29. data/doc/css/common.css +1 -0
  30. data/doc/css/full_list.css +55 -0
  31. data/doc/css/style.css +322 -0
  32. data/doc/file.README.html +304 -0
  33. data/doc/file_list.html +49 -0
  34. data/doc/frames.html +13 -0
  35. data/doc/index.html +304 -0
  36. data/doc/js/app.js +205 -0
  37. data/doc/js/full_list.js +173 -0
  38. data/doc/js/jquery.js +16 -0
  39. data/doc/method_list.html +294 -0
  40. data/doc/top-level-namespace.html +107 -0
  41. data/lib/riaction/constants.rb +6 -2
  42. data/lib/riaction/crud_event_callback.rb +3 -0
  43. data/lib/riaction/event_performer.rb +10 -5
  44. data/lib/riaction/profile_creation_callback.rb +2 -0
  45. data/lib/riaction/riaction.rb +11 -7
  46. data/lib/riaction/version.rb +1 -1
  47. data/lib/tasks/riaction.rake +25 -22
  48. data/riaction.gemspec +4 -2
  49. data/spec/event_performer_spec.rb +23 -0
  50. data/spec/riaction_spec.rb +33 -4
  51. metadata +79 -19
@@ -0,0 +1,294 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html>
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+
7
+ <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
8
+
9
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
10
+
11
+
12
+
13
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
14
+
15
+ <script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
16
+
17
+
18
+ <base id="base_target" target="_parent" />
19
+ </head>
20
+ <body>
21
+ <script type="text/javascript" charset="utf-8">
22
+ if (window.top.frames.main) {
23
+ document.getElementById('base_target').target = 'main';
24
+ document.body.className = 'frames';
25
+ }
26
+ </script>
27
+ <div id="content">
28
+ <h1 id="full_list_header">Method List</h1>
29
+ <div id="nav">
30
+
31
+ <a target="_self" href="class_list.html">Classes</a>
32
+
33
+ <a target="_self" href="method_list.html">Methods</a>
34
+
35
+ <a target="_self" href="file_list.html">Files</a>
36
+
37
+ </div>
38
+ <div id="search">Search: <input type="text" /></div>
39
+
40
+ <ul id="full_list" class="methods">
41
+
42
+
43
+ <li class="r1 ">
44
+ <span class='object_link'><a href="Riaction/ProfileCreationCallback.html#after_create-instance_method" title="Riaction::ProfileCreationCallback#after_create (method)">#after_create</a></span>
45
+
46
+ <small>Riaction::ProfileCreationCallback</small>
47
+
48
+ </li>
49
+
50
+
51
+ <li class="r2 ">
52
+ <span class='object_link'><a href="Riaction/CrudEventCallback.html#after_create-instance_method" title="Riaction::CrudEventCallback#after_create (method)">#after_create</a></span>
53
+
54
+ <small>Riaction::CrudEventCallback</small>
55
+
56
+ </li>
57
+
58
+
59
+ <li class="r1 ">
60
+ <span class='object_link'><a href="Riaction/CrudEventCallback.html#after_destroy-instance_method" title="Riaction::CrudEventCallback#after_destroy (method)">#after_destroy</a></span>
61
+
62
+ <small>Riaction::CrudEventCallback</small>
63
+
64
+ </li>
65
+
66
+
67
+ <li class="r2 ">
68
+ <span class='object_link'><a href="Riaction/CrudEventCallback.html#after_update-instance_method" title="Riaction::CrudEventCallback#after_update (method)">#after_update</a></span>
69
+
70
+ <small>Riaction::CrudEventCallback</small>
71
+
72
+ </li>
73
+
74
+
75
+ <li class="r1 ">
76
+ <span class='object_link'><a href="RiactionGenerator.html#create_credentials_file-instance_method" title="RiactionGenerator#create_credentials_file (method)">#create_credentials_file</a></span>
77
+
78
+ <small>RiactionGenerator</small>
79
+
80
+ </li>
81
+
82
+
83
+ <li class="r2 ">
84
+ <span class='object_link'><a href="Riaction/Constants.html#crud_actions-class_method" title="Riaction::Constants.crud_actions (method)">crud_actions</a></span>
85
+
86
+ <small>Riaction::Constants</small>
87
+
88
+ </li>
89
+
90
+
91
+ <li class="r1 ">
92
+ <span class='object_link'><a href="Riaction/Riaction/ClassMethods.html#establish_riactionary_class-instance_method" title="Riaction::Riaction::ClassMethods#establish_riactionary_class (method)">#establish_riactionary_class</a></span>
93
+
94
+ <small>Riaction::Riaction::ClassMethods</small>
95
+
96
+ </li>
97
+
98
+
99
+ <li class="r2 ">
100
+ <span class='object_link'><a href="Riaction/Riaction/ClassMethods.html#establish_riactionary_event_class-instance_method" title="Riaction::Riaction::ClassMethods#establish_riactionary_event_class (method)">#establish_riactionary_event_class</a></span>
101
+
102
+ <small>Riaction::Riaction::ClassMethods</small>
103
+
104
+ </li>
105
+
106
+
107
+ <li class="r1 ">
108
+ <span class='object_link'><a href="Riaction/Riaction/ClassMethods.html#establish_riactionary_profile_class-instance_method" title="Riaction::Riaction::ClassMethods#establish_riactionary_profile_class (method)">#establish_riactionary_profile_class</a></span>
109
+
110
+ <small>Riaction::Riaction::ClassMethods</small>
111
+
112
+ </li>
113
+
114
+
115
+ <li class="r2 ">
116
+ <span class='object_link'><a href="Riaction/CrudEventCallback.html#initialize-instance_method" title="Riaction::CrudEventCallback#initialize (method)">#initialize</a></span>
117
+
118
+ <small>Riaction::CrudEventCallback</small>
119
+
120
+ </li>
121
+
122
+
123
+ <li class="r1 ">
124
+ <span class='object_link'><a href="Riaction/ProfileCreator.html#perform-class_method" title="Riaction::ProfileCreator.perform (method)">perform</a></span>
125
+
126
+ <small>Riaction::ProfileCreator</small>
127
+
128
+ </li>
129
+
130
+
131
+ <li class="r2 ">
132
+ <span class='object_link'><a href="Riaction/Constants.html#retry_attempts_for_internal_error-class_method" title="Riaction::Constants.retry_attempts_for_internal_error (method)">retry_attempts_for_internal_error</a></span>
133
+
134
+ <small>Riaction::Constants</small>
135
+
136
+ </li>
137
+
138
+
139
+ <li class="r1 ">
140
+ <span class='object_link'><a href="Riaction/Riaction/ClassMethods.html#riaction-instance_method" title="Riaction::Riaction::ClassMethods#riaction (method)">#riaction</a></span>
141
+
142
+ <small>Riaction::Riaction::ClassMethods</small>
143
+
144
+ </li>
145
+
146
+
147
+ <li class="r2 ">
148
+ <span class='object_link'><a href="Riaction/Riaction/Event/InstanceMethods.html#riaction_event_params-instance_method" title="Riaction::Riaction::Event::InstanceMethods#riaction_event_params (method)">#riaction_event_params</a></span>
149
+
150
+ <small>Riaction::Riaction::Event::InstanceMethods</small>
151
+
152
+ </li>
153
+
154
+
155
+ <li class="r1 ">
156
+ <span class='object_link'><a href="Riaction/Riaction/ClassMethods.html#riaction_events%3F-instance_method" title="Riaction::Riaction::ClassMethods#riaction_events? (method)">#riaction_events?</a></span>
157
+
158
+ <small>Riaction::Riaction::ClassMethods</small>
159
+
160
+ </li>
161
+
162
+
163
+ <li class="r2 ">
164
+ <span class='object_link'><a href="Riaction/Riaction/Event/InstanceMethods.html#riaction_log_event%3F-instance_method" title="Riaction::Riaction::Event::InstanceMethods#riaction_log_event? (method)">#riaction_log_event?</a></span>
165
+
166
+ <small>Riaction::Riaction::Event::InstanceMethods</small>
167
+
168
+ </li>
169
+
170
+
171
+ <li class="r1 ">
172
+ <span class='object_link'><a href="Riaction/Constants.html#riaction_options-class_method" title="Riaction::Constants.riaction_options (method)">riaction_options</a></span>
173
+
174
+ <small>Riaction::Constants</small>
175
+
176
+ </li>
177
+
178
+
179
+ <li class="r2 ">
180
+ <span class='object_link'><a href="Riaction/Riaction/ClassMethods.html#riaction_profile%3F-instance_method" title="Riaction::Riaction::ClassMethods#riaction_profile? (method)">#riaction_profile?</a></span>
181
+
182
+ <small>Riaction::Riaction::ClassMethods</small>
183
+
184
+ </li>
185
+
186
+
187
+ <li class="r1 ">
188
+ <span class='object_link'><a href="Riaction/Riaction/Profile/InstanceMethods.html#riaction_profile_achievements-instance_method" title="Riaction::Riaction::Profile::InstanceMethods#riaction_profile_achievements (method)">#riaction_profile_achievements</a></span>
189
+
190
+ <small>Riaction::Riaction::Profile::InstanceMethods</small>
191
+
192
+ </li>
193
+
194
+
195
+ <li class="r2 ">
196
+ <span class='object_link'><a href="Riaction/Riaction/Profile/InstanceMethods.html#riaction_profile_challenges-instance_method" title="Riaction::Riaction::Profile::InstanceMethods#riaction_profile_challenges (method)">#riaction_profile_challenges</a></span>
197
+
198
+ <small>Riaction::Riaction::Profile::InstanceMethods</small>
199
+
200
+ </li>
201
+
202
+
203
+ <li class="r1 ">
204
+ <span class='object_link'><a href="Riaction/Riaction/Profile/InstanceMethods.html#riaction_profile_display_name-instance_method" title="Riaction::Riaction::Profile::InstanceMethods#riaction_profile_display_name (method)">#riaction_profile_display_name</a></span>
205
+
206
+ <small>Riaction::Riaction::Profile::InstanceMethods</small>
207
+
208
+ </li>
209
+
210
+
211
+ <li class="r2 ">
212
+ <span class='object_link'><a href="Riaction/Riaction/Profile/InstanceMethods.html#riaction_profile_goals-instance_method" title="Riaction::Riaction::Profile::InstanceMethods#riaction_profile_goals (method)">#riaction_profile_goals</a></span>
213
+
214
+ <small>Riaction::Riaction::Profile::InstanceMethods</small>
215
+
216
+ </li>
217
+
218
+
219
+ <li class="r1 ">
220
+ <span class='object_link'><a href="Riaction/Riaction/Profile/InstanceMethods.html#riaction_profile_keys-instance_method" title="Riaction::Riaction::Profile::InstanceMethods#riaction_profile_keys (method)">#riaction_profile_keys</a></span>
221
+
222
+ <small>Riaction::Riaction::Profile::InstanceMethods</small>
223
+
224
+ </li>
225
+
226
+
227
+ <li class="r2 ">
228
+ <span class='object_link'><a href="Riaction/Riaction/Profile/InstanceMethods.html#riaction_profile_notifications-instance_method" title="Riaction::Riaction::Profile::InstanceMethods#riaction_profile_notifications (method)">#riaction_profile_notifications</a></span>
229
+
230
+ <small>Riaction::Riaction::Profile::InstanceMethods</small>
231
+
232
+ </li>
233
+
234
+
235
+ <li class="r1 ">
236
+ <span class='object_link'><a href="Riaction/Riaction/Profile/InstanceMethods.html#riaction_profile_points-instance_method" title="Riaction::Riaction::Profile::InstanceMethods#riaction_profile_points (method)">#riaction_profile_points</a></span>
237
+
238
+ <small>Riaction::Riaction::Profile::InstanceMethods</small>
239
+
240
+ </li>
241
+
242
+
243
+ <li class="r2 ">
244
+ <span class='object_link'><a href="Riaction/Riaction/Profile/InstanceMethods.html#riaction_profile_summary-instance_method" title="Riaction::Riaction::Profile::InstanceMethods#riaction_profile_summary (method)">#riaction_profile_summary</a></span>
245
+
246
+ <small>Riaction::Riaction::Profile::InstanceMethods</small>
247
+
248
+ </li>
249
+
250
+
251
+ <li class="r1 ">
252
+ <span class='object_link'><a href="Riaction/Riaction/InstanceMethods.html#riaction_resolve_param-instance_method" title="Riaction::Riaction::InstanceMethods#riaction_resolve_param (method)">#riaction_resolve_param</a></span>
253
+
254
+ <small>Riaction::Riaction::InstanceMethods</small>
255
+
256
+ </li>
257
+
258
+
259
+ <li class="r2 ">
260
+ <span class='object_link'><a href="Riaction/Riaction/Profile/InstanceMethods.html#riaction_set_profile-instance_method" title="Riaction::Riaction::Profile::InstanceMethods#riaction_set_profile (method)">#riaction_set_profile</a></span>
261
+
262
+ <small>Riaction::Riaction::Profile::InstanceMethods</small>
263
+
264
+ </li>
265
+
266
+
267
+ <li class="r1 ">
268
+ <span class='object_link'><a href="Riaction/Riaction/Profile/InstanceMethods.html#riaction_update_profile_points-instance_method" title="Riaction::Riaction::Profile::InstanceMethods#riaction_update_profile_points (method)">#riaction_update_profile_points</a></span>
269
+
270
+ <small>Riaction::Riaction::Profile::InstanceMethods</small>
271
+
272
+ </li>
273
+
274
+
275
+ <li class="r2 ">
276
+ <span class='object_link'><a href="Riaction/Riaction/ClassMethods.html#riactionary%3F-instance_method" title="Riaction::Riaction::ClassMethods#riactionary? (method)">#riactionary?</a></span>
277
+
278
+ <small>Riaction::Riaction::ClassMethods</small>
279
+
280
+ </li>
281
+
282
+
283
+ <li class="r1 ">
284
+ <span class='object_link'><a href="Riaction/Constants.html#supported_identifier_types-class_method" title="Riaction::Constants.supported_identifier_types (method)">supported_identifier_types</a></span>
285
+
286
+ <small>Riaction::Constants</small>
287
+
288
+ </li>
289
+
290
+
291
+ </ul>
292
+ </div>
293
+ </body>
294
+ </html>
@@ -0,0 +1,107 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>
7
+ Top Level Namespace
8
+
9
+ &mdash; Documentation by YARD 0.7.5
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ relpath = '';
19
+ if (relpath != '') relpath += '/';
20
+ </script>
21
+
22
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
23
+
24
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
25
+
26
+
27
+ </head>
28
+ <body>
29
+ <script type="text/javascript" charset="utf-8">
30
+ if (window.top.frames.main) document.body.className = 'frames';
31
+ </script>
32
+
33
+ <div id="header">
34
+ <div id="menu">
35
+
36
+ <a href="_index.html">Index</a> &raquo;
37
+
38
+
39
+ <span class="title">Top Level Namespace</span>
40
+
41
+
42
+ <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
43
+ </div>
44
+
45
+ <div id="search">
46
+
47
+ <a id="class_list_link" href="#">Class List</a>
48
+
49
+ <a id="method_list_link" href="#">Method List</a>
50
+
51
+ <a id="file_list_link" href="#">File List</a>
52
+
53
+ </div>
54
+ <div class="clear"></div>
55
+ </div>
56
+
57
+ <iframe id="search_frame"></iframe>
58
+
59
+ <div id="content"><h1>Top Level Namespace
60
+
61
+
62
+
63
+ </h1>
64
+
65
+ <dl class="box">
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+ </dl>
75
+ <div class="clear"></div>
76
+
77
+ <h2>Defined Under Namespace</h2>
78
+ <p class="children">
79
+
80
+
81
+ <strong class="modules">Modules:</strong> <span class='object_link'><a href="Riaction.html" title="Riaction (module)">Riaction</a></span>
82
+
83
+
84
+
85
+ <strong class="classes">Classes:</strong> <span class='object_link'><a href="RiactionGenerator.html" title="RiactionGenerator (class)">RiactionGenerator</a></span>
86
+
87
+
88
+ </p>
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+ </div>
99
+
100
+ <div id="footer">
101
+ Generated on Tue Mar 6 22:00:20 2012 by
102
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
103
+ 0.7.5 (ruby-1.9.3).
104
+ </div>
105
+
106
+ </body>
107
+ </html>
@@ -1,13 +1,17 @@
1
1
  module Riaction
2
2
  class Constants
3
+ # sets the default actions to be considered as part of riaction
3
4
  def self.crud_actions
4
5
  Set.new [:create, :update, :destroy]
5
6
  end
6
-
7
+
8
+ # sets the default number of attempts to retry a action incase of an internal error
7
9
  def self.retry_attempts_for_internal_error
8
10
  3
9
11
  end
10
-
12
+
13
+ # sets the valid supported identifiers
14
+ # @return returns an array of symbols
11
15
  def self.supported_identifier_types
12
16
  [:email,:username,:custom,:facebook,:twitter,:salesforce]
13
17
  end
@@ -7,18 +7,21 @@ module Riaction
7
7
  @event_name = event_name
8
8
  end
9
9
 
10
+ # Enqueues a Riaction::EventPerformer object in resque after a model has been created
10
11
  def after_create(record)
11
12
  if record.riaction_log_event?(@event_name) && !record.class.riactionless?
12
13
  Resque.enqueue(::Riaction::EventPerformer, @event_name, record.class.base_class.to_s, record.id)
13
14
  end
14
15
  end
15
16
 
17
+ # Enqueues a Riaction::EventPerformer object in resque after a model has been updated
16
18
  def after_update(record)
17
19
  if record.riaction_log_event?(@event_name) && !record.class.riactionless?
18
20
  Resque.enqueue(::Riaction::EventPerformer, @event_name, record.class.base_class.to_s, record.id)
19
21
  end
20
22
  end
21
23
 
24
+ # Enqueues a Riaction::EventPerformer object in resque after a model has been destroyed
22
25
  def after_destroy(record)
23
26
  if record.riaction_log_event?(@event_name) && !record.class.riactionless?
24
27
  Resque.enqueue(::Riaction::EventPerformer, @event_name, record.class.base_class.to_s, record.id)
@@ -5,6 +5,7 @@ module Riaction
5
5
  class EventPerformer
6
6
  @queue = :riaction_event_logger
7
7
 
8
+ # Sends an event to IActionable based on the name of a riaction class and the ID used to locate the instance
8
9
  def self.perform(event_name, klass_name, id, attempt=0)
9
10
  event_name_sym = event_name.to_sym
10
11
  iactionable_api = IActionable::Api.new
@@ -14,11 +15,15 @@ module Riaction
14
15
  if ( klass_name.constantize.riactionary? &&
15
16
  klass_name.constantize.riaction_events? &&
16
17
  klass_name.constantize.riaction_defines_event?(event_name_sym) )
17
- iactionable_api.log_event( event_params[event_name_sym][:profile][:type],
18
- event_params[event_name_sym][:profile][:id_type],
19
- event_params[event_name_sym][:profile][:id],
20
- event_name_sym,
21
- event_params[event_name_sym][:params])
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])
24
+ else
25
+ 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
+ end
22
27
  else
23
28
  raise ::Riaction::ConfigurationError.new("#{klass_name} does not define event #{event_name}")
24
29
  end
@@ -3,6 +3,8 @@ require 'riaction/profile_creator'
3
3
 
4
4
  module Riaction
5
5
  class ProfileCreationCallback
6
+
7
+ # Enqueue a Riaction::ProfileCreatore object in resque
6
8
  def after_create(record)
7
9
  Resque.enqueue(::Riaction::ProfileCreator, record.class.base_class.to_s, record.id) unless record.class.riactionless?
8
10
  end
@@ -38,8 +38,11 @@ module Riaction
38
38
  end
39
39
  end
40
40
 
41
+ # Patches a class to turn it into a riactionary class, providing some default checks and attributes
41
42
  def establish_riactionary_class
42
43
  class << self
44
+
45
+ # returns true if a class has riaction setup
43
46
  def riactionary?
44
47
  true
45
48
  end
@@ -327,14 +330,15 @@ module Riaction
327
330
  def riaction_event_params
328
331
  resolved_hash = {}
329
332
  self.class.riaction_events.each_pair do |event_name, args|
330
- resolved_hash[event_name] = {}
331
333
  resolved_profile = riaction_resolve_param(args[:profile])
332
- raise RuntimeError.new("riaction profile missing for instance #{self}") if resolved_profile.nil?
333
- unless resolved_profile.kind_of?(ActiveRecord::Base) &&
334
- resolved_profile.class.riactionary? &&
335
- resolved_profile.class.riaction_profile? &&
336
- resolved_profile.class.riaction_profile_types_defined > 0
337
- raise ConfigurationError.new("#{self.class} must provide a riaction profile object for event #{event_name}")
334
+ if resolved_profile.nil? ||
335
+ !resolved_profile.kind_of?(ActiveRecord::Base) ||
336
+ !resolved_profile.class.riactionary? ||
337
+ !resolved_profile.class.riaction_profile? ||
338
+ resolved_profile.class.riaction_profile_types_defined == 0
339
+ next
340
+ else
341
+ resolved_hash[event_name] = {}
338
342
  end
339
343
  profile_keys = resolved_profile.riaction_profile_keys
340
344
  unless args[:profile_type].nil?
@@ -1,3 +1,3 @@
1
1
  module Riaction
2
- VERSION = "1.2.6"
2
+ VERSION = "1.2.7"
3
3
  end
@@ -111,34 +111,37 @@ namespace 'riaction' do
111
111
  end
112
112
 
113
113
  desc "Process a specified event on a specified class (requires EVENT_CLASS and EVENT_NAME)"
114
- task :event => :environment do
115
- klass_name = ENV['EVENT_CLASS']
116
- event_symbol = ENV['EVENT_NAME'].to_sym
117
- begin
118
- if klass_name.constantize.riaction_events.has_key? event_symbol
119
- klass_name.constantize.all.each do |record|
120
- if record.riaction_log_event? event_symbol
121
- profile_params = record.riaction_event_params[event_symbol][:profile]
122
- event_params = record.riaction_event_params[event_symbol][:params].stringify_keys
114
+ task :event, :klass_name, :event_symbol, :needs => :environment do |t, args|
115
+ klass_name = args.klass_name
116
+ event_symbol = args.event_symbol.to_sym rescue nil
117
+ if klass_name.nil? || event_symbol.nil?
118
+ puts "provide [Class, event name] as arguments to this rake task"
119
+ else
120
+ begin
121
+ if klass_name.constantize.riaction_events.has_key? event_symbol
122
+ klass_name.constantize.all.each do |record|
123
+ if record.riaction_log_event? event_symbol
124
+ profile_params = record.riaction_event_params[event_symbol][:profile]
125
+ event_params = record.riaction_event_params[event_symbol][:params].stringify_keys
123
126
 
124
- IActionable::Api.new.log_event( profile_params[:type].to_s,
125
- profile_params[:id_type].to_s,
126
- profile_params[:id].to_s,
127
- ENV['EVENT_NAME'].to_s,
128
- event_params )
129
- puts "Logged #{ENV['EVENT_NAME']} for #{record.id}"
130
- else
131
- puts "Event could not be logged for id:#{record.id}"
127
+ IActionable::Api.new.log_event( profile_params[:type].to_s,
128
+ profile_params[:id_type].to_s,
129
+ profile_params[:id].to_s,
130
+ event_symbol.to_s,
131
+ event_params )
132
+ puts "Logged #{event_symbol} for #{record.id}"
133
+ else
134
+ puts "Event could not be logged for id:#{record.id}"
135
+ end
132
136
  end
137
+ else
138
+ puts "'#{event_symbol}' is not a valid event"
133
139
  end
134
- else
135
- puts "'#{ENV['EVENT_NAME']}' is not a valid event"
140
+ rescue NameError => e
141
+ puts e
136
142
  end
137
- rescue NameError => e
138
- puts e
139
143
  end
140
144
  end
141
-
142
145
  end
143
146
  end
144
147
  end
data/riaction.gemspec CHANGED
@@ -5,9 +5,9 @@ require "riaction/version"
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "riaction"
7
7
  s.version = Riaction::VERSION
8
- s.authors = ["Chris Eberz"]
8
+ s.authors = ["Chris Eberz", "Katie Miller", "Nicholas Audo"]
9
9
  s.email = ["ceberz@elctech.com"]
10
- s.homepage = ""
10
+ s.homepage = "https://github.com/zortnac/riaction/"
11
11
  s.summary = %q{Wrapper for IActionable's restful API and an "acts-as" style interface for models to behave as profiles and drive game events.}
12
12
  s.description = %q{Wrapper for IActionable's restful API and an "acts-as" style interface for models to behave as profiles and drive game events.}
13
13
 
@@ -22,6 +22,8 @@ Gem::Specification.new do |s|
22
22
  s.add_development_dependency "rspec", ">= 2.8"
23
23
  s.add_development_dependency "sqlite3"
24
24
  s.add_development_dependency "ruby-debug19"
25
+ s.add_development_dependency "yard"
26
+ s.add_development_dependency "redcarpet"
25
27
 
26
28
  s.add_runtime_dependency "rake"
27
29
  s.add_runtime_dependency "activerecord", ">= 3.0.0"
@@ -187,6 +187,29 @@ describe "sending an event to IActionable from the name of a riaction class and
187
187
  end
188
188
  end
189
189
 
190
+ describe "when an event that the class defines is missing from the instance (due here to an invalid profile)" do
191
+ before do
192
+ Comment.class_eval do
193
+ riaction :event, :name => :make_a_comment, :trigger => :create, :profile => :user, :profile_type => :npc, :params => {:foo => 'bar'}
194
+ end
195
+
196
+ # creating the comment wihtout a user will lead to a missing profile for the event
197
+ @comment = Comment.riactionless{ Comment.create(:content => 'this is a comment') }
198
+ end
199
+
200
+ it "should not try to create the event" do
201
+ @api.should_not_receive(:log_event)
202
+ begin
203
+ ::Riaction::EventPerformer.perform(:make_a_comment, 'Comment', @comment.id)
204
+ rescue Exception => e
205
+ end
206
+ end
207
+
208
+ it "should raise a ConfigurationError" do
209
+ lambda { ::Riaction::EventPerformer.perform(:make_a_comment, 'Comment', @comment.id) }.should raise_error(::Riaction::ConfigurationError)
210
+ end
211
+ end
212
+
190
213
  describe "when the object specified is missing" do
191
214
  before do
192
215
  Comment.class_eval do