file_sv 0.1.2 → 0.1.3

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: aa3ba8f0ed5971a7bda5814fb1c3905e6705cf2d164f8a13efab46983b31a4fe
4
- data.tar.gz: d8e303e7b3170f5435828e0cf4e36507e980e75669526e7ebced88db3d0f394d
3
+ metadata.gz: b8c717829a4044f5970f099311a51d86317e009cb04d01e2b596e2ac24ee5296
4
+ data.tar.gz: 64a21579ccd9c87ea14a0e8b634f9095450cea66167ef0d414bff97e77f7ce3f
5
5
  SHA512:
6
- metadata.gz: 717ee4f0ad3368c5ad27fbe4c751b778cc29359ec79345c143aa0272dbb079deb2e7d5fbdad4d16807b01a0fd39d5dc3764b6592fc5ec88594dbeaa98c1db433
7
- data.tar.gz: 0e84459ad829475c060a8947a9526fe8618fcb1bc5e46653da7c7ab65b41d540e050801dc55dc502f550091189d3dd285898a0382896ea14fa5a916e86650959
6
+ metadata.gz: 594bfe0862c82585f8568cf3a46d2952bd631bf6795fd7b518a74a4b578eb9eab500523016602110f5ca60094f9a53bfe91c395970ad3ca5774d3d51f2a8427e
7
+ data.tar.gz: dd153f38c16a882d3ff806dcec71a7b798e7578aea0fe5322f868ea77bd6af7958e7eefc23b47e31f18bb35a78c869e0386155b7936e62086e07411734a2a9ab
data/lib/file_sv.rb CHANGED
@@ -15,10 +15,11 @@ module FileSv
15
15
  class FileNameError < Error; end
16
16
 
17
17
  class << self
18
+ # @return [Hash] Mapping of REST method names to setting classes
18
19
  def rest_methods
19
20
  {
20
21
  get: GetSettings, post: PostSettings, patch: PatchSettings, options: OptionsSettings,
21
- delete: DeleteSettings
22
+ delete: DeleteSettings, put: PutSettings
22
23
  }
23
24
  end
24
25
  end
@@ -29,17 +30,15 @@ CONFIG_FILE = "file_sv.yaml"
29
30
  # Set values in global settings based on config
30
31
  def load_default_config(file_path)
31
32
  require "yaml"
32
- if File.exist? file_path
33
- config = YAML.load_file file_path
34
- config["global"]&.each do |key, value|
35
- GlobalSettings.send("#{key}=", value)
36
- end
33
+ return unless File.exist? file_path
37
34
 
38
- FileSv.rest_methods.each do |method, setting_class|
39
- config[method.to_s]&.each do |key, value|
40
- setting_class.send("#{key}=", value)
41
- end
42
- end
35
+ config = YAML.load_file file_path
36
+ config["global"]&.each do |key, value|
37
+ GlobalSettings.send("#{key}=", value)
38
+ end
39
+
40
+ FileSv.rest_methods.each do |method, setting_class|
41
+ config[method.to_s]&.each { |key, value| setting_class.send("#{key}=", value) }
43
42
  end
44
43
  end
45
44
 
@@ -5,11 +5,15 @@ class GlobalSettings
5
5
  @default_method = "get"
6
6
 
7
7
  @empty_body_status = 204
8
+
9
+ @ignore_files = "{*.md,Dockerfile,.*}"
8
10
  class << self
9
11
  # @return [String] Default REST method when none specified by filename
10
12
  attr_accessor :default_method
11
13
  # @return [Integer] Default status of response when file is empty
12
14
  attr_accessor :empty_body_status
15
+ # @return [Array] Expression representing files to ignore
16
+ attr_accessor :ignore_files
13
17
  end
14
18
  end
15
19
 
@@ -35,6 +39,12 @@ class PatchSettings
35
39
  extend CommonHttpSettings
36
40
  end
37
41
 
42
+ # Settings specific to PATCH
43
+ class PutSettings
44
+ @default_status = 200
45
+ extend CommonHttpSettings
46
+ end
47
+
38
48
  # Settings specific to OPTIONS
39
49
  class OptionsSettings
40
50
  @default_status = 200
@@ -35,6 +35,7 @@ class PlannedEndpoint
35
35
  @file
36
36
  end
37
37
 
38
+ # Return default status code for an empty body
38
39
  def default_empty_code
39
40
  return false if not_text?
40
41
 
@@ -45,6 +46,7 @@ class PlannedEndpoint
45
46
  false
46
47
  end
47
48
 
49
+ # Set default status code based on empty body or type of METHOD
48
50
  def set_default_status_code
49
51
  return if default_empty_code
50
52
 
@@ -15,27 +15,26 @@ class SvPlan
15
15
  def create(folder)
16
16
  self.serving_folder = folder
17
17
  puts "Creating service based on files in #{folder}"
18
- file_list = Dir.glob("#{folder}/**/*.*")
19
- file_list.each do |file|
20
- process_file file
21
- end
18
+ file_list = Dir.glob("#{folder}/**/*.*") - Dir.glob(GlobalSettings.ignore_files)
19
+ file_list.each { |file| process_file file }
22
20
  end
23
21
 
24
22
  # Process file, for the most part creating endpoint.method from it
25
- def process_file(file)
26
- file.slice! serving_folder
27
- extension = File.extname(file)
23
+ # @param [String] filename Path to file to process
24
+ def process_file(filename)
25
+ filename.slice! serving_folder
26
+ extension = File.extname(filename)
28
27
  case extension
29
- when ".yaml" then YamlProcessor.process(file)
28
+ when ".yaml" then YamlProcessor.process(filename)
30
29
  else
31
- FileProcessor.process(file)
30
+ FileProcessor.process(filename)
32
31
  end
33
32
  end
34
33
 
35
34
  # Show plan
36
35
  def show
37
36
  endpoint_desc = ""
38
- endpoints.sort { |a,b| a[0].length - b[0].length }.each do |endpoint, methods|
37
+ endpoints.sort { |a, b| a[0].length - b[0].length }.each do |endpoint, methods|
39
38
  endpoint_desc += "#{endpoint} \n"
40
39
  methods.each do |method_name, endpoints|
41
40
  endpoint_desc += " #{method_name.upcase} (#{endpoints.size} responses)\n"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FileSv
4
- VERSION = "0.1.2"
4
+ VERSION = "0.1.3"
5
5
  end
@@ -12,16 +12,17 @@ class VirtualServer < Sinatra::Base
12
12
  register Sinatra::DocDsl
13
13
 
14
14
  page do
15
- title 'File SV'
15
+ title "File SV"
16
16
  header "Service virtualization created from #{Dir.pwd}"
17
- introduction 'Created using file_sv. See <a href="https://gitlab.com/samuel-garratt/file_sv">File SV</a> for more details'
17
+ introduction 'Created using file_sv. See <a href="https://gitlab.com/samuel-garratt/file_sv">File SV</a>
18
+ for more details'
18
19
  end
19
20
 
20
- get '/favicon.ico' do
21
- send_file File.join(__dir__, 'file_sv.ico')
21
+ get "/favicon.ico" do
22
+ send_file File.join(__dir__, "file_sv.ico")
22
23
  end
23
24
 
24
- doc_endpoint '/docs'
25
+ doc_endpoint "/docs"
25
26
 
26
27
  SvPlan.endpoints.each do |_endpoint_path, endpoint_value|
27
28
  endpoint_value.each do |_method_name, endpoints|
@@ -6,7 +6,7 @@ class YamlProcessor
6
6
  # Process YAML file
7
7
  def process(filename)
8
8
  if filename == "/file_sv.yaml"
9
- puts "Overriding default config based on #{Dir.pwd}#{filename[1..-1]}"
9
+ puts "Overriding default config based on #{File.join(Dir.pwd, filename[1..-1])}"
10
10
  load_default_config filename[1..-1]
11
11
  else
12
12
  puts "Skipping #{filename}"
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.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Garratt
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-04 00:00:00.000000000 Z
11
+ date: 2021-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faker