grac 3.1.0 → 4.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: dab0f1b6af881d0b6968b1477a3a5c59106d6bae
4
- data.tar.gz: 5a4b3e25345397044751c355a68ce05dc5a937bf
2
+ SHA256:
3
+ metadata.gz: e07dfd433cf6ddc13c769efafc1f17601b543d261293f36fadc0729fa4179d8a
4
+ data.tar.gz: 7d809236ea5e09c13da7beb1fa86c8d1469b27066c4485b3a6253259d11338fe
5
5
  SHA512:
6
- metadata.gz: 4bea07d3bdad420bc3ef902edaa94f46025e11b60c20fecb1f236a843ba52face2e7c7e89bd65f37bb2f20aaccde34a23d7cdbcb6e1aff32d635ef8c839136c6
7
- data.tar.gz: b5815598119b2d4d79ca84b89dd9752125da520dc9b3e7a0df841902e1666bc00783a24a614b3dfa241cee3e86c503c1f9bddc8e53edef578369aebf7fa16b1d
6
+ metadata.gz: faa8e139d25822e970ca9ed824608cc1199fea454c19d28094d9f92da1a36963fa51d6719b3020a5ce08b57255b91967cc310e5635ae84ad47db2a89ba7e6dfa
7
+ data.tar.gz: 74437d90aee461c093d1fcf19cc24116292b9d2b9192b59b5767cfca62ba8894ec7bd46189e570f89a40ffbf90f0b9b8e29c25f851f32e0dae927bc02d0e8466
@@ -22,13 +22,29 @@ module Grac
22
22
  "User-Agent" => "Grac v#{Grac::VERSION}",
23
23
  "Content-Type" => "application/json;charset=utf-8"
24
24
  }.merge(options[:headers] || {}),
25
- :postprocessing => options[:postprocessing] || {},
25
+ :postprocessing => {},
26
26
  :middleware => options[:middleware] || []
27
27
  }
28
+
29
+ if options[:postprocessing]
30
+ options[:postprocessing]
31
+ .each_with_object(postprocessing = {}) do |(pattern, transformation), obj|
32
+ if pattern.kind_of?(Regexp)
33
+ obj[pattern] = transformation
34
+ else
35
+ obj[Regexp.new(pattern)] = transformation
36
+ end
37
+ end
38
+
39
+ @options[:postprocessing] = postprocessing
40
+ end
41
+
28
42
  @options.freeze
43
+
29
44
  [:params, :headers, :postprocessing, :middleware].each do |k|
30
45
  @options[k].freeze
31
46
  end
47
+
32
48
  @uri.freeze
33
49
  end
34
50
 
@@ -104,11 +120,31 @@ module Grac
104
120
  private
105
121
 
106
122
  def build_and_run(method, options = {})
107
- body = options[:body].nil? || options[:body].empty? ? nil : options[:body].to_json
123
+ body = prepare_body_by_content_type(options[:body])
108
124
  params = @options[:params].merge(options[:params] || {})
109
125
  return middleware_chain.call(@options, uri, method, params, body)
110
126
  end
111
127
 
128
+ def headers
129
+ @options[:headers] || {}
130
+ end
131
+
132
+ def prepare_body_by_content_type(body)
133
+ return nil if body.nil? || body.empty?
134
+
135
+ case headers['Content-Type']
136
+ when /\Aapplication\/json/
137
+ return body.to_json
138
+ when /\Aapplication\/x-www-form-urlencoded/
139
+ # Typhoeus will take care of the encoding when receiving a hash
140
+ return body
141
+ else
142
+ # Do not encode other unknown Content-Types either.
143
+ # The default is JSON through the Content-Type header which is set by default.
144
+ return body
145
+ end
146
+ end
147
+
112
148
  def middleware_chain
113
149
  callee = self
114
150
 
@@ -174,14 +210,11 @@ module Grac
174
210
  if data.kind_of?(Hash)
175
211
  data.each do |key, value|
176
212
  processing = nil
177
- @options[:postprocessing].each do |regex, action|
178
- pattern = Regexp.new(regex).freeze
213
+ regexp = @options[:postprocessing].keys.detect { |pattern| pattern.match?(key) }
179
214
 
180
- if pattern =~ key
181
- processing = action
182
- end
215
+ if !regexp.nil?
216
+ processing = @options[:postprocessing][regexp]
183
217
  end
184
-
185
218
  data[key] = postprocessing(value, processing)
186
219
  end
187
220
  elsif data.kind_of?(Array)
@@ -1,6 +1,5 @@
1
- require 'json'
1
+ require 'oj'
2
2
  require 'forwardable'
3
-
4
3
  require_relative './exception'
5
4
 
6
5
  module Grac
@@ -26,8 +25,8 @@ module Grac
26
25
  end
27
26
 
28
27
  def parsed_json
29
- JSON.parse(body)
30
- rescue JSON::ParserError
28
+ Oj.load(body)
29
+ rescue Oj::ParseError, EncodingError
31
30
  raise Exception::InvalidContent.new(body, 'json')
32
31
  end
33
32
 
@@ -1,3 +1,3 @@
1
1
  module Grac
2
- VERSION = "3.1.0"
2
+ VERSION = "4.0.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grac
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0
4
+ version: 4.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Schoknecht
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-25 00:00:00.000000000 Z
11
+ date: 2020-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '12.3'
19
+ version: '13.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '12.3'
26
+ version: '13.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.7'
33
+ version: '3.8'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '3.7'
40
+ version: '3.8'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: builder
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,20 +52,62 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: benchmark-ips
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.7'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.7'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rack
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 2.2.3
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 2.2.3
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rack-test
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
87
  - - "~>"
60
88
  - !ruby/object:Gem::Version
61
- version: '0.7'
89
+ version: 0.6.3
62
90
  type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
- version: '0.7'
96
+ version: 0.6.3
97
+ - !ruby/object:Gem::Dependency
98
+ name: oj
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 3.6.13
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 3.6.13
69
111
  - !ruby/object:Gem::Dependency
70
112
  name: typhoeus
71
113
  requirement: !ruby/object:Gem::Requirement
@@ -102,17 +144,16 @@ require_paths:
102
144
  - lib
103
145
  required_ruby_version: !ruby/object:Gem::Requirement
104
146
  requirements:
105
- - - ">="
147
+ - - "~>"
106
148
  - !ruby/object:Gem::Version
107
- version: '0'
149
+ version: '2.4'
108
150
  required_rubygems_version: !ruby/object:Gem::Requirement
109
151
  requirements:
110
152
  - - ">="
111
153
  - !ruby/object:Gem::Version
112
154
  version: '0'
113
155
  requirements: []
114
- rubyforge_project:
115
- rubygems_version: 2.4.8
156
+ rubygems_version: 3.0.6
116
157
  signing_key:
117
158
  specification_version: 4
118
159
  summary: Very generic client for REST API with basic error handling