rubai 0.1.0 → 0.1.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.
- data/.rspec +3 -0
- data/lib/rubai.rb +1 -0
- data/lib/rubai/cli.rb +9 -1
- data/lib/rubai/rack_app.rb +32 -17
- data/lib/rubai/rack_response.rb +25 -0
- data/lib/rubai/response.rb +20 -8
- data/rubai.gemspec +15 -7
- data/spec/rubai/rack_response_spec.rb +19 -0
- data/spec/rubai/response_spec.rb +18 -0
- data/spec/spec_helper.rb +3 -0
- data/version.rb +3 -0
- metadata +29 -8
- data/Gemfile +0 -3
- data/Gemfile.lock +0 -10
data/.rspec
ADDED
data/lib/rubai.rb
CHANGED
data/lib/rubai/cli.rb
CHANGED
@@ -1,3 +1,11 @@
|
|
1
1
|
require "rack"
|
2
2
|
require "rubai"
|
3
|
-
|
3
|
+
require "optparse"
|
4
|
+
|
5
|
+
options = Hash[:app, Rubai::RackApp.new, :Port, 9292]
|
6
|
+
parser = OptionParser.new do |opts|
|
7
|
+
opts.on("-p", "--port PORT") { |p| options[:Port] = p }
|
8
|
+
end
|
9
|
+
parser.parse!
|
10
|
+
|
11
|
+
Rack::Server.start options
|
data/lib/rubai/rack_app.rb
CHANGED
@@ -1,5 +1,22 @@
|
|
1
1
|
module Rubai
|
2
2
|
class RackApp
|
3
|
+
|
4
|
+
def call(env)
|
5
|
+
@env = env
|
6
|
+
|
7
|
+
rack_response = RackResponse.new
|
8
|
+
|
9
|
+
if File.file?(path)
|
10
|
+
response = success_response
|
11
|
+
else
|
12
|
+
response = not_found_response
|
13
|
+
end
|
14
|
+
|
15
|
+
rack_response.respond_with(response)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
3
20
|
def path
|
4
21
|
if env["PATH_INFO"] == "/"
|
5
22
|
path = "index.html"
|
@@ -13,26 +30,24 @@ module Rubai
|
|
13
30
|
@env
|
14
31
|
end
|
15
32
|
|
16
|
-
def
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
response << "</html>"
|
29
|
-
return response.for_rack
|
30
|
-
end
|
33
|
+
def not_found_response
|
34
|
+
response = Response.new
|
35
|
+
response.status = 404
|
36
|
+
response.content_type = MimeType.new(:html).content_type
|
37
|
+
# TODO: this response should be configurable
|
38
|
+
response << "<html>"
|
39
|
+
response << " <body>"
|
40
|
+
response << " NO!"
|
41
|
+
response << " </body>"
|
42
|
+
response << "</html>"
|
43
|
+
response
|
44
|
+
end
|
31
45
|
|
46
|
+
def success_response
|
32
47
|
extension = File.extname(path)
|
33
48
|
mime_type = MimeType.new(extension)
|
34
|
-
|
35
|
-
response.for_rack
|
49
|
+
Response.new 200, mime_type.content_type, [File.read(path)]
|
36
50
|
end
|
37
51
|
end
|
52
|
+
|
38
53
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Rubai
|
2
|
+
class RackResponse
|
3
|
+
def initialize(response=nil)
|
4
|
+
@response = response
|
5
|
+
end
|
6
|
+
|
7
|
+
def respond_with(response)
|
8
|
+
@response = response
|
9
|
+
call
|
10
|
+
end
|
11
|
+
|
12
|
+
def call
|
13
|
+
[response.status, response.headers, response.body]
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_s
|
17
|
+
"#{response.status}, #{response.headers}, #{response.body.join}"
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
def response
|
22
|
+
@response
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/rubai/response.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
module Rubai
|
2
2
|
class Response
|
3
|
+
attr_reader :status
|
4
|
+
|
3
5
|
def initialize(status = 200, content_type = "text/html", body=[])
|
4
6
|
@status = status
|
5
7
|
self.content_type= content_type
|
6
8
|
@body = body
|
7
9
|
end
|
8
10
|
|
9
|
-
def
|
10
|
-
|
11
|
+
def self.new_with_body body
|
12
|
+
self.new 200, "text/html", [body]
|
11
13
|
end
|
12
14
|
|
13
15
|
def body
|
@@ -18,20 +20,30 @@ module Rubai
|
|
18
20
|
body << body_text
|
19
21
|
end
|
20
22
|
|
21
|
-
def []=(header, value)
|
22
|
-
headers[header] = value
|
23
|
-
end
|
24
|
-
|
25
23
|
def content_type=(content_type)
|
26
24
|
self["Content-Type"] = content_type
|
27
25
|
end
|
28
26
|
|
27
|
+
def content_type
|
28
|
+
self["Content-Type"]
|
29
|
+
end
|
30
|
+
|
29
31
|
def status=(status)
|
30
32
|
@status = status
|
31
33
|
end
|
32
34
|
|
33
|
-
def
|
34
|
-
|
35
|
+
def headers
|
36
|
+
@headers ||= {}
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def [](header)
|
42
|
+
headers[header]
|
43
|
+
end
|
44
|
+
|
45
|
+
def []=(header, value)
|
46
|
+
headers[header] = value
|
35
47
|
end
|
36
48
|
end
|
37
49
|
end
|
data/rubai.gemspec
CHANGED
@@ -1,20 +1,28 @@
|
|
1
|
-
#
|
1
|
+
#encoding: utf-8
|
2
|
+
require File.join(File.expand_path("../", __FILE__), "version.rb")
|
3
|
+
|
2
4
|
Gem::Specification.new do |s|
|
3
5
|
s.name = "rubai"
|
4
|
-
s.version =
|
6
|
+
s.version = Rubai::VERSION
|
5
7
|
s.platform = Gem::Platform::RUBY
|
6
8
|
s.authors = ["Ricardo Valeriano"]
|
7
9
|
s.email = ["ricardo.valeriano@gmail.com"]
|
8
10
|
s.homepage = "http://github.com/ricardovaleriano/rubai"
|
9
11
|
s.summary = "Simple local http server for your local dirs"
|
10
|
-
s.description =
|
11
|
-
Simple local http server for your local dirs
|
12
|
-
SUM
|
12
|
+
s.description = "Simple local http server for your local dirs"
|
13
13
|
s.required_rubygems_version = ">= 0"
|
14
14
|
|
15
15
|
s.require_path = 'lib'
|
16
|
-
|
16
|
+
|
17
|
+
s.files = `git ls-files | sed 's/examples.*//'`.
|
18
|
+
split("\n").
|
19
|
+
reject{|f| f == ""}
|
20
|
+
|
21
|
+
s.test_files = `git ls-files -- spec/*`.
|
22
|
+
split("\n")
|
23
|
+
|
24
|
+
s.executable = 'rubai'
|
17
25
|
|
18
26
|
s.add_dependency 'rack'
|
19
|
-
s.
|
27
|
+
s.add_development_dependency 'rspec'
|
20
28
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Rubai
|
2
|
+
describe RackResponse do
|
3
|
+
let(:status) { 200 }
|
4
|
+
let(:header) { Hash["Content-Type", "text/html"] }
|
5
|
+
let(:body) { "test" }
|
6
|
+
let(:response) { Response.new_with_body(body) }
|
7
|
+
let(:rack_response) { [status, header, [body]] }
|
8
|
+
|
9
|
+
context "::new(Response.new)" do
|
10
|
+
subject { RackResponse.new(response) }
|
11
|
+
its(:call) { should be_eql rack_response }
|
12
|
+
end
|
13
|
+
|
14
|
+
context "#respond_with(Response.new)" do
|
15
|
+
subject { RackResponse.new.respond_with(response) }
|
16
|
+
it { should be_eql rack_response }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Rubai
|
2
|
+
describe Response, "Generates a generic response" do
|
3
|
+
context "#new with default parameters" do
|
4
|
+
its(:body) { should eq [] }
|
5
|
+
its(:status) { should eq 200 }
|
6
|
+
its(:content_type) { should eq "text/html" }
|
7
|
+
end
|
8
|
+
|
9
|
+
context "#<<" do
|
10
|
+
let(:some_text) { "omg! response..." }
|
11
|
+
subject(:response) { Response.new }
|
12
|
+
it "appends string to response #body" do
|
13
|
+
response << some_text
|
14
|
+
expect(response.body).to include some_text
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/spec/spec_helper.rb
ADDED
data/version.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubai
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|
@@ -27,9 +27,23 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rspec
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description: Simple local http server for your local dirs
|
33
47
|
email:
|
34
48
|
- ricardo.valeriano@gmail.com
|
35
49
|
executables:
|
@@ -38,16 +52,20 @@ extensions: []
|
|
38
52
|
extra_rdoc_files: []
|
39
53
|
files:
|
40
54
|
- .gitignore
|
41
|
-
-
|
42
|
-
- Gemfile.lock
|
55
|
+
- .rspec
|
43
56
|
- Readme.md
|
44
57
|
- bin/rubai
|
45
58
|
- lib/rubai.rb
|
46
59
|
- lib/rubai/cli.rb
|
47
60
|
- lib/rubai/mime_type.rb
|
48
61
|
- lib/rubai/rack_app.rb
|
62
|
+
- lib/rubai/rack_response.rb
|
49
63
|
- lib/rubai/response.rb
|
50
64
|
- rubai.gemspec
|
65
|
+
- spec/rubai/rack_response_spec.rb
|
66
|
+
- spec/rubai/response_spec.rb
|
67
|
+
- spec/spec_helper.rb
|
68
|
+
- version.rb
|
51
69
|
homepage: http://github.com/ricardovaleriano/rubai
|
52
70
|
licenses: []
|
53
71
|
post_install_message:
|
@@ -72,4 +90,7 @@ rubygems_version: 1.8.23
|
|
72
90
|
signing_key:
|
73
91
|
specification_version: 3
|
74
92
|
summary: Simple local http server for your local dirs
|
75
|
-
test_files:
|
93
|
+
test_files:
|
94
|
+
- spec/rubai/rack_response_spec.rb
|
95
|
+
- spec/rubai/response_spec.rb
|
96
|
+
- spec/spec_helper.rb
|
data/Gemfile
DELETED