api_recipes 2.8.0 → 2.10.0

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
2
  SHA256:
3
- metadata.gz: b8b743f62651355bb59b3d641637d8df6b28a860d5000a3b684758a7d1de5c47
4
- data.tar.gz: d2febad009985547a7a148e1b07b193d568b76bd75a2064a9c55257652ce7997
3
+ metadata.gz: c808d9077305dc07cd888f517b57f1522490866a548dc769a3c96c083d24ce27
4
+ data.tar.gz: 205b4aaaa135b8682f7d7f0d44f471263852e997f2b1791fe60eea4efc0a2ee3
5
5
  SHA512:
6
- metadata.gz: 6a4b6882211bbae0c27f546267674e501df253eb9a22303fadf0bbf85dfd26a2ada943f813ae1660164c20e3dae68d3afd61caf132e6e40be04bf1f62e9cfcd4
7
- data.tar.gz: e5429acaf4fbcaa1f5e83090d8ede9dcee36253a61b8d17b5e79fb5c4c4178115b677d91ac39e8c145af63dd1813e904834201fddbc930e45e07b3d8df3455b9
6
+ metadata.gz: 89acbd66ece24f8cd88100eb447c45e3b73c30c9f894b51a5995aa7697f6a76b92bae0b41c117dbc0b38f993876ca8b4efd17f64eaf7ca1ae31e0d04b5544120
7
+ data.tar.gz: a831d53f7a337cc65ec28d09eb74ca8efa69123cf34ae835776c5414dd58725cc0223e7ee7aa70d0c1dbbebfff924f8d3d8340227ade47f42d7be4e3ffd877dd
@@ -4,7 +4,7 @@ module ApiRecipes
4
4
  attr_accessor :name, :configs, :authorization, :basic_auth
5
5
  attr_reader :base_configs, :object
6
6
 
7
- BASE_CONFIGS_KEYS = [:protocol, :host, :port, :api_version, :timeout, :on_bad_code, :verify_with]
7
+ BASE_CONFIGS_KEYS = [:protocol, :host, :port, :api_version, :timeout, :on_bad_code, :mime_type, :verify_with]
8
8
 
9
9
  def initialize(name, configs, object)
10
10
  @name = name
@@ -1,12 +1,15 @@
1
+ require 'yaml'
2
+ require 'erb'
3
+
1
4
  module ApiRecipes
2
5
  class Configuration
3
6
 
4
- attr_accessor :log_to, :log_level, :print_urls
7
+ attr_accessor :log_to, :log_level, :print_urls, :apis_files_paths
5
8
 
6
9
  def apis_configs=(configs = {})
7
10
  raise ArgumentError, 'apis_configs must be an Hash' unless configs.is_a? Hash
11
+
8
12
  @apis_configs = configs.deep_symbolize_keys
9
- ApiRecipes._aprcps_define_global_apis
10
13
  end
11
14
 
12
15
  def apis_configs
@@ -16,6 +19,34 @@ module ApiRecipes
16
19
  @apis_configs
17
20
  end
18
21
 
22
+ def apis_files_paths=(paths = [])
23
+ raise ArgumentError, 'apis_files_paths must be an Array' unless paths.is_a? Array
24
+
25
+ @apis_files_paths = paths
26
+ @apis_files_paths.each do |file_path|
27
+ template = ERB.new File.read File.expand_path(file_path)
28
+ data = begin
29
+ YAML.load(template.result(binding), aliases: true)
30
+ rescue ArgumentError
31
+ YAML.load(template.result binding)
32
+ end.deep_symbolize_keys
33
+ # Merge file contents into apis_configs
34
+ data.each do |api, params|
35
+ if apis_configs[api]
36
+ logger.warn "File at #{file_path} overrides config for '#{api}' API"
37
+ end
38
+ apis_configs[api] = params
39
+ end
40
+ end
41
+ end
42
+
43
+ def apis_files_paths
44
+ unless @apis_files_paths
45
+ @apis_files_paths = []
46
+ end
47
+ @apis_files_paths
48
+ end
49
+
19
50
  def logger=(logger)
20
51
  @logger = logger
21
52
  end
@@ -31,6 +62,10 @@ module ApiRecipes
31
62
  @logger
32
63
  end
33
64
 
65
+ def setup
66
+ ApiRecipes._aprcps_define_global_apis
67
+ end
68
+
34
69
  private
35
70
 
36
71
  # @private
@@ -62,7 +62,6 @@ module ApiRecipes
62
62
  end
63
63
  end
64
64
  end
65
- # Route.new(api: @api, endpoint: self, name: route_name, attributes: route_attrs, req_pars: request_params).start_request &block
66
65
  end
67
66
 
68
67
  def ensure_route_does_not_clash(route_name)
@@ -12,7 +12,7 @@ module ApiRecipes
12
12
  return @data unless @data.nil?
13
13
 
14
14
  # TODO: rescue nil?
15
- @data = @original_response.parse
15
+ @data = @original_response.parse @attributes[:mime_type]
16
16
  end
17
17
 
18
18
  # Forward method calls to 'original' Response class
@@ -16,7 +16,7 @@ module ApiRecipes
16
16
  end
17
17
 
18
18
  def fill(object)
19
- data = @response.parse
19
+ data = @response.parse @attributes[:mime_type]
20
20
  if block_given?
21
21
  tap do
22
22
  try_to_fill object, data
@@ -10,7 +10,8 @@ module ApiRecipes
10
10
  timeout: 3,
11
11
  on_bad_code: 'raise',
12
12
  endpoints: {},
13
- verify_with: nil
13
+ verify_with: nil,
14
+ mime_type: nil
14
15
  }
15
16
 
16
17
  DEFAULT_ROUTE_ATTRIBUTES = {
@@ -20,6 +21,7 @@ module ApiRecipes
20
21
  ok_code: nil,
21
22
  timeout: DEFAULT[:timeout],
22
23
  on_bad_code: DEFAULT[:on_bad_code],
24
+ mime_type: DEFAULT[:mime_type],
23
25
  verify_with: DEFAULT[:verify_with]
24
26
  }
25
27
 
@@ -77,6 +77,37 @@ class Hash
77
77
  end
78
78
  end
79
79
 
80
+ # Returns a new hash with +self+ and +other_hash+ merged recursively.
81
+ #
82
+ # h1 = { a: true, b: { c: [1, 2, 3] } }
83
+ # h2 = { a: false, b: { x: [3, 4, 5] } }
84
+ #
85
+ # h1.deep_merge(h2) # => { a: false, b: { c: [1, 2, 3], x: [3, 4, 5] } }
86
+ #
87
+ # Like with Hash#merge in the standard library, a block can be provided
88
+ # to merge values:
89
+ #
90
+ # h1 = { a: 100, b: 200, c: { c1: 100 } }
91
+ # h2 = { b: 250, c: { c1: 200 } }
92
+ # h1.deep_merge(h2) { |key, this_val, other_val| this_val + other_val }
93
+ # # => { a: 100, b: 450, c: { c1: 300 } }
94
+ def deep_merge(other_hash, &block)
95
+ dup.deep_merge!(other_hash, &block)
96
+ end
97
+
98
+ # Same as +deep_merge+, but modifies +self+.
99
+ def deep_merge!(other_hash, &block)
100
+ merge!(other_hash) do |key, this_val, other_val|
101
+ if this_val.is_a?(Hash) && other_val.is_a?(Hash)
102
+ this_val.deep_merge(other_val, &block)
103
+ elsif block_given?
104
+ block.call(key, this_val, other_val)
105
+ else
106
+ other_val
107
+ end
108
+ end
109
+ end
110
+
80
111
  # Returns a new hash with all keys converted by the block operation.
81
112
  # This includes the keys from the root hash and from all
82
113
  # nested hashes and arrays.
@@ -1,3 +1,3 @@
1
1
  module ApiRecipes
2
- VERSION = '2.8.0'.freeze
2
+ VERSION = '2.10.0'.freeze
3
3
  end
data/lib/api_recipes.rb CHANGED
@@ -65,6 +65,7 @@ module ApiRecipes
65
65
  def self.configure
66
66
  if block_given?
67
67
  yield(configuration)
68
+ configuration.setup
68
69
  else
69
70
  configuration
70
71
  end
@@ -117,6 +118,7 @@ module ApiRecipes
117
118
  unless @storage
118
119
  @storage = {}
119
120
  end
121
+
120
122
  @storage
121
123
  end
122
124
 
@@ -131,11 +133,9 @@ module ApiRecipes
131
133
  unless api_name.is_a?(String) || api_name.is_a?(Symbol)
132
134
  raise ArgumentError, "no api_name provided. Given: #{api_name.inspect}"
133
135
  end
134
- unless ApiRecipes.configuration.apis_configs[api_name]
135
- ApiRecipes.configuration.apis_configs[api_name] = {}
136
- end
136
+ global_api_configs = _aprcps_global_storage[api_name]&.configs || {}
137
137
  if configs
138
- ApiRecipes.configuration.apis_configs[api_name].merge(configs) do |_, old_val, new_val|
138
+ global_api_configs.deep_merge(configs) do |_, old_val, new_val|
139
139
  if new_val.nil?
140
140
  old_val
141
141
  else
@@ -143,7 +143,7 @@ module ApiRecipes
143
143
  end
144
144
  end
145
145
  else
146
- ApiRecipes.configuration.apis_configs[api_name]
146
+ global_api_configs
147
147
  end
148
148
  end
149
149
  end
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api_recipes
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.0
4
+ version: 2.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alessandro Verlato
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-02 00:00:00.000000000 Z
11
+ date: 2022-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 4.4.1
19
+ version: '4.4'
20
+ - - "<="
21
+ - !ruby/object:Gem::Version
22
+ version: '5.1'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '4.4'
30
+ - - "<="
25
31
  - !ruby/object:Gem::Version
26
- version: 4.4.1
32
+ version: '5.1'
27
33
  description:
28
34
  email:
29
35
  - averlato@gmail.com
@@ -55,14 +61,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
55
61
  requirements:
56
62
  - - ">="
57
63
  - !ruby/object:Gem::Version
58
- version: 2.5.0
64
+ version: 2.7.0
59
65
  required_rubygems_version: !ruby/object:Gem::Requirement
60
66
  requirements:
61
67
  - - ">="
62
68
  - !ruby/object:Gem::Version
63
69
  version: '0'
64
70
  requirements: []
65
- rubygems_version: 3.0.8
71
+ rubygems_version: 3.3.7
66
72
  signing_key:
67
73
  specification_version: 4
68
74
  summary: Consume HTTP APIs with style