blue_light_special 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/README.rdoc +28 -0
  2. data/VERSION +1 -1
  3. data/app/controllers/blue_light_special/impersonations_controller.rb +6 -3
  4. data/test/rails_root/app/controllers/admin/admin_controller.rb +14 -0
  5. data/test/rails_root/app/controllers/admin/users_controller.rb +52 -0
  6. data/test/rails_root/config/initializers/blue_light_special.rb +20 -3
  7. data/test/rails_root/db/migrate/{20100305173127_blue_light_special_create_users.rb → 20100727214301_blue_light_special_create_users.rb} +4 -1
  8. data/test/rails_root/db/migrate/{20100305173129_create_delayed_jobs.rb → 20100727214302_create_delayed_jobs.rb} +0 -0
  9. data/test/rails_root/test/factories/user.rb +10 -0
  10. data/test/rails_root/test/integration/admin/users_test.rb +201 -0
  11. data/test/rails_root/test/integration/edit_profile_test.rb +35 -0
  12. data/test/rails_root/test/integration/facebook_test.rb +48 -36
  13. data/test/rails_root/test/integration/impersonation_test.rb +5 -4
  14. data/test/rails_root/test/integration/password_reset_test.rb +5 -4
  15. data/test/rails_root/test/integration/sign_in_test.rb +0 -6
  16. data/test/rails_root/test/integration/sign_up_test.rb +3 -40
  17. data/test/rails_root/vendor/gems/delayed_job-1.8.4/generators/delayed_job/delayed_job_generator.rb +22 -0
  18. data/test/rails_root/vendor/gems/delayed_job-1.8.4/generators/delayed_job/templates/migration.rb +20 -0
  19. data/test/rails_root/vendor/gems/delayed_job-1.8.4/init.rb +1 -0
  20. data/test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/command.rb +76 -0
  21. data/test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/job.rb +270 -0
  22. data/test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/message_sending.rb +22 -0
  23. data/test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/performable_method.rb +55 -0
  24. data/test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/recipes.rb +27 -0
  25. data/test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/tasks.rb +15 -0
  26. data/test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/worker.rb +54 -0
  27. data/test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed_job.rb +13 -0
  28. data/test/rails_root/vendor/gems/delayed_job-1.8.4/recipes/delayed_job.rb +1 -0
  29. data/test/rails_root/vendor/gems/delayed_job-1.8.4/spec/database.rb +42 -0
  30. data/test/rails_root/vendor/gems/delayed_job-1.8.4/spec/delayed_method_spec.rb +150 -0
  31. data/test/rails_root/vendor/gems/delayed_job-1.8.4/spec/job_spec.rb +406 -0
  32. data/test/rails_root/vendor/gems/delayed_job-1.8.4/spec/story_spec.rb +17 -0
  33. data/test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/generators/formtastic_stylesheets/formtastic_stylesheets_generator.rb +21 -0
  34. data/test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/lib/formtastic.rb +1312 -0
  35. data/test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/lib/justin_french/formtastic.rb +10 -0
  36. data/test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/rails/init.rb +3 -0
  37. data/test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/spec/formtastic_spec.rb +3079 -0
  38. data/test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/spec/test_helper.rb +14 -0
  39. data/test/rails_root/vendor/gems/mini_fb-0.2.2/lib/mini_fb.rb +284 -0
  40. data/test/rails_root/vendor/gems/mini_fb-0.2.2/test/test_mini_fb.rb +29 -0
  41. metadata +111 -6
@@ -0,0 +1,14 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+ require 'activesupport'
4
+ require 'active_support'
5
+ require 'actionpack'
6
+ require 'action_controller'
7
+ require 'action_view'
8
+ require 'rexml/document'
9
+ require 'rspec_hpricot_matchers'
10
+ Spec::Runner.configure do |config|
11
+ config.include(RspecHpricotMatchers)
12
+ end
13
+
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
@@ -0,0 +1,284 @@
1
+ require 'digest/md5'
2
+ require 'erb'
3
+ require 'json' unless defined? JSON
4
+
5
+ module MiniFB
6
+
7
+ # Global constants
8
+ FB_URL = "http://api.facebook.com/restserver.php"
9
+ FB_API_VERSION = "1.0"
10
+
11
+ @@logging = false
12
+
13
+ def self.enable_logging
14
+ @@logging = true
15
+ end
16
+
17
+ def self.disable_logging
18
+ @@logging = false
19
+ end
20
+
21
+ class FaceBookError < StandardError
22
+ attr_accessor :code
23
+ # Error that happens during a facebook call.
24
+ def initialize( error_code, error_msg )
25
+ @code = error_code
26
+ super("Facebook error #{error_code}: #{error_msg}" )
27
+ end
28
+ end
29
+
30
+ class Session
31
+ attr_accessor :api_key, :secret_key, :session_key, :uid
32
+
33
+
34
+ def initialize(api_key, secret_key, session_key, uid)
35
+ @api_key = api_key
36
+ @secret_key = FaceBookSecret.new secret_key
37
+ @session_key = session_key
38
+ @uid = uid
39
+ end
40
+
41
+ # returns current user
42
+ def user
43
+ return @user unless @user.nil?
44
+ @user = User.new(MiniFB.call(@api_key, @secret_key, "Users.getInfo", "session_key"=>@session_key, "uids"=>@uid, "fields"=>User.all_fields)[0], self)
45
+ @user
46
+ end
47
+
48
+ def photos
49
+ Photos.new(self)
50
+ end
51
+
52
+
53
+ def call(method, params={})
54
+ return MiniFB.call(api_key, secret_key, method, params.update("session_key"=>session_key))
55
+ end
56
+
57
+
58
+ end
59
+ class User
60
+ FIELDS = [:uid, :status, :political, :pic_small, :name, :quotes, :is_app_user, :tv, :profile_update_time, :meeting_sex, :hs_info, :timezone, :relationship_status, :hometown_location, :about_me, :wall_count, :significant_other_id, :pic_big, :music, :work_history, :sex, :religion, :notes_count, :activities, :pic_square, :movies, :has_added_app, :education_history, :birthday, :birthday_date, :first_name, :meeting_for, :last_name, :interests, :current_location, :pic, :books, :affiliations, :locale, :profile_url, :proxied_email, :email, :email_hashes, :allowed_restrictions, :pic_with_logo, :pic_big_with_logo, :pic_small_with_logo, :pic_square_with_logo]
61
+ STANDARD_FIELDS = [:uid, :first_name, :last_name, :name, :timezone, :birthday, :sex, :affiliations, :locale, :profile_url, :proxied_email, :email]
62
+
63
+ def self.all_fields
64
+ FIELDS.join(",")
65
+ end
66
+
67
+ def self.standard_fields
68
+ STANDARD_FIELDS.join(",")
69
+ end
70
+
71
+ def initialize(fb_hash, session)
72
+ @fb_hash = fb_hash
73
+ @session = session
74
+ end
75
+
76
+ def [](key)
77
+ @fb_hash[key]
78
+ end
79
+
80
+ def uid
81
+ return self["uid"]
82
+ end
83
+
84
+ def profile_photos
85
+ @session.photos.get("uid"=>uid, "aid"=>profile_pic_album_id)
86
+ end
87
+
88
+ def profile_pic_album_id
89
+ merge_aid(-3, uid)
90
+ end
91
+
92
+ def merge_aid(aid, uid)
93
+ uid = uid.to_i
94
+ ret = (uid << 32) + (aid & 0xFFFFFFFF)
95
+ # puts 'merge_aid=' + ret.inspect
96
+ return ret
97
+ end
98
+ end
99
+
100
+ class Photos
101
+
102
+ def initialize(session)
103
+ @session = session
104
+ end
105
+
106
+ def get(params)
107
+ pids = params["pids"]
108
+ if !pids.nil? && pids.is_a?(Array)
109
+ pids = pids.join(",")
110
+ params["pids"] = pids
111
+ end
112
+ @session.call("photos.get", params)
113
+ end
114
+ end
115
+
116
+ BAD_JSON_METHODS = ["users.getloggedinuser", "auth.promotesession", "users.hasapppermission", "Auth.revokeExtendedPermission", "pages.isAdmin"].collect { |x| x.downcase }
117
+
118
+ # Call facebook server with a method request. Most keyword arguments
119
+ # are passed directly to the server with a few exceptions.
120
+ # The 'sig' value will always be computed automatically.
121
+ # The 'v' version will be supplied automatically if needed.
122
+ # The 'call_id' defaults to True, which will generate a valid
123
+ # number. Otherwise it should be a valid number or False to disable.
124
+
125
+ # The default return is a parsed json object.
126
+ # Unless the 'format' and/or 'callback' arguments are given,
127
+ # in which case the raw text of the reply is returned. The string
128
+ # will always be returned, even during errors.
129
+
130
+ # If an error occurs, a FacebookError exception will be raised
131
+ # with the proper code and message.
132
+
133
+ # The secret argument should be an instance of FacebookSecret
134
+ # to hide value from simple introspection.
135
+ def MiniFB.call( api_key, secret, method, kwargs )
136
+
137
+ puts 'kwargs=' + kwargs.inspect if @@logging
138
+
139
+ if secret.is_a? String
140
+ secret = FaceBookSecret.new(secret)
141
+ end
142
+
143
+ # Prepare arguments for call
144
+ call_id = kwargs.fetch("call_id", true)
145
+ if call_id == true then
146
+ kwargs["call_id"] = Time.now.tv_sec.to_s
147
+ else
148
+ kwargs.delete("call_id")
149
+ end
150
+
151
+ custom_format = kwargs.include?("format") or kwargs.include?("callback")
152
+ kwargs["format"] ||= "JSON"
153
+ kwargs["v"] ||= FB_API_VERSION
154
+ kwargs["api_key"]||= api_key
155
+ kwargs["method"] ||= method
156
+
157
+ # Hash with secret
158
+ arg_string = String.new
159
+ # todo: convert symbols to strings, symbols break the next line
160
+ kwargs.sort.each { |kv| arg_string << kv[0] << "=" << kv[1].to_s }
161
+ kwargs["sig"] = Digest::MD5.hexdigest( arg_string + secret.value.call )
162
+
163
+ # Call website with POST request
164
+ begin
165
+ response = Net::HTTP.post_form( URI.parse(FB_URL), kwargs )
166
+ rescue SocketError => err
167
+ raise IOError.new( "Cannot connect to the facebook server: " + err )
168
+ end
169
+
170
+ # Handle response
171
+ return response.body if custom_format
172
+
173
+ fb_method = kwargs["method"].downcase
174
+ body = response.body
175
+
176
+ puts 'response=' + body.inspect if @@logging
177
+ begin
178
+ data = JSON.parse( body )
179
+ if data.include?( "error_msg" ) then
180
+ raise FaceBookError.new( data["error_code"] || 1, data["error_msg"] )
181
+ end
182
+
183
+ rescue JSON::ParserError => ex
184
+ if BAD_JSON_METHODS.include?(fb_method) # Little hack because this response isn't valid JSON
185
+ if body == "0" || body == "false"
186
+ return false
187
+ end
188
+ return body
189
+ else
190
+ raise ex
191
+ end
192
+ end
193
+ return data
194
+ end
195
+
196
+ # Returns true is signature is valid, false otherwise.
197
+ def MiniFB.verify_signature( secret, arguments )
198
+ signature = arguments.delete( "fb_sig" )
199
+ return false if signature.nil?
200
+
201
+ unsigned = Hash.new
202
+ signed = Hash.new
203
+
204
+ arguments.each do |k, v|
205
+ if k =~ /^fb_sig_(.*)/ then
206
+ signed[$1] = v
207
+ else
208
+ unsigned[k] = v
209
+ end
210
+ end
211
+
212
+ arg_string = String.new
213
+ signed.sort.each { |kv| arg_string << kv[0] << "=" << kv[1] }
214
+ if Digest::MD5.hexdigest( arg_string + secret ) == signature
215
+ return true
216
+ end
217
+ return false
218
+ end
219
+
220
+ # Returns the login/add app url for your application.
221
+ #
222
+ # options:
223
+ # - :next => a relative next page to go to. relative to your facebook connect url or if :canvas is true, then relative to facebook app url
224
+ # - :canvas => true/false - to say whether this is a canvas app or not
225
+ def self.login_url(api_key, options={})
226
+ login_url = "http://api.facebook.com/login.php?api_key=#{api_key}"
227
+ login_url << "&next=#{options[:next]}" if options[:next]
228
+ login_url << "&canvas" if options[:canvas]
229
+ login_url
230
+ end
231
+
232
+ # This function expects arguments as a hash, so
233
+ # it is agnostic to different POST handling variants in ruby.
234
+ #
235
+ # Validate the arguments received from facebook. This is usually
236
+ # sent for the iframe in Facebook's canvas. It is not necessary
237
+ # to use this on the auth_token and uid passed to callbacks like
238
+ # post-add and post-remove.
239
+ #
240
+ # The arguments must be a mapping of to string keys and values
241
+ # or a string of http request data.
242
+ #
243
+ # If the data is invalid or not signed properly, an empty
244
+ # dictionary is returned.
245
+ #
246
+ # The secret argument should be an instance of FacebookSecret
247
+ # to hide value from simple introspection.
248
+ #
249
+ # DEPRECATED, use verify_signature instead
250
+ def MiniFB.validate( secret, arguments )
251
+
252
+ signature = arguments.delete( "fb_sig" )
253
+ return arguments if signature.nil?
254
+
255
+ unsigned = Hash.new
256
+ signed = Hash.new
257
+
258
+ arguments.each do |k, v|
259
+ if k =~ /^fb_sig_(.*)/ then
260
+ signed[$1] = v
261
+ else
262
+ unsigned[k] = v
263
+ end
264
+ end
265
+
266
+ arg_string = String.new
267
+ signed.sort.each { |kv| arg_string << kv[0] << "=" << kv[1] }
268
+ if Digest::MD5.hexdigest( arg_string + secret ) != signature
269
+ unsigned # Hash is incorrect, return only unsigned fields.
270
+ else
271
+ unsigned.merge signed
272
+ end
273
+ end
274
+
275
+ class FaceBookSecret
276
+ # Simple container that stores a secret value.
277
+ # Proc cannot be dumped or introspected by normal tools.
278
+ attr_reader :value
279
+
280
+ def initialize( value )
281
+ @value = Proc.new { value }
282
+ end
283
+ end
284
+ end
@@ -0,0 +1,29 @@
1
+ require 'test/unit'
2
+ class MiniFBTests < Test::Unit::TestCase
3
+
4
+
5
+ def setup
6
+ end
7
+
8
+ def teardown
9
+
10
+ end
11
+
12
+ # Test signature verification.
13
+ def test_signature
14
+
15
+ end
16
+
17
+ def test_basic_calls
18
+
19
+ end
20
+
21
+ def test_session
22
+
23
+ end
24
+
25
+ def test_photos
26
+
27
+ end
28
+
29
+ end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blue_light_special
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 21
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 2
8
- - 0
9
- version: 0.2.0
9
+ - 1
10
+ version: 0.2.1
10
11
  platform: ruby
11
12
  authors:
12
13
  - Nathaniel Bibler
@@ -16,16 +17,18 @@ autorequire:
16
17
  bindir: bin
17
18
  cert_chain: []
18
19
 
19
- date: 2010-03-19 00:00:00 -04:00
20
+ date: 2010-07-27 00:00:00 -04:00
20
21
  default_executable:
21
22
  dependencies:
22
23
  - !ruby/object:Gem::Dependency
23
24
  name: mini_fb
24
25
  prerelease: false
25
26
  requirement: &id001 !ruby/object:Gem::Requirement
27
+ none: false
26
28
  requirements:
27
29
  - - "="
28
30
  - !ruby/object:Gem::Version
31
+ hash: 19
29
32
  segments:
30
33
  - 0
31
34
  - 2
@@ -37,9 +40,11 @@ dependencies:
37
40
  name: delayed_job
38
41
  prerelease: false
39
42
  requirement: &id002 !ruby/object:Gem::Requirement
43
+ none: false
40
44
  requirements:
41
45
  - - "="
42
46
  - !ruby/object:Gem::Version
47
+ hash: 63
43
48
  segments:
44
49
  - 1
45
50
  - 8
@@ -51,9 +56,11 @@ dependencies:
51
56
  name: mad_mimi_mailer
52
57
  prerelease: false
53
58
  requirement: &id003 !ruby/object:Gem::Requirement
59
+ none: false
54
60
  requirements:
55
61
  - - "="
56
62
  - !ruby/object:Gem::Version
63
+ hash: 17
57
64
  segments:
58
65
  - 0
59
66
  - 0
@@ -65,9 +72,11 @@ dependencies:
65
72
  name: shoulda
66
73
  prerelease: false
67
74
  requirement: &id004 !ruby/object:Gem::Requirement
75
+ none: false
68
76
  requirements:
69
77
  - - ">="
70
78
  - !ruby/object:Gem::Version
79
+ hash: 3
71
80
  segments:
72
81
  - 0
73
82
  version: "0"
@@ -150,6 +159,70 @@ files:
150
159
  - lib/blue_light_special/user.rb
151
160
  - rails/init.rb
152
161
  - shoulda_macros/blue_light_special.rb
162
+ - test/controllers/passwords_controller_test.rb
163
+ - test/controllers/sessions_controller_test.rb
164
+ - test/controllers/users_controller_test.rb
165
+ - test/models/blue_light_special_mailer_test.rb
166
+ - test/models/impersonation_test.rb
167
+ - test/models/user_test.rb
168
+ - test/rails_root/app/controllers/accounts_controller.rb
169
+ - test/rails_root/app/controllers/admin/admin_controller.rb
170
+ - test/rails_root/app/controllers/admin/users_controller.rb
171
+ - test/rails_root/app/controllers/application_controller.rb
172
+ - test/rails_root/app/helpers/application_helper.rb
173
+ - test/rails_root/app/helpers/confirmations_helper.rb
174
+ - test/rails_root/app/helpers/passwords_helper.rb
175
+ - test/rails_root/app/models/user.rb
176
+ - test/rails_root/config/boot.rb
177
+ - test/rails_root/config/environment.rb
178
+ - test/rails_root/config/environments/development.rb
179
+ - test/rails_root/config/environments/production.rb
180
+ - test/rails_root/config/environments/test.rb
181
+ - test/rails_root/config/initializers/blue_light_special.rb
182
+ - test/rails_root/config/initializers/inflections.rb
183
+ - test/rails_root/config/initializers/mime_types.rb
184
+ - test/rails_root/config/initializers/requires.rb
185
+ - test/rails_root/config/initializers/time_formats.rb
186
+ - test/rails_root/config/routes.rb
187
+ - test/rails_root/db/migrate/20100727214301_blue_light_special_create_users.rb
188
+ - test/rails_root/db/migrate/20100727214302_create_delayed_jobs.rb
189
+ - test/rails_root/public/dispatch.rb
190
+ - test/rails_root/script/create_project.rb
191
+ - test/rails_root/test/factories/user.rb
192
+ - test/rails_root/test/functional/accounts_controller_test.rb
193
+ - test/rails_root/test/integration/admin/users_test.rb
194
+ - test/rails_root/test/integration/edit_profile_test.rb
195
+ - test/rails_root/test/integration/facebook_test.rb
196
+ - test/rails_root/test/integration/impersonation_test.rb
197
+ - test/rails_root/test/integration/password_reset_test.rb
198
+ - test/rails_root/test/integration/sign_in_test.rb
199
+ - test/rails_root/test/integration/sign_out_test.rb
200
+ - test/rails_root/test/integration/sign_up_test.rb
201
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/generators/delayed_job/delayed_job_generator.rb
202
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/generators/delayed_job/templates/migration.rb
203
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/init.rb
204
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/command.rb
205
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/job.rb
206
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/message_sending.rb
207
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/performable_method.rb
208
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/recipes.rb
209
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/tasks.rb
210
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/worker.rb
211
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed_job.rb
212
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/recipes/delayed_job.rb
213
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/spec/database.rb
214
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/spec/delayed_method_spec.rb
215
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/spec/job_spec.rb
216
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/spec/story_spec.rb
217
+ - test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/generators/formtastic_stylesheets/formtastic_stylesheets_generator.rb
218
+ - test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/lib/formtastic.rb
219
+ - test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/lib/justin_french/formtastic.rb
220
+ - test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/rails/init.rb
221
+ - test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/spec/formtastic_spec.rb
222
+ - test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/spec/test_helper.rb
223
+ - test/rails_root/vendor/gems/mini_fb-0.2.2/lib/mini_fb.rb
224
+ - test/rails_root/vendor/gems/mini_fb-0.2.2/test/test_mini_fb.rb
225
+ - test/test_helper.rb
153
226
  has_rdoc: true
154
227
  homepage: http://github.com/envylabs/blue_light_special
155
228
  licenses: []
@@ -160,23 +233,27 @@ rdoc_options:
160
233
  require_paths:
161
234
  - lib
162
235
  required_ruby_version: !ruby/object:Gem::Requirement
236
+ none: false
163
237
  requirements:
164
238
  - - ">="
165
239
  - !ruby/object:Gem::Version
240
+ hash: 3
166
241
  segments:
167
242
  - 0
168
243
  version: "0"
169
244
  required_rubygems_version: !ruby/object:Gem::Requirement
245
+ none: false
170
246
  requirements:
171
247
  - - ">="
172
248
  - !ruby/object:Gem::Version
249
+ hash: 3
173
250
  segments:
174
251
  - 0
175
252
  version: "0"
176
253
  requirements: []
177
254
 
178
255
  rubyforge_project:
179
- rubygems_version: 1.3.6
256
+ rubygems_version: 1.3.7
180
257
  signing_key:
181
258
  specification_version: 3
182
259
  summary: Rails authentication by email and password
@@ -188,6 +265,8 @@ test_files:
188
265
  - test/models/impersonation_test.rb
189
266
  - test/models/user_test.rb
190
267
  - test/rails_root/app/controllers/accounts_controller.rb
268
+ - test/rails_root/app/controllers/admin/admin_controller.rb
269
+ - test/rails_root/app/controllers/admin/users_controller.rb
191
270
  - test/rails_root/app/controllers/application_controller.rb
192
271
  - test/rails_root/app/helpers/application_helper.rb
193
272
  - test/rails_root/app/helpers/confirmations_helper.rb
@@ -204,16 +283,42 @@ test_files:
204
283
  - test/rails_root/config/initializers/requires.rb
205
284
  - test/rails_root/config/initializers/time_formats.rb
206
285
  - test/rails_root/config/routes.rb
207
- - test/rails_root/db/migrate/20100305173127_blue_light_special_create_users.rb
208
- - test/rails_root/db/migrate/20100305173129_create_delayed_jobs.rb
286
+ - test/rails_root/db/migrate/20100727214301_blue_light_special_create_users.rb
287
+ - test/rails_root/db/migrate/20100727214302_create_delayed_jobs.rb
209
288
  - test/rails_root/public/dispatch.rb
210
289
  - test/rails_root/script/create_project.rb
211
290
  - test/rails_root/test/factories/user.rb
212
291
  - test/rails_root/test/functional/accounts_controller_test.rb
292
+ - test/rails_root/test/integration/admin/users_test.rb
293
+ - test/rails_root/test/integration/edit_profile_test.rb
213
294
  - test/rails_root/test/integration/facebook_test.rb
214
295
  - test/rails_root/test/integration/impersonation_test.rb
215
296
  - test/rails_root/test/integration/password_reset_test.rb
216
297
  - test/rails_root/test/integration/sign_in_test.rb
217
298
  - test/rails_root/test/integration/sign_out_test.rb
218
299
  - test/rails_root/test/integration/sign_up_test.rb
300
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/generators/delayed_job/delayed_job_generator.rb
301
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/generators/delayed_job/templates/migration.rb
302
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/init.rb
303
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/command.rb
304
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/job.rb
305
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/message_sending.rb
306
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/performable_method.rb
307
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/recipes.rb
308
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/tasks.rb
309
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed/worker.rb
310
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/lib/delayed_job.rb
311
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/recipes/delayed_job.rb
312
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/spec/database.rb
313
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/spec/delayed_method_spec.rb
314
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/spec/job_spec.rb
315
+ - test/rails_root/vendor/gems/delayed_job-1.8.4/spec/story_spec.rb
316
+ - test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/generators/formtastic_stylesheets/formtastic_stylesheets_generator.rb
317
+ - test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/lib/formtastic.rb
318
+ - test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/lib/justin_french/formtastic.rb
319
+ - test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/rails/init.rb
320
+ - test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/spec/formtastic_spec.rb
321
+ - test/rails_root/vendor/gems/justinfrench-formtastic-0.2.4/spec/test_helper.rb
322
+ - test/rails_root/vendor/gems/mini_fb-0.2.2/lib/mini_fb.rb
323
+ - test/rails_root/vendor/gems/mini_fb-0.2.2/test/test_mini_fb.rb
219
324
  - test/test_helper.rb