mockly 0.0.1
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 +7 -0
- data/README.md +7 -0
- data/bin/mockly +17 -0
- data/lib/mockly/app.rb +61 -0
- data/lib/mockly/cli.rb +10 -0
- data/lib/mockly/command.rb +29 -0
- data/lib/mockly/version.rb +3 -0
- data/lib/mockly.rb +4 -0
- metadata +135 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: ce4062d908a409afdfc060cd69c375a55c50a47eef2814f73f90e5d507b205d3
|
|
4
|
+
data.tar.gz: 03d5b270eff8554aa71b099d6d731ed54b3753d914706c0061130cf943a87613
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 16c559edf9b0e3c7d977fe72e7b43b626cbe80de16d70c0d7e496604d8194c72a9979f5591e231eb4614c441b6ab58c5f66c1ff9a98844492c9cd80e6b853eab
|
|
7
|
+
data.tar.gz: 98a90186286dbcf6109878a37a2273c2a96e0184439c780f57d2dd8660d1abd47b6a1f341cd44b431244809ac03fd009de934ad42cabd731cc057e2e6607f16d
|
data/README.md
ADDED
data/bin/mockly
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
require 'mockly'
|
|
3
|
+
require 'colsole'
|
|
4
|
+
include Colsole
|
|
5
|
+
|
|
6
|
+
runner = Mockly::CLI.runner
|
|
7
|
+
|
|
8
|
+
begin
|
|
9
|
+
exit runner.run ARGV
|
|
10
|
+
rescue Interrupt
|
|
11
|
+
say! "\nGoodbye"
|
|
12
|
+
exit 1
|
|
13
|
+
rescue => e
|
|
14
|
+
puts e.backtrace.reverse if ENV['DEBUG']
|
|
15
|
+
say! "rib` #{e.class} `\n#{e.message}"
|
|
16
|
+
exit 1
|
|
17
|
+
end
|
data/lib/mockly/app.rb
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require 'sinatra/base'
|
|
2
|
+
require 'json'
|
|
3
|
+
require 'mime/types'
|
|
4
|
+
|
|
5
|
+
module Mockly
|
|
6
|
+
class App < Sinatra::Base
|
|
7
|
+
configure do
|
|
8
|
+
set :bind, '0.0.0.0'
|
|
9
|
+
set :port, 3000
|
|
10
|
+
set :server, :puma
|
|
11
|
+
set :environment, :production
|
|
12
|
+
set :mock_root, File.expand_path('mocks', Dir.pwd)
|
|
13
|
+
set :asset_root, File.join(settings.mock_root, 'assets')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
before do
|
|
17
|
+
content_type 'application/json'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
helpers do
|
|
21
|
+
def candidates(path, method)
|
|
22
|
+
clean = path.gsub(%r{/$}, '')
|
|
23
|
+
base = File.basename(clean)
|
|
24
|
+
dir = File.dirname(clean)
|
|
25
|
+
method_tag = method.downcase
|
|
26
|
+
|
|
27
|
+
dir = '' if dir == '.'
|
|
28
|
+
full_dir = dir.empty? ? settings.mock_root : "#{settings.mock_root}/#{dir}"
|
|
29
|
+
|
|
30
|
+
[
|
|
31
|
+
"#{full_dir}/#{method_tag}-#{base}.json",
|
|
32
|
+
"#{full_dir}/#{base}/#{method_tag}.json",
|
|
33
|
+
"#{full_dir}/#{base}.json",
|
|
34
|
+
]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def resolve_mock(path, method)
|
|
38
|
+
candidates(path, method).find { |file| File.file?(file) }
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
%w[GET POST PUT PATCH DELETE OPTIONS].each do |verb|
|
|
43
|
+
send(verb.downcase, '/*') do
|
|
44
|
+
req_path = params['splat'].first
|
|
45
|
+
|
|
46
|
+
exact = File.expand_path req_path, settings.mock_root
|
|
47
|
+
|
|
48
|
+
if exact.start_with?(settings.mock_root) && File.file?(exact)
|
|
49
|
+
content_type MIME::Types.type_for(exact).first.to_s
|
|
50
|
+
return send_file exact
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
file = resolve_mock req_path, request.request_method
|
|
54
|
+
return File.read file if file
|
|
55
|
+
|
|
56
|
+
status 404
|
|
57
|
+
JSON.dump error: "No mock for #{request.request_method} #{request.path}"
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
data/lib/mockly/cli.rb
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'mister_bin'
|
|
2
|
+
|
|
3
|
+
module Mockly
|
|
4
|
+
class Command < MisterBin::Command
|
|
5
|
+
summary 'Start the mock server'
|
|
6
|
+
|
|
7
|
+
version Mockly::VERSION
|
|
8
|
+
|
|
9
|
+
usage 'mockly [--port N --host IP --root PATH]'
|
|
10
|
+
usage 'mockly (-h|--help)'
|
|
11
|
+
|
|
12
|
+
option '-p --port N', 'Port number [default: 3000]'
|
|
13
|
+
option '-b --host IP', 'Binding address [default: 0.0.0.0]'
|
|
14
|
+
option '-r --root PATH', 'Root mocks directory [default: ./mocks]'
|
|
15
|
+
|
|
16
|
+
def run
|
|
17
|
+
port = (args['--port']).to_i
|
|
18
|
+
host = args['--host']
|
|
19
|
+
mock_root = File.expand_path args['--root']
|
|
20
|
+
|
|
21
|
+
App.set :bind, host
|
|
22
|
+
App.set :port, port
|
|
23
|
+
App.set :mock_root, mock_root
|
|
24
|
+
App.set :asset_root, File.join(mock_root, 'assets')
|
|
25
|
+
|
|
26
|
+
App.run!
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
data/lib/mockly.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: mockly
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Danny Ben Shitrit
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: json
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '2.18'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - "~>"
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '2.18'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: mime-types
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '3.6'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '3.6'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: mister_bin
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0.7'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0.7'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: puma
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '7.1'
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '7.1'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: rackup
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - "~>"
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '2.1'
|
|
75
|
+
type: :runtime
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - "~>"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '2.1'
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: sinatra
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - "~>"
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '4.2'
|
|
89
|
+
type: :runtime
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - "~>"
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '4.2'
|
|
96
|
+
description: Set up a testing server using a directory structure
|
|
97
|
+
email: db@dannyben.com
|
|
98
|
+
executables:
|
|
99
|
+
- mockly
|
|
100
|
+
extensions: []
|
|
101
|
+
extra_rdoc_files: []
|
|
102
|
+
files:
|
|
103
|
+
- README.md
|
|
104
|
+
- bin/mockly
|
|
105
|
+
- lib/mockly.rb
|
|
106
|
+
- lib/mockly/app.rb
|
|
107
|
+
- lib/mockly/cli.rb
|
|
108
|
+
- lib/mockly/command.rb
|
|
109
|
+
- lib/mockly/version.rb
|
|
110
|
+
homepage: https://github.com/DannyBen/mockly
|
|
111
|
+
licenses:
|
|
112
|
+
- MIT
|
|
113
|
+
metadata:
|
|
114
|
+
bug_tracker_uri: https://github.com/DannyBen/mockly/issues
|
|
115
|
+
changelog_uri: https://github.com/DannyBen/mockly/blob/master/CHANGELOG.md
|
|
116
|
+
source_code_uri: https://github.com/DannyBen/mockly
|
|
117
|
+
rubygems_mfa_required: 'true'
|
|
118
|
+
rdoc_options: []
|
|
119
|
+
require_paths:
|
|
120
|
+
- lib
|
|
121
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
122
|
+
requirements:
|
|
123
|
+
- - ">="
|
|
124
|
+
- !ruby/object:Gem::Version
|
|
125
|
+
version: '3.2'
|
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
|
+
requirements:
|
|
128
|
+
- - ">="
|
|
129
|
+
- !ruby/object:Gem::Version
|
|
130
|
+
version: '0'
|
|
131
|
+
requirements: []
|
|
132
|
+
rubygems_version: 4.0.3
|
|
133
|
+
specification_version: 4
|
|
134
|
+
summary: File based API mock server
|
|
135
|
+
test_files: []
|