blue_light_special 0.2.0 → 0.2.1

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 (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