rails-api 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Rails::API
2
2
 
3
+ [![Build Status](https://secure.travis-ci.org/spastorino/rails-api.png?branch=master)](http://travis-ci.org/spastorino/rails-api)
4
+
3
5
  **Rails::API** is a subset of a normal Rails application, created for applications that don't require all functionality that a complete Rails application provides. It is a bit more lightweight, and consequently a bit faster than a normal Rails application. The main example for its usage is in API applications only, where you usually don't need the entire Rails middleware stack nor template generation.
4
6
 
5
7
  ## Using Rails for API-only Apps
@@ -76,9 +78,8 @@ Then generate a new **Rails::API** app:
76
78
 
77
79
  rails-api new my_api
78
80
 
79
- This will do three main things for you:
81
+ This will do two main things for you:
80
82
 
81
- * Make the application inherit from *Rails::ApiApplication* instead of *Rails::Application*. This will configure your application to start with a more limited set of middleware than normal. Specifically, it will not include any middleware primarily useful for browser applications (like cookie support) by default.
82
83
  * Make *ApplicationController* inherit from *ActionController::API* instead of *ActionController::Base*. As with middleware, this will leave out any *ActionController* modules that provide functionality primarily used by browser applications.
83
84
  * Configure the generators to skip generating views, helpers and assets when you generate a new resource.
84
85
 
@@ -92,22 +93,6 @@ Add the gem to your *Gemfile*:
92
93
 
93
94
  And run `bundle` to install the gem.
94
95
 
95
- In *config/application.rb*, change your *Application* class to inherit from *Rails::ApiApplication*:
96
-
97
- ```ruby
98
- # instead of
99
- module MyApi
100
- class Application < Rails::Application
101
- end
102
- end
103
-
104
- # do
105
- module MyApi
106
- class Application < Rails::ApiApplication
107
- end
108
- end
109
- ```
110
-
111
96
  Change *app/controllers/application_controller.rb*:
112
97
 
113
98
  ```ruby
@@ -124,22 +109,22 @@ And comment out the `protect_from_forgery` call if you are using it.
124
109
 
125
110
  ### Choosing Middlewares
126
111
 
127
- An api application comes with the following middlewares by default.
112
+ An API application comes with the following middlewares by default.
128
113
 
129
- * *Rack::Cache*: Caches responses with public *Cache-Control* headers using HTTP caching semantics.
130
- * *Rack::Sendfile*: Uses a front-end server's file serving support from your Rails application.
131
- * *Rack::Lock*: If your application is not marked as threadsafe (`config.threadsafe!`), this middleware will add a mutex around your requests.
132
- * *ActionDispatch::RequestId*
133
- * *Rails::Rack::Logger*
134
- * *Rack::Runtime*: Adds a header to the response listing the total runtime of the request.
135
- * *ActionDispatch::ShowExceptions*: Rescue exceptions and re-dispatch them to an exception handling application.
136
114
  * *ActionDispatch::DebugExceptions*: Log exceptions.
137
- * *ActionDispatch::RemoteIp*: Protect against IP spoofing attacks.
138
- * *ActionDispatch::Reloader*: In development mode, support code reloading.
139
- * *ActionDispatch::ParamsParser*: Parse XML, YAML and JSON parameters when the request's *Content-Type* is one of those.
140
115
  * *ActionDispatch::Head*: Dispatch *HEAD* requests as *GET* requests, and return only the status code and headers.
116
+ * *ActionDispatch::ParamsParser*: Parse XML, YAML and JSON parameters when the request's *Content-Type* is one of those.
117
+ * *ActionDispatch::Reloader*: In development mode, support code reloading.
118
+ * *ActionDispatch::RemoteIp*: Protect against IP spoofing attacks.
119
+ * *ActionDispatch::RequestId*: Makes a unique request id available, sending the id to the client via the X-Request-Id header. The unique request id can be used to trace a request end-to-end and would typically end up being part of log files from multiple pieces of the stack.
120
+ * *ActionDispatch::ShowExceptions*: Rescue exceptions and re-dispatch them to an exception handling application.
121
+ * *Rack::Cache*: Caches responses with public *Cache-Control* headers using HTTP caching semantics.
141
122
  * *Rack::ConditionalGet*: Supports the `stale?` feature in Rails controllers.
142
123
  * *Rack::ETag*: Automatically set an *ETag* on all string responses. This means that if the same response is returned from a controller for the same URL, the server will return a *304 Not Modified*, even if no additional caching steps are taken. This is primarily a client-side optimization; it reduces bandwidth costs but not server processing time.
124
+ * *Rack::Lock*: If your application is not marked as threadsafe (`config.threadsafe!`), this middleware will add a mutex around your requests.
125
+ * *Rack::Runtime*: Adds a header to the response listing the total runtime of the request.
126
+ * *Rack::Sendfile*: Uses a front-end server's file serving support from your Rails application.
127
+ * *Rails::Rack::Logger*: Log the request started and flush all loggers after it.
143
128
 
144
129
  Other plugins, including *ActiveRecord*, may add additional middlewares. In general, these middlewares are agnostic to the type of app you are building, and make sense in an API-only Rails application.
145
130
 
@@ -165,7 +150,7 @@ config.middleware.use Rack::MethodOverride
165
150
 
166
151
  #### Removing Middlewares
167
152
 
168
- If you don't want to use a middleware that is included by default in the api middleware set, you can remove it using *config.middleware.delete*:
153
+ If you don't want to use a middleware that is included by default in the API middleware set, you can remove it using *config.middleware.delete*:
169
154
 
170
155
  ```ruby
171
156
  config.middleware.delete ::Rack::Sendfile
@@ -175,7 +160,7 @@ Keep in mind that removing these features may remove support for certain feature
175
160
 
176
161
  ### Choosing Controller Modules
177
162
 
178
- An api application (using *ActionController::API*) comes with the following controller modules by default:
163
+ An API application (using *ActionController::API*) comes with the following controller modules by default:
179
164
 
180
165
  * *ActionController::UrlFor*: Makes *url_for* and friends available
181
166
  * *ActionController::Redirecting*: Support for *redirect_to*
@@ -202,14 +187,13 @@ All Action Controller modules know about their dependent modules, so you can fee
202
187
  Some common modules you might want to add:
203
188
 
204
189
  * *AbstractController::Translation*: Support for the *l* and *t* localization and translation methods. These delegate to *I18n.translate* and *I18n.localize*.
205
- * *ActionController::HTTPAuthentication::Basic* (or *Digest* or *Token*): Support for basic, digest or token HTTP authentication.
190
+ * *ActionController::HttpAuthentication::Basic::ControllerMethods* (or *Digest* or *Token*): Support for basic, digest or token HTTP authentication.
206
191
  * *AbstractController::Layouts*: Support for layouts when rendering.
207
192
  * *ActionController::MimeResponds*: Support for content negotiation (*respond_to*, *respond_with*).
208
193
  * *ActionController::Cookies*: Support for *cookies*, which includes support for signed and encrypted cookies. This requires the cookie middleware.
209
194
 
210
195
  The best place to add a module is in your *ApplicationController*. You can also add modules to individual controllers.
211
196
 
212
-
213
197
  ## Contributing
214
198
 
215
199
  1. Fork it
@@ -98,6 +98,8 @@ module ActionController
98
98
  def wrap_parameters(*); end
99
99
  def helpers_path=(*); end
100
100
  def allow_forgery_protection=(*); end
101
+ def helper_method(*); end
102
+ def helper(*); end
101
103
  end
102
104
 
103
105
  extend Compabitility
@@ -11,7 +11,7 @@ module Rails
11
11
  end
12
12
 
13
13
  if config.force_ssl
14
- middleware.use ::ActionDispatch::SSL, config.ssl_options
14
+ middleware.use ssl_module, config.ssl_options
15
15
  end
16
16
 
17
17
  if config.action_dispatch.x_sendfile_header.present?
@@ -64,6 +64,15 @@ module Rails
64
64
 
65
65
  private
66
66
 
67
+ def ssl_module
68
+ if defined? ::ActionDispatch::SSL
69
+ ::ActionDispatch::SSL
70
+ else
71
+ require 'rack/ssl'
72
+ ::Rack::SSL
73
+ end
74
+ end
75
+
67
76
  def setup_generators!
68
77
  generators = config.generators
69
78
 
@@ -4,3 +4,8 @@ require 'rails/generators/rails/app/app_generator'
4
4
  Rails::Generators::AppGenerator.source_paths.unshift(
5
5
  File.expand_path('../../../../templates/rails/app', __FILE__)
6
6
  )
7
+
8
+ class Rails::AppBuilder
9
+ undef tmp
10
+ undef vendor
11
+ end
@@ -9,8 +9,6 @@ gem 'rails-api'
9
9
  <%= "gem 'jruby-openssl'\n" if defined?(JRUBY_VERSION) -%>
10
10
  <%= "gem 'json'\n" if RUBY_VERSION < "1.9.2" -%>
11
11
 
12
- <%= javascript_gemfile_entry %>
13
-
14
12
  # To use ActiveModel has_secure_password
15
13
  # gem 'bcrypt-ruby', '~> 3.0.0'
16
14
 
@@ -1,5 +1,5 @@
1
1
  module Rails
2
2
  module API
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
@@ -10,6 +10,7 @@ class AppGeneratorTest < Rails::Generators::TestCase
10
10
  run_generator
11
11
 
12
12
  default_files.each { |path| assert_file path }
13
+ skipped_files.each { |path| assert_no_file path }
13
14
  end
14
15
 
15
16
  def test_api_modified_files
@@ -18,6 +19,7 @@ class AppGeneratorTest < Rails::Generators::TestCase
18
19
  assert_file "Gemfile" do |content|
19
20
  assert_match(/gem 'rails-api'/, content)
20
21
  assert_no_match(/gem 'coffee-rails'/, content)
22
+ assert_no_match(/gem 'jquery-rails'/, content)
21
23
  assert_no_match(/gem 'sass-rails'/, content)
22
24
  end
23
25
  assert_file "app/controllers/application_controller.rb", /ActionController::API/
@@ -47,10 +49,11 @@ class AppGeneratorTest < Rails::Generators::TestCase
47
49
  test/functional
48
50
  test/integration
49
51
  test/performance
50
- test/unit
51
- vendor
52
- vendor/assets
53
- tmp/cache
52
+ test/unit)
53
+ end
54
+
55
+ def skipped_files
56
+ %w(vendor/assets
54
57
  tmp/cache/assets)
55
58
  end
56
59
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-api
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Santiago Pastorino and Carlos Antonio da Silva
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-04-20 00:00:00 -03:00
18
+ date: 2012-06-06 00:00:00 -03:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency