yarh 0.1.3 → 0.1.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: be06fa99910b08969531006fb8437dd82770a62fdd4d7d428d9d10599c33786e
4
- data.tar.gz: 9ced27dcff33621e24ac55aa181af3cadfbbcd32255c3184ac2e73bf44dbecfa
3
+ metadata.gz: ccc0f9e05c055b534d819db730c43b205e5cbf7ce29335b56cfffd30b22a762d
4
+ data.tar.gz: 8e186cd5a51ef030e034356e2f05c5409bdb37c76a7127602daae0bdc2d1ecdc
5
5
  SHA512:
6
- metadata.gz: c6e28d50e58caadd9fe64e15f20fa4d001648af8c8bfebd200f0361c163032774171997060af51a8c6b3f0970c0450dfdc1e4d08d6e8acd51eb70f4a9748fc11
7
- data.tar.gz: 78f9bf12359dde945a9dcb969224a5321020a43cddaa07bdae549d3cb870d77cbc6a08212f4028c31bbc20302dff49a1cae9980db7a9dcaa56d1e1057bcc54ae
6
+ metadata.gz: 714c8cfc0a05190ca5fe32ec686a8f40939f6a8d6c3df42acb832fd2ab2c52af84fbefae1dcb7c3a5af59676258f32dc377a2c671663e3dbbf4e353874903293
7
+ data.tar.gz: e5c4df5ffca9162840c87c7c96dfc954be513827049e3aa804ad51357f45916a85471629270001e874b66dc696e384fa0904087f582abf595788994adcd1312d
data/lib/yarh/cli.rb CHANGED
@@ -13,7 +13,7 @@ module Yarh
13
13
 
14
14
  desc '-r PATH', 'execute requests from file'
15
15
  def run_requests(path)
16
- Yarh.run_requests(path)
16
+ puts Yarh.run_requests(path)
17
17
  end
18
18
 
19
19
  desc 'version', 'show Yarh version'
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yarh
4
+ module Errors
5
+ class BaseError < StandardError
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base_error'
4
+
5
+ module Yarh
6
+ module Errors
7
+ # wrong data error
8
+ class WrongDataError < BaseError
9
+ def message
10
+ 'Incorrect request data sent'
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faraday'
4
+ require 'faraday/multipart'
5
+
6
+ module Yarh
7
+ # Class for creating request bodies
8
+ class RequestBody
9
+ def initialize(body)
10
+ @body_data = body
11
+ @result_body = {}
12
+ end
13
+
14
+ def create
15
+ body_data.each do |key, value|
16
+ if value.is_a?(Hash)
17
+ prepare_value(key, value)
18
+ else
19
+ @result_body[key] = value
20
+ end
21
+ end
22
+
23
+ @result_body
24
+ end
25
+
26
+ private
27
+
28
+ attr_reader :body_data
29
+
30
+ # NOTE: Currently the method is used for parsing files
31
+ def prepare_value(key, value)
32
+ if value['path'] and value['file_type']
33
+ file = Faraday::UploadIO.new(value['path'], value['file_type'])
34
+ @result_body[key] = file
35
+ else
36
+ @result_body[key] = value
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,37 +1,110 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'faraday'
4
+ require 'faraday/multipart'
4
5
  require 'json'
6
+ require_relative 'errors/wrong_data_error'
7
+ require_relative 'request_body'
5
8
 
6
9
  module Yarh
7
- # RequestBuilder
10
+ # Сlass builds a request from hash parameters and executes the request
8
11
  class RequestBuilder
9
12
  attr_reader :response
10
13
 
11
14
  def initialize(data)
12
- @data = data
15
+ @data = stringify_keys(data)
13
16
  @response = nil
14
17
  end
15
18
 
16
19
  def request
17
- conn = Faraday.new(url: data['url'])
20
+ validate_before_request
18
21
 
19
- response = conn.send(data['method'].downcase.to_sym) do |req|
22
+ @response = send_request(build_conncetion)
23
+ end
24
+
25
+ private
26
+
27
+ attr_reader :data
28
+
29
+ def validate_before_request
30
+ raise Errors::WrongDataError if method.nil? or url.nil?
31
+ end
32
+
33
+ def build_conncetion
34
+ if multipart?
35
+ Faraday.new(url: url) do |request|
36
+ request.request :multipart
37
+ end
38
+ else
39
+ Faraday.new(url: url)
40
+ end
41
+ end
42
+
43
+ def send_request(faraday_connection)
44
+ faraday_connection.send(method) do |req|
20
45
  build_headers(req, data['headers'])
21
- req.body = data['body'].to_json
46
+ req.body = body if body
47
+ req.params = params if params
48
+ req.options.timeout timeout if timeout
22
49
  end
50
+ end
23
51
 
24
- @response = response
52
+ # TODO: optimize this method in the future
53
+ def body
54
+ return @body unless @body.nil?
55
+ return unless data['body']
56
+
57
+ body = RequestBody.new(data['body']).create
58
+
59
+ @body = if application_json?
60
+ body.to_json
61
+ else
62
+ body
63
+ end
25
64
  end
26
65
 
27
- private
66
+ def multipart?
67
+ return false unless data['headers']
68
+ return false unless data['headers']['Content-Type']
28
69
 
29
- attr_reader :data
70
+ data['headers']['Content-Type'] == 'multipart/form-data'
71
+ end
72
+
73
+ def application_json?
74
+ return false unless data['headers']
75
+ return false unless data['headers']['Content-Type']
76
+
77
+ data['headers']['Content-Type'] == 'application/json'
78
+ end
30
79
 
31
80
  def build_headers(req, headers)
81
+ return unless headers
82
+
32
83
  headers.each do |header, value|
33
84
  req.headers[header] = value
34
85
  end
35
86
  end
87
+
88
+ def stringify_keys(data)
89
+ data.is_a?(Hash) ? data.to_h { |k, v| [k.to_s, stringify_keys(v)] } : data
90
+ end
91
+
92
+ def method
93
+ return unless data['method']
94
+
95
+ data['method'].downcase.to_sym
96
+ end
97
+
98
+ def url
99
+ data['url']
100
+ end
101
+
102
+ def params
103
+ data['params']
104
+ end
105
+
106
+ def timeout
107
+ data['timeout']
108
+ end
36
109
  end
37
110
  end
@@ -10,17 +10,23 @@ module Yarh
10
10
 
11
11
  def initialize(path)
12
12
  @path = path
13
+ @responses = {}
13
14
  end
14
15
 
15
16
  def run
16
- parsed_yaml.each_value do |data|
17
+ parsed_yaml.each do |request_name, data|
17
18
  request = RequestBuilder.new(data)
18
19
  request.request
20
+ responses[request_name] = request.response
19
21
  end
22
+
23
+ responses
20
24
  end
21
25
 
22
26
  private
23
27
 
28
+ attr_reader :responses
29
+
24
30
  def parsed_yaml
25
31
  @parsed_yaml ||= YamlParser.parse(path)
26
32
  end
data/lib/yarh/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Yarh
4
- VERSION = '0.1.3'
4
+ VERSION = '0.1.5'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yarh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kirill Leonov
@@ -24,6 +24,26 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.9'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday-multipart
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 1.0.4
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '1.0'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.0.4
27
47
  - !ruby/object:Gem::Dependency
28
48
  name: thor
29
49
  requirement: !ruby/object:Gem::Requirement
@@ -48,6 +68,9 @@ files:
48
68
  - exe/yarh
49
69
  - lib/yarh.rb
50
70
  - lib/yarh/cli.rb
71
+ - lib/yarh/errors/base_error.rb
72
+ - lib/yarh/errors/wrong_data_error.rb
73
+ - lib/yarh/request_body.rb
51
74
  - lib/yarh/request_builder.rb
52
75
  - lib/yarh/request_runner.rb
53
76
  - lib/yarh/version.rb