rack-blogengine 0.2.1 → 0.2.2
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 +4 -4
- data/.rubocop.yml +1 -1
- data/.travis.yml +9 -2
- data/Gemfile +3 -1
- data/README.md +11 -0
- data/Rakefile +18 -2
- data/assets/operator.rb +3 -0
- data/features/hello.feature +5 -0
- data/features/step_definitions/hello_steps.rb +13 -0
- data/features/support/env.rb +9 -0
- data/lib/rack/blogengine/application.rb +1 -1
- data/lib/rack/blogengine/application_router.rb +1 -1
- data/lib/rack/blogengine/command_line_interface.rb +9 -15
- data/lib/rack/blogengine/{doc_parser.rb → document_parser.rb} +25 -14
- data/lib/rack/blogengine/methods.rb +6 -2
- data/lib/rack/blogengine/operator.rb +1 -1
- data/lib/rack/blogengine/version.rb +1 -1
- data/lib/rack/blogengine.rb +1 -1
- data/rack-blogengine.gemspec +2 -4
- data/spec/rack/blogengine/document_spec.rb +34 -0
- data/spec/spec_helper.rb +53 -0
- data/test/{application_router_test.rb → rack/blogengine/application_router_test.rb} +10 -14
- data/test/rack/blogengine/command_line_interface_test.rb +92 -0
- data/test/rack/blogengine/document_parser_test.rb +92 -0
- data/test/rack/blogengine/document_test.rb +48 -0
- data/test/test_helper.rb +13 -12
- metadata +37 -42
- data/.rspec +0 -2
- data/test/document_test.rb +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6d1d461e13788b067f570f69315af3379f17c89d
|
4
|
+
data.tar.gz: bac62b1d82b17e8cc097ebc83f94b23bfe077a20
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21729aaf42d0acee7106f1789c4aa0cac38837aa28668b1ce1fd84d29adeb3e70c5b9514fcd8e401e9bfd4e16767588e82039af8d594972ba87799cd66ac5c4c
|
7
|
+
data.tar.gz: 6ecb1d38bd634db4f40be15f27fc512b003208c8c3f7a5a9ea7c775c5d5310272e1151eb6e576e36273a3f57f20c84e372f60b0af3e5958377aaa430289aa113
|
data/.rubocop.yml
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
LineLength:
|
2
|
-
Max:
|
2
|
+
Max: 160
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -5,6 +5,17 @@ Rack Middleware to serve a simple blog
|
|
5
5
|
## Build status
|
6
6
|
|
7
7
|
[](https://travis-ci.org/Benny1992/rack-blogengine)
|
8
|
+
[](https://coveralls.io/r/Benny1992/rack-blogengine?branch=master)
|
9
|
+
[](http://badge.fury.io/rb/rack-blogengine)
|
10
|
+
[](https://gemnasium.com/Benny1992/rack-blogengine)
|
11
|
+
|
12
|
+
## Supported Ruby Versions & Platforms
|
13
|
+
|
14
|
+
- rbx 2.2.5
|
15
|
+
- ruby 1.9.3
|
16
|
+
- ruby 2.0.0
|
17
|
+
- ruby 2.1.0
|
18
|
+
- jruby 1.7.9
|
8
19
|
|
9
20
|
## Installation
|
10
21
|
|
data/Rakefile
CHANGED
@@ -1,12 +1,28 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require 'rake/testtask'
|
3
|
+
require 'cucumber/rake/task'
|
4
|
+
|
3
5
|
|
4
6
|
namespace :test do
|
5
7
|
Rake::TestTask.new(:unit) do |t|
|
6
8
|
t.libs << "test"
|
7
|
-
t.test_files = FileList['test
|
9
|
+
t.test_files = FileList['test/**/*_test.rb']
|
10
|
+
t.verbose = true
|
11
|
+
end
|
12
|
+
|
13
|
+
Rake::TestTask.new(:spec) do |t|
|
14
|
+
t.libs << "spec"
|
15
|
+
t.test_files = FileList['spec/**/spec_*.rb']
|
8
16
|
t.verbose = true
|
9
17
|
end
|
18
|
+
|
19
|
+
Cucumber::Rake::Task.new(:feature) do |t|
|
20
|
+
t.cucumber_opts = "features --format pretty"
|
21
|
+
end
|
10
22
|
end
|
11
23
|
|
12
|
-
task :default
|
24
|
+
task :default do
|
25
|
+
Rake::Task['test:unit'].invoke
|
26
|
+
# Rake::Task['test:spec'].invoke
|
27
|
+
Rake::Task['test:feature'].invoke
|
28
|
+
end
|
data/assets/operator.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
Given(/^I am on the home page$/) do
|
2
|
+
puts visit 'http://localhost:3000'
|
3
|
+
end
|
4
|
+
|
5
|
+
Then(/^I should see "(.*?)"$/) do |text|
|
6
|
+
page.has_content?(text)
|
7
|
+
# page.driver.resize(20,30)
|
8
|
+
# page.save_screenshot("/path/to/test.pdf")
|
9
|
+
# puts page.within_window
|
10
|
+
# puts page.driver.network_traffic
|
11
|
+
# puts page.driver.cookies
|
12
|
+
# puts page.response_headers.to_a
|
13
|
+
end
|
@@ -12,7 +12,7 @@ module Rack
|
|
12
12
|
# @return [Array] response Array
|
13
13
|
def self.call(env)
|
14
14
|
# Router for map docs to routes
|
15
|
-
route = ApplicationRouter.map_route(env,
|
15
|
+
route = ApplicationRouter.map_route(env, Rack::Blogengine.documents)
|
16
16
|
|
17
17
|
route['response']
|
18
18
|
end
|
@@ -22,22 +22,15 @@ module Rack
|
|
22
22
|
# @param [String] target
|
23
23
|
def run(target)
|
24
24
|
if target.empty?
|
25
|
-
|
25
|
+
print 'Specify a targetfolder!'
|
26
26
|
else
|
27
|
-
if target.include?('/')
|
28
|
-
target = target.dup
|
29
|
-
target['/'] = ''
|
30
|
-
end
|
31
|
-
|
32
27
|
if Dir.exists?("#{target}")
|
33
28
|
system("cd #{target}")
|
34
|
-
|
35
|
-
targetfolder = "#{Dir.pwd}/#{target}"
|
36
|
-
config = get_config(targetfolder)
|
29
|
+
config = get_config(target)
|
37
30
|
|
38
31
|
app = Rack::Builder.new do
|
39
32
|
map '/assets' do
|
40
|
-
run Rack::Directory.new("#{
|
33
|
+
run Rack::Directory.new("#{target}/assets")
|
41
34
|
end
|
42
35
|
|
43
36
|
use Rack::CommonLogger
|
@@ -52,14 +45,16 @@ module Rack
|
|
52
45
|
|
53
46
|
# Parse in all Documents in cli.run(target)
|
54
47
|
# -> $documents are parsed in only once and then cached via a global variable
|
55
|
-
|
48
|
+
# Todo Cache without global variable?
|
49
|
+
# Global Variable replaced with module instance variable
|
50
|
+
Rack::Blogengine.documents = DocumentParser.parse_in_documents(target)
|
56
51
|
|
57
|
-
run
|
52
|
+
run Application
|
58
53
|
end
|
59
54
|
|
60
55
|
Rack::Server.start(app: app, Port: config['Port'], server: config['Server'])
|
61
56
|
else
|
62
|
-
|
57
|
+
print "#{target} is not a folder!"
|
63
58
|
end
|
64
59
|
end
|
65
60
|
end
|
@@ -103,8 +98,7 @@ module Rack
|
|
103
98
|
# Display Version
|
104
99
|
# return [String] VERSION
|
105
100
|
def version?
|
106
|
-
puts "\n\tVERSION: #{Rack::Blogengine::VERSION}"
|
107
|
-
puts "\tRack::Blogengine releases are all pre-relases, first production release will be VERSION 1.0.0\n\n"
|
101
|
+
puts "\n\tVERSION: #{Rack::Blogengine::VERSION}\n\tRack::Blogengine releases are all pre-relases, first production release will be VERSION 1.0.0\n\n"
|
108
102
|
end
|
109
103
|
|
110
104
|
private
|
@@ -8,7 +8,11 @@ module Rack
|
|
8
8
|
#
|
9
9
|
# @author [benny]
|
10
10
|
#
|
11
|
-
|
11
|
+
module DocumentParser
|
12
|
+
class << self
|
13
|
+
attr_accessor :title, :content, :date
|
14
|
+
end
|
15
|
+
|
12
16
|
# Parse in .content Documents.
|
13
17
|
# @param target.
|
14
18
|
# @return [Hash] Documents
|
@@ -24,11 +28,11 @@ module Rack
|
|
24
28
|
next if item == '.' || item == '..' || extension != 'content'
|
25
29
|
|
26
30
|
get_file_contents(item)
|
27
|
-
@html = fill_file_contents(@layout)
|
31
|
+
@html = fill_file_contents(@layout, @title, @content, @date)
|
28
32
|
|
29
33
|
@document = Document.new
|
30
34
|
@document.path = @path
|
31
|
-
@document.html = @html
|
35
|
+
@document.html = @html
|
32
36
|
@document.title = @title
|
33
37
|
@document.date = @date
|
34
38
|
|
@@ -54,13 +58,7 @@ module Rack
|
|
54
58
|
content_file = ::File.open("#{@target}/#{file}")
|
55
59
|
content = content_file.read
|
56
60
|
|
57
|
-
|
58
|
-
content['/path'] = '/close'
|
59
|
-
content['/title'] = '/close'
|
60
|
-
content['/content'] = '/close'
|
61
|
-
content['/date'] = '/close'
|
62
|
-
|
63
|
-
contentarray = content.split('[/close]')
|
61
|
+
contentarray = get_content_array(content)
|
64
62
|
|
65
63
|
contentarray.each do |contentblock|
|
66
64
|
if contentblock.include? '[path]:'
|
@@ -90,15 +88,28 @@ module Rack
|
|
90
88
|
end
|
91
89
|
end
|
92
90
|
|
91
|
+
def self.get_content_array(content)
|
92
|
+
# Replace Closing tags
|
93
|
+
content['/path'] = '/close'
|
94
|
+
content['/title'] = '/close'
|
95
|
+
content['/content'] = '/close'
|
96
|
+
content['/date'] = '/close'
|
97
|
+
|
98
|
+
content.split('[/close]')
|
99
|
+
end
|
100
|
+
|
93
101
|
# Replace layout placeholder with content from .content file
|
94
102
|
# @param [String] layout
|
103
|
+
# @param [String] title
|
104
|
+
# @param [String] content
|
105
|
+
# @param [Date] date
|
95
106
|
# return [String] html placeholder replaced with content
|
96
|
-
def self.fill_file_contents(layout)
|
107
|
+
def self.fill_file_contents(layout, title, content, date)
|
97
108
|
html = layout.dup
|
98
109
|
|
99
|
-
html.gsub! '{title}',
|
100
|
-
html['{content}'] =
|
101
|
-
html.gsub! '{date}',
|
110
|
+
html.gsub! '{title}', title
|
111
|
+
html['{content}'] = content
|
112
|
+
html.gsub! '{date}', date.strftime('%d.%m.%Y')
|
102
113
|
end
|
103
114
|
|
104
115
|
# Sort documents array by date of each documenthash
|
@@ -6,8 +6,12 @@ module Rack
|
|
6
6
|
# @author [benny]
|
7
7
|
#
|
8
8
|
module Blogengine
|
9
|
-
|
10
|
-
|
9
|
+
class << self
|
10
|
+
attr_accessor :documents
|
11
|
+
|
12
|
+
def root
|
13
|
+
::File.dirname(::File.dirname(::File.expand_path('../..', __FILE__)))
|
14
|
+
end
|
11
15
|
end
|
12
16
|
end
|
13
17
|
end
|
@@ -9,7 +9,7 @@ class Operator
|
|
9
9
|
Dir.foreach("#{target}/operator/") do |item|
|
10
10
|
extension = item.split('.')[1]
|
11
11
|
next if item == '.' || item == '..' || extension != 'rb'
|
12
|
-
require "#{target}/operator/#{item}"
|
12
|
+
require "#{Dir.pwd}/#{target}/operator/#{item}"
|
13
13
|
end
|
14
14
|
|
15
15
|
extend UserOperator # load user operators
|
data/lib/rack/blogengine.rb
CHANGED
data/rack-blogengine.gemspec
CHANGED
@@ -20,10 +20,8 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
23
|
-
spec.add_development_dependency "
|
24
|
-
spec.add_development_dependency "
|
25
|
-
spec.add_development_dependency "test-unit-notify"
|
26
|
-
spec.add_development_dependency "rack-test"
|
23
|
+
spec.add_development_dependency "cucumber"
|
24
|
+
spec.add_development_dependency "capybara"
|
27
25
|
|
28
26
|
spec.add_runtime_dependency "rack"
|
29
27
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rack::Blogengine::Document do
|
4
|
+
before do
|
5
|
+
@document = Rack::Blogengine::Document.new
|
6
|
+
|
7
|
+
@document.title = 'testtitle'
|
8
|
+
@document.path = '/test'
|
9
|
+
@document.date = '20-20-2014'
|
10
|
+
@document.html = '<html><h1>Test</h1></html>'
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#new' do
|
14
|
+
it 'should be an instance of Document' do
|
15
|
+
@document.class.must_equal Rack::Blogengine::Document
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should have content when parsed in' do
|
19
|
+
@document.title.must_equal 'testtitle'
|
20
|
+
@document.path.must_equal '/test'
|
21
|
+
@document.date.must_equal '20-20-2014'
|
22
|
+
@document.html.must_equal '<html><h1>Test</h1></html>'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#to_hash' do
|
27
|
+
it 'should return the right hash' do
|
28
|
+
hashed = @document.to_hash
|
29
|
+
|
30
|
+
hashed.key?(:path).must_equal true
|
31
|
+
hashed.key?(:html).must_equal true
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# RSPEC spec_helper
|
2
|
+
# =========================
|
3
|
+
# require 'rack/blogengine'
|
4
|
+
|
5
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
6
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
7
|
+
# Require this file using `require "spec_helper"` to ensure that it is only
|
8
|
+
# loaded once.
|
9
|
+
#
|
10
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
11
|
+
# RSpec.configure do |config|
|
12
|
+
# config.treat_symbols_as_metadata_keys_with_true_values = true
|
13
|
+
# config.run_all_when_everything_filtered = true
|
14
|
+
# config.filter_run :focus
|
15
|
+
|
16
|
+
# Run specs in random order to surface order dependencies. If you find an
|
17
|
+
# order dependency and want to debug it, you can fix the order by providing
|
18
|
+
# the seed, which is printed after each run.
|
19
|
+
# --seed 1234
|
20
|
+
# config.order = 'random'
|
21
|
+
# end
|
22
|
+
# =================================
|
23
|
+
|
24
|
+
require 'coveralls'
|
25
|
+
Coveralls.wear!
|
26
|
+
|
27
|
+
# Minitest
|
28
|
+
require 'minitest/autorun'
|
29
|
+
|
30
|
+
# Load Rack::Blogengine gem
|
31
|
+
require 'rack/blogengine'
|
32
|
+
|
33
|
+
#
|
34
|
+
# Opening Kernel for testpath method
|
35
|
+
#
|
36
|
+
# @author [benny]
|
37
|
+
#
|
38
|
+
module Kernel
|
39
|
+
def testpath
|
40
|
+
"#{Rack::Blogengine.root}/testfolder"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def capture_stdout(&block)
|
45
|
+
original_stdout = $stdout
|
46
|
+
$stdout = fake = StringIO.new
|
47
|
+
begin
|
48
|
+
yield
|
49
|
+
ensure
|
50
|
+
$stdout = original_stdout
|
51
|
+
end
|
52
|
+
fake.string
|
53
|
+
end
|
@@ -5,15 +5,12 @@ require 'test_helper.rb'
|
|
5
5
|
#
|
6
6
|
# @author [benny]
|
7
7
|
#
|
8
|
-
class ApplicationRouterTest <
|
9
|
-
include Rack::Test::Methods
|
10
|
-
|
8
|
+
class ApplicationRouterTest < MiniTest::Unit::TestCase
|
11
9
|
def setup
|
12
|
-
#
|
13
|
-
|
14
|
-
|
10
|
+
# fake document
|
11
|
+
documents = [{ html: '<!DOCTYPE html><body><h2>This is the Index Page</h2></body></html>',
|
12
|
+
path: '/' }]
|
15
13
|
|
16
|
-
documents = Rack::Blogengine::DocParser.parse_in_documents(testpath)
|
17
14
|
env_fail = { 'PATH_INFO' => '/fail' }
|
18
15
|
env_success = { 'PATH_INFO' => '/' }
|
19
16
|
|
@@ -22,18 +19,18 @@ class ApplicationRouterTest < Test::Unit::TestCase
|
|
22
19
|
end
|
23
20
|
|
24
21
|
def test_map_route_general
|
25
|
-
|
22
|
+
assert_instance_of(Hash, @route_success, 'Route should be a hash')
|
26
23
|
|
27
24
|
# Check Hash keys
|
28
|
-
|
29
|
-
|
25
|
+
assert(@route_success.key?('path'), 'Route should contain a path')
|
26
|
+
assert(@route_success.key?('response'), 'Route should contain a response')
|
30
27
|
|
31
28
|
# Check path
|
32
|
-
|
29
|
+
assert_instance_of(String, @route_success['path'], 'Path should be a string')
|
33
30
|
|
34
31
|
# Check response
|
35
|
-
|
36
|
-
|
32
|
+
assert_instance_of(Array, @route_success['response'], 'Response should be an Array')
|
33
|
+
assert_instance_of(Fixnum, @route_success['response'][0], 'Status should be a Fixnum')
|
37
34
|
end
|
38
35
|
|
39
36
|
def test_map_route_on_success
|
@@ -45,6 +42,5 @@ class ApplicationRouterTest < Test::Unit::TestCase
|
|
45
42
|
end
|
46
43
|
|
47
44
|
def teardown
|
48
|
-
system("rm -rf #{testpath}")
|
49
45
|
end
|
50
46
|
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'test_helper.rb'
|
2
|
+
|
3
|
+
#
|
4
|
+
# TestClass for CommandLineInterface
|
5
|
+
#
|
6
|
+
# @author [benny]
|
7
|
+
#
|
8
|
+
class CommandLineInterfaceTest < MiniTest::Unit::TestCase
|
9
|
+
def setup
|
10
|
+
@cli = Rack::Blogengine::CommandLineInterface.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_available_methods
|
14
|
+
assert(@cli.respond_to?(:method_missing), 'CLI should respond to :method_missing method')
|
15
|
+
assert(@cli.respond_to?(:run), 'CLI should respond to :run method')
|
16
|
+
assert(@cli.respond_to?(:generate), 'CLI should respond to :generate method')
|
17
|
+
assert(@cli.respond_to?(:version?), 'CLI should respond to :version? method')
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_methods_missing
|
21
|
+
result = capture_stdout { @cli.send(:missing_method) }
|
22
|
+
assert(result.include?('Command missing_method not available'), 'Not Available Method should not raise NoMethodError')
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_version?
|
26
|
+
result = capture_stdout { @cli.send(:version?) }
|
27
|
+
assert(result.include?('VERSION'), ':version? should output the current VERSION')
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_generate
|
31
|
+
capture_stdout { @cli.send(:generate, testpath) }
|
32
|
+
|
33
|
+
assert(Dir.exist?(testpath), 'Test Directory should exist after generate method')
|
34
|
+
assert(Dir.exist?("#{testpath}/assets"), 'assets Directory should exist after generate method')
|
35
|
+
assert(Dir.exist?("#{testpath}/assets/layout"), 'assets/layout Directory should exist after generate method')
|
36
|
+
assert(Dir.exist?("#{testpath}/assets/style"), 'assets/style Directory should exist after generate method')
|
37
|
+
assert(Dir.exist?("#{testpath}/assets/js"), 'assets/js Directory should exist after generate method')
|
38
|
+
assert(Dir.exist?("#{testpath}/assets/images"), 'assets/images Directory should exist after generate method')
|
39
|
+
assert(Dir.exist?("#{testpath}/operator"), 'operator Directory should exist after generate method')
|
40
|
+
|
41
|
+
assert(File.exist?("#{testpath}/operator/operator.rb"), 'operator.rb should exist after generate method')
|
42
|
+
assert(File.exist?("#{testpath}/config.yml"), 'config.yml should exist after generate method')
|
43
|
+
assert(File.exist?("#{testpath}/index.content"), 'index.content should exist after generate method')
|
44
|
+
assert(File.exist?("#{testpath}/assets/layout/layout.html"), 'layout.html should exist after generate method')
|
45
|
+
assert(File.exist?("#{testpath}/assets/style/style.css"), 'style.css should exist after generate method')
|
46
|
+
assert(File.exist?("#{testpath}/assets/js/script.js"), 'script.js should exist after generate method')
|
47
|
+
|
48
|
+
system("rm -rf #{testpath}")
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_run_empty_string_argument
|
52
|
+
result = capture_stdout { @cli.send(:run, '') }
|
53
|
+
assert_equal('Specify a targetfolder!', result, 'run method should output "Specify a targetfolder!" when folderstring is empty')
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_run_not_folder_string_argument
|
57
|
+
result = capture_stdout { @cli.send(:run, '/not_a_directory') }
|
58
|
+
assert_equal('/not_a_directory is not a folder!', result, 'run method should output "Target is not a folder!" when folderstring is not a directory')
|
59
|
+
end
|
60
|
+
|
61
|
+
# def test_run
|
62
|
+
# capture_stdout { @cli.send(:generate, testpath) }
|
63
|
+
|
64
|
+
# threads = []
|
65
|
+
|
66
|
+
# thr1 = Thread.new do
|
67
|
+
# capture_stdout { @cli.send(:run, testpath) }
|
68
|
+
# end
|
69
|
+
|
70
|
+
# thr2 = Thread.new do
|
71
|
+
# sleep 10
|
72
|
+
# system("rm -rf #{testpath}")
|
73
|
+
# exit!
|
74
|
+
# end
|
75
|
+
|
76
|
+
# threads << thr1 << thr2
|
77
|
+
# threads.each { |thr| thr.join }
|
78
|
+
# end
|
79
|
+
|
80
|
+
def test_get_config
|
81
|
+
capture_stdout { @cli.send(:generate, testpath) }
|
82
|
+
config = @cli.send(:get_config, testpath)
|
83
|
+
|
84
|
+
assert_equal(3000, config['Port'], 'Default Port should be 3000')
|
85
|
+
assert_equal('webrick', config['Server'], 'Default Server should be webrick')
|
86
|
+
assert_equal('', config['Username'], 'Default Username should not be set')
|
87
|
+
assert_equal('', config['Password'], 'Default Password should not be set')
|
88
|
+
assert_equal('no', config['Usage'], 'Default HTTP Auth Usage should be no')
|
89
|
+
|
90
|
+
system("rm -rf #{testpath}")
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
#
|
4
|
+
# Test Class for DocumentParser
|
5
|
+
#
|
6
|
+
# @author [benny]
|
7
|
+
#
|
8
|
+
class DocumentParserTest < MiniTest::Unit::TestCase
|
9
|
+
# parallelize_me!
|
10
|
+
|
11
|
+
def setup
|
12
|
+
cli = Rack::Blogengine::CommandLineInterface.new
|
13
|
+
capture_stdout { cli.generate(testpath) }
|
14
|
+
|
15
|
+
@documents = Rack::Blogengine::DocumentParser.parse_in_documents(testpath)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Test DocumentParser.parse_in_documents(path)
|
19
|
+
def test_parse_in_documents
|
20
|
+
@documents.each do |document|
|
21
|
+
# Check Hash keys
|
22
|
+
assert(document.key?(:html), 'Documents should contain a path')
|
23
|
+
assert(document.key?(:path), 'Documents should contain a response')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Test DocumentParser.fill_file_contents(layout, title, content, date)
|
28
|
+
def test_fill_file_contents
|
29
|
+
layout_file = ::File.open("#{testpath}/assets/layout/layout.html", 'r')
|
30
|
+
layout = layout_file.read
|
31
|
+
title = 'testtitle'
|
32
|
+
content = 'testcontent'
|
33
|
+
date = Date.new
|
34
|
+
|
35
|
+
html = Rack::Blogengine::DocumentParser.fill_file_contents(layout, title, content, date)
|
36
|
+
|
37
|
+
assert(html.include?(title), 'Parsed and filled in HTML should contain Title')
|
38
|
+
assert(html.include?(content), 'Parsed and filled in HTML should contain Content')
|
39
|
+
assert(html.include?(date.strftime('%d.%m.%Y')), 'Parsed and filled in HTML should contain Date')
|
40
|
+
end
|
41
|
+
|
42
|
+
# Test DocumentParser.get_file_contents('file.content')
|
43
|
+
def test_get_file_contents
|
44
|
+
Rack::Blogengine::DocumentParser.title = ''
|
45
|
+
Rack::Blogengine::DocumentParser.content = ''
|
46
|
+
Rack::Blogengine::DocumentParser.date = ''
|
47
|
+
|
48
|
+
Rack::Blogengine::DocumentParser.get_file_contents('index.content')
|
49
|
+
|
50
|
+
assert_equal('INDEX', Rack::Blogengine::DocumentParser.title, 'Parsed in Title should eql Title in test .content file')
|
51
|
+
assert_equal('<h2>This is the Index Page</h2>', Rack::Blogengine::DocumentParser.content, 'Parsed in Content should eql Content in test .content file')
|
52
|
+
assert_instance_of(Date, Rack::Blogengine::DocumentParser.date, 'Parsed in Date should be of Class Date')
|
53
|
+
end
|
54
|
+
|
55
|
+
# Test DocumentParser.get_content_array(contentstring)
|
56
|
+
# Should split up the content for each content section (Path, Title, Date, Content)
|
57
|
+
def test_get_content_array
|
58
|
+
content = '[path]:[/path]
|
59
|
+
[title]:INDEX[/title]
|
60
|
+
[date]:2013,01,01[/date]
|
61
|
+
[content]:
|
62
|
+
<h2>This is the Index Page</h2>
|
63
|
+
[/content]'
|
64
|
+
contentarray = Rack::Blogengine::DocumentParser.get_content_array(content)
|
65
|
+
|
66
|
+
assert_equal(4, contentarray.length, 'The content Array should contain 4 members (Path, Title, Date, Content)')
|
67
|
+
assert(contentarray[0].include?('path'), 'First Entry should contain the path')
|
68
|
+
assert(contentarray[1].include?('title'), 'Second Entry should contain the title')
|
69
|
+
assert(contentarray[2].include?('date'), 'Third Entry should contain the date')
|
70
|
+
assert(contentarray[3].include?('content'), 'Fourth Entry should contain the content')
|
71
|
+
end
|
72
|
+
|
73
|
+
# Test DocumentParser.sort(documents)
|
74
|
+
def test_sort
|
75
|
+
documents = []
|
76
|
+
|
77
|
+
document1 = Rack::Blogengine::Document.new
|
78
|
+
document1.date = Date.new(2013, 12, 12)
|
79
|
+
|
80
|
+
document2 = Rack::Blogengine::Document.new
|
81
|
+
document2.date = Date.new(2012, 12, 12)
|
82
|
+
|
83
|
+
documents << document1 << document2
|
84
|
+
documents = Rack::Blogengine::DocumentParser.sort(documents)
|
85
|
+
|
86
|
+
assert_equal(Date.new(2012, 12, 12), documents[0].date, 'Documents should be sorted by date (earlier first)')
|
87
|
+
end
|
88
|
+
|
89
|
+
def teardown
|
90
|
+
system("rm -rf #{testpath}")
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'test_helper.rb'
|
2
|
+
|
3
|
+
#
|
4
|
+
# TestClass for Documents
|
5
|
+
#
|
6
|
+
# @author [benny]
|
7
|
+
#
|
8
|
+
class DocumentTest < MiniTest::Unit::TestCase
|
9
|
+
def setup
|
10
|
+
@document = Rack::Blogengine::Document.new
|
11
|
+
|
12
|
+
@document.title = 'testtitle'
|
13
|
+
@document.path = '/test'
|
14
|
+
@document.date = '20-20-2014'
|
15
|
+
@document.html = '<html><h1>Test</h1></html>'
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_new_document
|
19
|
+
assert_instance_of(Rack::Blogengine::Document, @document, 'Document should be of class Rack::Blogengine::Document')
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_document_has_content
|
23
|
+
assert_equal('testtitle', @document.title, 'Document should contain the testtitle')
|
24
|
+
assert_equal('/test', @document.path, 'Document should contain the test path')
|
25
|
+
assert_equal('20-20-2014', @document.date, 'Document should contain the test date')
|
26
|
+
assert_equal('<html><h1>Test</h1></html>', @document.html, 'Document should contain the test html')
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_document_to_hash
|
30
|
+
hashed = @document.to_hash
|
31
|
+
assert(hashed.key?(:path), 'Hashed Document should contain the path')
|
32
|
+
assert(hashed.key?(:html), 'Hashed Document should contain parsed html')
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_exec_content_operator
|
36
|
+
cli = Rack::Blogengine::CommandLineInterface.new
|
37
|
+
capture_stdout { cli.generate(testpath) }
|
38
|
+
|
39
|
+
document = Rack::Blogengine::Document.new
|
40
|
+
document.html = '{% test_operator %}'
|
41
|
+
|
42
|
+
document.exec_content_operator(document, 'testfolder')
|
43
|
+
|
44
|
+
assert_equal('test', document.html, 'Documents html should contain test_operators return value')
|
45
|
+
|
46
|
+
system("rm -rf #{testpath}")
|
47
|
+
end
|
48
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -1,17 +1,18 @@
|
|
1
|
+
require 'coveralls'
|
2
|
+
Coveralls.wear!
|
3
|
+
|
4
|
+
# Previous content of test helper now starts here
|
5
|
+
|
1
6
|
# Minitest
|
2
|
-
|
7
|
+
require 'minitest/autorun'
|
3
8
|
# require 'minitest/pride' # for colored output
|
4
|
-
# require
|
9
|
+
# require 'test_notifier/runner/minitest' # for a notifier
|
5
10
|
|
6
|
-
#
|
7
|
-
require 'test/unit'
|
8
|
-
require 'test/unit/notify'
|
9
|
-
require 'rack/blogengine'
|
10
|
-
require 'rack/test'
|
11
|
+
# TestUnit -> MiniTest (TestUnit is only compatibility Layer)
|
12
|
+
# require 'test/unit'
|
11
13
|
|
12
|
-
#
|
13
|
-
|
14
|
-
# require 'mygem'
|
14
|
+
# Load Rack::Blogengine gem
|
15
|
+
require 'rack/blogengine'
|
15
16
|
|
16
17
|
# class Hash
|
17
18
|
# method for usage with assert_boolean
|
@@ -27,11 +28,11 @@ require 'rack/test'
|
|
27
28
|
# end
|
28
29
|
|
29
30
|
#
|
30
|
-
# Opening
|
31
|
+
# Opening Kernel for testpath method
|
31
32
|
#
|
32
33
|
# @author [benny]
|
33
34
|
#
|
34
|
-
|
35
|
+
module Kernel
|
35
36
|
def testpath
|
36
37
|
"#{Rack::Blogengine.root}/testfolder"
|
37
38
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-blogengine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benny1992
|
@@ -9,71 +9,53 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2014-02-
|
12
|
+
date: 2014-02-16 00:00:00 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name: bundler
|
16
15
|
requirement: &id001 !ruby/object:Gem::Requirement
|
17
16
|
requirements:
|
18
17
|
- - ~>
|
19
18
|
- !ruby/object:Gem::Version
|
20
19
|
version: "1.3"
|
20
|
+
name: bundler
|
21
21
|
prerelease: false
|
22
|
-
type: :development
|
23
22
|
version_requirements: *id001
|
23
|
+
type: :development
|
24
24
|
- !ruby/object:Gem::Dependency
|
25
|
-
name: rake
|
26
25
|
requirement: &id002 !ruby/object:Gem::Requirement
|
27
26
|
requirements:
|
28
|
-
- &
|
27
|
+
- &id003
|
29
28
|
- ">="
|
30
29
|
- !ruby/object:Gem::Version
|
31
30
|
version: "0"
|
31
|
+
name: rake
|
32
32
|
prerelease: false
|
33
|
-
type: :development
|
34
33
|
version_requirements: *id002
|
34
|
+
type: :development
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
|
37
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
36
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
38
37
|
requirements:
|
39
|
-
-
|
40
|
-
|
41
|
-
version: 2.0.0
|
38
|
+
- *id003
|
39
|
+
name: cucumber
|
42
40
|
prerelease: false
|
41
|
+
version_requirements: *id004
|
43
42
|
type: :development
|
44
|
-
version_requirements: *id003
|
45
43
|
- !ruby/object:Gem::Dependency
|
46
|
-
name: test-unit
|
47
44
|
requirement: &id005 !ruby/object:Gem::Requirement
|
48
45
|
requirements:
|
49
|
-
- *
|
46
|
+
- *id003
|
47
|
+
name: capybara
|
50
48
|
prerelease: false
|
51
|
-
type: :development
|
52
49
|
version_requirements: *id005
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: test-unit-notify
|
55
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
56
|
-
requirements:
|
57
|
-
- *id004
|
58
|
-
prerelease: false
|
59
50
|
type: :development
|
60
|
-
version_requirements: *id006
|
61
51
|
- !ruby/object:Gem::Dependency
|
62
|
-
|
63
|
-
requirement: &id007 !ruby/object:Gem::Requirement
|
52
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
64
53
|
requirements:
|
65
|
-
- *
|
66
|
-
prerelease: false
|
67
|
-
type: :development
|
68
|
-
version_requirements: *id007
|
69
|
-
- !ruby/object:Gem::Dependency
|
54
|
+
- *id003
|
70
55
|
name: rack
|
71
|
-
requirement: &id008 !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- *id004
|
74
56
|
prerelease: false
|
57
|
+
version_requirements: *id006
|
75
58
|
type: :runtime
|
76
|
-
version_requirements: *id008
|
77
59
|
description: Blogengine based on rack applications
|
78
60
|
email:
|
79
61
|
- klotz.benjamin@yahoo.de
|
@@ -85,7 +67,6 @@ extra_rdoc_files: []
|
|
85
67
|
|
86
68
|
files:
|
87
69
|
- .gitignore
|
88
|
-
- .rspec
|
89
70
|
- .rubocop.yml
|
90
71
|
- .travis.yml
|
91
72
|
- Gemfile
|
@@ -97,18 +78,25 @@ files:
|
|
97
78
|
- assets/layout.html
|
98
79
|
- assets/operator.rb
|
99
80
|
- bin/rack-blogengine
|
81
|
+
- features/hello.feature
|
82
|
+
- features/step_definitions/hello_steps.rb
|
83
|
+
- features/support/env.rb
|
100
84
|
- lib/rack/blogengine.rb
|
101
85
|
- lib/rack/blogengine/application.rb
|
102
86
|
- lib/rack/blogengine/application_router.rb
|
103
87
|
- lib/rack/blogengine/command_line_interface.rb
|
104
|
-
- lib/rack/blogengine/doc_parser.rb
|
105
88
|
- lib/rack/blogengine/document.rb
|
89
|
+
- lib/rack/blogengine/document_parser.rb
|
106
90
|
- lib/rack/blogengine/methods.rb
|
107
91
|
- lib/rack/blogengine/operator.rb
|
108
92
|
- lib/rack/blogengine/version.rb
|
109
93
|
- rack-blogengine.gemspec
|
110
|
-
-
|
111
|
-
-
|
94
|
+
- spec/rack/blogengine/document_spec.rb
|
95
|
+
- spec/spec_helper.rb
|
96
|
+
- test/rack/blogengine/application_router_test.rb
|
97
|
+
- test/rack/blogengine/command_line_interface_test.rb
|
98
|
+
- test/rack/blogengine/document_parser_test.rb
|
99
|
+
- test/rack/blogengine/document_test.rb
|
112
100
|
- test/test_helper.rb
|
113
101
|
homepage: http://www.bennyklotz.at
|
114
102
|
licenses:
|
@@ -123,10 +111,10 @@ require_paths:
|
|
123
111
|
- spec
|
124
112
|
required_ruby_version: !ruby/object:Gem::Requirement
|
125
113
|
requirements:
|
126
|
-
- *
|
114
|
+
- *id003
|
127
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
116
|
requirements:
|
129
|
-
- *
|
117
|
+
- *id003
|
130
118
|
requirements: []
|
131
119
|
|
132
120
|
rubyforge_project:
|
@@ -135,6 +123,13 @@ signing_key:
|
|
135
123
|
specification_version: 4
|
136
124
|
summary: Blogengine based on rack applications
|
137
125
|
test_files:
|
138
|
-
-
|
139
|
-
-
|
126
|
+
- features/hello.feature
|
127
|
+
- features/step_definitions/hello_steps.rb
|
128
|
+
- features/support/env.rb
|
129
|
+
- spec/rack/blogengine/document_spec.rb
|
130
|
+
- spec/spec_helper.rb
|
131
|
+
- test/rack/blogengine/application_router_test.rb
|
132
|
+
- test/rack/blogengine/command_line_interface_test.rb
|
133
|
+
- test/rack/blogengine/document_parser_test.rb
|
134
|
+
- test/rack/blogengine/document_test.rb
|
140
135
|
- test/test_helper.rb
|
data/.rspec
DELETED
data/test/document_test.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'test_helper.rb'
|
2
|
-
|
3
|
-
#
|
4
|
-
# TestClass for Documents
|
5
|
-
#
|
6
|
-
# @author [benny]
|
7
|
-
#
|
8
|
-
class DocumentTest < Test::Unit::TestCase
|
9
|
-
def setup
|
10
|
-
@document = Rack::Blogengine::Document.new
|
11
|
-
|
12
|
-
@document.title = 'testtitle'
|
13
|
-
@document.path = '/test'
|
14
|
-
@document.date = '20-20-2014'
|
15
|
-
@document.html = '<html><h1>Test</h1></html>'
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_document_has_content
|
19
|
-
assert_equal('testtitle', @document.title, 'Document should contain the testtitle')
|
20
|
-
assert_equal('/test', @document.path, 'Document should contain the test path')
|
21
|
-
assert_equal('20-20-2014', @document.date, 'Document should contain the test date')
|
22
|
-
assert_equal('<html><h1>Test</h1></html>', @document.html, 'Document should contain the test html')
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_document_to_hash
|
26
|
-
hashed = @document.to_hash
|
27
|
-
|
28
|
-
assert_true(hashed.key?(:path), 'Hashed Document should contain the path')
|
29
|
-
assert_true(hashed.key?(:html), 'Hashed Document should contain parsed html')
|
30
|
-
end
|
31
|
-
end
|