yarh 0.1.3 → 0.1.5

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: 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