versioncake 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- versioncake (0.3.1)
4
+ versioncake (0.4.0)
5
5
  actionpack (>= 3.0)
6
6
  activesupport (>= 3.0)
7
7
  railties (>= 3.0)
data/README.md CHANGED
@@ -19,6 +19,8 @@ app/views/posts/
19
19
  - Clients can request API versions through different strategies
20
20
  - Dry your controller logic with exposed helpers
21
21
 
22
+ Check out https://github.com/bwillis/350-rest-api-versioning for a comparison of traditional versioning approaches and a versioncake implementation.
23
+
22
24
  ## Install
23
25
 
24
26
  ```
@@ -168,9 +170,14 @@ config.view_version_extraction_strategy = :query_parameter # [:http_header, :htt
168
170
  ```
169
171
  These are the available strategies:
170
172
  - **query_parameter**: version in the url query parameter, for testing or to override for special case i.e. ```http://localhost:3000/posts.json?api_version=1``` (This is the default.)
171
- - **http_header**: Api version HTTP header ie. ```API-Version: 1```
173
+ - **http_header**: Api version HTTP header ie. ```X-API-Version: 1```
172
174
  - **http_accept_parameter**: HTTP Accept header ie. ```Accept: application/xml; version=1``` [why do this?](http://blog.steveklabnik.com/posts/2011-07-03-nobody-understands-rest-or-http#i_want_my_api_to_be_versioned)
173
- - **custom**: `lambda {|request| request.headers["HTTP_X_API_VERSION"].to_i }` takes the request object and must return an integer
175
+ - **custom**: `lambda {|request| request.headers["HTTP_X_MY_VERSION"].to_i }` takes the request object and must return an integer
176
+
177
+ The strategies use a default string of `api_version`, but that can be changed:
178
+ ```ruby
179
+ config.view_version_string = "special_version_parameter_name"
180
+ ```
174
181
 
175
182
  ### Version your views
176
183
 
@@ -10,6 +10,10 @@ class ActionViewVersions < Rails::Railtie
10
10
  if app.config.respond_to?(:view_version_extraction_strategy)
11
11
  ActionView::Template::Versions.extraction_strategy = app.config.view_version_extraction_strategy
12
12
  end
13
+
14
+ if app.config.respond_to?(:view_version_string)
15
+ ActionView::Template::Versions.version_string = app.config.view_version_string
16
+ end
13
17
  end
14
18
  end
15
19
  end
@@ -4,7 +4,8 @@ module ActionView
4
4
  class Template
5
5
  module Versions
6
6
 
7
- VERSION_STRING = "api_version"
7
+ mattr_accessor :version_string
8
+ self.version_string = "api_version"
8
9
 
9
10
  mattr_accessor :supported_version_numbers
10
11
  self.supported_version_numbers = []
@@ -14,18 +15,18 @@ module ActionView
14
15
 
15
16
  EXTRACTION_STRATEGIES = {
16
17
  :query_parameter => lambda { |request|
17
- if request.query_parameters.has_key? VERSION_STRING.to_sym
18
- request.query_parameters[VERSION_STRING.to_sym].to_i
18
+ if request.query_parameters.has_key? @@version_string.to_sym
19
+ request.query_parameters[@@version_string.to_sym].to_i
19
20
  end
20
21
  },
21
22
  :http_header => lambda { |request|
22
- if request.headers.has_key? "HTTP_#{VERSION_STRING.upcase}"
23
- request.headers["HTTP_#{VERSION_STRING.upcase}"].to_i
23
+ if request.headers.has_key? "HTTP_X_#{@@version_string.upcase}"
24
+ request.headers["HTTP_X_#{@@version_string.upcase}"].to_i
24
25
  end
25
26
  },
26
27
  :http_accept_parameter => lambda { |request|
27
28
  if request.headers.has_key?("HTTP_ACCEPT") &&
28
- match = request.headers["HTTP_ACCEPT"].match(%{#{VERSION_STRING}=([0-9])})
29
+ match = request.headers["HTTP_ACCEPT"].match(%{#{@@version_string}=([0-9])})
29
30
  match[1].to_i
30
31
  end
31
32
  }
@@ -1,3 +1,3 @@
1
1
  module VersionCake
2
- VERSION = "0.3.2"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -4,23 +4,33 @@ require "action_controller"
4
4
  require "action_controller/test_case"
5
5
 
6
6
  class RendersControllerTest < ActionController::TestCase
7
+
8
+ setup do
9
+ # change the version string for configuration testing
10
+ ActionView::Template::Versions.version_string = "version"
11
+ end
12
+
13
+ teardown do
14
+ ActionView::Template::Versions.version_string = "api_version"
15
+ end
16
+
7
17
  test "render latest version of partial" do
8
18
  get :index
9
19
  assert_equal @response.body, "index.v2.html.erb"
10
20
  end
11
21
 
12
22
  test "exposes the requested version" do
13
- get :index, "api_version" => "1"
23
+ get :index, "version" => "1"
14
24
  assert_equal @controller.requested_version, 1
15
25
  end
16
26
 
17
27
  test "exposes latest version when requesting the latest" do
18
- get :index, "api_version" => "3"
28
+ get :index, "version" => "3"
19
29
  assert @controller.is_latest_version
20
30
  end
21
31
 
22
32
  test "reports not the latest version" do
23
- get :index, "api_version" => "1"
33
+ get :index, "version" => "1"
24
34
  assert !@controller.is_latest_version
25
35
  end
26
36
 
@@ -66,19 +76,19 @@ tests RendersController
66
76
  end
67
77
 
68
78
  test "renders version 1 of the partial based on the header API-Version" do
69
- @controller.request.stubs(:headers).returns({"HTTP_API_VERSION" => "1"})
79
+ @controller.request.stubs(:headers).returns({"HTTP_X_API_VERSION" => "1"})
70
80
  get :index
71
81
  assert_equal @response.body, "index.v1.html.erb"
72
82
  end
73
83
 
74
84
  test "renders version 2 of the partial based on the header API-Version" do
75
- @controller.request.stubs(:headers).returns({"HTTP_API_VERSION" => "2"})
85
+ @controller.request.stubs(:headers).returns({"HTTP_X_API_VERSION" => "2"})
76
86
  get :index
77
87
  assert_equal @response.body, "index.v2.html.erb"
78
88
  end
79
89
 
80
90
  test "renders the latest available version (v2) of the partial based on the header API-Version" do
81
- @controller.request.stubs(:headers).returns({"HTTP_API_VERSION" => "3"})
91
+ @controller.request.stubs(:headers).returns({"HTTP_X_API_VERSION" => "3"})
82
92
  get :index
83
93
  assert_equal @response.body, "index.v2.html.erb"
84
94
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: versioncake
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-10-14 00:00:00.000000000 Z
13
+ date: 2012-10-29 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: actionpack
@@ -160,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
160
160
  version: '0'
161
161
  requirements: []
162
162
  rubyforge_project:
163
- rubygems_version: 1.8.24
163
+ rubygems_version: 1.8.19
164
164
  signing_key:
165
165
  specification_version: 3
166
166
  summary: Easily render versions of your rails views.