sitespec 0.0.5 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -6
- data/README.md +58 -37
- data/lib/sitespec.rb +16 -39
- data/lib/sitespec/artifact.rb +89 -0
- data/lib/sitespec/configuration.rb +28 -3
- data/lib/sitespec/rspec.rb +20 -0
- data/lib/sitespec/version.rb +1 -1
- data/sitespec.gemspec +3 -2
- data/spec/sitespec_spec.rb +15 -5
- data/spec/spec_helper.rb +1 -9
- metadata +24 -16
- data/lib/sitespec/builder.rb +0 -23
- data/lib/sitespec/error.rb +0 -4
- data/lib/sitespec/formatter.rb +0 -19
- data/lib/sitespec/initialize.rb +0 -2
- data/lib/sitespec/request.rb +0 -40
- data/lib/sitespec/response.rb +0 -17
- data/lib/sitespec/writer.rb +0 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9fc89ff9faa0578468ba10193d3c0ce7503a2c9
|
4
|
+
data.tar.gz: 5de14be6b1383849c8027a460eb1a6815be8f239
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0dcf588bd912f06ec9a57677e76ac66684fcd8afbb91de6f1d8e097bec25dcde54b53bbc75cc90d425c903cc9f85ffa7e3cfafc26b5e02d0745ce42359ec6593
|
7
|
+
data.tar.gz: 431a14bb5c21985f7be8154c985f22e1efb2b84eca0210bd1a159cbda6caee36bdd2b12b923ffb2a4f2379469fe89ab96e5fc8d317de7c18e3caeb3cdd1962a5
|
data/CHANGELOG.md
CHANGED
@@ -1,15 +1,18 @@
|
|
1
|
+
## 1.0.0
|
2
|
+
- Renewal with Ruby 2, RSpec 3, and rack-test
|
3
|
+
|
1
4
|
## 0.0.5
|
2
|
-
|
5
|
+
- Fix dependent RSpec version
|
3
6
|
|
4
7
|
## 0.0.4
|
5
|
-
|
8
|
+
- Support Ruby 1.9.x
|
6
9
|
|
7
10
|
## 0.0.3
|
8
|
-
|
11
|
+
- Fix rspec gem dependency
|
9
12
|
|
10
13
|
## 0.0.2
|
11
|
-
|
14
|
+
- Pretty RSpec formatter
|
12
15
|
|
13
16
|
## 0.0.1
|
14
|
-
|
15
|
-
|
17
|
+
- Basic features to generate files from request spec
|
18
|
+
- The 1st release on 2013-11-15
|
data/README.md
CHANGED
@@ -1,56 +1,77 @@
|
|
1
1
|
# Sitespec
|
2
2
|
Generate static site from your rack application & spec definition.
|
3
3
|
|
4
|
-
## Features
|
5
4
|
* Provides the same way to create both dynamic & static website
|
6
5
|
* Generates static website from your existing dynamic website
|
7
6
|
* Sitespec can be executable specification, good documentation, and well-tested implementation
|
8
7
|
|
9
|
-
##
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
## Usage
|
9
|
+
### Add sitespec into your Gemfile
|
10
|
+
```rb
|
11
|
+
# Gemfile
|
12
|
+
gem "sitespec"
|
13
13
|
```
|
14
14
|
|
15
|
-
|
16
|
-
```
|
17
|
-
# spec/
|
18
|
-
require "sitespec"
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
end
|
15
|
+
### Require sitespec/rspec in your specs
|
16
|
+
```rb
|
17
|
+
# spec/spec_helper.rb
|
18
|
+
require "sitespec/rspec"
|
19
|
+
```
|
20
|
+
|
21
|
+
### Write request-specs with `:sitespec` metadata
|
22
|
+
Note: [rack/test](https://github.com/brynary/rack-test) is automatically enabled
|
23
|
+
in the example groups that have `:sitespec`.
|
25
24
|
|
25
|
+
```rb
|
26
|
+
# spec/site_spec.rb
|
26
27
|
describe "Sitespec" do
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
28
|
+
let(:app) do
|
29
|
+
MyRackApp
|
30
|
+
end
|
31
|
+
|
32
|
+
%w[
|
33
|
+
/2000/01/01/hello.html
|
34
|
+
/2000/01/02/world.html
|
35
|
+
/feed.xml
|
36
|
+
/images/favicon.ico
|
37
|
+
/index.html
|
38
|
+
/stylesheets/all.css
|
39
|
+
].each do |path|
|
40
|
+
describe "GET #{path}", :sitespec do
|
41
|
+
it "returns 200" do
|
42
|
+
expect(get(path).status).to eq 200
|
43
|
+
end
|
44
|
+
end
|
36
45
|
end
|
37
46
|
end
|
38
47
|
```
|
39
48
|
|
40
|
-
|
41
|
-
|
42
|
-
$ rspec
|
43
|
-
Build started...
|
49
|
+
### Run rspec to build static files
|
50
|
+
Note: only successful examples generate static files.
|
44
51
|
|
45
|
-
|
46
|
-
|
47
|
-
✔ feed.xml
|
48
|
-
✔ images/favicon.ico
|
49
|
-
✔ index.html
|
50
|
-
✔ stylesheets/all.css
|
52
|
+
```
|
53
|
+
$ bundle exec rspec
|
51
54
|
|
52
|
-
|
55
|
+
Example application
|
56
|
+
GET /2000-01-01-hello.html
|
57
|
+
returns 200
|
58
|
+
GET /index.html
|
59
|
+
returns 200
|
60
|
+
GET /stylesheets/all.css
|
61
|
+
returns 200
|
62
|
+
|
63
|
+
Finished in 0.08302 seconds (files took 0.79161 seconds to load)
|
64
|
+
3 examples, 0 failures
|
53
65
|
```
|
54
66
|
|
55
|
-
##
|
56
|
-
|
67
|
+
## Configuration
|
68
|
+
- `Sitespec.configuration.build_path` - Where to locate files (default: `"build"`)
|
69
|
+
- `Sitespec.configuration.enabled` - Flag to enable sitespec (default: `true`)
|
70
|
+
|
71
|
+
## Advanced topics
|
72
|
+
Sitespec is excellent with GitHub Pages.
|
73
|
+
[r7kamura/r7kamura.github.io](https://github.com/r7kamura/r7kamura.github.io)
|
74
|
+
is a working example that uses Sitespec to build static files from Rack application.
|
75
|
+
It uses TravisCI to build and push files to GitHub repo's master branch.
|
76
|
+
See [.travis.yml](https://github.com/r7kamura/r7kamura.github.io/blob/source/.travis.yml)
|
77
|
+
for more information about how to to it.
|
data/lib/sitespec.rb
CHANGED
@@ -1,52 +1,29 @@
|
|
1
|
-
require "sitespec/
|
1
|
+
require "sitespec/artifact"
|
2
2
|
require "sitespec/configuration"
|
3
|
-
require "sitespec/error"
|
4
|
-
require "sitespec/formatter"
|
5
|
-
require "sitespec/request"
|
6
|
-
require "sitespec/response"
|
7
3
|
require "sitespec/version"
|
8
|
-
require "sitespec/writer"
|
9
|
-
require "sitespec/initialize"
|
10
4
|
|
11
5
|
module Sitespec
|
12
6
|
class << self
|
13
|
-
attr_writer :
|
7
|
+
attr_writer :artifacts_count
|
14
8
|
|
15
|
-
def
|
16
|
-
@
|
9
|
+
def artifacts_count
|
10
|
+
@artifacts_count || 0
|
17
11
|
end
|
18
12
|
|
19
|
-
|
20
|
-
|
13
|
+
# Provide singleton configuration object shared with the current process.
|
14
|
+
# @example
|
15
|
+
# Sitespec.configuration.build_path = "artifacts"
|
16
|
+
def configuration
|
17
|
+
@configuration ||= Sitespec::Configuration.new
|
21
18
|
end
|
22
19
|
|
23
|
-
|
24
|
-
|
20
|
+
# Provide friendly interface to access to Sitespec.configuration.
|
21
|
+
# @example
|
22
|
+
# Sitespec.configure do |configuration|
|
23
|
+
# configuration.build_path = "artifacts"
|
24
|
+
# end
|
25
|
+
def configure(&block)
|
26
|
+
block.call(configuration)
|
25
27
|
end
|
26
28
|
end
|
27
|
-
|
28
|
-
module_function
|
29
|
-
|
30
|
-
attr_reader :request, :response
|
31
|
-
|
32
|
-
def get(path, params = {}, env = {})
|
33
|
-
process(:get, path, params, env)
|
34
|
-
end
|
35
|
-
|
36
|
-
def post(path, params = {}, env = {})
|
37
|
-
process(:post, path, params, env)
|
38
|
-
end
|
39
|
-
|
40
|
-
def put(path, params = {}, env = {})
|
41
|
-
process(:put, path, params, env)
|
42
|
-
end
|
43
|
-
|
44
|
-
def delete(path, params = {}, env = {})
|
45
|
-
process(:delete, path, params, env)
|
46
|
-
end
|
47
|
-
|
48
|
-
def process(*args)
|
49
|
-
@request = Request.new(*args)
|
50
|
-
@response = Builder.build(@request)
|
51
|
-
end
|
52
29
|
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require "pathname"
|
2
|
+
require "sitespec"
|
3
|
+
|
4
|
+
module Sitespec
|
5
|
+
# "Artifact" is corresponding to each response body to an endpoint.
|
6
|
+
# This class has ActiveRecord-like interface like Sitespec::Artifact.create.
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# Sitespec::Artifact.create(example: example, example_group: example_group)
|
10
|
+
#
|
11
|
+
class Artifact
|
12
|
+
class << self
|
13
|
+
# Short-hand method to call `.new` and `#save`
|
14
|
+
# @return [Sitespec::Artifact]
|
15
|
+
def create(**args)
|
16
|
+
new(**args).tap(&:save)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# @param [RSpec::Core::Example] example In almost cases, `RSpec.current_example` is passed
|
21
|
+
# @param [RSpec::Core::ExampleGroup] example_group In almost cases, `self` is passed
|
22
|
+
def initialize(example: nil, example_group: nil)
|
23
|
+
@example = example
|
24
|
+
@example_group = example_group
|
25
|
+
end
|
26
|
+
|
27
|
+
# Validate its attributes and generate a new file
|
28
|
+
# @return [false, true] True for successful case, otherwise false
|
29
|
+
def save
|
30
|
+
if valid?
|
31
|
+
write
|
32
|
+
count_up
|
33
|
+
true
|
34
|
+
else
|
35
|
+
false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def count_up
|
42
|
+
Sitespec.artifacts_count += 1
|
43
|
+
end
|
44
|
+
|
45
|
+
# Utility method to access to `@example`
|
46
|
+
def example
|
47
|
+
@example
|
48
|
+
end
|
49
|
+
|
50
|
+
# Utility method to access to `@example_group`
|
51
|
+
def example_group
|
52
|
+
@example_group
|
53
|
+
end
|
54
|
+
|
55
|
+
def generate_file
|
56
|
+
pathname.write(response.body)
|
57
|
+
end
|
58
|
+
|
59
|
+
def make_parent_directory
|
60
|
+
pathname.parent.mkpath
|
61
|
+
end
|
62
|
+
|
63
|
+
# @return [Pathname] Where to an artifact file is located
|
64
|
+
def pathname
|
65
|
+
Pathname.new(File.join(Sitespec.configuration.build_pathname, request.path))
|
66
|
+
end
|
67
|
+
|
68
|
+
# @note We expect `request` is provided via rack-test
|
69
|
+
def request
|
70
|
+
example_group.last_request
|
71
|
+
end
|
72
|
+
|
73
|
+
# @note We expect `response` is provided via rack-test
|
74
|
+
def response
|
75
|
+
example_group.last_response
|
76
|
+
end
|
77
|
+
|
78
|
+
# @return [false, true] Validation result
|
79
|
+
def valid?
|
80
|
+
example.exception.nil? && Sitespec.configuration.enabled?
|
81
|
+
end
|
82
|
+
|
83
|
+
# Generate directory and file
|
84
|
+
def write
|
85
|
+
make_parent_directory
|
86
|
+
generate_file
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -1,10 +1,35 @@
|
|
1
|
+
require "pathname"
|
2
|
+
|
1
3
|
module Sitespec
|
2
4
|
class Configuration
|
3
|
-
|
5
|
+
DEFAULT_BUILD_PATH = "build"
|
6
|
+
|
7
|
+
attr_writer :build_path
|
4
8
|
|
5
9
|
def initialize
|
6
|
-
@
|
7
|
-
|
10
|
+
@enabled = true
|
11
|
+
end
|
12
|
+
|
13
|
+
def build_path
|
14
|
+
@build_path || DEFAULT_BUILD_PATH
|
15
|
+
end
|
16
|
+
|
17
|
+
# @return [Pathname]
|
18
|
+
def build_pathname
|
19
|
+
Pathname.new(build_path)
|
20
|
+
end
|
21
|
+
|
22
|
+
def disable
|
23
|
+
@enabled = false
|
24
|
+
end
|
25
|
+
|
26
|
+
def enable
|
27
|
+
@enabled = true
|
28
|
+
end
|
29
|
+
|
30
|
+
def enabled
|
31
|
+
!!@enabled
|
8
32
|
end
|
33
|
+
alias_method :enabled?, :enabled
|
9
34
|
end
|
10
35
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# This file does not provide any class or module named Sitespec::RSpec,
|
2
|
+
# but configures suitable settings to run Sitespec with RSpec.
|
3
|
+
|
4
|
+
require "rack/test"
|
5
|
+
require "rspec"
|
6
|
+
require "sitespec"
|
7
|
+
|
8
|
+
RSpec.configure do |config|
|
9
|
+
config.include Rack::Test::Methods, sitespec: true
|
10
|
+
|
11
|
+
config.after do |example|
|
12
|
+
Sitespec::Artifact.create(example: example, example_group: self)
|
13
|
+
end
|
14
|
+
|
15
|
+
config.after(:suite) do
|
16
|
+
if Sitespec.artifacts_count > 0
|
17
|
+
puts "\nSitespec generated #{Sitespec.artifacts_count} files into #{Sitespec.configuration.build_path} directory."
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/sitespec/version.rb
CHANGED
data/sitespec.gemspec
CHANGED
@@ -10,13 +10,14 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.summary = "Generate static site from your rack application & spec definition"
|
11
11
|
spec.homepage = "https://github.com/r7kamura/sitespec"
|
12
12
|
spec.license = "MIT"
|
13
|
-
|
14
13
|
spec.files = `git ls-files`.split($/)
|
15
14
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
16
15
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
17
16
|
spec.require_paths = ["lib"]
|
17
|
+
spec.required_ruby_version = ">= 2.0.0"
|
18
18
|
|
19
|
-
spec.add_dependency "
|
19
|
+
spec.add_dependency "rack-test"
|
20
|
+
spec.add_dependency "rspec", ">= 3.0.0"
|
20
21
|
spec.add_development_dependency "bundler"
|
21
22
|
spec.add_development_dependency "padrino"
|
22
23
|
spec.add_development_dependency "pry"
|
data/spec/sitespec_spec.rb
CHANGED
@@ -1,9 +1,19 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
describe "Example application" do
|
4
|
+
let(:app) do
|
5
|
+
Sitespec::ExampleApplication
|
6
|
+
end
|
7
|
+
|
8
|
+
%w[
|
9
|
+
/2000-01-01-hello.html
|
10
|
+
/index.html
|
11
|
+
/stylesheets/all.css
|
12
|
+
].each do |path|
|
13
|
+
describe "GET #{path}", :sitespec do
|
14
|
+
it "returns 200" do
|
15
|
+
expect(get(path).status).to eq 200
|
16
|
+
end
|
17
|
+
end
|
8
18
|
end
|
9
19
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,11 +1,3 @@
|
|
1
|
-
|
2
|
-
require "sitespec"
|
1
|
+
require "sitespec/rspec"
|
3
2
|
|
4
3
|
Dir[File.expand_path("../support/**/*.rb", __FILE__)].each {|f| require f }
|
5
|
-
|
6
|
-
RSpec.configure do |config|
|
7
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
8
|
-
config.include Sitespec
|
9
|
-
end
|
10
|
-
|
11
|
-
Sitespec.configuration.application = Sitespec::ExampleApplication
|
metadata
CHANGED
@@ -1,29 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sitespec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakamura
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rack-test
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rspec
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
|
-
- - "
|
31
|
+
- - ">="
|
18
32
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
33
|
+
version: 3.0.0
|
20
34
|
type: :runtime
|
21
35
|
prerelease: false
|
22
36
|
version_requirements: !ruby/object:Gem::Requirement
|
23
37
|
requirements:
|
24
|
-
- - "
|
38
|
+
- - ">="
|
25
39
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
40
|
+
version: 3.0.0
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,15 +150,10 @@ files:
|
|
136
150
|
- README.md
|
137
151
|
- Rakefile
|
138
152
|
- lib/sitespec.rb
|
139
|
-
- lib/sitespec/
|
153
|
+
- lib/sitespec/artifact.rb
|
140
154
|
- lib/sitespec/configuration.rb
|
141
|
-
- lib/sitespec/
|
142
|
-
- lib/sitespec/formatter.rb
|
143
|
-
- lib/sitespec/initialize.rb
|
144
|
-
- lib/sitespec/request.rb
|
145
|
-
- lib/sitespec/response.rb
|
155
|
+
- lib/sitespec/rspec.rb
|
146
156
|
- lib/sitespec/version.rb
|
147
|
-
- lib/sitespec/writer.rb
|
148
157
|
- sitespec.gemspec
|
149
158
|
- spec/sitespec_spec.rb
|
150
159
|
- spec/spec_helper.rb
|
@@ -167,7 +176,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
167
176
|
requirements:
|
168
177
|
- - ">="
|
169
178
|
- !ruby/object:Gem::Version
|
170
|
-
version:
|
179
|
+
version: 2.0.0
|
171
180
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
172
181
|
requirements:
|
173
182
|
- - ">="
|
@@ -175,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
184
|
version: '0'
|
176
185
|
requirements: []
|
177
186
|
rubyforge_project:
|
178
|
-
rubygems_version: 2.
|
187
|
+
rubygems_version: 2.4.5
|
179
188
|
signing_key:
|
180
189
|
specification_version: 4
|
181
190
|
summary: Generate static site from your rack application & spec definition
|
@@ -189,4 +198,3 @@ test_files:
|
|
189
198
|
- spec/support/application/views/index.slim
|
190
199
|
- spec/support/application/views/layouts/application.slim
|
191
200
|
- spec/support/application/views/show.slim
|
192
|
-
has_rdoc:
|
data/lib/sitespec/builder.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
module Sitespec
|
2
|
-
class Builder
|
3
|
-
def self.build(*args)
|
4
|
-
new(*args).build
|
5
|
-
end
|
6
|
-
|
7
|
-
def initialize(request)
|
8
|
-
@request = request
|
9
|
-
end
|
10
|
-
|
11
|
-
def build
|
12
|
-
Response.new(*call).tap {|response| Writer.write(@request, response) }
|
13
|
-
end
|
14
|
-
|
15
|
-
def call
|
16
|
-
Sitespec.configuration.application.call(@request.env).tap do |status, header, body|
|
17
|
-
if Sitespec.configuration.raise_http_error && status >= 400
|
18
|
-
raise Error, "#{@request.uri} returned #{status}"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
data/lib/sitespec/error.rb
DELETED
data/lib/sitespec/formatter.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require "rspec/core/formatters/documentation_formatter"
|
2
|
-
|
3
|
-
module Sitespec
|
4
|
-
class Formatter < RSpec::Core::Formatters::BaseTextFormatter
|
5
|
-
def start(*)
|
6
|
-
super
|
7
|
-
output.puts "Build started...\n\n"
|
8
|
-
end
|
9
|
-
|
10
|
-
def dump_summary(duration, example_count, failure_count, pending_count)
|
11
|
-
@duration = duration
|
12
|
-
@example_count = example_count
|
13
|
-
@failure_count = failure_count
|
14
|
-
@pending_count = pending_count
|
15
|
-
output.puts "\nBuild finished with #{Sitespec.build_count} files in #{format_duration(duration)}.\n"
|
16
|
-
dump_commands_to_rerun_failed_examples
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
data/lib/sitespec/initialize.rb
DELETED
data/lib/sitespec/request.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
require "stringio"
|
2
|
-
require "uri"
|
3
|
-
|
4
|
-
module Sitespec
|
5
|
-
class Request
|
6
|
-
def initialize(method, path, params = {}, custom_env = {})
|
7
|
-
@custom_env = custom_env
|
8
|
-
@method = method
|
9
|
-
@params = params
|
10
|
-
@path = path
|
11
|
-
end
|
12
|
-
|
13
|
-
def env
|
14
|
-
@env ||= {
|
15
|
-
"HTTPS" => https? ? "on" : "off",
|
16
|
-
"HTTP_HOST" => uri.host,
|
17
|
-
"PATH_INFO" => uri.path,
|
18
|
-
"QUERY_STRING" => uri.query || "",
|
19
|
-
"REQUEST_METHOD" => @method.to_s.upcase,
|
20
|
-
"REQUEST_URI" => uri.to_s,
|
21
|
-
"SERVER_NAME" => uri.hostname,
|
22
|
-
"SERVER_PORT" => uri.port,
|
23
|
-
"rack.errors" => StringIO.new,
|
24
|
-
"rack.input" => StringIO.new,
|
25
|
-
"rack.multithread" => false,
|
26
|
-
"rack.run_once" => false,
|
27
|
-
"rack.url_scheme" => https? ? "http" : "https",
|
28
|
-
"rack.version" => [1, 1],
|
29
|
-
}.merge(@custom_env)
|
30
|
-
end
|
31
|
-
|
32
|
-
def uri
|
33
|
-
@uri ||= URI.parse(@path)
|
34
|
-
end
|
35
|
-
|
36
|
-
def https?
|
37
|
-
URI::HTTP === uri && uri.https?
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
data/lib/sitespec/response.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
module Sitespec
|
2
|
-
class Response
|
3
|
-
attr_reader :status, :header
|
4
|
-
|
5
|
-
def initialize(status, header, body)
|
6
|
-
@body = body
|
7
|
-
@header = header
|
8
|
-
@status = status
|
9
|
-
end
|
10
|
-
|
11
|
-
def body
|
12
|
-
lines = []
|
13
|
-
@body.each {|line| lines << line }
|
14
|
-
lines.join
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
data/lib/sitespec/writer.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
module Sitespec
|
3
|
-
class Writer
|
4
|
-
def self.write(*args)
|
5
|
-
new(*args).write
|
6
|
-
end
|
7
|
-
|
8
|
-
def initialize(request, response)
|
9
|
-
@request = request
|
10
|
-
@response = response
|
11
|
-
end
|
12
|
-
|
13
|
-
def write
|
14
|
-
mkpath
|
15
|
-
create_with_output_and_build_count
|
16
|
-
end
|
17
|
-
|
18
|
-
def path
|
19
|
-
@path ||= Pathname.new("#{Sitespec.configuration.build_path}#{@request.uri.path}")
|
20
|
-
end
|
21
|
-
|
22
|
-
def mkpath
|
23
|
-
path.parent.mkpath
|
24
|
-
end
|
25
|
-
|
26
|
-
def create
|
27
|
-
path.open("w") {|file| file << @response.body }
|
28
|
-
end
|
29
|
-
|
30
|
-
def create_with_output
|
31
|
-
create.tap { puts "#{color(?✔)} #{path}" }
|
32
|
-
end
|
33
|
-
|
34
|
-
def create_with_output_and_build_count
|
35
|
-
create_with_output.tap { Sitespec.build_count += 1 }
|
36
|
-
end
|
37
|
-
|
38
|
-
def color(text)
|
39
|
-
RSpec.configuration.color_enabled? ? "\e[32m#{text}\e[0m" : text
|
40
|
-
end
|
41
|
-
|
42
|
-
def puts(text)
|
43
|
-
RSpec.configuration.formatters[0].output.puts text
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|