acts_as_api 0.2.2 → 0.3.0

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 (73) hide show
  1. data/.gitignore +10 -0
  2. data/Gemfile +12 -0
  3. data/History.txt +8 -0
  4. data/README.rdoc +29 -225
  5. data/Rakefile +20 -28
  6. data/acts_as_api.gemspec +31 -0
  7. data/examples/introduction/docco.css +186 -0
  8. data/examples/introduction/index.html +340 -0
  9. data/examples/introduction/index.rb +132 -0
  10. data/examples/introduction/layout.mustache +64 -0
  11. data/lib/acts_as_api.rb +11 -25
  12. data/lib/acts_as_api/api_template.rb +14 -0
  13. data/lib/acts_as_api/base.rb +61 -56
  14. data/lib/acts_as_api/config.rb +34 -0
  15. data/lib/acts_as_api/rails_renderer.rb +15 -0
  16. data/lib/acts_as_api/rendering.rb +11 -8
  17. data/lib/acts_as_api/version.rb +4 -0
  18. data/spec/controllers/respond_with_users_controller_spec.rb +5 -0
  19. data/spec/controllers/users_controller_spec.rb +161 -0
  20. data/spec/models/base_spec.rb +437 -0
  21. data/spec/rails_app/.gitignore +4 -0
  22. data/spec/rails_app/Rakefile +7 -0
  23. data/spec/rails_app/app/controllers/application_controller.rb +3 -0
  24. data/spec/rails_app/app/controllers/respond_with_users_controller.rb +15 -0
  25. data/spec/rails_app/app/controllers/users_controller.rb +21 -0
  26. data/spec/rails_app/app/helpers/application_helper.rb +2 -0
  27. data/spec/rails_app/app/models/task.rb +3 -0
  28. data/spec/rails_app/app/models/untouched.rb +2 -0
  29. data/spec/rails_app/app/models/user.rb +69 -0
  30. data/spec/rails_app/app/views/layouts/application.html.erb +14 -0
  31. data/spec/rails_app/config.ru +4 -0
  32. data/spec/rails_app/config/application.rb +42 -0
  33. data/spec/rails_app/config/boot.rb +6 -0
  34. data/spec/rails_app/config/database.yml +23 -0
  35. data/spec/rails_app/config/environment.rb +5 -0
  36. data/spec/rails_app/config/environments/development.rb +26 -0
  37. data/spec/rails_app/config/environments/production.rb +49 -0
  38. data/spec/rails_app/config/environments/test.rb +35 -0
  39. data/spec/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  40. data/spec/rails_app/config/initializers/inflections.rb +10 -0
  41. data/spec/rails_app/config/initializers/mime_types.rb +5 -0
  42. data/spec/rails_app/config/initializers/secret_token.rb +7 -0
  43. data/spec/rails_app/config/initializers/session_store.rb +8 -0
  44. data/spec/rails_app/config/locales/en.yml +5 -0
  45. data/spec/rails_app/config/routes.rb +7 -0
  46. data/spec/rails_app/db/migrate/20110214201640_create_tables.rb +35 -0
  47. data/spec/rails_app/db/schema.rb +34 -0
  48. data/spec/rails_app/db/seeds.rb +7 -0
  49. data/spec/rails_app/lib/tasks/.gitkeep +0 -0
  50. data/spec/rails_app/public/404.html +26 -0
  51. data/spec/rails_app/public/422.html +26 -0
  52. data/spec/rails_app/public/500.html +26 -0
  53. data/spec/rails_app/public/favicon.ico +0 -0
  54. data/spec/rails_app/public/images/rails.png +0 -0
  55. data/spec/rails_app/public/index.html +239 -0
  56. data/spec/rails_app/public/javascripts/application.js +2 -0
  57. data/spec/rails_app/public/javascripts/controls.js +965 -0
  58. data/spec/rails_app/public/javascripts/dragdrop.js +974 -0
  59. data/spec/rails_app/public/javascripts/effects.js +1123 -0
  60. data/spec/rails_app/public/javascripts/prototype.js +6001 -0
  61. data/spec/rails_app/public/javascripts/rails.js +191 -0
  62. data/spec/rails_app/public/robots.txt +5 -0
  63. data/spec/rails_app/public/stylesheets/.gitkeep +0 -0
  64. data/spec/rails_app/script/rails +6 -0
  65. data/spec/spec_helper.rb +12 -13
  66. data/spec/support/api_test_helpers.rb +23 -0
  67. metadata +137 -35
  68. data/Manifest.txt +0 -15
  69. data/script/console +0 -10
  70. data/script/destroy +0 -14
  71. data/script/generate +0 -14
  72. data/spec/acts_as_api_spec.rb +0 -87
  73. data/tasks/rspec.rake +0 -21
@@ -0,0 +1,191 @@
1
+ (function() {
2
+ // Technique from Juriy Zaytsev
3
+ // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
4
+ function isEventSupported(eventName) {
5
+ var el = document.createElement('div');
6
+ eventName = 'on' + eventName;
7
+ var isSupported = (eventName in el);
8
+ if (!isSupported) {
9
+ el.setAttribute(eventName, 'return;');
10
+ isSupported = typeof el[eventName] == 'function';
11
+ }
12
+ el = null;
13
+ return isSupported;
14
+ }
15
+
16
+ function isForm(element) {
17
+ return Object.isElement(element) && element.nodeName.toUpperCase() == 'FORM'
18
+ }
19
+
20
+ function isInput(element) {
21
+ if (Object.isElement(element)) {
22
+ var name = element.nodeName.toUpperCase()
23
+ return name == 'INPUT' || name == 'SELECT' || name == 'TEXTAREA'
24
+ }
25
+ else return false
26
+ }
27
+
28
+ var submitBubbles = isEventSupported('submit'),
29
+ changeBubbles = isEventSupported('change')
30
+
31
+ if (!submitBubbles || !changeBubbles) {
32
+ // augment the Event.Handler class to observe custom events when needed
33
+ Event.Handler.prototype.initialize = Event.Handler.prototype.initialize.wrap(
34
+ function(init, element, eventName, selector, callback) {
35
+ init(element, eventName, selector, callback)
36
+ // is the handler being attached to an element that doesn't support this event?
37
+ if ( (!submitBubbles && this.eventName == 'submit' && !isForm(this.element)) ||
38
+ (!changeBubbles && this.eventName == 'change' && !isInput(this.element)) ) {
39
+ // "submit" => "emulated:submit"
40
+ this.eventName = 'emulated:' + this.eventName
41
+ }
42
+ }
43
+ )
44
+ }
45
+
46
+ if (!submitBubbles) {
47
+ // discover forms on the page by observing focus events which always bubble
48
+ document.on('focusin', 'form', function(focusEvent, form) {
49
+ // special handler for the real "submit" event (one-time operation)
50
+ if (!form.retrieve('emulated:submit')) {
51
+ form.on('submit', function(submitEvent) {
52
+ var emulated = form.fire('emulated:submit', submitEvent, true)
53
+ // if custom event received preventDefault, cancel the real one too
54
+ if (emulated.returnValue === false) submitEvent.preventDefault()
55
+ })
56
+ form.store('emulated:submit', true)
57
+ }
58
+ })
59
+ }
60
+
61
+ if (!changeBubbles) {
62
+ // discover form inputs on the page
63
+ document.on('focusin', 'input, select, texarea', function(focusEvent, input) {
64
+ // special handler for real "change" events
65
+ if (!input.retrieve('emulated:change')) {
66
+ input.on('change', function(changeEvent) {
67
+ input.fire('emulated:change', changeEvent, true)
68
+ })
69
+ input.store('emulated:change', true)
70
+ }
71
+ })
72
+ }
73
+
74
+ function handleRemote(element) {
75
+ var method, url, params;
76
+
77
+ var event = element.fire("ajax:before");
78
+ if (event.stopped) return false;
79
+
80
+ if (element.tagName.toLowerCase() === 'form') {
81
+ method = element.readAttribute('method') || 'post';
82
+ url = element.readAttribute('action');
83
+ params = element.serialize();
84
+ } else {
85
+ method = element.readAttribute('data-method') || 'get';
86
+ url = element.readAttribute('href');
87
+ params = {};
88
+ }
89
+
90
+ new Ajax.Request(url, {
91
+ method: method,
92
+ parameters: params,
93
+ evalScripts: true,
94
+
95
+ onComplete: function(request) { element.fire("ajax:complete", request); },
96
+ onSuccess: function(request) { element.fire("ajax:success", request); },
97
+ onFailure: function(request) { element.fire("ajax:failure", request); }
98
+ });
99
+
100
+ element.fire("ajax:after");
101
+ }
102
+
103
+ function handleMethod(element) {
104
+ var method = element.readAttribute('data-method'),
105
+ url = element.readAttribute('href'),
106
+ csrf_param = $$('meta[name=csrf-param]')[0],
107
+ csrf_token = $$('meta[name=csrf-token]')[0];
108
+
109
+ var form = new Element('form', { method: "POST", action: url, style: "display: none;" });
110
+ element.parentNode.insert(form);
111
+
112
+ if (method !== 'post') {
113
+ var field = new Element('input', { type: 'hidden', name: '_method', value: method });
114
+ form.insert(field);
115
+ }
116
+
117
+ if (csrf_param) {
118
+ var param = csrf_param.readAttribute('content'),
119
+ token = csrf_token.readAttribute('content'),
120
+ field = new Element('input', { type: 'hidden', name: param, value: token });
121
+ form.insert(field);
122
+ }
123
+
124
+ form.submit();
125
+ }
126
+
127
+
128
+ document.on("click", "*[data-confirm]", function(event, element) {
129
+ var message = element.readAttribute('data-confirm');
130
+ if (!confirm(message)) event.stop();
131
+ });
132
+
133
+ document.on("click", "a[data-remote]", function(event, element) {
134
+ if (event.stopped) return;
135
+ handleRemote(element);
136
+ event.stop();
137
+ });
138
+
139
+ document.on("click", "a[data-method]", function(event, element) {
140
+ if (event.stopped) return;
141
+ handleMethod(element);
142
+ event.stop();
143
+ });
144
+
145
+ document.on("submit", function(event) {
146
+ var element = event.findElement(),
147
+ message = element.readAttribute('data-confirm');
148
+ if (message && !confirm(message)) {
149
+ event.stop();
150
+ return false;
151
+ }
152
+
153
+ var inputs = element.select("input[type=submit][data-disable-with]");
154
+ inputs.each(function(input) {
155
+ input.disabled = true;
156
+ input.writeAttribute('data-original-value', input.value);
157
+ input.value = input.readAttribute('data-disable-with');
158
+ });
159
+
160
+ var element = event.findElement("form[data-remote]");
161
+ if (element) {
162
+ handleRemote(element);
163
+ event.stop();
164
+ }
165
+ });
166
+
167
+ document.on("ajax:after", "form", function(event, element) {
168
+ var inputs = element.select("input[type=submit][disabled=true][data-disable-with]");
169
+ inputs.each(function(input) {
170
+ input.value = input.readAttribute('data-original-value');
171
+ input.removeAttribute('data-original-value');
172
+ input.disabled = false;
173
+ });
174
+ });
175
+
176
+ Ajax.Responders.register({
177
+ onCreate: function(request) {
178
+ var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
179
+
180
+ if (csrf_meta_tag) {
181
+ var header = 'X-CSRF-Token',
182
+ token = csrf_meta_tag.readAttribute('content');
183
+
184
+ if (!request.options.requestHeaders) {
185
+ request.options.requestHeaders = {};
186
+ }
187
+ request.options.requestHeaders[header] = token;
188
+ }
189
+ }
190
+ });
191
+ })();
@@ -0,0 +1,5 @@
1
+ # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
2
+ #
3
+ # To ban all spiders from the entire site uncomment the next two lines:
4
+ # User-Agent: *
5
+ # Disallow: /
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -1,18 +1,17 @@
1
- begin
2
- require 'spec'
3
- rescue LoadError
4
- require 'rubygems' unless ENV['NO_RUBYGEMS']
5
- gem 'rspec'
6
- require 'spec'
7
- end
1
+ require "rails_app/config/environment"
2
+ require 'rspec/rails'
8
3
 
9
4
  $:.unshift(File.dirname(__FILE__) + '/../lib')
10
- require 'rubygems'
11
- require 'active_support'
12
- require 'active_record'
13
- require 'action_controller'
14
-
15
5
  require 'acts_as_api'
16
6
 
17
- require 'spec_models'
7
+ ENV["RAILS_ENV"] = "test"
8
+
9
+ # Requires supporting ruby files with custom matchers and macros, etc,
10
+ # in spec/support/ and its subdirectories.
11
+ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|file| require file }
18
12
 
13
+ load_schema = lambda {
14
+ load "#{Rails.root.to_s}/db/schema.rb" # use db agnostic schema by default
15
+ # ActiveRecord::Migrator.up('db/migrate') # use migrations
16
+ }
17
+ silence_stream(STDOUT, &load_schema)
@@ -0,0 +1,23 @@
1
+ module ApiTestHelpers
2
+
3
+ def response_body
4
+ response.body.strip
5
+ end
6
+
7
+ def response_body_json
8
+ ActiveSupport::JSON.decode(response_body)
9
+ end
10
+
11
+ def response_body_jsonp(callback)
12
+ jsonp_callback(callback).match(response_body)
13
+ end
14
+
15
+ def jsonp_callback(callback)
16
+ /\A#{callback}\((.*),\s+\d{3}\)\z/
17
+ end
18
+
19
+ end
20
+
21
+ RSpec.configure do |c|
22
+ c.include ApiTestHelpers
23
+ end
metadata CHANGED
@@ -2,12 +2,12 @@
2
2
  name: acts_as_api
3
3
  version: !ruby/object:Gem::Version
4
4
  hash: 19
5
- prerelease: false
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 2
10
- version: 0.2.2
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - "Christian B\xC3\xA4uerlein"
@@ -15,11 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-21 00:00:00 +02:00
18
+ date: 2011-02-22 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: activerecord
22
+ name: activemodel
23
23
  prerelease: false
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
25
  none: false
@@ -35,7 +35,7 @@ dependencies:
35
35
  type: :runtime
36
36
  version_requirements: *id001
37
37
  - !ruby/object:Gem::Dependency
38
- name: actionpack
38
+ name: activesupport
39
39
  prerelease: false
40
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
41
  none: false
@@ -51,38 +51,38 @@ dependencies:
51
51
  type: :runtime
52
52
  version_requirements: *id002
53
53
  - !ruby/object:Gem::Dependency
54
- name: rubyforge
54
+ name: rack
55
55
  prerelease: false
56
56
  requirement: &id003 !ruby/object:Gem::Requirement
57
57
  none: false
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- hash: 7
61
+ hash: 19
62
62
  segments:
63
- - 2
63
+ - 1
64
+ - 1
64
65
  - 0
65
- - 4
66
- version: 2.0.4
67
- type: :development
66
+ version: 1.1.0
67
+ type: :runtime
68
68
  version_requirements: *id003
69
69
  - !ruby/object:Gem::Dependency
70
- name: hoe
70
+ name: rails
71
71
  prerelease: false
72
72
  requirement: &id004 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ">="
76
76
  - !ruby/object:Gem::Version
77
- hash: 21
77
+ hash: 7
78
78
  segments:
79
- - 2
80
- - 6
81
- - 1
82
- version: 2.6.1
79
+ - 3
80
+ - 0
81
+ - 0
82
+ version: 3.0.0
83
83
  type: :development
84
84
  version_requirements: *id004
85
- description: acts_as_api makes creating XML/JSON responses in Rails 3 easy and fun.
85
+ description: acts_as_api enriches the models and controllers of your app in a rails-like way so you can easily determine how your XML/JSON API responses should look like.
86
86
  email:
87
87
  - christian@ffwdme.com
88
88
  executables: []
@@ -90,32 +90,85 @@ executables: []
90
90
  extensions: []
91
91
 
92
92
  extra_rdoc_files:
93
- - History.txt
94
- - Manifest.txt
95
- files:
96
93
  - README.rdoc
94
+ files:
95
+ - .gitignore
96
+ - Gemfile
97
97
  - History.txt
98
- - Manifest.txt
98
+ - README.rdoc
99
99
  - Rakefile
100
+ - acts_as_api.gemspec
101
+ - examples/introduction/docco.css
102
+ - examples/introduction/index.html
103
+ - examples/introduction/index.rb
104
+ - examples/introduction/layout.mustache
100
105
  - lib/acts_as_api.rb
106
+ - lib/acts_as_api/api_template.rb
101
107
  - lib/acts_as_api/array.rb
102
108
  - lib/acts_as_api/base.rb
109
+ - lib/acts_as_api/config.rb
110
+ - lib/acts_as_api/rails_renderer.rb
103
111
  - lib/acts_as_api/rendering.rb
104
- - script/console
105
- - script/destroy
106
- - script/generate
107
- - spec/acts_as_api_spec.rb
112
+ - lib/acts_as_api/version.rb
113
+ - spec/controllers/respond_with_users_controller_spec.rb
114
+ - spec/controllers/users_controller_spec.rb
115
+ - spec/models/base_spec.rb
116
+ - spec/rails_app/.gitignore
117
+ - spec/rails_app/Rakefile
118
+ - spec/rails_app/app/controllers/application_controller.rb
119
+ - spec/rails_app/app/controllers/respond_with_users_controller.rb
120
+ - spec/rails_app/app/controllers/users_controller.rb
121
+ - spec/rails_app/app/helpers/application_helper.rb
122
+ - spec/rails_app/app/models/task.rb
123
+ - spec/rails_app/app/models/untouched.rb
124
+ - spec/rails_app/app/models/user.rb
125
+ - spec/rails_app/app/views/layouts/application.html.erb
126
+ - spec/rails_app/config.ru
127
+ - spec/rails_app/config/application.rb
128
+ - spec/rails_app/config/boot.rb
129
+ - spec/rails_app/config/database.yml
130
+ - spec/rails_app/config/environment.rb
131
+ - spec/rails_app/config/environments/development.rb
132
+ - spec/rails_app/config/environments/production.rb
133
+ - spec/rails_app/config/environments/test.rb
134
+ - spec/rails_app/config/initializers/backtrace_silencers.rb
135
+ - spec/rails_app/config/initializers/inflections.rb
136
+ - spec/rails_app/config/initializers/mime_types.rb
137
+ - spec/rails_app/config/initializers/secret_token.rb
138
+ - spec/rails_app/config/initializers/session_store.rb
139
+ - spec/rails_app/config/locales/en.yml
140
+ - spec/rails_app/config/routes.rb
141
+ - spec/rails_app/db/migrate/20110214201640_create_tables.rb
142
+ - spec/rails_app/db/schema.rb
143
+ - spec/rails_app/db/seeds.rb
144
+ - spec/rails_app/lib/tasks/.gitkeep
145
+ - spec/rails_app/public/404.html
146
+ - spec/rails_app/public/422.html
147
+ - spec/rails_app/public/500.html
148
+ - spec/rails_app/public/favicon.ico
149
+ - spec/rails_app/public/images/rails.png
150
+ - spec/rails_app/public/index.html
151
+ - spec/rails_app/public/javascripts/application.js
152
+ - spec/rails_app/public/javascripts/controls.js
153
+ - spec/rails_app/public/javascripts/dragdrop.js
154
+ - spec/rails_app/public/javascripts/effects.js
155
+ - spec/rails_app/public/javascripts/prototype.js
156
+ - spec/rails_app/public/javascripts/rails.js
157
+ - spec/rails_app/public/robots.txt
158
+ - spec/rails_app/public/stylesheets/.gitkeep
159
+ - spec/rails_app/script/rails
108
160
  - spec/spec.opts
109
161
  - spec/spec_helper.rb
110
- - tasks/rspec.rake
162
+ - spec/support/api_test_helpers.rb
111
163
  has_rdoc: true
112
- homepage: http://github.com/fabrik42/acts_as_api
164
+ homepage: https://github.com/fabrik42/acts_as_api
113
165
  licenses: []
114
166
 
115
167
  post_install_message:
116
168
  rdoc_options:
117
169
  - --main
118
170
  - README.rdoc
171
+ - --charset=UTF-8
119
172
  require_paths:
120
173
  - lib
121
174
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -138,10 +191,59 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
191
  version: "0"
139
192
  requirements: []
140
193
 
141
- rubyforge_project: acts_as_api
142
- rubygems_version: 1.3.7
194
+ rubyforge_project:
195
+ rubygems_version: 1.4.2
143
196
  signing_key:
144
197
  specification_version: 3
145
- summary: acts_as_api makes creating XML/JSON responses in Rails 3 easy and fun.
146
- test_files: []
147
-
198
+ summary: Makes creating XML/JSON responses in Rails 3 easy and fun.
199
+ test_files:
200
+ - spec/controllers/respond_with_users_controller_spec.rb
201
+ - spec/controllers/users_controller_spec.rb
202
+ - spec/models/base_spec.rb
203
+ - spec/rails_app/.gitignore
204
+ - spec/rails_app/Rakefile
205
+ - spec/rails_app/app/controllers/application_controller.rb
206
+ - spec/rails_app/app/controllers/respond_with_users_controller.rb
207
+ - spec/rails_app/app/controllers/users_controller.rb
208
+ - spec/rails_app/app/helpers/application_helper.rb
209
+ - spec/rails_app/app/models/task.rb
210
+ - spec/rails_app/app/models/untouched.rb
211
+ - spec/rails_app/app/models/user.rb
212
+ - spec/rails_app/app/views/layouts/application.html.erb
213
+ - spec/rails_app/config.ru
214
+ - spec/rails_app/config/application.rb
215
+ - spec/rails_app/config/boot.rb
216
+ - spec/rails_app/config/database.yml
217
+ - spec/rails_app/config/environment.rb
218
+ - spec/rails_app/config/environments/development.rb
219
+ - spec/rails_app/config/environments/production.rb
220
+ - spec/rails_app/config/environments/test.rb
221
+ - spec/rails_app/config/initializers/backtrace_silencers.rb
222
+ - spec/rails_app/config/initializers/inflections.rb
223
+ - spec/rails_app/config/initializers/mime_types.rb
224
+ - spec/rails_app/config/initializers/secret_token.rb
225
+ - spec/rails_app/config/initializers/session_store.rb
226
+ - spec/rails_app/config/locales/en.yml
227
+ - spec/rails_app/config/routes.rb
228
+ - spec/rails_app/db/migrate/20110214201640_create_tables.rb
229
+ - spec/rails_app/db/schema.rb
230
+ - spec/rails_app/db/seeds.rb
231
+ - spec/rails_app/lib/tasks/.gitkeep
232
+ - spec/rails_app/public/404.html
233
+ - spec/rails_app/public/422.html
234
+ - spec/rails_app/public/500.html
235
+ - spec/rails_app/public/favicon.ico
236
+ - spec/rails_app/public/images/rails.png
237
+ - spec/rails_app/public/index.html
238
+ - spec/rails_app/public/javascripts/application.js
239
+ - spec/rails_app/public/javascripts/controls.js
240
+ - spec/rails_app/public/javascripts/dragdrop.js
241
+ - spec/rails_app/public/javascripts/effects.js
242
+ - spec/rails_app/public/javascripts/prototype.js
243
+ - spec/rails_app/public/javascripts/rails.js
244
+ - spec/rails_app/public/robots.txt
245
+ - spec/rails_app/public/stylesheets/.gitkeep
246
+ - spec/rails_app/script/rails
247
+ - spec/spec.opts
248
+ - spec/spec_helper.rb
249
+ - spec/support/api_test_helpers.rb