versioncake 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OTZjMGMyZDYzMThlZTljNzJlYjliY2FkMmYwZGRhOWYyMTc5YjZjNw==
4
+ YTY4ZDYxNWY2ZDdjMjEwMjQyZDYwZDQ1ZTM2MmYyMzZkZTQzYjE1NA==
5
5
  data.tar.gz: !binary |-
6
- MWVhM2IzMGVlODFhYWFhOTkyNTc2MTYzMzMzMTlmNTExODM4YjAxMQ==
6
+ MjcxYTE4N2NjMmQxMjU3NTIwNDA2ZDQzNTcyMWQ2YzU0ZTA5ODBhZg==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YTg2MjZkMWI1ODkxMzM1MjJlZWExMDNjZGQyZjYwZjc3N2MwODkzNjM4OGZj
10
- NGQxMDY2ZWZiZGZiOWI3MTBiOGE1YzdhZTExOGJmMTIzYjczYjk4ZTNjMTU2
11
- NDM2MDMwOTVjMmIzMDBhNmM0YzQxN2JlOTJiZWYyYjQzOGM5NzA=
9
+ YjA2ZDU2MDEzMjk3NzBhODNmZDhlNTY1ZDI1Y2I5OWQ2OWE4OTM1ODBhNjg0
10
+ ZDUzYTI5MmNhYTNiODg1M2IxNTY3MzFmNDNjNjFhZWQyZTM1MjI5NzUyZGUx
11
+ NGNmZWExN2QzOTgzMGM2MzZkMzA5NDBiN2M0ZTI2MjUzOTkyYTU=
12
12
  data.tar.gz: !binary |-
13
- OTJhNDY0ZDM1MGFlNDI5NDZjN2MyNGNmMGI1NDcwYTc3MzVmNjgwNjJmMGQy
14
- NjFmOTg5NzI5ODkwYjY1ODczYzkwODI2NjBhODQyZDY3NTNjNDRjMTZhZjky
15
- MjQ2MjEyNjkwODMzZGQ1OGZkZTVlMmYzNWFjZTMxNmI4ZGU5MmI=
13
+ NDljNjI2NDk3ZjY2YTI3NGZlMTFiY2IxNmYxNTU0YjdkMTVlOTFhZjY5ZmM1
14
+ N2M5ODM4MmM3YjAzMDM3OGY0YWNmMDk4YzdiNTk2MDExZmEwMDk1MDgxMjgy
15
+ NzI2OTFiYzA3YTc0NTZmZjVhNTExN2NmN2U4YmYwZWJjYzA4ZDM=
@@ -1,13 +1,39 @@
1
1
  ## Unreleased Changes
2
2
 
3
- [Full Changelog](https://github.com/bwillis/versioncake/compare/v2.1...master)
3
+ [Full Changelog](https://github.com/bwillis/versioncake/compare/v2.3...master)
4
4
 
5
5
  Bug Fixes:
6
6
 
7
+ * None
8
+
9
+ Enhancements:
10
+
11
+ * None
12
+
13
+ Deprecations:
14
+
15
+ * None
16
+
17
+ ## 2.3.0 (Mar 6, 2014)
18
+
19
+ [Full Changelog](https://github.com/bwillis/versioncake/compare/v2.2...v2.3)
20
+
7
21
  Enhancements:
8
22
 
23
+ * Allow an object instance to be used as a custom strategy
24
+
25
+ ## 2.2.0 (Mar 5, 2014)
26
+
27
+ [Full Changelog](https://github.com/bwillis/versioncake/compare/v2.1...v2.2)
28
+
29
+ Bug Fixes:
30
+
31
+ * Be defensive with the return value of a custom strategy (#27)
32
+
9
33
  ## 2.1.0 (Mar 3, 2014)
10
34
 
35
+ [Full Changelog](https://github.com/bwillis/versioncake/compare/v2.0...v2.1)
36
+
11
37
  Enhancements:
12
38
 
13
39
  * Allow simpler handling of an unsupported versioned request by raising a custom error (issues #24 and #25) thanks [Richard Nuno](https://github.com/richardnuno) and [Andres Camacho](https://github.com/andresfcamacho)
@@ -40,20 +66,12 @@ Bug Fixes:
40
66
 
41
67
  [Full Changelog](https://github.com/bwillis/versioncake/compare/v1.1...v1.2)
42
68
 
43
- Bug Fixes:
44
-
45
- * None
46
-
47
69
  Enhancements:
48
70
 
49
71
  * Support Rails 4
50
72
  * Adding Rails version testing with [Appraisals](https://github.com/thoughtbot/appraisal)
51
73
  * Added contribution guide
52
74
 
53
- Deprecations:
54
-
55
- * None
56
-
57
75
  ## 1.1.0 (May 18, 2013)
58
76
 
59
77
  [Full Changelog](https://github.com/bwillis/versioncake/compare/v1.0...v1.1)
@@ -69,10 +87,6 @@ Enhancements:
69
87
  * Internal refactoring of strategies for better testability.
70
88
  * Isolated Rails hooks.
71
89
 
72
- Deprecations:
73
-
74
- * None
75
-
76
90
  ## 1.0.0 (March 14, 2013)
77
91
 
78
92
  [Full Changelog](https://github.com/bwillis/versioncake/compare/v0.5...v1.0)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- versioncake (2.2.0)
4
+ versioncake (2.3.0)
5
5
  actionpack (>= 3.2)
6
6
  activesupport (>= 3.2)
7
7
  railties (>= 3.2)
data/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  Co-authored by Ben Willis ([bwillis](https://github.com/bwillis/)) and Jim Jones ([aantix](https://github.com/aantix)).
10
10
 
11
- Version Cake is an unobtrusive way to version APIs in your Rails app.
11
+ Version Cake is an unobtrusive way to version APIs in your Rails app.
12
12
 
13
13
  - Easily version any view with their API version:
14
14
 
@@ -39,7 +39,7 @@ gem install versioncake
39
39
  | [1.1](CHANGELOG.md#110-may-18-2013) | Yes | No | No |
40
40
  | [1.2](CHANGELOG.md#120-may-26-2013) | Yes | Yes | No |
41
41
  | [1.3](CHANGELOG.md#130-sept-26-2013) | Yes | Yes | No |
42
- | [2.0](CHANGELOG.md#200-feb-6-2014) | Yes | Yes | Yes |
42
+ | [>2.0](CHANGELOG.md#200-feb-6-2014) | Yes | Yes | Yes |
43
43
 
44
44
  ## Upgrade v1.* -> v2.0
45
45
 
@@ -74,7 +74,7 @@ config.versioncake.extraction_strategy = :query_parameter # for simplicity
74
74
  ```
75
75
 
76
76
  Often times with APIs, depending upon the version, different logic needs to be applied. With the following controller code, the initial value of @posts includes all Post entries.
77
- But if the requested API version is three or greater, we're going to eagerly load the associated comments as well.
77
+ But if the requested API version is three or greater, we're going to eagerly load the associated comments as well.
78
78
 
79
79
  Being able to control the logic based on the api version allow you to ensure forwards and backwards compatibility for future changes.
80
80
 
@@ -119,7 +119,7 @@ end
119
119
 
120
120
  When a version is specified for which a view doesn't exist, the request degrades and renders the next lowest version number to ensure the API's backwards compatibility. In the following case, since views/posts/index.json.v3.jbuilder doesn't exist, views/posts/index.json.v1.jbuilder is rendered instead.
121
121
 
122
- #### http://localhost:3000/posts.json?api_version=3
122
+ #### http://localhost:3000/posts.json?api_version=3
123
123
  ```javascript
124
124
  [
125
125
  {
@@ -140,7 +140,7 @@ When a version is specified for which a view doesn't exist, the request degrades
140
140
 
141
141
  For a given request, if we specify the version number, and that version of the view exists, that version specific view version will be rendered. In the below case, views/posts/index.json.v1.jbuilder is rendered.
142
142
 
143
- #### http://localhost:3000/posts.json?api_version=2 or http://localhost:3000/posts.json?api_version=1
143
+ #### http://localhost:3000/posts.json?api_version=2 or http://localhost:3000/posts.json?api_version=1
144
144
  ```javascript
145
145
  [
146
146
  {
@@ -214,11 +214,11 @@ These are the available strategies:
214
214
  Strategy | Description | Example
215
215
  --- | --- | ---
216
216
  :query_parameter | version in the url query parameter, for testing or to override for special case | `http://localhost:3000/posts.json?api_version=1` (This is the default.)
217
- :path_parameter | version in the url path parameter | `api/v:api_version/`
217
+ :path_parameter | version in the url path parameter | `api/v:api_version/`
218
218
  request_parameter | version that is sent in the body of the request | Good for testing.
219
219
  :http_header | Api version HTTP header | `X-API-Version: 1`
220
220
  :http_accept_parameter | HTTP Accept header | `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)
221
- custom | takes the request object and must return an integer | lambda {|request| request.headers["HTTP_X_MY_VERSION"].to_i }
221
+ custom | takes the request object and must return an integer | lambda {|request| request.headers["HTTP_X_MY_VERSION"].to_i } or class ExtractorStrategy; def execute(request);end;end
222
222
 
223
223
  If you use the path_parameter strategy with resources routes, you will want to setup your routes.rb config file to capture the api version. You can do that in a few ways. If you have just a few api routes you might specify the path directly like this:
224
224
  ```
@@ -346,7 +346,7 @@ AppName::Application.config.versioncake.supported_version_numbers.each do |suppo
346
346
  before do
347
347
  @controller.stubs(:requested_version).returns(supported_version)
348
348
  end
349
-
349
+
350
350
  test "all versions render the correct template" do
351
351
  get :index
352
352
  assert_equal @response.body, "index.html.v1.erb"
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- versioncake (2.2.0)
4
+ versioncake (2.3.0)
5
5
  actionpack (>= 3.2)
6
6
  activesupport (>= 3.2)
7
7
  railties (>= 3.2)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- versioncake (2.2.0)
4
+ versioncake (2.3.0)
5
5
  actionpack (>= 3.2)
6
6
  activesupport (>= 3.2)
7
7
  railties (>= 3.2)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- versioncake (2.2.0)
4
+ versioncake (2.3.0)
5
5
  actionpack (>= 3.2)
6
6
  activesupport (>= 3.2)
7
7
  railties (>= 3.2)
@@ -23,22 +23,31 @@ module VersionCake
23
23
  end
24
24
 
25
25
  def self.lookup(strategy)
26
- if strategy.class == Proc
27
- if strategy.arity == 1
28
- VersionCake::CustomStrategy.new(strategy)
26
+ case strategy
27
+ when String, Symbol
28
+ strategy_name = "#{strategy}_strategy".camelize
29
+ begin
30
+ VersionCake.const_get(strategy_name).new
31
+ rescue
32
+ raise Exception, "Unknown VersionCake extraction strategy #{strategy_name}"
33
+ end
34
+ when Proc
35
+ if strategy.arity == 1
36
+ VersionCake::CustomStrategy.new(strategy)
37
+ else
38
+ raise Exception, "Custom proc extraction strategy requires a single parameter"
39
+ end
40
+ when Object
41
+ if !strategy.methods.include?(:execute)
42
+ raise Exception, "Custom extraction strategy requires an execute method"
43
+ elsif strategy.method(:execute).arity != 1
44
+ raise Exception, "Custom extraction strategy requires an execute method with a single parameter"
45
+ else
46
+ strategy
47
+ end
29
48
  else
30
- raise Exception, "Custom extraction strategy requires a single parameter"
31
- end
32
- else
33
- strategy_name = "#{strategy}_strategy".camelize
34
- begin
35
- VersionCake.const_get(strategy_name).new
36
- rescue
37
- raise Exception, "Unknown VersionCake extraction strategy #{strategy_name}"
38
- end
49
+ raise Exception, "Invalid extration strategy"
39
50
  end
40
-
41
51
  end
42
-
43
52
  end
44
- end
53
+ end
@@ -1,3 +1,3 @@
1
1
  module VersionCake
2
- VERSION = "2.2.0"
2
+ VERSION = "2.3.0"
3
3
  end
@@ -38,6 +38,15 @@ class ExtractionStrategyTest < ActiveSupport::TestCase
38
38
  assert_equal VersionCake::CustomStrategy, strategy.class
39
39
  end
40
40
 
41
+ test "it allows a custom class" do
42
+ class FakeStrategy
43
+ def execute(request); end
44
+ end
45
+ instance = FakeStrategy.new
46
+ strategy = VersionCake::ExtractionStrategy.lookup(instance)
47
+ assert_equal instance, strategy
48
+ end
49
+
41
50
  test "it fails to create a custom strategy for a proc with no parameters" do
42
51
  assert_raise(Exception) do
43
52
  VersionCake::ExtractionStrategy.lookup(lambda{})
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: 2.2.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Jones
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-03-05 00:00:00.000000000 Z
12
+ date: 2014-03-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack