rack-blogengine 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Build Status](https://travis-ci.org/Benny1992/rack-blogengine.png?branch=master)](https://travis-ci.org/Benny1992/rack-blogengine)
|
8
|
+
[![Coverage Status](https://coveralls.io/repos/Benny1992/rack-blogengine/badge.png?branch=master)](https://coveralls.io/r/Benny1992/rack-blogengine?branch=master)
|
9
|
+
[![Gem Version](https://badge.fury.io/rb/rack-blogengine.png)](http://badge.fury.io/rb/rack-blogengine)
|
10
|
+
[![Dependency Status](https://gemnasium.com/Benny1992/rack-blogengine.png)](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
|