file_sv 0.1.10 → 0.1.12
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 +4 -4
- data/exe/file_sv +9 -2
- data/lib/file_sv/global_settings.rb +4 -0
- data/lib/file_sv/planned_endpoint.rb +21 -1
- data/lib/file_sv/sv_plan.rb +2 -2
- data/lib/file_sv/version.rb +1 -1
- data/lib/file_sv/virtual_server.rb +5 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 72954e0e4bfe4eda783ccb40b4219bcd7a915a86c328e9157625c9151d085de4
|
4
|
+
data.tar.gz: e250a4b0320757bc1577a538be9e59c72ec12a25f4b3a4e442bde182784a3cdc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b3c6837fcb24dcad7355cf32f7c2f868393935224f32826ee5d585e522fdd07ddb42d8d761362ead1ed997cc4eb88550e30c3dc569a3affd4ae088034364ffb
|
7
|
+
data.tar.gz: 42f8f2b8c2a149ebbdb61924dd3aaede4797da0dc3ebb3ab13945bc7cc719f3b3e32330b546c927320e3dd42c6d951ad5ac99adefcdf271f9eecf1d85e79060a
|
data/exe/file_sv
CHANGED
@@ -6,16 +6,23 @@ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
|
6
6
|
|
7
7
|
# Executable for Generic Test
|
8
8
|
class Exe < Thor
|
9
|
+
def self.exit_on_failure?
|
10
|
+
true
|
11
|
+
end
|
12
|
+
|
9
13
|
desc "plan folder", "Show plan for service virtualization based on folder"
|
10
|
-
def plan(folder)
|
14
|
+
def plan(folder = nil)
|
11
15
|
require "file_sv"
|
16
|
+
if (!folder && GlobalSettings.serving_folder)
|
17
|
+
folder = GlobalSettings.serving_folder unless folder
|
18
|
+
end
|
12
19
|
ServiceLoader.create_plan_for folder
|
13
20
|
end
|
14
21
|
|
15
22
|
option :crt, default: nil, banner: "HTTPS CRT"
|
16
23
|
option :key, default: nil, banner: "HTTPS key"
|
17
24
|
desc "serve folder", "Serve virtual service based on folder"
|
18
|
-
def serve(folder)
|
25
|
+
def serve(folder = nil)
|
19
26
|
plan folder
|
20
27
|
ServiceLoader.serve_plan options
|
21
28
|
end
|
@@ -10,6 +10,8 @@ class GlobalSettings
|
|
10
10
|
|
11
11
|
@https = false
|
12
12
|
|
13
|
+
@serving_folder = '.'
|
14
|
+
|
13
15
|
@ignore_status_codes = nil
|
14
16
|
class << self
|
15
17
|
# @return [String] Default REST method when none specified by filename
|
@@ -26,6 +28,8 @@ class GlobalSettings
|
|
26
28
|
attr_accessor :key
|
27
29
|
# @return [Array] List of http status codes to ignore
|
28
30
|
attr_accessor :ignore_status_codes
|
31
|
+
# @return [String] Path from current location to serve folders from
|
32
|
+
attr_accessor :serving_folder
|
29
33
|
|
30
34
|
# @param [Integer] status_code HTTP status code
|
31
35
|
# @return [Boolean] Whether status code is currently ignored
|
@@ -15,6 +15,8 @@ class PlannedEndpoint
|
|
15
15
|
attr_accessor :method
|
16
16
|
# @return [Integer] HTTP Status code
|
17
17
|
attr_accessor :status_code
|
18
|
+
# @return [Integer] Delay before responding
|
19
|
+
attr_accessor :delay
|
18
20
|
|
19
21
|
# @return [Array]
|
20
22
|
HTTP_METHODS = %w[get put post patch delete options].freeze
|
@@ -26,6 +28,7 @@ class PlannedEndpoint
|
|
26
28
|
@file = true if not_text?
|
27
29
|
assign_params_from_name
|
28
30
|
self.method ||= GlobalSettings.default_method
|
31
|
+
self.delay ||= 0
|
29
32
|
return if status_code
|
30
33
|
|
31
34
|
set_default_status_code
|
@@ -71,6 +74,7 @@ class PlannedEndpoint
|
|
71
74
|
def assign_params_from_name
|
72
75
|
file_parts = filename.split("_")
|
73
76
|
assign_method_from file_parts
|
77
|
+
assign_delay_from file_parts
|
74
78
|
assign_status_from file_parts
|
75
79
|
end
|
76
80
|
|
@@ -84,9 +88,19 @@ class PlannedEndpoint
|
|
84
88
|
self.status_code = status_parts[0].to_i if status_parts.size == 1
|
85
89
|
end
|
86
90
|
|
91
|
+
# Set status code based on filename
|
92
|
+
def assign_delay_from(file_parts)
|
93
|
+
delay_parts = file_parts.find_all { |part| part.start_with?('delay') }
|
94
|
+
if delay_parts.size > 1
|
95
|
+
raise FileSv::FileNameError, "Filename #{filename} has more than 1 delay #{delay_parts}"
|
96
|
+
end
|
97
|
+
|
98
|
+
self.delay = delay_parts[0][5..-1].to_i if delay_parts.size == 1
|
99
|
+
end
|
100
|
+
|
87
101
|
# Set REST method used based on filename
|
88
102
|
def assign_method_from(file_parts)
|
89
|
-
method_parts = file_parts.find_all { |
|
103
|
+
method_parts = file_parts.find_all { |part| HTTP_METHODS.include? part }
|
90
104
|
if method_parts.size > 1
|
91
105
|
raise FileSv::FileNameError, "Filename #{filename} has more than 1 REST methods #{method_parts}"
|
92
106
|
end
|
@@ -112,4 +126,10 @@ class PlannedEndpoint
|
|
112
126
|
def render_text(binding)
|
113
127
|
ERB.new(File.read(serving_file_name)).result(binding)
|
114
128
|
end
|
129
|
+
|
130
|
+
def short_description
|
131
|
+
desc = self.status_code.to_s
|
132
|
+
desc += " (delay #{self.delay} sec)" if self.delay > 0
|
133
|
+
return desc
|
134
|
+
end
|
115
135
|
end
|
data/lib/file_sv/sv_plan.rb
CHANGED
@@ -69,9 +69,9 @@ Serving based on folder: #{Dir.pwd}. Related to folder executed: #{serving_folde
|
|
69
69
|
|
70
70
|
private
|
71
71
|
|
72
|
-
# @return [String]
|
72
|
+
# @return [String] Message to description all endpoints for a method undera endpoint
|
73
73
|
def description_message(method_name, endpoints)
|
74
|
-
" #{method_name.upcase} (#{endpoints.size} responses) #{endpoints.collect(&:
|
74
|
+
" #{method_name.upcase} (#{endpoints.size} responses) #{endpoints.collect(&:short_description)}\n"
|
75
75
|
end
|
76
76
|
end
|
77
77
|
end
|
data/lib/file_sv/version.rb
CHANGED
@@ -37,6 +37,10 @@ for more details'
|
|
37
37
|
content_type :json
|
38
38
|
elsif endpoint.file_path.end_with? '.xml'
|
39
39
|
content_type :xml
|
40
|
+
elsif endpoint.file_path.end_with? '.css'
|
41
|
+
content_type :css
|
42
|
+
elsif endpoint.file_path.end_with? '.js'
|
43
|
+
content_type :js
|
40
44
|
end
|
41
45
|
end
|
42
46
|
|
@@ -50,6 +54,7 @@ for more details'
|
|
50
54
|
message += " Using param '#{@id}'" if id
|
51
55
|
puts message
|
52
56
|
end
|
57
|
+
sleep endpoint.delay if endpoint.delay > 0
|
53
58
|
[endpoint.status_code, output_for(endpoint, binding)]
|
54
59
|
end
|
55
60
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: file_sv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Garratt
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-03-
|
11
|
+
date: 2024-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faker
|
@@ -138,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
138
|
- !ruby/object:Gem::Version
|
139
139
|
version: '0'
|
140
140
|
requirements: []
|
141
|
-
rubygems_version: 3.
|
141
|
+
rubygems_version: 3.5.3
|
142
142
|
signing_key:
|
143
143
|
specification_version: 4
|
144
144
|
summary: REST service virtualisation through file structure.
|