versioncake 2.5.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +6 -14
  2. data/.rspec +2 -0
  3. data/.travis.yml +4 -0
  4. data/Appraisals +12 -0
  5. data/CHANGELOG.md +18 -1
  6. data/CONTRIBUTING.md +2 -2
  7. data/Gemfile.lock +96 -44
  8. data/README.md +79 -29
  9. data/RELEASE.md +1 -1
  10. data/Rakefile +3 -7
  11. data/gemfiles/rails3.2.gemfile +2 -1
  12. data/gemfiles/rails3.2.gemfile.lock +34 -10
  13. data/gemfiles/rails4.0.gemfile +2 -1
  14. data/gemfiles/rails4.0.gemfile.lock +31 -7
  15. data/gemfiles/rails4.1.gemfile +1 -1
  16. data/gemfiles/rails4.1.gemfile.lock +28 -8
  17. data/gemfiles/rails4.2.gemfile +9 -0
  18. data/gemfiles/rails4.2.gemfile.lock +133 -0
  19. data/lib/generators/templates/versioncake.rb +40 -0
  20. data/lib/generators/versioncake/install_generator.rb +12 -0
  21. data/lib/versioncake.rb +24 -3
  22. data/lib/versioncake/configuration.rb +19 -2
  23. data/lib/versioncake/controller_additions.rb +35 -23
  24. data/lib/versioncake/engine.rb +7 -0
  25. data/lib/versioncake/exceptions.rb +4 -0
  26. data/lib/versioncake/rack/middleware.rb +20 -0
  27. data/lib/versioncake/strategies/extraction_strategy.rb +8 -3
  28. data/lib/versioncake/strategies/http_accept_parameter_strategy.rb +2 -2
  29. data/lib/versioncake/strategies/http_header_strategy.rb +2 -2
  30. data/lib/versioncake/strategies/path_parameter_strategy.rb +6 -2
  31. data/lib/versioncake/strategies/query_parameter_strategy.rb +2 -2
  32. data/lib/versioncake/strategies/request_parameter_strategy.rb +2 -2
  33. data/lib/versioncake/test_helpers.rb +14 -0
  34. data/lib/versioncake/version.rb +1 -1
  35. data/lib/versioncake/version_checker.rb +28 -0
  36. data/lib/versioncake/version_context.rb +20 -0
  37. data/lib/versioncake/version_context_service.rb +47 -0
  38. data/lib/versioncake/versioned_request.rb +22 -33
  39. data/lib/versioncake/versioned_resource.rb +14 -0
  40. data/lib/versioncake/view_additions.rb +7 -7
  41. data/{test → spec}/fixtures/partials/_versioned.erb +0 -0
  42. data/{test → spec}/fixtures/partials/_versioned.v1.erb +0 -0
  43. data/{test → spec}/fixtures/partials/_versioned.v2.erb +0 -0
  44. data/{test → spec}/fixtures/partials/_versioned.v3.erb +0 -0
  45. data/{test → spec}/fixtures/partials/another_versioned_partial.erb +0 -0
  46. data/{test → spec}/fixtures/partials/another_versioned_partial.v1.erb +0 -0
  47. data/{test → spec}/fixtures/templates/unversioned.html.erb +0 -0
  48. data/{test → spec}/fixtures/templates/v1_extension_scheme.v3.html.erb +0 -0
  49. data/{test → spec}/fixtures/templates/v1_extension_scheme.v6.json +0 -0
  50. data/{test → spec}/fixtures/templates/versioned.html.erb +0 -0
  51. data/{test → spec}/fixtures/templates/versioned.html.v1.erb +0 -0
  52. data/{test → spec}/fixtures/templates/versioned.html.v2.erb +0 -0
  53. data/{test → spec}/fixtures/templates/versioned.html.v3.erb +0 -0
  54. data/spec/fixtures/test_cases.yml +45 -0
  55. data/spec/integration/controller/renders_controller_spec.rb +73 -0
  56. data/spec/integration/controller/unversioned_controller_spec.rb +12 -0
  57. data/spec/integration/rack/middleware_regression_spec.rb +41 -0
  58. data/spec/integration/view/render_spec.rb +33 -0
  59. data/spec/integration/view/view_additions_spec.rb +51 -0
  60. data/spec/rails_helper.rb +41 -0
  61. data/spec/spec_helper.rb +25 -0
  62. data/spec/test_app/Rakefile +7 -0
  63. data/{test → spec/test_app}/app/controllers/renders_controller.rb +0 -0
  64. data/spec/test_app/app/controllers/unversioned_controller.rb +6 -0
  65. data/spec/test_app/app/views/renders/index.html.erb +1 -0
  66. data/{test → spec/test_app}/app/views/renders/index.html.v1.erb +0 -0
  67. data/{test → spec/test_app}/app/views/renders/index.html.v2.erb +0 -0
  68. data/spec/test_app/app/views/unversioned/index.html.erb +1 -0
  69. data/spec/test_app/config.ru +4 -0
  70. data/{test → spec/test_app}/config/application.rb +4 -6
  71. data/spec/test_app/config/boot.rb +5 -0
  72. data/spec/test_app/config/environment.rb +5 -0
  73. data/spec/test_app/config/initializers/versioncake.rb +45 -0
  74. data/spec/test_app/config/routes.rb +4 -0
  75. data/spec/test_app/script/rails +4 -0
  76. data/spec/unit/cli_spec.rb +36 -0
  77. data/spec/unit/configuration_spec.rb +61 -0
  78. data/spec/unit/strategies/extraction_strategy_spec.rb +71 -0
  79. data/spec/unit/strategies/http_accept_parameter_strategy_spec.rb +20 -0
  80. data/spec/unit/strategies/http_header_strategy_spec.rb +19 -0
  81. data/spec/unit/strategies/path_parameter_strategy_spec.rb +18 -0
  82. data/spec/unit/strategies/query_parameter_strategy_spec.rb +24 -0
  83. data/spec/unit/strategies/request_parameter_strategy_spec.rb +19 -0
  84. data/spec/unit/version_checker_spec.rb +60 -0
  85. data/spec/unit/version_context_service_spec.rb +84 -0
  86. data/spec/unit/version_context_spec.rb +46 -0
  87. data/spec/unit/versioned_request_spec.rb +35 -0
  88. data/spec/unit/versioned_resource_spec.rb +12 -0
  89. data/versioncake.gemspec +5 -2
  90. metadata +91 -70
  91. data/lib/versioncake/railtie.rb +0 -7
  92. data/test/app/views/renders/index.html.erb +0 -1
  93. data/test/config.ru +0 -0
  94. data/test/config/routes.rb +0 -3
  95. data/test/fixtures/test_cases.yml +0 -70
  96. data/test/functional/custom_strategy_controller_test.rb +0 -16
  97. data/test/functional/multiple_strategy_controller_test.rb +0 -24
  98. data/test/functional/renders_controller_test.rb +0 -71
  99. data/test/functional/strategy_controller_test.rb +0 -38
  100. data/test/script/rails +0 -0
  101. data/test/template/render_test.rb +0 -34
  102. data/test/test_helper.rb +0 -21
  103. data/test/unit/cli_test.rb +0 -48
  104. data/test/unit/configuration_test.rb +0 -45
  105. data/test/unit/strategies/extraction_strategy_test.rb +0 -70
  106. data/test/unit/strategies/http_accept_parameter_strategy_test.rb +0 -17
  107. data/test/unit/strategies/http_header_strategy_test.rb +0 -17
  108. data/test/unit/strategies/path_parameter_strategy_test.rb +0 -17
  109. data/test/unit/strategies/query_parameter_strategy_test.rb +0 -22
  110. data/test/unit/strategies/request_parameter_strategy_test.rb +0 -17
  111. data/test/unit/versioned_request_test.rb +0 -44
  112. data/test/unit/view_additions_test.rb +0 -35
@@ -1,17 +0,0 @@
1
- require './test/test_helper'
2
-
3
- class HttpAcceptParameterStrategyTest < ActiveSupport::TestCase
4
- setup do
5
- @strategy = VersionCake::HttpAcceptParameterStrategy.new
6
- end
7
-
8
- test "a request with an HTTP_ACCEPT version retrieves the version" do
9
- request = stub(:headers => {'HTTP_ACCEPT' => 'application/xml; api_version=11'})
10
- assert_equal 11, @strategy.extract(request)
11
- end
12
-
13
- test "a request without an HTTP_ACCEPT version returns nil" do
14
- request = stub(:headers => {'HTTP_ACCEPT' => 'text/x-dvi; q=.8; mxb=100000; mxt=5.0, text/x-c'})
15
- assert_nil @strategy.extract(request)
16
- end
17
- end
@@ -1,17 +0,0 @@
1
- require './test/test_helper'
2
-
3
- class HttpHeaderStrategyTest < ActiveSupport::TestCase
4
- setup do
5
- @strategy = VersionCake::HttpHeaderStrategy.new
6
- end
7
-
8
- test "a request with an HTTP_X_API_VERSION retrieves the version" do
9
- request = stub(:headers => {'HTTP_X_API_VERSION' => '11'})
10
- assert_equal 11, @strategy.extract(request)
11
- end
12
-
13
- test "a request without an HTTP_X_API_VERSION returns nil" do
14
- request = stub(:headers => {'HTTP_ACCEPT' => 'text/x-dvi; q=.8; mxb=100000; mxt=5.0, text/x-c'})
15
- assert_nil @strategy.extract(request)
16
- end
17
- end
@@ -1,17 +0,0 @@
1
- require './test/test_helper'
2
-
3
- class PathParameterStrategyTest < ActiveSupport::TestCase
4
- setup do
5
- @strategy = VersionCake::PathParameterStrategy.new
6
- end
7
-
8
- test "a request with an api_version path parameter retrieves the version" do
9
- request = stub(:path_parameters => {:api_version => '11', :other => 'parameter'})
10
- assert_equal 11, @strategy.extract(request)
11
- end
12
-
13
- test "a request without an api_version path parameter returns nil" do
14
- request = stub(:path_parameters => {:other => 'parameter', :another => 'parameter'})
15
- assert_nil @strategy.extract(request)
16
- end
17
- end
@@ -1,22 +0,0 @@
1
- require './test/test_helper'
2
-
3
- class QueryParameterStrategyTest < ActiveSupport::TestCase
4
- setup do
5
- @strategy = VersionCake::QueryParameterStrategy.new
6
- end
7
-
8
- test "a request with an api_version parameter retrieves the version" do
9
- request = stub(:query_parameters => {:api_version => '11', :other => 'parameter'})
10
- assert_equal 11, @strategy.extract(request)
11
- end
12
-
13
- test "a request with an Integer api_version parameter retrieves the version" do
14
- request = stub(:query_parameters => {:api_version => 11, :other => 'parameter'})
15
- assert_equal 11, @strategy.extract(request)
16
- end
17
-
18
- test "a request without an api_version parameter returns nil" do
19
- request = stub(:query_parameters => {:other => 'parameter', :another => 'parameter'})
20
- assert_nil @strategy.extract(request)
21
- end
22
- end
@@ -1,17 +0,0 @@
1
- require './test/test_helper'
2
-
3
- class RequestParameterStrategyTest < ActiveSupport::TestCase
4
- setup do
5
- @strategy = VersionCake::RequestParameterStrategy.new
6
- end
7
-
8
- test "a request with an api_version request parameter retrieves the version" do
9
- request = stub(:request_parameters => {:api_version => '11', :other => 'parameter'})
10
- assert_equal 11, @strategy.extract(request)
11
- end
12
-
13
- test "a request without an api_version request parameter returns nil" do
14
- request = stub(:request_parameters => {:other => 'parameter', :another => 'parameter'})
15
- assert_nil @strategy.extract(request)
16
- end
17
- end
@@ -1,44 +0,0 @@
1
- require './test/test_helper'
2
-
3
- class VersionedRequestTest < ActiveSupport::TestCase
4
- test "a request with a supported version returns the version" do
5
- VersionCake::VersionedRequest.any_instance.stubs(:apply_strategies => 2)
6
- versioned_request = VersionCake::VersionedRequest.new(stub())
7
- assert_equal 2, versioned_request.version
8
- end
9
-
10
- test "a request without a version returns the latest version" do
11
- VersionCake::VersionedRequest.any_instance.stubs(:apply_strategies => nil)
12
- versioned_request = VersionCake::VersionedRequest.new(stub())
13
- assert_equal 3, versioned_request.version
14
- end
15
-
16
- test "a request for a version that is higher than the latest version raises an error" do
17
- VersionCake::VersionedRequest.any_instance.stubs(:apply_strategies => 99)
18
- assert !VersionCake::VersionedRequest.new(stub()).is_version_supported?
19
- end
20
-
21
- test "a request for a deprecated version raises an exception" do
22
- VersionCake::VersionedRequest.any_instance.stubs(:apply_strategies => 2)
23
- VersionCake::Configuration.any_instance.stubs(:supports_version? => false)
24
- assert !VersionCake::VersionedRequest.new(stub()).is_version_supported?
25
- end
26
-
27
- test "has a method to determine if requesting the latest version" do
28
- VersionCake::VersionedRequest.any_instance.stubs(:apply_strategies => nil)
29
- versioned_request = VersionCake::VersionedRequest.new(stub())
30
- assert versioned_request.is_latest_version?
31
- end
32
-
33
- test "has a method to retrieve the extracted version" do
34
- VersionCake::VersionedRequest.any_instance.stubs(:apply_strategies => nil)
35
- versioned_request = VersionCake::VersionedRequest.new(stub())
36
- assert_nil versioned_request.extracted_version
37
- assert_equal 3, versioned_request.version
38
- end
39
-
40
- test "the version can be overriden by a parameter" do
41
- versioned_request = VersionCake::VersionedRequest.new(stub(), 8)
42
- assert_equal 8, versioned_request.version
43
- end
44
- end
@@ -1,35 +0,0 @@
1
- require './test/test_helper'
2
-
3
- class ViewAdditionsTest < ActiveSupport::TestCase
4
- setup do
5
- @resolver = ActionView::PathResolver.new
6
- end
7
-
8
- test "it retrieves the correct handler and format when only handler and format are present" do
9
- handler, format = @resolver.extract_handler_and_format('application.html.erb', nil)
10
- assert_equal 'text/html', format.to_s
11
- end
12
-
13
- test "it retrieves the correct handler and format when only handler, format and version are present" do
14
- handler, format = @resolver.extract_handler_and_format('application.json.v1.jbuilder', nil)
15
- assert_equal 'application/json', format.to_s
16
- end
17
-
18
- test "it retrieves the correct handler and format when only handler, format and locale are present" do
19
- handler, format = @resolver.extract_handler_and_format('application.en.json.jbuilder', nil)
20
- assert_equal 'application/json', format.to_s
21
- end
22
-
23
- test "it retrieves the correct handler and format when only handler, format, locale and version are present" do
24
- handler, format = @resolver.extract_handler_and_format('application.en.json.v1.jbuilder', nil)
25
- assert_equal 'application/json', format.to_s
26
- end
27
-
28
- if ActionPack::VERSION::MAJOR == 4 && ActionPack::VERSION::MINOR >= 1
29
- test "it retrieves the correct handler and format when only handler, format, variant and version are present" do
30
- handler, format = @resolver.extract_handler_and_format('application.json+tablet.v1.jbuilder', nil)
31
- assert_equal 'application/json', format.to_s
32
- end
33
- end
34
-
35
- end