riaction 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. data/.gitignore +1 -0
  2. data/CHANGELOG.md +7 -0
  3. data/Gemfile.lock +47 -26
  4. data/README.md +101 -52
  5. data/db/riaction.db +0 -0
  6. data/lib/riaction.rb +1 -1
  7. data/lib/riaction/constants.rb +10 -0
  8. data/lib/riaction/crud_event_callback.rb +3 -3
  9. data/lib/riaction/event_performer.rb +11 -16
  10. data/lib/riaction/profile_creation_callback.rb +1 -1
  11. data/lib/riaction/profile_creator.rb +13 -6
  12. data/lib/riaction/railtie.rb +4 -0
  13. data/lib/riaction/riaction.rb +302 -282
  14. data/lib/riaction/version.rb +1 -1
  15. data/lib/tasks/riaction.rake +16 -14
  16. data/riaction.gemspec +3 -2
  17. data/spec/event_performer_spec.rb +233 -0
  18. data/spec/profile_creation_spec.rb +135 -0
  19. data/spec/riaction_spec.rb +820 -253
  20. data/spec/spec_helper.rb +8 -1
  21. metadata +38 -71
  22. data/lib/riaction/iactionable/api.rb +0 -170
  23. data/lib/riaction/iactionable/connection.rb +0 -114
  24. data/lib/riaction/iactionable/error.rb +0 -17
  25. data/lib/riaction/iactionable/objects.rb +0 -27
  26. data/lib/riaction/iactionable/objects/achievement.rb +0 -29
  27. data/lib/riaction/iactionable/objects/awardable.rb +0 -50
  28. data/lib/riaction/iactionable/objects/challenge.rb +0 -27
  29. data/lib/riaction/iactionable/objects/goal.rb +0 -30
  30. data/lib/riaction/iactionable/objects/i_actionable_object.rb +0 -36
  31. data/lib/riaction/iactionable/objects/identifier.rb +0 -17
  32. data/lib/riaction/iactionable/objects/leaderboard.rb +0 -15
  33. data/lib/riaction/iactionable/objects/leaderboard_report.rb +0 -30
  34. data/lib/riaction/iactionable/objects/level.rb +0 -24
  35. data/lib/riaction/iactionable/objects/level_type.rb +0 -15
  36. data/lib/riaction/iactionable/objects/point_type.rb +0 -15
  37. data/lib/riaction/iactionable/objects/profile_achievements.rb +0 -20
  38. data/lib/riaction/iactionable/objects/profile_challenges.rb +0 -20
  39. data/lib/riaction/iactionable/objects/profile_goals.rb +0 -20
  40. data/lib/riaction/iactionable/objects/profile_level.rb +0 -20
  41. data/lib/riaction/iactionable/objects/profile_notifications.rb +0 -29
  42. data/lib/riaction/iactionable/objects/profile_points.rb +0 -29
  43. data/lib/riaction/iactionable/objects/profile_summary.rb +0 -37
  44. data/lib/riaction/iactionable/objects/progress.rb +0 -46
  45. data/lib/riaction/iactionable/settings.rb +0 -30
  46. data/spec/api_spec.rb +0 -314
  47. data/spec/connection_spec.rb +0 -111
  48. data/spec/get_achievements_api_response_spec.rb +0 -46
  49. data/spec/get_challenges_api_response_spec.rb +0 -42
  50. data/spec/get_goals_api_response_spec.rb +0 -46
  51. data/spec/get_leaderboard_api_response_spec.rb +0 -76
  52. data/spec/get_profile_achievements_api_response_spec.rb +0 -99
  53. data/spec/get_profile_api_response_spec.rb +0 -103
  54. data/spec/get_profile_challenges_api_response_spec.rb +0 -85
  55. data/spec/get_profile_goals_api_response_spec.rb +0 -89
  56. data/spec/get_profile_notifications_api_response_spec.rb +0 -75
  57. data/spec/get_profile_points_api_response_spec.rb +0 -67
  58. data/spec/settings_spec.rb +0 -52
data/spec/spec_helper.rb CHANGED
@@ -1 +1,8 @@
1
- require 'riaction'
1
+ require 'riaction'
2
+
3
+ root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
4
+
5
+ ActiveRecord::Base.establish_connection(
6
+ :adapter => "sqlite3",
7
+ :database => "#{root}/db/riaction.db"
8
+ )
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.0.0
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-13 00:00:00.000000000Z
12
+ date: 2012-02-10 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &2153127140 !ruby/object:Gem::Requirement
16
+ requirement: &2161139200 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,32 +21,32 @@ dependencies:
21
21
  version: '2.6'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2153127140
24
+ version_requirements: *2161139200
25
25
  - !ruby/object:Gem::Dependency
26
- name: rake
27
- requirement: &2153126720 !ruby/object:Gem::Requirement
26
+ name: sqlite3
27
+ requirement: &2161138580 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
31
31
  - !ruby/object:Gem::Version
32
32
  version: '0'
33
- type: :runtime
33
+ type: :development
34
34
  prerelease: false
35
- version_requirements: *2153126720
35
+ version_requirements: *2161138580
36
36
  - !ruby/object:Gem::Dependency
37
- name: faraday
38
- requirement: &2153126260 !ruby/object:Gem::Requirement
37
+ name: ruby-debug19
38
+ requirement: &2161138020 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
42
42
  - !ruby/object:Gem::Version
43
43
  version: '0'
44
- type: :runtime
44
+ type: :development
45
45
  prerelease: false
46
- version_requirements: *2153126260
46
+ version_requirements: *2161138020
47
47
  - !ruby/object:Gem::Dependency
48
- name: faraday-stack
49
- requirement: &2153125840 !ruby/object:Gem::Requirement
48
+ name: rake
49
+ requirement: &2161137440 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *2153125840
57
+ version_requirements: *2161137440
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: activerecord
60
- requirement: &2153125340 !ruby/object:Gem::Requirement
60
+ requirement: &2161136640 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 3.0.0
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *2153125340
68
+ version_requirements: *2161136640
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: activesupport
71
- requirement: &2153124840 !ruby/object:Gem::Requirement
71
+ requirement: &2161136140 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 3.0.0
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *2153124840
79
+ version_requirements: *2161136140
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: resque
82
- requirement: &2153124460 !ruby/object:Gem::Requirement
82
+ requirement: &2161135740 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,18 @@ dependencies:
87
87
  version: '0'
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *2153124460
90
+ version_requirements: *2161135740
91
+ - !ruby/object:Gem::Dependency
92
+ name: ruby-iactionable
93
+ requirement: &2161134860 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: 0.0.2
99
+ type: :runtime
100
+ prerelease: false
101
+ version_requirements: *2161134860
91
102
  description: Wrapper for IActionable's restful API and an "acts-as" style interface
92
103
  for models to behave as profiles and drive game events.
93
104
  email:
@@ -96,11 +107,13 @@ executables: []
96
107
  extensions: []
97
108
  extra_rdoc_files: []
98
109
  files:
110
+ - .gitignore
99
111
  - CHANGELOG.md
100
112
  - Gemfile
101
113
  - Gemfile.lock
102
114
  - README.md
103
115
  - Rakefile
116
+ - db/riaction.db
104
117
  - lib/generators/riaction/USAGE
105
118
  - lib/generators/riaction/riaction_generator.rb
106
119
  - lib/generators/riaction/templates/i_actionable.yml
@@ -108,30 +121,6 @@ files:
108
121
  - lib/riaction/constants.rb
109
122
  - lib/riaction/crud_event_callback.rb
110
123
  - lib/riaction/event_performer.rb
111
- - lib/riaction/iactionable/api.rb
112
- - lib/riaction/iactionable/connection.rb
113
- - lib/riaction/iactionable/error.rb
114
- - lib/riaction/iactionable/objects.rb
115
- - lib/riaction/iactionable/objects/achievement.rb
116
- - lib/riaction/iactionable/objects/awardable.rb
117
- - lib/riaction/iactionable/objects/challenge.rb
118
- - lib/riaction/iactionable/objects/goal.rb
119
- - lib/riaction/iactionable/objects/i_actionable_object.rb
120
- - lib/riaction/iactionable/objects/identifier.rb
121
- - lib/riaction/iactionable/objects/leaderboard.rb
122
- - lib/riaction/iactionable/objects/leaderboard_report.rb
123
- - lib/riaction/iactionable/objects/level.rb
124
- - lib/riaction/iactionable/objects/level_type.rb
125
- - lib/riaction/iactionable/objects/point_type.rb
126
- - lib/riaction/iactionable/objects/profile_achievements.rb
127
- - lib/riaction/iactionable/objects/profile_challenges.rb
128
- - lib/riaction/iactionable/objects/profile_goals.rb
129
- - lib/riaction/iactionable/objects/profile_level.rb
130
- - lib/riaction/iactionable/objects/profile_notifications.rb
131
- - lib/riaction/iactionable/objects/profile_points.rb
132
- - lib/riaction/iactionable/objects/profile_summary.rb
133
- - lib/riaction/iactionable/objects/progress.rb
134
- - lib/riaction/iactionable/settings.rb
135
124
  - lib/riaction/profile_creation_callback.rb
136
125
  - lib/riaction/profile_creator.rb
137
126
  - lib/riaction/railtie.rb
@@ -139,20 +128,9 @@ files:
139
128
  - lib/riaction/version.rb
140
129
  - lib/tasks/riaction.rake
141
130
  - riaction.gemspec
142
- - spec/api_spec.rb
143
- - spec/connection_spec.rb
144
- - spec/get_achievements_api_response_spec.rb
145
- - spec/get_challenges_api_response_spec.rb
146
- - spec/get_goals_api_response_spec.rb
147
- - spec/get_leaderboard_api_response_spec.rb
148
- - spec/get_profile_achievements_api_response_spec.rb
149
- - spec/get_profile_api_response_spec.rb
150
- - spec/get_profile_challenges_api_response_spec.rb
151
- - spec/get_profile_goals_api_response_spec.rb
152
- - spec/get_profile_notifications_api_response_spec.rb
153
- - spec/get_profile_points_api_response_spec.rb
131
+ - spec/event_performer_spec.rb
132
+ - spec/profile_creation_spec.rb
154
133
  - spec/riaction_spec.rb
155
- - spec/settings_spec.rb
156
134
  - spec/spec_helper.rb
157
135
  homepage: ''
158
136
  licenses: []
@@ -181,18 +159,7 @@ specification_version: 3
181
159
  summary: Wrapper for IActionable's restful API and an "acts-as" style interface for
182
160
  models to behave as profiles and drive game events.
183
161
  test_files:
184
- - spec/api_spec.rb
185
- - spec/connection_spec.rb
186
- - spec/get_achievements_api_response_spec.rb
187
- - spec/get_challenges_api_response_spec.rb
188
- - spec/get_goals_api_response_spec.rb
189
- - spec/get_leaderboard_api_response_spec.rb
190
- - spec/get_profile_achievements_api_response_spec.rb
191
- - spec/get_profile_api_response_spec.rb
192
- - spec/get_profile_challenges_api_response_spec.rb
193
- - spec/get_profile_goals_api_response_spec.rb
194
- - spec/get_profile_notifications_api_response_spec.rb
195
- - spec/get_profile_points_api_response_spec.rb
162
+ - spec/event_performer_spec.rb
163
+ - spec/profile_creation_spec.rb
196
164
  - spec/riaction_spec.rb
197
- - spec/settings_spec.rb
198
165
  - spec/spec_helper.rb
@@ -1,170 +0,0 @@
1
- require 'riaction/iactionable/connection.rb'
2
- require 'riaction/iactionable/settings.rb'
3
- require 'riaction/iactionable/objects.rb'
4
-
5
- module IActionable
6
-
7
- class Api
8
- attr :connection
9
- @@settings = nil
10
-
11
- def initialize
12
- if @@settings
13
- @connection = IActionable::Connection.new(@@settings)
14
- else
15
- raise IActionable::ConfigError.new("IActionable::Api cannot be initialized without credentials being set in IActionable::Api.init_settings()")
16
- end
17
- end
18
-
19
- def self.init_settings(values)
20
- @@settings = IActionable::Settings.new(values)
21
- rescue IActionable::ConfigError => e
22
- raise e
23
- end
24
-
25
- def self.settings
26
- @@settings
27
- end
28
-
29
- # =================
30
- # = Event Logging =
31
- # =================
32
-
33
- def log_event(profile_type, id_type, id, event_key, event_attrs = {})
34
- response = @connection.request.with_app_key.with_api_key.to("/#{profile_type}/#{id_type}/#{id}/events/#{event_key}").with_params(event_attrs).post
35
- end
36
-
37
- # =====================
38
- # = Profile API calls =
39
- # =====================
40
-
41
- def get_profile_summary(profile_type, id_type, id, achievement_count = nil)
42
- request = @connection.request.with_app_key.to("/#{profile_type}/#{id_type}/#{id}")
43
- request.with_params(:achievementCount => achievement_count) unless achievement_count.blank?
44
- response = request.get
45
- IActionable::Objects::ProfileSummary.new(response)
46
- end
47
-
48
- def create_profile(profile_type, id_type, id, display_name = nil)
49
- request = @connection.request.with_app_key.with_api_key.to("/#{profile_type}/#{id_type}/#{id}")
50
- request.with_params(:displayName => display_name) unless display_name.blank?
51
- request.post
52
- end
53
- alias_method :update_profile, :create_profile
54
-
55
- def add_profile_identifier(profile_type, id_type, id, alt_id_type, alt_id)
56
- @connection.request.with_app_key.with_api_key.to("/#{profile_type}/#{id_type}/#{id}/identifiers/#{alt_id_type}/#{alt_id}").post
57
- end
58
-
59
- # ====================
60
- # = Points API calls =
61
- # ====================
62
-
63
- def get_profile_points(profile_type, id_type, id, point_type)
64
- response = @connection.request.with_app_key.to("/#{profile_type}/#{id_type}/#{id}/points/#{point_type}").get
65
- IActionable::Objects::ProfilePoints.new(response)
66
- end
67
-
68
- def update_profile_points(profile_type, id_type, id, point_type, amount, reason = nil)
69
- request = @connection.request.with_app_key.with_api_key.to("/#{profile_type}/#{id_type}/#{id}/points/#{point_type}").with_params(:value => amount)
70
- request.with_params(:description => reason) unless reason.blank?
71
- response = request.post
72
- IActionable::Objects::ProfilePoints.new(response)
73
- end
74
-
75
- # =========================
76
- # = Achievement API calls =
77
- # =========================
78
-
79
- def get_profile_achievements(profile_type, id_type, id, filter_type = nil)
80
- request = @connection.request.with_app_key
81
- case filter_type
82
- when :completed
83
- request.to("/#{profile_type}/#{id_type}/#{id}/achievements/Completed")
84
- when :available
85
- request.to("/#{profile_type}/#{id_type}/#{id}/achievements/Available")
86
- else
87
- request.to("/#{profile_type}/#{id_type}/#{id}/achievements")
88
- end
89
- IActionable::Objects::ProfileAchievements.new(request.get)
90
- end
91
-
92
- def get_achievements()
93
- response = @connection.request.with_app_key.to("/achievements").get
94
- response.map{|achievement_json| IActionable::Objects::Achievement.new(achievement_json)}
95
- rescue NoMethodError => e
96
- []
97
- end
98
-
99
- # ========================
100
- # = Challenges API calls =
101
- # ========================
102
-
103
- def get_profile_challenges(profile_type, id_type, id, filter_type = nil)
104
- request = @connection.request.with_app_key
105
- case filter_type
106
- when :completed
107
- request.to("/#{profile_type}/#{id_type}/#{id}/challenges/Completed")
108
- when :available
109
- request.to("/#{profile_type}/#{id_type}/#{id}/challenges/Available")
110
- else
111
- request.to("/#{profile_type}/#{id_type}/#{id}/challenges")
112
- end
113
- IActionable::Objects::ProfileChallenges.new(request.get)
114
- end
115
-
116
- def get_challenges()
117
- response = @connection.request.with_app_key.to("/challenges").get
118
- response.map{|challenge_json| IActionable::Objects::Challenge.new(challenge_json)}
119
- rescue NoMethodError => e
120
- []
121
- end
122
-
123
- # ===================
124
- # = Goals API calls =
125
- # ===================
126
-
127
- def get_profile_goals(profile_type, id_type, id, filter_type = nil)
128
- request = @connection.request.with_app_key
129
- case filter_type
130
- when :completed
131
- request.to("/#{profile_type}/#{id_type}/#{id}/goals/Completed")
132
- when :available
133
- request.to("/#{profile_type}/#{id_type}/#{id}/goals/Available")
134
- else
135
- request.to("/#{profile_type}/#{id_type}/#{id}/goals")
136
- end
137
- IActionable::Objects::ProfileGoals.new(request.get)
138
- end
139
-
140
- def get_goals()
141
- response = @connection.request.with_app_key.to("/goals").get
142
- response.map{|goal_json| IActionable::Objects::Goal.new(goal_json)}
143
- rescue NoMethodError => e
144
- []
145
- end
146
-
147
- # =========================
148
- # = Leaderboard API calls =
149
- # =========================
150
-
151
- def get_leaderboard(profile_type, point_type, leaderboard, page_number=nil, page_count=nil, id=nil, id_type=nil)
152
- request = @connection.request.with_app_key.to("/#{profile_type}/leaderboards/points/#{point_type}/#{leaderboard}")
153
- request.with_params(:pageNumber => page_number) unless page_number.blank?
154
- request.with_params(:pageCount => page_count) unless page_count.blank?
155
- request.with_params(:id => id) unless id.blank? || id_type.blank?
156
- request.with_params(:idType => id_type) unless id.blank? || id_type.blank?
157
- response = request.get
158
- IActionable::Objects::LeaderboardReport.new(response)
159
- end
160
-
161
- # ===================================
162
- # = Profile Notifications API calls =
163
- # ===================================
164
-
165
- def get_profile_notifications(profile_type, id_type, id)
166
- response = @connection.request.with_app_key.to("/#{profile_type}/#{id_type}/#{id}/notifications").get
167
- IActionable::Objects::ProfileNotifications.new(response)
168
- end
169
- end
170
- end
@@ -1,114 +0,0 @@
1
- require 'faraday'
2
- require 'faraday_stack'
3
- require 'riaction/iactionable/error'
4
-
5
- module IActionable
6
- class Request < Struct.new(:path, :params, :headers, :body)
7
- attr :settings
8
-
9
- def initialize(settings)
10
- @settings = settings
11
- self.path = nil
12
- self.params = {}
13
- self.headers = {}
14
- self.body = {}
15
- end
16
-
17
- def to(path)
18
- self.path = path unless path.nil? || path.empty?
19
- self
20
- end
21
-
22
- def with_api_key
23
- (self.headers[:Authorization] = @settings.api_key) and self
24
- end
25
-
26
- def with_app_key
27
- (self.params[:appKey] = @settings.app_key) and self
28
- end
29
-
30
- def with_params(params={})
31
- self.params.merge!(params) and self
32
- end
33
-
34
- def with_body(body={})
35
- self.body.merge!(body) and self
36
- end
37
- end
38
-
39
- class Connection
40
- attr :connection
41
- attr :settings
42
- attr :request
43
- attr_accessor :response
44
-
45
- def initialize(settings)
46
- @settings = settings
47
-
48
- @connection = Faraday.new api_url(@settings.version) do |builder|
49
- builder.use FaradayStack::ResponseJSON, content_type: 'application/json'
50
- builder.use Faraday::Response::RaiseError
51
- builder.use Faraday::Adapter::NetHttp
52
- end
53
-
54
- @request = nil
55
- end
56
-
57
- def request
58
- (@request = Request.new(@settings)) and self
59
- end
60
-
61
- def get(path=nil, query_params={})
62
- @request ||= Request.new(@settings)
63
- @request.to(path).with_params(query_params)
64
- @response = @connection.get do |req|
65
- req.headers.merge! @request.headers
66
- req.url @request.path, @request.params
67
- end
68
- @response.body
69
- rescue Faraday::Error::ClientError => e
70
- handle_client_error e
71
- ensure
72
- @request = nil
73
- end
74
-
75
- def post(path=nil, query_params={}, body_params={})
76
- @request ||= Request.new(@settings)
77
- @request.to(path).with_params(query_params)
78
- @response = @connection.post do |req|
79
- req.headers.merge! @request.headers
80
- req.url @request.path, @request.params
81
- req.body = @request.body unless @request.body.empty?
82
- end
83
- @response.body
84
- rescue Exception => e
85
- handle_client_error e
86
- ensure
87
- @request = nil
88
- end
89
-
90
- private
91
-
92
- def method_missing(symbol, *args)
93
- @request.send(symbol, *args) and self
94
- rescue NoMethodError => e
95
- raise e
96
- end
97
-
98
- def api_url(version)
99
- "http://api.iactionable.com/v#{version}/"
100
- end
101
-
102
- def handle_client_error(e)
103
- # http://iactionable.com/api/response-codes/
104
- case e.response[:status]
105
- when 400
106
- raise IActionable::Error::BadRequest.new(e.response)
107
- when 401
108
- raise IActionable::Error::Unauthorized.new(e.response)
109
- when 500
110
- raise IActionable::Error::Internal.new(e.response)
111
- end
112
- end
113
- end
114
- end