Initial Commit
Base Script with a Rake Verification
This commit is contained in:
commit
41e6fd2cdc
11 changed files with 171 additions and 0 deletions
3
Gemfile
Normal file
3
Gemfile
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
source 'https://rubygems.org'
|
||||
|
||||
gem 'minitest'
|
||||
13
Gemfile.lock
Normal file
13
Gemfile.lock
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
minitest (5.20.0)
|
||||
|
||||
PLATFORMS
|
||||
x64-mingw-ucrt
|
||||
|
||||
DEPENDENCIES
|
||||
minitest
|
||||
|
||||
BUNDLED WITH
|
||||
2.4.19
|
||||
56
lib/Request.rb
Normal file
56
lib/Request.rb
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
class Request
|
||||
attr_reader :method, :resource, :version, :headers, :params
|
||||
|
||||
def initialize(input)
|
||||
@input = input
|
||||
@method = ""
|
||||
@resource = ""
|
||||
@version = ""
|
||||
@headers = []
|
||||
@params = []
|
||||
deconstructor(@input)
|
||||
end
|
||||
|
||||
def deconstructor(input)
|
||||
rows = input.split(/\n/)
|
||||
@method, @resource, @version = rows[0].split(' ')
|
||||
@headers, @params = {}, {}
|
||||
if rows.find_index("") != nil then
|
||||
limit = rows.find_index("")
|
||||
else
|
||||
limit = rows.length
|
||||
end
|
||||
header_constructor(rows, limit)
|
||||
if limit != rows.length
|
||||
param_constructor(rows)
|
||||
end
|
||||
if @resource.include?("?")
|
||||
resource_deconstructor
|
||||
end
|
||||
end
|
||||
def header_constructor(rows, limit)
|
||||
for row in rows[1..limit-1]
|
||||
context, information = row.split(' ')
|
||||
context = context.sub(/:/, "")
|
||||
@headers[context] = information
|
||||
end
|
||||
end
|
||||
|
||||
def param_constructor(rows)
|
||||
for row in rows[rows.find_index("")+1..rows.length]
|
||||
information = row.split(/&/)
|
||||
for info in information
|
||||
context, content = info.split('=')
|
||||
@params[context] = content
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def resource_deconstructor
|
||||
information = @resource.split('?')[1].split(/&/)
|
||||
for info in information
|
||||
context, content = info.split('=')
|
||||
@params[context] = content
|
||||
end
|
||||
end
|
||||
end
|
||||
10
rakefile
Normal file
10
rakefile
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
require "minitest/test_task"
|
||||
|
||||
Minitest::TestTask.create(:test) do |t|
|
||||
t.libs << "spec"
|
||||
t.libs << "lib"
|
||||
t.warning = false
|
||||
t.test_globs = ["spec/**/*_spec.rb"]
|
||||
end
|
||||
|
||||
task :default => :test
|
||||
6
spec/example_requests/get-examples.request.txt
Normal file
6
spec/example_requests/get-examples.request.txt
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
GET /examples HTTP/1.1
|
||||
Host: example.com
|
||||
User-Agent: ExampleBrowser/1.0
|
||||
Accept-Encoding: gzip, deflate
|
||||
Accept: */*
|
||||
|
||||
6
spec/example_requests/get-fruits-with-filter.request.txt
Normal file
6
spec/example_requests/get-fruits-with-filter.request.txt
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
GET /fruits?type=bananas&minrating=4 HTTP/1.1
|
||||
Host: fruits.com
|
||||
User-Agent: ExampleBrowser/1.0
|
||||
Accept-Encoding: gzip, deflate
|
||||
Accept: */*
|
||||
|
||||
4
spec/example_requests/get-index.request.txt
Normal file
4
spec/example_requests/get-index.request.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
GET / HTTP/1.1
|
||||
Host: developer.mozilla.org
|
||||
Accept-Language: fr
|
||||
|
||||
6
spec/example_requests/post-login.request.txt
Normal file
6
spec/example_requests/post-login.request.txt
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
POST /login HTTP/1.1
|
||||
Host: foo.example
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
Content-Length: 39
|
||||
|
||||
username=grillkorv&password=verys3cret!
|
||||
25
spec/http_parser_spec.rb
Normal file
25
spec/http_parser_spec.rb
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
require_relative 'spec_helper'
|
||||
require_relative '../lib/Request'
|
||||
|
||||
describe 'Request' do
|
||||
|
||||
describe 'Simple get-request' do
|
||||
|
||||
it 'parses the http verb' do
|
||||
@request = Request.new(File.read('./spec/example_requests/get-index.request.txt'))
|
||||
_(@request.method).must_equal "GET"
|
||||
end
|
||||
|
||||
it 'parses the resource' do
|
||||
@request = Request.new(File.read('./spec/example_requests/get-index.request.txt'))
|
||||
_(@request.resource).must_equal "/"
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
describe 'get-requests with url params' do
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
1
spec/spec_helper.rb
Normal file
1
spec/spec_helper.rb
Normal file
|
|
@ -0,0 +1 @@
|
|||
require 'minitest/autorun'
|
||||
41
testing.rb
Normal file
41
testing.rb
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
require_relative 'main'
|
||||
|
||||
request_string = File.read('testcases/get-index.request.txt')
|
||||
|
||||
request = Request.new(request_string)
|
||||
|
||||
p request.method
|
||||
p request.resource
|
||||
p request.version
|
||||
p request.headers
|
||||
p request.params
|
||||
|
||||
request_string = File.read('testcases/get-examples.request.txt')
|
||||
|
||||
request = Request.new(request_string)
|
||||
|
||||
p request.method
|
||||
p request.resource
|
||||
p request.version
|
||||
p request.headers
|
||||
p request.params
|
||||
|
||||
request_string = File.read('testcases/get-fruits-with-filter.request.txt')
|
||||
|
||||
request = Request.new(request_string)
|
||||
|
||||
p request.method
|
||||
p request.resource
|
||||
p request.version
|
||||
p request.headers
|
||||
p request.params
|
||||
|
||||
request_string = File.read('testcases/post-login.request.txt')
|
||||
|
||||
request = Request.new(request_string)
|
||||
|
||||
p request.method
|
||||
p request.resource
|
||||
p request.version
|
||||
p request.headers
|
||||
p request.params
|
||||
Loading…
Add table
Add a link
Reference in a new issue