jsonapi-resources 0.7.1.beta1 → 0.7.1.beta2

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 (93) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +248 -74
  3. data/lib/jsonapi-resources.rb +5 -3
  4. data/lib/jsonapi/acts_as_resource_controller.rb +77 -14
  5. data/lib/jsonapi/configuration.rb +77 -16
  6. data/lib/jsonapi/error.rb +12 -0
  7. data/lib/jsonapi/error_codes.rb +2 -0
  8. data/lib/jsonapi/exceptions.rb +29 -9
  9. data/lib/jsonapi/formatter.rb +29 -4
  10. data/lib/jsonapi/link_builder.rb +18 -18
  11. data/lib/jsonapi/mime_types.rb +25 -6
  12. data/lib/jsonapi/naive_cache.rb +30 -0
  13. data/lib/jsonapi/operation.rb +10 -342
  14. data/lib/jsonapi/operation_dispatcher.rb +87 -0
  15. data/lib/jsonapi/operation_result.rb +2 -1
  16. data/lib/jsonapi/paginator.rb +6 -2
  17. data/lib/jsonapi/processor.rb +283 -0
  18. data/lib/jsonapi/relationship.rb +6 -4
  19. data/lib/jsonapi/{request.rb → request_parser.rb} +46 -35
  20. data/lib/jsonapi/resource.rb +88 -13
  21. data/lib/jsonapi/resource_controller.rb +2 -14
  22. data/lib/jsonapi/resource_controller_metal.rb +17 -0
  23. data/lib/jsonapi/resource_serializer.rb +62 -47
  24. data/lib/jsonapi/resources/version.rb +1 -1
  25. data/lib/jsonapi/response_document.rb +13 -2
  26. data/lib/jsonapi/routing_ext.rb +49 -11
  27. metadata +37 -129
  28. data/.gitignore +0 -22
  29. data/.travis.yml +0 -9
  30. data/Gemfile +0 -23
  31. data/Rakefile +0 -20
  32. data/jsonapi-resources.gemspec +0 -29
  33. data/lib/jsonapi/active_record_operations_processor.rb +0 -35
  34. data/lib/jsonapi/operations_processor.rb +0 -120
  35. data/locales/en.yml +0 -80
  36. data/test/config/database.yml +0 -5
  37. data/test/controllers/controller_test.rb +0 -3312
  38. data/test/fixtures/active_record.rb +0 -1486
  39. data/test/fixtures/author_details.yml +0 -9
  40. data/test/fixtures/book_authors.yml +0 -3
  41. data/test/fixtures/book_comments.yml +0 -12
  42. data/test/fixtures/books.yml +0 -7
  43. data/test/fixtures/categories.yml +0 -35
  44. data/test/fixtures/comments.yml +0 -21
  45. data/test/fixtures/comments_tags.yml +0 -20
  46. data/test/fixtures/companies.yml +0 -4
  47. data/test/fixtures/craters.yml +0 -9
  48. data/test/fixtures/customers.yml +0 -11
  49. data/test/fixtures/documents.yml +0 -3
  50. data/test/fixtures/expense_entries.yml +0 -13
  51. data/test/fixtures/facts.yml +0 -11
  52. data/test/fixtures/hair_cuts.yml +0 -3
  53. data/test/fixtures/iso_currencies.yml +0 -17
  54. data/test/fixtures/line_items.yml +0 -37
  55. data/test/fixtures/makes.yml +0 -2
  56. data/test/fixtures/moons.yml +0 -6
  57. data/test/fixtures/numeros_telefone.yml +0 -3
  58. data/test/fixtures/order_flags.yml +0 -7
  59. data/test/fixtures/people.yml +0 -31
  60. data/test/fixtures/pictures.yml +0 -15
  61. data/test/fixtures/planet_types.yml +0 -19
  62. data/test/fixtures/planets.yml +0 -47
  63. data/test/fixtures/posts.yml +0 -102
  64. data/test/fixtures/posts_tags.yml +0 -59
  65. data/test/fixtures/preferences.yml +0 -14
  66. data/test/fixtures/products.yml +0 -3
  67. data/test/fixtures/purchase_orders.yml +0 -23
  68. data/test/fixtures/sections.yml +0 -8
  69. data/test/fixtures/tags.yml +0 -39
  70. data/test/fixtures/vehicles.yml +0 -17
  71. data/test/fixtures/web_pages.yml +0 -3
  72. data/test/helpers/assertions.rb +0 -13
  73. data/test/helpers/functional_helpers.rb +0 -59
  74. data/test/helpers/value_matchers.rb +0 -60
  75. data/test/helpers/value_matchers_test.rb +0 -40
  76. data/test/integration/requests/namespaced_model_test.rb +0 -13
  77. data/test/integration/requests/request_test.rb +0 -932
  78. data/test/integration/routes/routes_test.rb +0 -218
  79. data/test/integration/sti_fields_test.rb +0 -18
  80. data/test/lib/generators/jsonapi/controller_generator_test.rb +0 -25
  81. data/test/lib/generators/jsonapi/resource_generator_test.rb +0 -30
  82. data/test/test_helper.rb +0 -342
  83. data/test/unit/formatters/dasherized_key_formatter_test.rb +0 -8
  84. data/test/unit/jsonapi_request/jsonapi_request_test.rb +0 -199
  85. data/test/unit/operation/operations_processor_test.rb +0 -528
  86. data/test/unit/pagination/offset_paginator_test.rb +0 -245
  87. data/test/unit/pagination/paged_paginator_test.rb +0 -242
  88. data/test/unit/resource/resource_test.rb +0 -560
  89. data/test/unit/serializer/include_directives_test.rb +0 -113
  90. data/test/unit/serializer/link_builder_test.rb +0 -244
  91. data/test/unit/serializer/polymorphic_serializer_test.rb +0 -383
  92. data/test/unit/serializer/response_document_test.rb +0 -61
  93. data/test/unit/serializer/serializer_test.rb +0 -1939
@@ -1,218 +0,0 @@
1
- require File.expand_path('../../../test_helper', __FILE__)
2
-
3
- class RoutesTest < ActionDispatch::IntegrationTest
4
-
5
- def test_routing_post
6
- assert_routing({path: 'posts', method: :post},
7
- {controller: 'posts', action: 'create'})
8
- end
9
-
10
- def test_routing_patch
11
- assert_routing({path: '/posts/1', method: :patch},
12
- {controller: 'posts', action: 'update', id: '1'})
13
- end
14
-
15
- def test_routing_posts_show
16
- assert_routing({path: '/posts/1', method: :get},
17
- {action: 'show', controller: 'posts', id: '1'})
18
- end
19
-
20
- def test_routing_posts_links_author_show
21
- assert_routing({path: '/posts/1/relationships/author', method: :get},
22
- {controller: 'posts', action: 'show_relationship', post_id: '1', relationship: 'author'})
23
- end
24
-
25
- def test_routing_posts_links_author_destroy
26
- assert_routing({path: '/posts/1/relationships/author', method: :delete},
27
- {controller: 'posts', action: 'destroy_relationship', post_id: '1', relationship: 'author'})
28
- end
29
-
30
- def test_routing_posts_links_author_update
31
- assert_routing({path: '/posts/1/relationships/author', method: :patch},
32
- {controller: 'posts', action: 'update_relationship', post_id: '1', relationship: 'author'})
33
- end
34
-
35
- def test_routing_posts_links_tags_show
36
- assert_routing({path: '/posts/1/relationships/tags', method: :get},
37
- {controller: 'posts', action: 'show_relationship', post_id: '1', relationship: 'tags'})
38
- end
39
-
40
- def test_routing_posts_links_tags_destroy
41
- assert_routing({path: '/posts/1/relationships/tags', method: :delete},
42
- {controller: 'posts', action: 'destroy_relationship', post_id: '1', relationship: 'tags'})
43
- end
44
-
45
- def test_routing_posts_links_tags_create
46
- assert_routing({path: '/posts/1/relationships/tags', method: :post},
47
- {controller: 'posts', action: 'create_relationship', post_id: '1', relationship: 'tags'})
48
- end
49
-
50
- def test_routing_posts_links_tags_update_acts_as_set
51
- assert_routing({path: '/posts/1/relationships/tags', method: :patch},
52
- {controller: 'posts', action: 'update_relationship', post_id: '1', relationship: 'tags'})
53
- end
54
-
55
- def test_routing_uuid
56
- assert_routing({path: '/pets/v1/cats/f1a4d5f2-e77a-4d0a-acbb-ee0b98b3f6b5', method: :get},
57
- {action: 'show', controller: 'pets/v1/cats', id: 'f1a4d5f2-e77a-4d0a-acbb-ee0b98b3f6b5'})
58
- end
59
-
60
- # ToDo: refute this routing
61
- # def test_routing_uuid_bad_format
62
- # assert_routing({path: '/pets/v1/cats/f1a4d5f2-e77a-4d0a-acbb-ee0b9', method: :get},
63
- # {action: 'show', controller: 'pets/v1/cats', id: 'f1a4d5f2-e77a-4d0a-acbb-ee0b98'})
64
- # end
65
-
66
- # Polymorphic
67
- def test_routing_polymorphic_get_related_resource
68
- assert_routing(
69
- {
70
- path: '/pictures/1/imageable',
71
- method: :get
72
- },
73
- {
74
- relationship: 'imageable',
75
- source: 'pictures',
76
- controller: 'imageables',
77
- action: 'get_related_resource',
78
- picture_id: '1'
79
- }
80
- )
81
- end
82
-
83
- def test_routing_polymorphic_patch_related_resource
84
- assert_routing(
85
- {
86
- path: '/pictures/1/relationships/imageable',
87
- method: :patch
88
- },
89
- {
90
- relationship: 'imageable',
91
- controller: 'pictures',
92
- action: 'update_relationship',
93
- picture_id: '1'
94
- }
95
- )
96
- end
97
-
98
- def test_routing_polymorphic_delete_related_resource
99
- assert_routing(
100
- {
101
- path: '/pictures/1/relationships/imageable',
102
- method: :delete
103
- },
104
- {
105
- relationship: 'imageable',
106
- controller: 'pictures',
107
- action: 'destroy_relationship',
108
- picture_id: '1'
109
- }
110
- )
111
- end
112
-
113
- # V1
114
- def test_routing_v1_posts_show
115
- assert_routing({path: '/api/v1/posts/1', method: :get},
116
- {action: 'show', controller: 'api/v1/posts', id: '1'})
117
- end
118
-
119
- def test_routing_v1_posts_delete
120
- assert_routing({path: '/api/v1/posts/1', method: :delete},
121
- {action: 'destroy', controller: 'api/v1/posts', id: '1'})
122
- end
123
-
124
- def test_routing_v1_posts_links_writer_show
125
- assert_routing({path: '/api/v1/posts/1/relationships/writer', method: :get},
126
- {controller: 'api/v1/posts', action: 'show_relationship', post_id: '1', relationship: 'writer'})
127
- end
128
-
129
- # V2
130
- def test_routing_v2_posts_links_author_show
131
- assert_routing({path: '/api/v2/posts/1/relationships/author', method: :get},
132
- {controller: 'api/v2/posts', action: 'show_relationship', post_id: '1', relationship: 'author'})
133
- end
134
-
135
- def test_routing_v2_preferences_show
136
- assert_routing({path: '/api/v2/preferences', method: :get},
137
- {action: 'show', controller: 'api/v2/preferences'})
138
- end
139
-
140
- # V3
141
- def test_routing_v3_posts_show
142
- assert_routing({path: '/api/v3/posts/1', method: :get},
143
- {action: 'show', controller: 'api/v3/posts', id: '1'})
144
- end
145
-
146
- # V4 camelCase
147
- def test_routing_v4_posts_show
148
- assert_routing({path: '/api/v4/posts/1', method: :get},
149
- {action: 'show', controller: 'api/v4/posts', id: '1'})
150
- end
151
-
152
- def test_routing_v4_isoCurrencies_resources
153
- assert_routing({path: '/api/v4/isoCurrencies/USD', method: :get},
154
- {action: 'show', controller: 'api/v4/iso_currencies', id: 'USD'})
155
- end
156
-
157
- def test_routing_v4_expenseEntries_resources
158
- assert_routing({path: '/api/v4/expenseEntries/1', method: :get},
159
- {action: 'show', controller: 'api/v4/expense_entries', id: '1'})
160
-
161
- assert_routing({path: '/api/v4/expenseEntries/1/relationships/isoCurrency', method: :get},
162
- {controller: 'api/v4/expense_entries', action: 'show_relationship', expense_entry_id: '1', relationship: 'iso_currency'})
163
- end
164
-
165
- # V5 dasherized
166
- def test_routing_v5_posts_show
167
- assert_routing({path: '/api/v5/posts/1', method: :get},
168
- {action: 'show', controller: 'api/v5/posts', id: '1'})
169
- end
170
-
171
- def test_routing_v5_isoCurrencies_resources
172
- assert_routing({path: '/api/v5/iso-currencies/USD', method: :get},
173
- {action: 'show', controller: 'api/v5/iso_currencies', id: 'USD'})
174
- end
175
-
176
- def test_routing_v5_expenseEntries_resources
177
- assert_routing({path: '/api/v5/expense-entries/1', method: :get},
178
- {action: 'show', controller: 'api/v5/expense_entries', id: '1'})
179
-
180
- assert_routing({path: '/api/v5/expense-entries/1/relationships/iso-currency', method: :get},
181
- {controller: 'api/v5/expense_entries', action: 'show_relationship', expense_entry_id: '1', relationship: 'iso_currency'})
182
- end
183
-
184
- def test_routing_authors_show
185
- assert_routing({path: '/api/v5/authors/1', method: :get},
186
- {action: 'show', controller: 'api/v5/authors', id: '1'})
187
- end
188
-
189
- def test_routing_author_links_posts_create_not_acts_as_set
190
- assert_routing({path: '/api/v5/authors/1/relationships/posts', method: :post},
191
- {controller: 'api/v5/authors', action: 'create_relationship', author_id: '1', relationship: 'posts'})
192
- end
193
-
194
- #primary_key
195
- def test_routing_primary_key_jsonapi_resources
196
- assert_routing({path: '/iso_currencies/USD', method: :get},
197
- {action: 'show', controller: 'iso_currencies', id: 'USD'})
198
- end
199
-
200
- # ToDo: Refute routing
201
- # def test_routing_v3_posts_delete
202
- # assert_routing({ path: '/api/v3/posts/1', method: :delete },
203
- # {action: 'destroy', controller: 'api/v3/posts', id: '1'})
204
- # end
205
-
206
- # def test_routing_posts_links_author_except_destroy
207
- # assert_routing({ path: '/api/v3/posts/1/relationships/author', method: :delete },
208
- # { controller: 'api/v3/posts', action: 'destroy_relationship', post_id: '1', relationship: 'author' })
209
- # end
210
- #
211
- # def test_routing_posts_links_tags_only_create_show
212
- # assert_routing({ path: '/api/v3/posts/1/relationships/tags/1,2', method: :delete },
213
- # { controller: 'api/v3/posts', action: 'destroy_relationship', post_id: '1', keys: '1,2', relationship: 'tags' })
214
- # end
215
-
216
- # Test that non acts as set to_many relationship update route is not created
217
-
218
- end
@@ -1,18 +0,0 @@
1
- require File.expand_path("../../test_helper", __FILE__)
2
-
3
- class StiFieldsTest < ActionDispatch::IntegrationTest
4
- def test_index_fields_when_resource_does_not_match_relationship
5
- get "/posts", { filter: { id: "1,2" },
6
- include: "author",
7
- fields: { posts: "author", people: "email" } }
8
- assert_response :success
9
- assert_equal 2, json_response["data"].size
10
- assert json_response["data"][0]["relationships"].key?("author")
11
- assert json_response["included"][0]["attributes"].keys == ["email"]
12
- end
13
-
14
- def test_fields_for_parent_class
15
- get "/firms", { fields: { companies: "name" } }
16
- assert_equal json_response["data"][0]["attributes"].keys, ["name"]
17
- end
18
- end
@@ -1,25 +0,0 @@
1
- require File.expand_path('../../../../test_helper', __FILE__)
2
- require 'generators/jsonapi/controller_generator'
3
-
4
- module Jsonapi
5
- class ControllerGeneratorTest < Rails::Generators::TestCase
6
- tests ControllerGenerator
7
- destination Rails.root.join('../controllers')
8
- setup :prepare_destination
9
- teardown :cleanup_destination_root
10
-
11
- def cleanup_destination_root
12
- FileUtils.rm_rf destination_root
13
- end
14
-
15
- test "controller is created" do
16
- run_generator ["post"]
17
- assert_file 'app/controllers/posts_controller.rb', /class PostsController < JSONAPI::ResourceController/
18
- end
19
-
20
- test "controller is created with namespace" do
21
- run_generator ["api/v1/post"]
22
- assert_file 'app/controllers/api/v1/posts_controller.rb', /class Api::V1::PostsController < JSONAPI::ResourceController/
23
- end
24
- end
25
- end
@@ -1,30 +0,0 @@
1
- require File.expand_path('../../../../test_helper', __FILE__)
2
- require 'generators/jsonapi/resource_generator'
3
-
4
- module Jsonapi
5
- class ResourceGeneratorTest < Rails::Generators::TestCase
6
- tests ResourceGenerator
7
- destination Rails.root.join('../resources')
8
- setup :prepare_destination
9
- teardown :cleanup_destination_root
10
-
11
- def cleanup_destination_root
12
- FileUtils.rm_rf destination_root
13
- end
14
-
15
- test "resource is created" do
16
- run_generator ["post"]
17
- assert_file 'app/resources/post_resource.rb', /class PostResource < JSONAPI::Resource/
18
- end
19
-
20
- test "resource is singular" do
21
- run_generator ["posts"]
22
- assert_file 'app/resources/post_resource.rb', /class PostResource < JSONAPI::Resource/
23
- end
24
-
25
- test "resource is created with namespace" do
26
- run_generator ["api/v1/post"]
27
- assert_file 'app/resources/api/v1/post_resource.rb', /class Api::V1::PostResource < JSONAPI::Resource/
28
- end
29
- end
30
- end
@@ -1,342 +0,0 @@
1
- require 'simplecov'
2
-
3
- # To run tests with coverage:
4
- # COVERAGE=true rake test
5
- # To Switch rails versions and run a particular test order:
6
- # export RAILS_VERSION=4.2.0; bundle update rails; bundle exec rake TESTOPTS="--seed=39333" test
7
- # We are no longer having Travis test Rails 4.0.x. To test on Rails 4.0.x use this:
8
- # export RAILS_VERSION=4.0.0; bundle update rails; bundle exec rake test
9
-
10
- if ENV['COVERAGE']
11
- SimpleCov.start do
12
- end
13
- end
14
-
15
- require 'rails/all'
16
- require 'rails/test_help'
17
- require 'minitest/mock'
18
- require 'jsonapi-resources'
19
- require 'pry'
20
-
21
- require File.expand_path('../helpers/value_matchers', __FILE__)
22
- require File.expand_path('../helpers/assertions', __FILE__)
23
- require File.expand_path('../helpers/functional_helpers', __FILE__)
24
-
25
- Rails.env = 'test'
26
-
27
- I18n.load_path += Dir[File.expand_path("../../locales/*.yml", __FILE__)]
28
- I18n.enforce_available_locales = false
29
-
30
- JSONAPI.configure do |config|
31
- config.json_key_format = :camelized_key
32
- end
33
-
34
- puts "Testing With RAILS VERSION #{Rails.version}"
35
-
36
- class TestApp < Rails::Application
37
- config.eager_load = false
38
- config.root = File.dirname(__FILE__)
39
- config.session_store :cookie_store, key: 'session'
40
- config.secret_key_base = 'secret'
41
-
42
- #Raise errors on unsupported parameters
43
- config.action_controller.action_on_unpermitted_parameters = :raise
44
-
45
- ActiveRecord::Schema.verbose = false
46
- config.active_record.schema_format = :none
47
- config.active_support.test_order = :random
48
-
49
- # Turn off millisecond precision to maintain Rails 4.0 and 4.1 compatibility in test results
50
- ActiveSupport::JSON::Encoding.time_precision = 0 if Rails::VERSION::MAJOR >= 4 && Rails::VERSION::MINOR >= 1
51
- end
52
-
53
- module MyEngine
54
- class Engine < ::Rails::Engine
55
- isolate_namespace MyEngine
56
- end
57
- end
58
-
59
- # Patch RAILS 4.0 to not use millisecond precision
60
- if Rails::VERSION::MAJOR >= 4 && Rails::VERSION::MINOR < 1
61
- module ActiveSupport
62
- class TimeWithZone
63
- def as_json(options = nil)
64
- if ActiveSupport::JSON::Encoding.use_standard_json_time_format
65
- xmlschema
66
- else
67
- %(#{time.strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)})
68
- end
69
- end
70
- end
71
- end
72
- end
73
-
74
- def count_queries(&block)
75
- @query_count = 0
76
- @queries = []
77
- ActiveSupport::Notifications.subscribe('sql.active_record') do |name, started, finished, unique_id, payload|
78
- @query_count = @query_count + 1
79
- @queries.push payload[:sql]
80
- end
81
- yield block
82
- ActiveSupport::Notifications.unsubscribe('sql.active_record')
83
- @query_count
84
- end
85
-
86
- def assert_query_count(expected, msg = nil)
87
- msg = message(msg) {
88
- "Expected #{expected} queries, ran #{@query_count} queries"
89
- }
90
- show_queries unless expected == @query_count
91
- assert expected == @query_count, msg
92
- end
93
-
94
- def show_queries
95
- @queries.each_with_index do |query, index|
96
- puts "sql[#{index}]: #{query}"
97
- end
98
- end
99
-
100
- TestApp.initialize!
101
-
102
- require File.expand_path('../fixtures/active_record', __FILE__)
103
-
104
- module Pets
105
- module V1
106
- class CatsController < JSONAPI::ResourceController
107
-
108
- end
109
-
110
- class CatResource < JSONAPI::Resource
111
- attribute :name
112
- attribute :breed
113
-
114
- key_type :uuid
115
- end
116
- end
117
- end
118
-
119
- JSONAPI.configuration.route_format = :underscored_route
120
- TestApp.routes.draw do
121
- jsonapi_resources :people
122
- jsonapi_resources :special_people
123
- jsonapi_resources :comments
124
- jsonapi_resources :firms
125
- jsonapi_resources :tags
126
- jsonapi_resources :posts do
127
- jsonapi_relationships
128
- jsonapi_links :special_tags
129
- end
130
- jsonapi_resources :sections
131
- jsonapi_resources :iso_currencies
132
- jsonapi_resources :expense_entries
133
- jsonapi_resources :breeds
134
- jsonapi_resources :planets
135
- jsonapi_resources :planet_types
136
- jsonapi_resources :moons
137
- jsonapi_resources :craters
138
- jsonapi_resources :preferences
139
- jsonapi_resources :facts
140
- jsonapi_resources :categories
141
- jsonapi_resources :pictures
142
- jsonapi_resources :documents
143
- jsonapi_resources :products
144
- jsonapi_resources :vehicles
145
- jsonapi_resources :cars
146
- jsonapi_resources :boats
147
- jsonapi_resources :flat_posts
148
-
149
- jsonapi_resources :books
150
- jsonapi_resources :authors
151
-
152
- namespace :api do
153
- namespace :v1 do
154
- jsonapi_resources :people
155
- jsonapi_resources :comments
156
- jsonapi_resources :tags
157
- jsonapi_resources :posts
158
- jsonapi_resources :sections
159
- jsonapi_resources :iso_currencies
160
- jsonapi_resources :expense_entries
161
- jsonapi_resources :breeds
162
- jsonapi_resources :planets
163
- jsonapi_resources :planet_types
164
- jsonapi_resources :moons
165
- jsonapi_resources :craters
166
- jsonapi_resources :preferences
167
- jsonapi_resources :likes
168
- end
169
-
170
- JSONAPI.configuration.route_format = :underscored_route
171
- namespace :v2 do
172
- jsonapi_resources :posts do
173
- jsonapi_link :author, except: :destroy
174
- end
175
-
176
- jsonapi_resource :preferences, except: [:create, :destroy]
177
-
178
- jsonapi_resources :books
179
- jsonapi_resources :book_comments
180
- end
181
-
182
- namespace :v3 do
183
- jsonapi_resource :preferences do
184
- # Intentionally empty block to skip relationship urls
185
- end
186
-
187
- jsonapi_resources :posts, except: [:destroy] do
188
- jsonapi_link :author, except: [:destroy]
189
- jsonapi_links :tags, only: [:show, :create]
190
- end
191
- end
192
-
193
- JSONAPI.configuration.route_format = :camelized_route
194
- namespace :v4 do
195
- jsonapi_resources :posts do
196
- end
197
-
198
- jsonapi_resources :expense_entries do
199
- jsonapi_link :iso_currency
200
- jsonapi_related_resource :iso_currency
201
- end
202
-
203
- jsonapi_resources :iso_currencies do
204
- end
205
-
206
- jsonapi_resources :books
207
- end
208
-
209
- JSONAPI.configuration.route_format = :dasherized_route
210
- namespace :v5 do
211
- jsonapi_resources :posts do
212
- end
213
-
214
- jsonapi_resources :authors
215
- jsonapi_resources :expense_entries
216
- jsonapi_resources :iso_currencies
217
-
218
- jsonapi_resources :employees
219
-
220
- end
221
- JSONAPI.configuration.route_format = :underscored_route
222
-
223
- JSONAPI.configuration.route_format = :dasherized_route
224
- namespace :v6 do
225
- jsonapi_resources :customers
226
- jsonapi_resources :purchase_orders
227
- jsonapi_resources :line_items
228
- end
229
- JSONAPI.configuration.route_format = :underscored_route
230
-
231
- namespace :v7 do
232
- jsonapi_resources :customers
233
- jsonapi_resources :purchase_orders
234
- jsonapi_resources :line_items
235
- jsonapi_resources :categories
236
-
237
- jsonapi_resources :clients
238
- end
239
-
240
- namespace :v8 do
241
- jsonapi_resources :numeros_telefone
242
- end
243
- end
244
-
245
- namespace :admin_api do
246
- namespace :v1 do
247
- jsonapi_resources :people
248
- end
249
- end
250
-
251
- namespace :pets do
252
- namespace :v1 do
253
- jsonapi_resources :cats
254
- end
255
- end
256
-
257
- mount MyEngine::Engine => "/boomshaka", as: :my_engine
258
- end
259
-
260
- MyEngine::Engine.routes.draw do
261
- namespace :api do
262
- namespace :v1 do
263
- jsonapi_resources :people
264
- end
265
- end
266
-
267
- namespace :admin_api do
268
- namespace :v1 do
269
- jsonapi_resources :people
270
- end
271
- end
272
- end
273
-
274
- # Ensure backward compatibility with Minitest 4
275
- Minitest::Test = MiniTest::Unit::TestCase unless defined?(Minitest::Test)
276
-
277
- class Minitest::Test
278
- include Helpers::Assertions
279
- include Helpers::ValueMatchers
280
- include Helpers::FunctionalHelpers
281
- include ActiveRecord::TestFixtures
282
-
283
- def run_in_transaction?
284
- true
285
- end
286
-
287
- self.fixture_path = "#{Rails.root}/fixtures"
288
- fixtures :all
289
- end
290
-
291
- class ActiveSupport::TestCase
292
- self.fixture_path = "#{Rails.root}/fixtures"
293
- fixtures :all
294
- setup do
295
- @routes = TestApp.routes
296
- end
297
- end
298
-
299
- class ActionDispatch::IntegrationTest
300
- self.fixture_path = "#{Rails.root}/fixtures"
301
- fixtures :all
302
- end
303
-
304
- class UpperCamelizedKeyFormatter < JSONAPI::KeyFormatter
305
- class << self
306
- def format(key)
307
- super.camelize(:upper)
308
- end
309
-
310
- def unformat(formatted_key)
311
- formatted_key.to_s.underscore
312
- end
313
- end
314
- end
315
-
316
- class DateWithTimezoneValueFormatter < JSONAPI::ValueFormatter
317
- class << self
318
- def format(raw_value)
319
- raw_value.in_time_zone('Eastern Time (US & Canada)').to_s
320
- end
321
- end
322
- end
323
-
324
- class DateValueFormatter < JSONAPI::ValueFormatter
325
- class << self
326
- def format(raw_value)
327
- raw_value.strftime('%m/%d/%Y')
328
- end
329
- end
330
- end
331
-
332
- class TitleValueFormatter < JSONAPI::ValueFormatter
333
- class << self
334
- def format(raw_value)
335
- super(raw_value).titlecase
336
- end
337
-
338
- def unformat(value)
339
- value.to_s.downcase
340
- end
341
- end
342
- end