riaction 1.2.6 → 1.2.7

Sign up to get free protection for your applications and to get access to all the features.
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