easy-jsonapi 1.0.1 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'easy/jsonapi/document'
4
- require 'oj'
4
+ require 'easy/jsonapi/parser/json_parser'
5
5
 
6
6
  module JSONAPI
7
7
  module Parser
@@ -16,7 +16,7 @@ module JSONAPI
16
16
  # @raise [JSONAPI::Parser::InvalidDocument] if document is invalid.
17
17
  def self.parse(req_body)
18
18
  return if req_body.nil?
19
- document_hash = Oj.load(req_body, symbol_keys: true) # parse json string into hash
19
+ document_hash = JSONAPI::Parser::JSONParser.parse(req_body) # parse json string into hash
20
20
  parse_hash(document_hash)
21
21
  end
22
22
 
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'oj'
4
+ require 'easy/jsonapi/exceptions/json_parse_error'
5
+
6
+ module JSONAPI
7
+ module Parser
8
+ # A wrapper class for OJ parser
9
+ module JSONParser
10
+
11
+ # Parse JSON string into a ruby hash
12
+ # @param document [String] The JSON string to parse
13
+ # @raise [JSONAPI::Exceptions::JSONParseError]
14
+ def self.parse(document, symbol_keys: true)
15
+ Oj.load(document, symbol_keys: symbol_keys)
16
+
17
+ rescue Oj::ParseError => e
18
+ raise JSONAPI::Exceptions::JSONParseError, e.message
19
+ end
20
+
21
+ # Convert ruby hash into JSON
22
+ # @param ruby_hash [Hash] THe hash to convert into JSON
23
+ def self.dump(ruby_hash)
24
+ Oj.dump(ruby_hash)
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -8,10 +8,12 @@ module JSONAPI
8
8
  # A collection of QueryParam objects
9
9
  class QueryParamCollection < JSONAPI::NameValuePairCollection
10
10
 
11
+ # The special query params defined by the JSON:API specification
12
+ SPECIAL_QUERY_PARAMS = %i[sorts filters fields page includes].freeze
13
+
11
14
  # @param param_arr [Array<JSONAPI::Request::QueryParamCollection::QueryParam] The
12
15
  # query params to initialize the collection with
13
16
  def initialize(param_arr = [])
14
- @param_names = []
15
17
  super(param_arr, item_type: JSONAPI::Request::QueryParamCollection::QueryParam)
16
18
  end
17
19
 
@@ -43,8 +45,12 @@ module JSONAPI
43
45
  # @param args If any arguments were passed to the method called
44
46
  # @param block If a block was passed to the method called
45
47
  def method_missing(method_name, *args, &block)
46
- super unless include?(method_name)
47
- get(method_name)
48
+ included = include?(method_name)
49
+ super unless included || SPECIAL_QUERY_PARAMS.include?(method_name)
50
+ if included
51
+ return get(method_name)
52
+ end
53
+ nil
48
54
  end
49
55
 
50
56
  # Whether or not method missing should be called.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easy-jsonapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua DeMoss, Joe Viscomi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-25 00:00:00.000000000 Z
11
+ date: 2021-03-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -132,13 +132,15 @@ extensions: []
132
132
  extra_rdoc_files: []
133
133
  files:
134
134
  - ".dockerignore"
135
- - ".github/workflows/publish-gem.yml"
135
+ - ".github/workflows/codecov.yml"
136
+ - ".github/workflows/publish.yml"
136
137
  - ".gitignore"
137
138
  - ".rspec"
138
139
  - ".rspec_status"
139
140
  - ".rubocop.yml"
140
141
  - ".ruby-gemset"
141
142
  - ".ruby-version"
143
+ - ".travis.yml"
142
144
  - CHANGELOG.md
143
145
  - CODE_OF_CONDUCT.md
144
146
  - Gemfile
@@ -197,6 +199,7 @@ files:
197
199
  - lib/easy/jsonapi/exceptions.rb
198
200
  - lib/easy/jsonapi/exceptions/document_exceptions.rb
199
201
  - lib/easy/jsonapi/exceptions/headers_exceptions.rb
202
+ - lib/easy/jsonapi/exceptions/json_parse_error.rb
200
203
  - lib/easy/jsonapi/exceptions/naming_exceptions.rb
201
204
  - lib/easy/jsonapi/exceptions/query_params_exceptions.rb
202
205
  - lib/easy/jsonapi/exceptions/user_defined_exceptions.rb
@@ -210,6 +213,7 @@ files:
210
213
  - lib/easy/jsonapi/parser.rb
211
214
  - lib/easy/jsonapi/parser/document_parser.rb
212
215
  - lib/easy/jsonapi/parser/headers_parser.rb
216
+ - lib/easy/jsonapi/parser/json_parser.rb
213
217
  - lib/easy/jsonapi/parser/rack_req_params_parser.rb
214
218
  - lib/easy/jsonapi/request.rb
215
219
  - lib/easy/jsonapi/request/query_param_collection.rb
@@ -1,74 +0,0 @@
1
- name: Test Build and Publish
2
- on:
3
- push:
4
- branches: [ production ]
5
- pull_request:
6
- branches: [ production ]
7
- jobs:
8
- test:
9
- runs-on: ubuntu-latest
10
- strategy:
11
- matrix:
12
- ruby-version: ['2.5', '2.6', '2.7', '3.0']
13
- steps:
14
- - uses: actions/checkout@v2
15
- - name: Set up Ruby
16
- # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
17
- # change this to (see https://github.com/ruby/setup-ruby#versioning):
18
- uses: ruby/setup-ruby@v1
19
- with:
20
- ruby-version: ${{ matrix.ruby-version }}
21
- bundler-cache: true # runs 'bundle install' and caches installed gems automatically
22
- - name: Run tests
23
- run: bundle exec rake
24
- build_and_publish:
25
- name: Build + Publish + Release
26
- runs-on: ubuntu-latest
27
- steps:
28
- - uses: actions/checkout@v2
29
- - name: Set up Ruby 3.0
30
- uses: actions/setup-ruby@v1
31
- with:
32
- ruby-version: 3.0.x
33
- - name: Publish to GPR
34
- run: |
35
- mkdir -p $HOME/.gem
36
- touch $HOME/.gem/credentials
37
- chmod 0600 $HOME/.gem/credentials
38
- printf -- "---\n:github: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
39
- gem build *.gemspec
40
- gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
41
- env:
42
- GEM_HOST_API_KEY: "Bearer ${{secrets.GITHUB_TOKEN}}"
43
- OWNER: ${{ github.repository_owner }}
44
-
45
- - name: Publish to RubyGems
46
- run: |
47
- mkdir -p $HOME/.gem
48
- touch $HOME/.gem/credentials
49
- chmod 0600 $HOME/.gem/credentials
50
- printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
51
- gem build *.gemspec
52
- gem push *.gem
53
- env:
54
- GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
55
- release:
56
- name: Create Release
57
- runs-on: ubuntu-latest
58
- steps:
59
- - name: Checkout code
60
- uses: actions/checkout@v2
61
- - name: Create Release
62
- id: create_release
63
- uses: actions/create-release@v1
64
- env:
65
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
66
- with:
67
- tag_name: ${{ github.ref }}
68
- release_name: Release ${{ github.ref }}
69
- body: |
70
- Changes in this Release
71
- - First Change
72
- - Second Change
73
- draft: false
74
- prerelease: false