riaction 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +19 -5
- data/README.md +16 -0
- data/lib/riaction.rb +1 -0
- data/lib/riaction/iactionable/objects/i_actionable_object.rb +2 -2
- data/lib/riaction/railtie.rb +9 -0
- data/lib/riaction/version.rb +1 -1
- data/lib/tasks/riaction.rake +74 -75
- data/riaction.gemspec +2 -1
- data/spec/riaction_spec.rb +6 -5
- metadata +27 -15
data/Gemfile.lock
CHANGED
@@ -1,20 +1,31 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
riaction (0.0.
|
4
|
+
riaction (0.0.3)
|
5
|
+
activemodel
|
5
6
|
activerecord
|
6
|
-
activesupport (>= 2.0)
|
7
7
|
faraday
|
8
8
|
faraday-stack
|
9
|
+
rake
|
9
10
|
resque
|
10
11
|
|
11
12
|
GEM
|
12
13
|
remote: http://rubygems.org/
|
13
14
|
specs:
|
14
|
-
|
15
|
-
activesupport (=
|
16
|
-
|
15
|
+
activemodel (3.1.1)
|
16
|
+
activesupport (= 3.1.1)
|
17
|
+
builder (~> 3.0.0)
|
18
|
+
i18n (~> 0.6)
|
19
|
+
activerecord (3.1.1)
|
20
|
+
activemodel (= 3.1.1)
|
21
|
+
activesupport (= 3.1.1)
|
22
|
+
arel (~> 2.2.1)
|
23
|
+
tzinfo (~> 0.3.29)
|
24
|
+
activesupport (3.1.1)
|
25
|
+
multi_json (~> 1.0)
|
17
26
|
addressable (2.2.6)
|
27
|
+
arel (2.2.1)
|
28
|
+
builder (3.0.0)
|
18
29
|
diff-lcs (1.1.3)
|
19
30
|
faraday (0.7.5)
|
20
31
|
addressable (~> 2.2.6)
|
@@ -22,11 +33,13 @@ GEM
|
|
22
33
|
rack (>= 1.1.0, < 2)
|
23
34
|
faraday-stack (0.1.3)
|
24
35
|
faraday (~> 0.6)
|
36
|
+
i18n (0.6.0)
|
25
37
|
multi_json (1.0.3)
|
26
38
|
multipart-post (1.1.3)
|
27
39
|
rack (1.3.5)
|
28
40
|
rack-protection (1.1.4)
|
29
41
|
rack
|
42
|
+
rake (0.9.2.2)
|
30
43
|
redis (2.2.2)
|
31
44
|
redis-namespace (1.0.3)
|
32
45
|
redis (< 3.0.0)
|
@@ -48,6 +61,7 @@ GEM
|
|
48
61
|
rack-protection (~> 1.1, >= 1.1.2)
|
49
62
|
tilt (~> 1.3, >= 1.3.3)
|
50
63
|
tilt (1.3.3)
|
64
|
+
tzinfo (0.3.30)
|
51
65
|
vegas (0.1.8)
|
52
66
|
rack (>= 1.0.0)
|
53
67
|
|
data/README.md
CHANGED
@@ -107,6 +107,22 @@ Putting this all together, whenever an instance of the Comment class is created,
|
|
107
107
|
|
108
108
|
_Note: If a class both declares itself as a profile and declares one or more events, and wants to refer to itself as the profile for any of those events, use `:profile => :self`_
|
109
109
|
|
110
|
+
### Rails Rake Tasks ###
|
111
|
+
|
112
|
+
There are 3 rakes tasks included for summarizing all of your models' declarations as well as a way to initialize profiles on IActionable. To see a report of all the events declared across your application, run the following:
|
113
|
+
|
114
|
+
rake riaction:rails:list:events
|
115
|
+
|
116
|
+
To see a report of all the profiles declared across your application, run the following:
|
117
|
+
|
118
|
+
rake riaction:rails:list:profiles
|
119
|
+
|
120
|
+
Finally, to process all of the models in your application that declare themselves as profiles and initialize them on IActionable (for instance if you've added IActionable to an existing application with an established user base), run the following:
|
121
|
+
|
122
|
+
rake riaction:rails:process:profiles
|
123
|
+
|
124
|
+
----------------
|
125
|
+
|
110
126
|
## IActionable ##
|
111
127
|
|
112
128
|
[Visit their website!](http://www.iactionable.com)
|
data/lib/riaction.rb
CHANGED
@@ -20,7 +20,7 @@ module IActionable
|
|
20
20
|
private
|
21
21
|
|
22
22
|
def extract_many_as(key_values, field, klass)
|
23
|
-
if key_values.fetch(field).respond_to?(:inject)
|
23
|
+
if key_values.fetch(field, nil).respond_to?(:inject)
|
24
24
|
loaded = []
|
25
25
|
content = key_values.delete(field)
|
26
26
|
content.each do |c|
|
@@ -28,7 +28,7 @@ module IActionable
|
|
28
28
|
end
|
29
29
|
loaded
|
30
30
|
else
|
31
|
-
|
31
|
+
[]
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
data/lib/riaction/version.rb
CHANGED
data/lib/tasks/riaction.rake
CHANGED
@@ -1,99 +1,98 @@
|
|
1
|
-
namespace '
|
2
|
-
namespace '
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
namespace 'riaction' do
|
2
|
+
namespace 'rails' do
|
3
|
+
namespace 'list' do
|
4
|
+
desc "List all registered events"
|
5
|
+
task :events => :environment do
|
6
|
+
Dir.glob(File.join(RAILS_ROOT,"app","models","*.rb")).each do |rbfile|
|
7
|
+
require rbfile
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
else
|
16
|
-
puts " Trigger: By calling :trigger_#{deets[:trigger]}!"
|
17
|
-
end
|
18
|
-
case deets[:profile]
|
19
|
-
when Symbol
|
20
|
-
if deets[:profile] == :self
|
21
|
-
puts " Profile: (self)"
|
10
|
+
Riaction::EVENT_LOGGING_CLASSES.each do |klass|
|
11
|
+
puts "#{klass} defines the following events:"
|
12
|
+
klass.riaction_events.each_pair do |name, deets|
|
13
|
+
puts " :#{name}:"
|
14
|
+
if Riaction.crud_actions.include? deets[:trigger]
|
15
|
+
puts " Trigger: Fired on ActiveRecord after_#{deets[:trigger]} callback"
|
22
16
|
else
|
23
|
-
puts "
|
17
|
+
puts " Trigger: By calling :trigger_#{deets[:trigger]}!"
|
24
18
|
end
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
19
|
+
case deets[:profile]
|
20
|
+
when Symbol
|
21
|
+
if deets[:profile] == :self
|
22
|
+
puts " Profile: (self)"
|
23
|
+
else
|
24
|
+
puts " Profile: Value returned by :#{deets[:profile]}"
|
25
|
+
end
|
26
|
+
when Proc
|
27
|
+
puts " Profile: Returned via Proc"
|
28
|
+
end
|
29
|
+
case deets[:params]
|
30
|
+
when NilClass
|
31
|
+
puts " Event Params: None"
|
32
|
+
when Symbol
|
33
|
+
puts " Event Params: Hash returned by :#{deets[:params]}"
|
34
|
+
when Proc
|
35
|
+
puts " Event Params: Hash returned via Proc"
|
36
|
+
when Hash
|
37
|
+
puts " Event Params: #{deets[:params]}"
|
38
|
+
end
|
39
|
+
case deets[:guard]
|
40
|
+
when NilClass
|
41
|
+
puts " Guard: None"
|
42
|
+
when Proc
|
43
|
+
puts " Guard: Boolean returned via Proc"
|
44
|
+
when Hash
|
45
|
+
puts " Guard: Boolean returned by :#{deets[:guard]}"
|
46
|
+
end
|
47
|
+
puts ""
|
45
48
|
end
|
46
|
-
puts ""
|
49
|
+
puts "-------------------------------------------------------"
|
47
50
|
end
|
48
|
-
puts "-------------------------------------------------------"
|
49
51
|
end
|
50
|
-
end
|
51
52
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
53
|
+
desc "List all registered profiles"
|
54
|
+
task :profiles => :environment do
|
55
|
+
Dir.glob(File.join(RAILS_ROOT,"app","models","*.rb")).each do |rbfile|
|
56
|
+
require rbfile
|
57
|
+
end
|
57
58
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
puts " :#{
|
62
|
-
puts " With the following ID types
|
63
|
-
|
59
|
+
Riaction::PROFILE_CLASSES.each do |klass|
|
60
|
+
declaration = klass.riaction_profiles.first
|
61
|
+
puts "#{klass} defines the following profile type:"
|
62
|
+
puts " :#{declaration[0]}:"
|
63
|
+
puts " With the following ID types and fields used as identifiers:"
|
64
|
+
declaration[1].each_pair do |id_type, id|
|
64
65
|
puts " :#{id_type} => :#{id}"
|
65
66
|
end
|
66
67
|
puts ""
|
68
|
+
puts "-------------------------------------------------------"
|
67
69
|
end
|
68
|
-
puts "-------------------------------------------------------"
|
69
70
|
end
|
70
71
|
end
|
71
|
-
end
|
72
72
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
73
|
+
namespace 'process' do
|
74
|
+
desc "Run through all classes acting as profiles and make sure each record/instance exists on IActionable"
|
75
|
+
task :profiles => :environment do
|
76
|
+
Dir.glob(File.join(RAILS_ROOT,"app","models","*.rb")).each do |rbfile|
|
77
|
+
require rbfile
|
78
|
+
end
|
79
79
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
obj.
|
87
|
-
|
88
|
-
ids.each_pair do |id_type, id|
|
80
|
+
Riaction::PROFILE_CLASSES.each do |klass|
|
81
|
+
begin
|
82
|
+
klass.all.each do |obj|
|
83
|
+
declaration = klass.riaction_profiles.first
|
84
|
+
puts "Addressing #{klass} record #{obj.id}; creating profile under type '#{declaration[0]}'"
|
85
|
+
obj.riaction_create_profile
|
86
|
+
default_keys = obj.riaction_profile_keys(declaration[0])
|
87
|
+
declaration[1].each_pair do |id_type, id|
|
89
88
|
value = obj.send(id)
|
90
89
|
puts "...updating profile with id type #{id_type} and value #{value}"
|
91
|
-
obj.riaction_update_profile(
|
90
|
+
obj.riaction_update_profile(id_type)
|
92
91
|
end
|
93
92
|
end
|
93
|
+
rescue Riaction::NoProfileDefined => e
|
94
|
+
puts "ERROR: #{klass} does not properly define a profile; skipping"
|
94
95
|
end
|
95
|
-
rescue IAction::Error::NoProfileDefined => e
|
96
|
-
puts "ERROR: #{klass} does not properly define a profile; skipping"
|
97
96
|
end
|
98
97
|
end
|
99
98
|
end
|
data/riaction.gemspec
CHANGED
@@ -24,9 +24,10 @@ Gem::Specification.new do |s|
|
|
24
24
|
|
25
25
|
s.add_development_dependency "rspec", ">= 2.6"
|
26
26
|
|
27
|
+
s.add_runtime_dependency "rake"
|
27
28
|
s.add_runtime_dependency "faraday"
|
28
29
|
s.add_runtime_dependency "faraday-stack"
|
29
|
-
s.add_runtime_dependency "
|
30
|
+
s.add_runtime_dependency "activemodel"
|
30
31
|
s.add_runtime_dependency "activerecord"
|
31
32
|
s.add_runtime_dependency "resque"
|
32
33
|
end
|
data/spec/riaction_spec.rb
CHANGED
@@ -2,24 +2,25 @@ require 'spec_helper.rb'
|
|
2
2
|
|
3
3
|
describe Riaction do
|
4
4
|
class RiactionTestBase
|
5
|
-
|
5
|
+
extend ActiveModel::Callbacks
|
6
6
|
include Riaction
|
7
|
-
|
7
|
+
|
8
|
+
define_model_callbacks :create, :update, :destroy
|
8
9
|
|
9
10
|
def self.base_class
|
10
11
|
self
|
11
12
|
end
|
12
13
|
|
13
14
|
def initialize
|
14
|
-
run_callbacks(:
|
15
|
+
run_callbacks(:create)
|
15
16
|
end
|
16
17
|
|
17
18
|
def update
|
18
|
-
run_callbacks(:
|
19
|
+
run_callbacks(:update)
|
19
20
|
end
|
20
21
|
|
21
22
|
def destroy
|
22
|
-
run_callbacks(:
|
23
|
+
run_callbacks(:destroy)
|
23
24
|
end
|
24
25
|
|
25
26
|
def id
|
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: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-11-02 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &2153398980 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,21 @@ dependencies:
|
|
21
21
|
version: '2.6'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2153398980
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &2153398280 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2153398280
|
25
36
|
- !ruby/object:Gem::Dependency
|
26
37
|
name: faraday
|
27
|
-
requirement: &
|
38
|
+
requirement: &2153397820 !ruby/object:Gem::Requirement
|
28
39
|
none: false
|
29
40
|
requirements:
|
30
41
|
- - ! '>='
|
@@ -32,10 +43,10 @@ dependencies:
|
|
32
43
|
version: '0'
|
33
44
|
type: :runtime
|
34
45
|
prerelease: false
|
35
|
-
version_requirements: *
|
46
|
+
version_requirements: *2153397820
|
36
47
|
- !ruby/object:Gem::Dependency
|
37
48
|
name: faraday-stack
|
38
|
-
requirement: &
|
49
|
+
requirement: &2153397260 !ruby/object:Gem::Requirement
|
39
50
|
none: false
|
40
51
|
requirements:
|
41
52
|
- - ! '>='
|
@@ -43,21 +54,21 @@ dependencies:
|
|
43
54
|
version: '0'
|
44
55
|
type: :runtime
|
45
56
|
prerelease: false
|
46
|
-
version_requirements: *
|
57
|
+
version_requirements: *2153397260
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
49
|
-
requirement: &
|
59
|
+
name: activemodel
|
60
|
+
requirement: &2153396640 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ! '>='
|
53
64
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
65
|
+
version: '0'
|
55
66
|
type: :runtime
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *2153396640
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: activerecord
|
60
|
-
requirement: &
|
71
|
+
requirement: &2153386700 !ruby/object:Gem::Requirement
|
61
72
|
none: false
|
62
73
|
requirements:
|
63
74
|
- - ! '>='
|
@@ -65,10 +76,10 @@ dependencies:
|
|
65
76
|
version: '0'
|
66
77
|
type: :runtime
|
67
78
|
prerelease: false
|
68
|
-
version_requirements: *
|
79
|
+
version_requirements: *2153386700
|
69
80
|
- !ruby/object:Gem::Dependency
|
70
81
|
name: resque
|
71
|
-
requirement: &
|
82
|
+
requirement: &2153386200 !ruby/object:Gem::Requirement
|
72
83
|
none: false
|
73
84
|
requirements:
|
74
85
|
- - ! '>='
|
@@ -76,7 +87,7 @@ dependencies:
|
|
76
87
|
version: '0'
|
77
88
|
type: :runtime
|
78
89
|
prerelease: false
|
79
|
-
version_requirements: *
|
90
|
+
version_requirements: *2153386200
|
80
91
|
description: Wrapper for IActionable's restful API and an "acts-as" style interface
|
81
92
|
for models to behave as profiles and drive game events.
|
82
93
|
email:
|
@@ -110,6 +121,7 @@ files:
|
|
110
121
|
- lib/riaction/iactionable/objects/profile_summary.rb
|
111
122
|
- lib/riaction/iactionable/objects/progress.rb
|
112
123
|
- lib/riaction/iactionable/settings.rb
|
124
|
+
- lib/riaction/railtie.rb
|
113
125
|
- lib/riaction/riaction.rb
|
114
126
|
- lib/riaction/version.rb
|
115
127
|
- lib/tasks/riaction.rake
|