versioncake 2.5.0 → 3.0.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 (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