rack-blogengine 0.2.4 → 0.2.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f534d53e3f8a5de64f425c908071cc8065f4a7b3
4
- data.tar.gz: 9c43691dc1d6f4afbe44f92712e2cbd3ceb77fcb
3
+ metadata.gz: 8a9967ebc1f5812da39b323ccbfab72c1a0ad7d3
4
+ data.tar.gz: 3df6682117a5998123b822ad64154ac4f397beb4
5
5
  SHA512:
6
- metadata.gz: d713e85703385cc5302c553e39c03c03c3f9ee2210d680e78c045597a7e6f26d734148dcb317c8670dcef21daf92a6dd04b100d507b7db7691d30bb68b5bd5f1
7
- data.tar.gz: 368350df768dd879a29436e1847f7bacb900b9071385d4512575796ec663246bcade7a112d09fd6ed83e14942980638f8b83430c6c7400f9545f72f0f10da150
6
+ metadata.gz: 9b52f8b93f472e3c98589d7be691dd1959ec2fdc7e0902702196cd5d3ec2907a7779c48422c2c9c521acf2d791db153a1401baa91bc517e48067c0e8e6c69192
7
+ data.tar.gz: c37ea97848979aefc91bdcc0f029cb9536a3010bb21b762c9faaf5737db462b877b2dd9fcf40c8f83925fcae048e3cb9a391a1efd15d6c1001786e3e17212f96
data/.travis.yml CHANGED
@@ -2,9 +2,9 @@ language: ruby
2
2
  cache: bundler
3
3
 
4
4
  rvm:
5
- - 1.9.3
6
5
  - 2.0.0
7
6
  - 2.1.0
7
+ - 2.1.1
8
8
  - ruby-head
9
9
  - jruby
10
10
  - rbx
@@ -15,4 +15,4 @@ matrix:
15
15
  - rvm: jruby
16
16
  - rvm: ruby-head
17
17
 
18
- script: "env COVERAGE=true bundle exec rake"
18
+ script: "env COVERAGE=true bundle exec rake"
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
1
  source 'https://rubygems.org'
2
- gem "rubysl-test-unit", :platform => :rbx
2
+ # gem "rubysl-test-unit", :platform => :rbx
3
3
  # Specify your gem's dependencies in rack-blogengine.gemspec
4
4
  gemspec
data/README.md CHANGED
@@ -12,9 +12,9 @@ Rack Middleware to serve a simple blog
12
12
  ## Supported Ruby Versions & Platforms
13
13
 
14
14
  - rbx 2.2.5
15
- - ruby 1.9.3
16
15
  - ruby 2.0.0
17
16
  - ruby 2.1.0
17
+ - ruby 2.1.1
18
18
  - jruby 1.7.9
19
19
 
20
20
  ## Installation
data/Rakefile CHANGED
@@ -2,27 +2,6 @@ require "bundler/gem_tasks"
2
2
  require 'rake/testtask'
3
3
  require 'cucumber/rake/task'
4
4
 
5
+ Dir.glob('tasks/*.rake').each { |r| import r }
5
6
 
6
- namespace :test do
7
- Rake::TestTask.new(:unit) do |t|
8
- t.libs << "test" << "bin" << "ext"
9
- t.test_files = FileList['test/**/*_test.rb']
10
- t.verbose = true
11
- end
12
7
 
13
- Rake::TestTask.new(:spec) do |t|
14
- t.libs << "spec" << "bin" << "ext"
15
- t.test_files = FileList['spec/**/*_spec.rb']
16
- t.verbose = true
17
- end
18
-
19
- Cucumber::Rake::Task.new(:feature) do |t|
20
- t.cucumber_opts = "features --format pretty"
21
- end
22
- end
23
-
24
- task :default do
25
- Rake::Task['test:unit'].invoke
26
- # Rake::Task['test:spec'].invoke
27
- Rake::Task['test:feature'].invoke
28
- end
@@ -0,0 +1,6 @@
1
+ [path]:[/path]
2
+ [title]:INDEX[/title]
3
+ [date]:2012,01,01[/date]
4
+ [content]:
5
+ <h2>This is 2012</h2>
6
+ [/content]
@@ -0,0 +1,4 @@
1
+ [path]:[/path]
2
+ [title]:operator[/title]
3
+ [date]:2013,01,01[/date]
4
+ [content]:{% test_operator %}[/content]
@@ -0,0 +1,4 @@
1
+ [path]:[/path]
2
+ [title]:pygment[/title]
3
+ [date]:2013,01,01[/date]
4
+ [content]:<pre class="brush:ruby">def TestMethod</pre>[/content]
@@ -14,7 +14,7 @@ SimpleCov.start do
14
14
  add_filter '/features/'
15
15
  add_filter '/doc/'
16
16
  add_filter '/assets/'
17
- end if ENV["COVERAGE"]
17
+ end if ENV['COVERAGE']
18
18
 
19
19
  require 'capybara/cucumber'
20
20
  require 'rack/blogengine'
@@ -22,4 +22,4 @@ require 'rack/blogengine'
22
22
  Rack::Blogengine.documents = [{ html: '<!DOCTYPE html><body><h2>index</h2></body></html>',
23
23
  path: '/' }]
24
24
 
25
- Capybara.app = Rack::Blogengine::Application
25
+ Capybara.app = Rack::Blogengine::Application.new
@@ -7,14 +7,19 @@ module Rack
7
7
  # @author [benny]
8
8
  #
9
9
  class Application
10
+ # def initialize(app)
11
+ # @app = app
12
+ # end
10
13
  # Call Method for run this method as Rack Middleware.
11
14
  # @param env Environment contains information such as path, headers etc...
12
15
  # @return [Array] response Array
13
- def self.call(env)
16
+ def call(env)
17
+ request = Rack::Request.new(env)
18
+
14
19
  # Router for map docs to routes
15
- route = ApplicationRouter.map_route(env, Rack::Blogengine.documents)
20
+ route = ApplicationRouter.map_route(request, Rack::Blogengine.documents)
16
21
 
17
- route['response']
22
+ route['response'].finish
18
23
  end
19
24
  end
20
25
  end
@@ -11,17 +11,18 @@ module Rack
11
11
  # @param documents Documents which will be looked at
12
12
  # @return [Hash] route Hash {:path => "/foo", :response => [Array]}
13
13
  class << self
14
- def map_route(env, documents)
15
- success_status = 200
14
+ def map_route(request, documents)
16
15
  header = { 'Content-Type' => 'text/html; charset=UTF-8' }
17
- path = env['PATH_INFO']
18
16
 
19
17
  # Iterate through available docs, if nothing matched return nil
20
18
  documents.each do |doc|
21
- if doc[:path] == path
19
+ if doc[:path] == request.path
20
+ response = Rack::Response.new(doc[:html], 200, header)
21
+
22
22
  route_response = {
23
- 'path' => path,
24
- 'response' => [success_status, header, [doc[:html]]]
23
+ 'path' => request.path,
24
+ 'response' => response
25
+ # 'response' => [200, header, [doc[:html]]]
25
26
  }
26
27
 
27
28
  return route_response
@@ -29,15 +30,18 @@ module Rack
29
30
  end
30
31
 
31
32
  # if no document matches -> return error page
32
- return errorpage(env, documents)
33
+ errorpage(request, documents)
33
34
  end
34
35
 
35
- def errorpage(env, documents)
36
- { 'path' => env['PATH_INFO'],
37
- 'response' =>
38
- [404, { 'Content-Type' => 'text/html; charset=UTF-8' }, ['Page not found']]
39
- }
36
+ def errorpage(request, documents)
37
+ header = { 'Content-Type' => 'text/html; charset=UTF-8' }
38
+ response = Rack::Response.new('Page not found', 404, header)
39
+
40
+ { 'path' => request.path, 'response' => response }
40
41
  end
42
+
43
+ private :errorpage
44
+
41
45
  end
42
46
  end
43
47
  end
@@ -11,7 +11,7 @@ module Rack
11
11
  class CommandLineInterface
12
12
  def method_missing(name, *args)
13
13
  puts "Command #{name} not available"
14
- print 'Available Commands are: \n\n'
14
+ print "Available Commands are: \n\n"
15
15
  self.class.instance_methods(false).each do |method|
16
16
  print "\t #{method}\n" unless method == :method_missing # || method == :setup || method == :getConfig
17
17
  end
@@ -35,38 +35,6 @@ module Rack
35
35
  end
36
36
  end
37
37
 
38
- #
39
- # Build rack app via Rack::Builder
40
- # @param target String The Targetfolder where all relevant files are located
41
- # @param config [type] Config via get_config -> parses in config.yml
42
- #
43
- # @return [type] [description]
44
- def build_rack_app(target, config)
45
- app = Rack::Builder.new do
46
- map '/assets' do
47
- run Rack::Directory.new("#{target}/assets")
48
- end
49
-
50
- # use Rack::CommonLogger
51
- # use Rack::ShowExceptions
52
- # use Rack::Lint
53
-
54
- if config['Usage'] == 'yes'
55
- use Rack::Auth::Basic, 'Protected Area' do |username, password|
56
- username == config['Username'] && password == config['Password']
57
- end
58
- end
59
-
60
- # Parse in all Documents in cli.run(target)
61
- # -> $documents are parsed in only once and then cached via a global variable
62
- # Todo Cache without global variable?
63
- # Global Variable replaced with module instance variable
64
- Rack::Blogengine.documents = DocumentParser.parse_in_documents(target)
65
-
66
- run Application
67
- end
68
- end
69
-
70
38
  # Command to generate the folder skeleton
71
39
  # @param [String] folder
72
40
  def generate(folder)
@@ -105,11 +73,37 @@ module Rack
105
73
 
106
74
  # Display Version
107
75
  # return [String] VERSION
108
- def version?
76
+ def version
109
77
  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"
110
78
  end
111
79
 
112
- private
80
+ #
81
+ # Build rack app via Rack::Builder
82
+ # @param target String The Targetfolder where all relevant files are located
83
+ # @param config [type] Config via get_config -> parses in config.yml
84
+ #
85
+ # @return [type] [description]
86
+ def build_rack_app(target, config)
87
+ Rack::Builder.new do
88
+ map '/assets' do
89
+ run Rack::Directory.new("#{target}/assets")
90
+ end
91
+
92
+ if config['Usage'] == 'yes'
93
+ use Rack::Auth::Basic, 'Protected Area' do |username, password|
94
+ username == config['Username'] && password == config['Password']
95
+ end
96
+ end
97
+
98
+ # Parse in all Documents in cli.run(target)
99
+ # -> $documents are parsed in only once and then cached via a global variable
100
+ # Todo Cache without global variable?
101
+ # Global Variable replaced with module instance variable
102
+ Rack::Blogengine.documents = DocumentParser.parse_in_documents(target)
103
+
104
+ run Application.new
105
+ end
106
+ end
113
107
 
114
108
  # Helper method for generate to set up all essential files
115
109
  # param [String] name
@@ -137,8 +131,17 @@ module Rack
137
131
  pygments_style = config_yaml['Pygments']['style']
138
132
  pygments_seperator = config_yaml['Pygments']['seperator']
139
133
 
140
- Rack::Blogengine.config = { 'Port' => port, 'Server' => server, 'Username' => username, 'Password' => password, 'Usage' => usage, 'pygments_style' => pygments_style, 'pygments_seperator' => pygments_seperator}
134
+ Rack::Blogengine.config = { 'Port' => port,
135
+ 'Server' => server,
136
+ 'Username' => username,
137
+ 'Password' => password,
138
+ 'Usage' => usage,
139
+ 'pygments_style' => pygments_style,
140
+ 'pygments_seperator' => pygments_seperator }
141
141
  end
142
+
143
+ private :get_config, :setup, :build_rack_app
144
+
142
145
  end
143
146
  end
144
147
  end
@@ -10,7 +10,11 @@ module Rack
10
10
  #
11
11
  module DocumentParser
12
12
  class << self
13
- attr_accessor :title, :content, :date, :target
13
+ private
14
+ attr_accessor :path, :title, :content, :date, :html, :layout
15
+
16
+ public
17
+ attr_accessor :target
14
18
  end
15
19
 
16
20
  # Parse in .content Documents.
@@ -20,32 +24,32 @@ module Rack
20
24
  @target = target
21
25
  documents = []
22
26
 
23
- layout_file = ::File.open("#{@target}/assets/layout/layout.html", 'r')
24
- @layout = layout_file.read
27
+ layout_file = ::File.open("#{target}/assets/layout/layout.html", 'r')
28
+ layout = layout_file.read
25
29
 
26
30
  Dir.foreach("#{target}/") do |item|
27
31
  extension = item.split('.')[1]
28
32
  next if item == '.' || item == '..' || extension != 'content'
29
33
 
30
34
  get_file_contents(item)
31
- @html = fill_file_contents(@layout, @title, @content, @date)
35
+ html = fill_file_contents(layout, title, content, date)
32
36
 
33
37
  @document = Document.new
34
- @document.path = @path
35
- @document.html = @html
36
- @document.title = @title
37
- @document.date = @date
38
+ @document.path = path
39
+ @document.html = html
40
+ @document.title = title
41
+ @document.date = date
38
42
 
39
43
  documents << @document
40
44
  end
41
45
 
42
- generate_highlight_css(@target)
46
+ generate_highlight_css(target)
43
47
  sort(documents)
44
48
 
45
49
  # Has to exec operator after all docs were read,
46
50
  # so documents are available for operators (list all docs, etc...)
47
51
  documents.each do |document|
48
- document.exec_content_operator(documents, @target)
52
+ document.exec_content_operator(documents, target)
49
53
  end
50
54
 
51
55
  documents.map do |document|
@@ -56,7 +60,7 @@ module Rack
56
60
  # Get File Contents (path, title, content)
57
61
  # @param [String] file
58
62
  def self.get_file_contents(file)
59
- content_file = ::File.open("#{@target}/#{file}")
63
+ content_file = ::File.open("#{target}/#{file}")
60
64
  content = content_file.read
61
65
 
62
66
  contentarray = get_content_array(content)
@@ -65,27 +69,24 @@ module Rack
65
69
  if contentblock.include? '[path]:'
66
70
  contentblock['[path]:'] = ''
67
71
  @path = "/#{contentblock}"
68
- end
69
72
 
70
- if contentblock.include? '[title]:'
73
+ elsif contentblock.include? '[title]:'
71
74
  contentblock['[title]:'] = ''
72
75
  if contentblock.strip.empty?
73
- raise "Title in #{file} is empty"
76
+ fail "Title in #{file} is empty"
74
77
  else
75
78
  @title = contentblock.strip
76
79
  end
77
- end
78
80
 
79
- if contentblock.include? '[content]:'
81
+ elsif contentblock.include? '[content]:'
80
82
  contentblock['[content]:'] = ''
81
83
  if contentblock.strip.empty?
82
- raise "Content in #{file} is empty"
84
+ fail "Content in #{file} is empty"
83
85
  else
84
86
  @content = contentblock.strip
85
87
  end
86
- end
87
88
 
88
- if contentblock.include? '[date]:'
89
+ elsif contentblock.include? '[date]:'
89
90
  contentblock['[date]:'] = ''
90
91
  if /\d/.match( contentblock )
91
92
  datearray = contentblock.split(',')
@@ -95,7 +96,7 @@ module Rack
95
96
 
96
97
  @date = Date.new(datearray[0], datearray[1], datearray[2])
97
98
  else
98
- raise "Invalid Date in #{file}\n [date]:#{contentblock}[/date]"
99
+ fail "Invalid Date in #{file}\n [date]:#{contentblock}[/date]"
99
100
  end
100
101
  end
101
102
  end
@@ -119,12 +120,12 @@ module Rack
119
120
  highlight_code = { text: html.css(seperator).text, brush: brush }
120
121
  end
121
122
 
122
- def self.highlight(code, language, target)
123
- if language
124
- Pygments.highlight(code, :lexer => language.to_sym)
125
- else
126
- code
127
- end
123
+ def self.highlight(code, language)
124
+ # if language
125
+ Pygments.highlight(code, :lexer => language.to_sym)
126
+ # else
127
+ # code
128
+ # end
128
129
  end
129
130
 
130
131
  def self.generate_highlight_css(target)
@@ -157,7 +158,7 @@ module Rack
157
158
 
158
159
  html.css(seperator).map do |html|
159
160
  highlight_code = get_highlight_code(html.to_s, seperator)
160
- highlighted = highlight(highlight_code[:text], highlight_code[:brush], @target)
161
+ highlighted = highlight(highlight_code[:text], highlight_code[:brush])
161
162
 
162
163
  html.replace(highlighted)
163
164
  end
@@ -176,6 +177,10 @@ module Rack
176
177
 
177
178
  documents
178
179
  end
180
+
181
+ class << self
182
+ private :sort, :fill_file_contents, :generate_highlight_css, :highlight, :get_highlight_code, :get_content_array, :get_file_contents
183
+ end
179
184
  end
180
185
  end
181
186
  end
@@ -6,8 +6,8 @@
6
6
  #
7
7
  class Operator
8
8
  def initialize(target)
9
- target = Pathname.new("#{target}").realpath.to_s
10
- Dir["#{target}/operator/*.rb"].each {|file| require file }
9
+ target = Pathname.new("#{target}").realpath.to_s
10
+ Dir["#{target}/operator/*.rb"].each { |file| require file }
11
11
 
12
12
  extend UserOperator # load user operators
13
13
  end
@@ -6,6 +6,6 @@ module Rack
6
6
  # @author [benny]
7
7
  #
8
8
  module Blogengine
9
- VERSION = '0.2.4'.freeze
9
+ VERSION = '0.2.5'.freeze
10
10
  end
11
11
  end
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "cucumber"
24
24
  spec.add_development_dependency "capybara"
25
25
  spec.add_development_dependency "coveralls"
26
+ spec.add_development_dependency "rack-test"
26
27
 
27
28
  spec.add_runtime_dependency "rack"
28
29
  spec.add_runtime_dependency "pygments.rb"
data/spec/spec_helper.rb CHANGED
@@ -37,7 +37,7 @@ SimpleCov.start do
37
37
  add_filter '/features/'
38
38
  add_filter '/doc/'
39
39
  add_filter '/assets/'
40
- end if ENV["COVERAGE"]
40
+ end if ENV['COVERAGE']
41
41
 
42
42
  # Minitest
43
43
  require 'minitest/autorun'
@@ -0,0 +1,5 @@
1
+ task :default do
2
+ Rake::Task['test:unit'].invoke
3
+ # Rake::Task['test:spec'].invoke
4
+ Rake::Task['test:feature'].invoke
5
+ end
@@ -0,0 +1,33 @@
1
+ test_runs = if ENV['TESTS']
2
+ Interger(ENV['TESTS'])
3
+ else
4
+ 30
5
+ end
6
+
7
+ namespace :floodtest do
8
+ task :unit do
9
+ desc 'Run Unit floodtest (default 30 tests, configurable via ENV["TESTS"])'
10
+ 1.upto(test_runs) do |i|
11
+ puts "Running test #{i} of #{test_runs}"
12
+ exit(-1) if !system('bundle exec rake test:unit')
13
+ end
14
+ end
15
+
16
+ task :spec do
17
+ desc 'Run Spec floodtest (default 30 tests, configurable via ENV["TESTS"])'
18
+ 1.upto(test_runs) do |i|
19
+ puts "Running test #{i} of #{test_runs}"
20
+ exit(-1) if !system('bundle exec rake test:spec ')
21
+ end
22
+ end
23
+
24
+ task :feature do
25
+ desc 'Run Feature floodtest (default 30 tests, configurable via ENV["TESTS"])'
26
+ 1.upto(test_runs) do |i|
27
+ puts "Running test #{i} of #{test_runs}"
28
+ exit(-1) if !system('bundle exec rake test:feature')
29
+ end
30
+ end
31
+ end
32
+
33
+
data/tasks/test.rake ADDED
@@ -0,0 +1,19 @@
1
+ namespace :test do
2
+ Rake::TestTask.new(:unit) do |t|
3
+ t.libs << "test" << "bin" << "ext" << "controllers" << "helpers" << "models"
4
+ t.test_files = FileList['test/**/*_test.rb']
5
+ t.verbose = true
6
+ end
7
+
8
+ Rake::TestTask.new(:spec) do |t|
9
+ t.libs << "spec" << "bin" << "ext" << "controllers" << "helpers" << "models"
10
+ t.test_files = FileList['spec/**/*_spec.rb']
11
+ t.verbose = true
12
+ end
13
+
14
+ Cucumber::Rake::Task.new(:feature) do |t|
15
+ t.cucumber_opts = "features --format pretty"
16
+ end
17
+ end
18
+
19
+
@@ -12,10 +12,13 @@ class ApplicationRouterTest < MiniTest::Unit::TestCase
12
12
  path: '/' }]
13
13
 
14
14
  env_fail = { 'PATH_INFO' => '/fail' }
15
+ request_fail = Rack::Request.new(env_fail)
16
+
15
17
  env_success = { 'PATH_INFO' => '/' }
18
+ request_success = Rack::Request.new(env_success)
16
19
 
17
- @route_success = Rack::Blogengine::ApplicationRouter.map_route(env_success, documents)
18
- @route_fail = Rack::Blogengine::ApplicationRouter.map_route(env_fail, documents)
20
+ @route_success = Rack::Blogengine::ApplicationRouter.map_route(request_success, documents)
21
+ @route_fail = Rack::Blogengine::ApplicationRouter.map_route(request_fail, documents)
19
22
  end
20
23
 
21
24
  def test_map_route_general
@@ -29,16 +32,16 @@ class ApplicationRouterTest < MiniTest::Unit::TestCase
29
32
  assert_instance_of(String, @route_success['path'], 'Path should be a string')
30
33
 
31
34
  # Check response
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')
35
+ assert_instance_of(Rack::Response, @route_success['response'], 'Response should be an Array')
36
+ assert_instance_of(Fixnum, @route_success['response'].status, 'Status should be a Fixnum')
34
37
  end
35
38
 
36
39
  def test_map_route_on_success
37
- assert_equal(200, @route_success['response'][0], 'Status should be 200')
40
+ assert_equal(200, @route_success['response'].status, 'Status should be 200')
38
41
  end
39
42
 
40
43
  def test_map_route_on_fail
41
- assert_equal(404, @route_fail['response'][0], 'Status should be 404')
44
+ assert_equal(404, @route_fail['response'].status, 'Status should be 404')
42
45
  end
43
46
 
44
47
  def teardown
@@ -0,0 +1,37 @@
1
+ require 'test_helper.rb'
2
+
3
+ #
4
+ # TestClass for ApplicationRouter
5
+ #
6
+ # @author [benny]
7
+ #
8
+ class ApplicationTest < MiniTest::Unit::TestCase
9
+ include Rack::Test::Methods
10
+
11
+ class MockApp
12
+ def call(env = nil)
13
+ [200, {}, ["hello"]]
14
+ end
15
+ end
16
+
17
+ def app
18
+ Rack::Blogengine::Application.new
19
+ end
20
+
21
+ def setup
22
+ @cli = Rack::Blogengine::CommandLineInterface.new
23
+ capture_stdout { @cli.generate(testpath) }
24
+ Rack::Blogengine.config = @cli.send(:get_config, testpath)
25
+ Rack::Blogengine.documents = Rack::Blogengine::DocumentParser.parse_in_documents(testpath)
26
+ end
27
+
28
+ def test_application_is_callable
29
+ get '/'
30
+
31
+ assert(last_response.body.include?('This is the Index Page'))
32
+ end
33
+
34
+ def teardown
35
+ system("rm -rf #{testpath}")
36
+ end
37
+ end
@@ -14,7 +14,7 @@ class CommandLineInterfaceTest < MiniTest::Unit::TestCase
14
14
  assert(@cli.respond_to?(:method_missing), 'CLI should respond to :method_missing method')
15
15
  assert(@cli.respond_to?(:run), 'CLI should respond to :run method')
16
16
  assert(@cli.respond_to?(:generate), 'CLI should respond to :generate method')
17
- assert(@cli.respond_to?(:version?), 'CLI should respond to :version? method')
17
+ assert(@cli.respond_to?(:version), 'CLI should respond to :version? method')
18
18
  end
19
19
 
20
20
  def test_methods_missing
@@ -23,13 +23,12 @@ class CommandLineInterfaceTest < MiniTest::Unit::TestCase
23
23
  end
24
24
 
25
25
  def test_version?
26
- result = capture_stdout { @cli.send(:version?) }
26
+ result = capture_stdout { @cli.send(:version) }
27
27
  assert(result.include?('VERSION'), ':version? should output the current VERSION')
28
28
  end
29
29
 
30
30
  def test_generate
31
31
  capture_stdout { @cli.send(:generate, testpath) }
32
-
33
32
  assert(Dir.exist?(testpath), 'Test Directory should exist after generate method')
34
33
  assert(Dir.exist?("#{testpath}/assets"), 'assets Directory should exist after generate method')
35
34
  assert(Dir.exist?("#{testpath}/assets/layout"), 'assets/layout Directory should exist after generate method')
@@ -37,14 +36,12 @@ class CommandLineInterfaceTest < MiniTest::Unit::TestCase
37
36
  assert(Dir.exist?("#{testpath}/assets/js"), 'assets/js Directory should exist after generate method')
38
37
  assert(Dir.exist?("#{testpath}/assets/images"), 'assets/images Directory should exist after generate method')
39
38
  assert(Dir.exist?("#{testpath}/operator"), 'operator Directory should exist after generate method')
40
-
41
39
  assert(File.exist?("#{testpath}/operator/operator.rb"), 'operator.rb should exist after generate method')
42
40
  assert(File.exist?("#{testpath}/config.yml"), 'config.yml should exist after generate method')
43
41
  assert(File.exist?("#{testpath}/index.content"), 'index.content should exist after generate method')
44
42
  assert(File.exist?("#{testpath}/assets/layout/layout.html"), 'layout.html should exist after generate method')
45
43
  assert(File.exist?("#{testpath}/assets/style/style.css"), 'style.css should exist after generate method')
46
44
  assert(File.exist?("#{testpath}/assets/js/script.js"), 'script.js should exist after generate method')
47
-
48
45
  system("rm -rf #{testpath}")
49
46
  end
50
47
 
@@ -58,47 +55,17 @@ class CommandLineInterfaceTest < MiniTest::Unit::TestCase
58
55
  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
56
  end
60
57
 
61
- # def test_run
62
- # capture_stdout { @cli.send(:generate, testpath) }
63
-
64
- # server_thread = Thread.new do
65
- # capture_stdout { @cli.send(:run, testpath) }
66
- # end
67
-
68
- # sleep(2) # wait a sec for the server to be booted
69
-
70
- # Thread.list.each {|t| t.exit }
71
- # Thread.list.each {|t| p t }
72
-
73
- # system("rm -rf #{testpath}")
74
- # end
75
-
76
58
  def test_build_rack_app
77
- capture_stdout { @cli.send(:generate, testpath) }
78
-
59
+ capture_stdout { @cli.generate(testpath) }
79
60
  config = @cli.send(:get_config, testpath)
80
61
  config['Usage'] = 'yes'
81
- config["Username"] = 'testUser'
82
- config['Password'] = 'test'
83
-
62
+ config['Username'] = 'Benny'
63
+ config['Password'] = 'Bensn'
64
+
84
65
  app = @cli.send(:build_rack_app, testpath, config)
85
66
 
86
- assert_instance_of(Rack::Builder, app, 'App should be of class Rack::Builder')
87
- # @todo : add better tests
88
-
67
+ assert_instance_of(Rack::Builder, app, 'Rack app should be instance of Rack::Builder')
89
68
  system("rm -rf #{testpath}")
90
69
  end
91
70
 
92
- def test_get_config
93
- capture_stdout { @cli.send(:generate, testpath) }
94
- config = @cli.send(:get_config, testpath)
95
-
96
- assert_equal(3000, config['Port'], 'Default Port should be 3000')
97
- assert_equal('webrick', config['Server'], 'Default Server should be webrick')
98
- assert_equal('', config['Username'], 'Default Username should not be set')
99
- assert_equal('', config['Password'], 'Default Password should not be set')
100
- assert_equal('no', config['Usage'], 'Default HTTP Auth Usage should be no')
101
-
102
- system("rm -rf #{testpath}")
103
- end
104
71
  end
@@ -6,147 +6,62 @@ require 'test_helper'
6
6
  # @author [benny]
7
7
  #
8
8
  class DocumentParserTest < MiniTest::Unit::TestCase
9
- # parallelize_me!
10
-
11
9
  def setup
12
- cli = Rack::Blogengine::CommandLineInterface.new
13
- capture_stdout { cli.generate(testpath) }
14
- cli.send(:get_config, testpath)
10
+ @cli = Rack::Blogengine::CommandLineInterface.new
11
+ capture_stdout { @cli.generate(testpath) }
12
+ @cli.send(:get_config, testpath)
15
13
  end
16
14
 
17
- # Test DocumentParser.parse_in_documents(path)
18
15
  def test_parse_in_documents
19
- @documents = Rack::Blogengine::DocumentParser.parse_in_documents(testpath)
16
+ documents = Rack::Blogengine::DocumentParser.parse_in_documents(testpath)
20
17
 
21
- @documents.each do |document|
18
+ documents.each do |document|
22
19
  # Check Hash keys
23
- assert(document.key?(:html), 'Documents should contain a path')
24
- assert(document.key?(:path), 'Documents should contain a response')
20
+ assert(document.key?(:html), 'Documents should contain content')
21
+ assert(document.key?(:path), 'Documents should contain a path')
25
22
  end
26
23
  end
27
24
 
28
- # Test DocumentParser.fill_file_contents(layout, title, content, date)
29
- def test_fill_file_contents
30
- layout_file = ::File.open("#{testpath}/assets/layout/layout.html", 'r')
31
- layout = layout_file.read
32
- title = 'testtitle'
33
- content = 'testcontent'
34
- date = Date.new
35
-
36
- html = Rack::Blogengine::DocumentParser.fill_file_contents(layout, title, content, date)
37
-
38
- assert(html.include?(title), 'Parsed and filled in HTML should contain Title')
39
- assert(html.include?(content), 'Parsed and filled in HTML should contain Content')
40
- assert(html.include?(date.strftime('%d.%m.%Y')), 'Parsed and filled in HTML should contain Date')
41
- end
42
-
43
- def test_fill_file_contents_with_pygments
44
- layout_file = ::File.open("#{testpath}/assets/layout/layout.html", 'r')
45
- layout = layout_file.read
46
- title = 'testtitle'
47
- content = '<pre class="brush:ruby">def TestMethod</pre>'
48
- date = Date.new
49
-
50
- html = Rack::Blogengine::DocumentParser.fill_file_contents(layout, title, content, date)
51
-
52
- assert(html.include?(title), 'Parsed and filled in HTML should contain Title')
53
- assert(html.include?("highlight"), 'Parsed and filled in HTML with pygment handling should contain .highlight class')
54
- assert(html.include?(date.strftime('%d.%m.%Y')), 'Parsed and filled in HTML should contain Date')
55
- end
56
-
57
- # Test DocumentParser.get_file_contents('file.content')
58
- def test_get_file_contents
59
- Rack::Blogengine::DocumentParser.title = ''
60
- Rack::Blogengine::DocumentParser.content = ''
61
- Rack::Blogengine::DocumentParser.date = ''
62
-
63
- Rack::Blogengine::DocumentParser.target = "#{Rack::Blogengine.root}/assets"
64
- Rack::Blogengine::DocumentParser.get_file_contents('index.content')
65
-
66
- assert_equal('INDEX', Rack::Blogengine::DocumentParser.title, 'Parsed in Title should eql Title in test .content file')
67
- assert_equal('<h2>This is the Index Page</h2>', Rack::Blogengine::DocumentParser.content, 'Parsed in Content should eql Content in test .content file')
68
- assert_instance_of(Date, Rack::Blogengine::DocumentParser.date, 'Parsed in Date should be of Class Date')
25
+ def test_invalid_date
26
+ system("rm #{testpath}/index.content")
27
+ capture_stdout { @cli.send(:setup, "date_error.content", "#{testpath}", true) }
28
+ assert_raises(RuntimeError) { documents = Rack::Blogengine::DocumentParser.parse_in_documents(testpath) }
69
29
  end
70
30
 
71
- def test_get_file_contents_invalid_date
72
- Rack::Blogengine::DocumentParser.target = "#{Rack::Blogengine.root}/assets"
73
- assert_raises(RuntimeError) { Rack::Blogengine::DocumentParser.get_file_contents('date_error.content') }
31
+ def test_invalid_content
32
+ system("rm #{testpath}/index.content")
33
+ capture_stdout { @cli.send(:setup, "content_error.content", "#{testpath}", true) }
34
+ assert_raises(RuntimeError) { documents = Rack::Blogengine::DocumentParser.parse_in_documents(testpath) }
74
35
  end
75
36
 
76
- def test_get_file_contents_invalid_content
77
- Rack::Blogengine::DocumentParser.target = "#{Rack::Blogengine.root}/assets"
78
- assert_raises(RuntimeError) { Rack::Blogengine::DocumentParser.get_file_contents('content_error.content') }
37
+ def test_invalid_title
38
+ system("rm #{testpath}/index.content")
39
+ capture_stdout { @cli.send(:setup, "title_error.content", "#{testpath}", true) }
40
+ assert_raises(RuntimeError) { documents = Rack::Blogengine::DocumentParser.parse_in_documents(testpath) }
79
41
  end
80
42
 
81
- def test_get_file_contents_invalid_title
82
- Rack::Blogengine::DocumentParser.target = "#{Rack::Blogengine.root}/assets"
83
- assert_raises(RuntimeError) { Rack::Blogengine::DocumentParser.get_file_contents('title_error.content') }
84
- end
85
-
86
- # Test DocumentParser.get_content_array(contentstring)
87
- # Should split up the content for each content section (Path, Title, Date, Content)
88
- def test_get_content_array
89
- content = '[path]:[/path]
90
- [title]:INDEX[/title]
91
- [date]:2013,01,01[/date]
92
- [content]:
93
- <h2>This is the Index Page</h2>
94
- [/content]'
95
- contentarray = Rack::Blogengine::DocumentParser.get_content_array(content)
96
-
97
- assert_equal(4, contentarray.length, 'The content Array should contain 4 members (Path, Title, Date, Content)')
98
- assert(contentarray[0].include?('path'), 'First Entry should contain the path')
99
- assert(contentarray[1].include?('title'), 'Second Entry should contain the title')
100
- assert(contentarray[2].include?('date'), 'Third Entry should contain the date')
101
- assert(contentarray[3].include?('content'), 'Fourth Entry should contain the content')
102
- end
103
-
104
- # Test DocumentParser.sort(documents)
105
- def test_sort
106
- documents = []
107
-
108
- document1 = Rack::Blogengine::Document.new
109
- document1.date = Date.new(2013, 12, 12)
110
-
111
- document2 = Rack::Blogengine::Document.new
112
- document2.date = Date.new(2012, 12, 12)
113
-
114
- documents << document1 << document2
115
- documents = Rack::Blogengine::DocumentParser.sort(documents)
116
-
117
- assert_equal(Date.new(2012, 12, 12), documents[0].date, 'Documents should be sorted by date (earlier first)')
118
- end
119
-
120
- def test_highlight
121
- content = "def TestMethod"
122
-
123
- highlighted = Rack::Blogengine::DocumentParser.highlight(content, 'ruby', testpath)
124
- assert_match(/.highlight/, highlighted, "Highlighted html should contain a element with class highlight")
125
- end
126
-
127
- def test_highlight_fail
128
- content = "def TestMethod"
129
-
130
- highlighted = Rack::Blogengine::DocumentParser.highlight(content, nil, testpath)
131
- assert_equal(content, highlighted, "If Language is not defined Content should be returned unmodified")
43
+ def test_documents_with_pygments
44
+ capture_stdout { @cli.send(:setup, "pygment.content", "#{testpath}", true) }
45
+ system("rm #{testpath}/index.content")
46
+ documents = Rack::Blogengine::DocumentParser.parse_in_documents(testpath)
47
+ documents.each do |document|
48
+ assert(document[:html].include?('class="highlight"'), 'Highlighted code should be wrapped in a div.highlight')
49
+ end
132
50
  end
133
51
 
134
- def test_generate_highlight_css
135
- Rack::Blogengine::DocumentParser.generate_highlight_css(testpath)
136
- # css = Pygments.css(Rack::Blogengine.config["pygments_style"])
137
- highlightcss = ::File.read("#{testpath}/assets/style/highlight.css")
138
- # assert_equal(css, highlightcss, "Highlight Css file should be automatically filled in")
139
- refute_empty(highlightcss, "Highlight Css file should be automatically filled in")
52
+ def test_documents_with_operator
53
+ capture_stdout { @cli.send(:setup, "operator.content", "#{testpath}", true) }
54
+ system("rm #{testpath}/index.content")
55
+ documents = Rack::Blogengine::DocumentParser.parse_in_documents(testpath)
56
+ documents.each do |document|
57
+ assert(document[:html].include?('test'), 'Test Operator should return test')
58
+ end
140
59
  end
141
60
 
142
- def test_get_highlight_code
143
- content = "<html><head><title>Test</title></head><body><pre class='brush:ruby'>def TestMethod</pre></body></html>"
144
-
145
- seperator = Rack::Blogengine.config["pygments_seperator"]
146
-
147
- highlight_code = Rack::Blogengine::DocumentParser.get_highlight_code(content, seperator)
148
- assert_equal('def TestMethod', highlight_code[:text], "Code between #{seperator} should be returned")
149
- assert_equal('ruby', highlight_code[:brush], "Brush should be recognised by the class attribute")
61
+ def test_document_sort
62
+ capture_stdout { @cli.send(:setup, "date_test.content", "#{testpath}", true) }
63
+ documents = Rack::Blogengine::DocumentParser.parse_in_documents(testpath)
64
+ assert(documents[0][:html].include?('This is 2012'), 'The Document with lower date should be first')
150
65
  end
151
66
 
152
67
  def teardown
data/test/test_helper.rb CHANGED
@@ -14,7 +14,7 @@ SimpleCov.start do
14
14
  add_filter '/features/'
15
15
  add_filter '/doc/'
16
16
  add_filter '/assets/'
17
- end if ENV["COVERAGE"]
17
+ end if ENV['COVERAGE']
18
18
 
19
19
  # Previous content of test helper now starts here
20
20
 
@@ -23,6 +23,9 @@ require 'minitest/autorun'
23
23
  require 'minitest/mock'
24
24
  require 'minitest/pride' # for colored output
25
25
 
26
+ # Rack Test Methods
27
+ require 'rack/test'
28
+
26
29
  # TestUnit -> MiniTest (TestUnit is only compatibility Layer)
27
30
  # require 'test/unit'
28
31
 
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
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benny1992
@@ -9,77 +9,85 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2014-02-20 00:00:00 Z
12
+ date: 2014-03-04 00:00:00 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: bundler
16
- prerelease: false
17
15
  requirement: &id001 !ruby/object:Gem::Requirement
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
21
19
  version: "1.3"
22
- type: :development
20
+ name: bundler
21
+ prerelease: false
23
22
  version_requirements: *id001
23
+ type: :development
24
24
  - !ruby/object:Gem::Dependency
25
- name: rake
26
- prerelease: false
27
25
  requirement: &id002 !ruby/object:Gem::Requirement
28
26
  requirements:
29
27
  - &id003
30
28
  - ">="
31
29
  - !ruby/object:Gem::Version
32
30
  version: "0"
33
- type: :development
31
+ name: rake
32
+ prerelease: false
34
33
  version_requirements: *id002
34
+ type: :development
35
35
  - !ruby/object:Gem::Dependency
36
- name: cucumber
37
- prerelease: false
38
36
  requirement: &id004 !ruby/object:Gem::Requirement
39
37
  requirements:
40
38
  - *id003
41
- type: :development
39
+ name: cucumber
40
+ prerelease: false
42
41
  version_requirements: *id004
42
+ type: :development
43
43
  - !ruby/object:Gem::Dependency
44
- name: capybara
45
- prerelease: false
46
44
  requirement: &id005 !ruby/object:Gem::Requirement
47
45
  requirements:
48
46
  - *id003
49
- type: :development
47
+ name: capybara
48
+ prerelease: false
50
49
  version_requirements: *id005
50
+ type: :development
51
51
  - !ruby/object:Gem::Dependency
52
- name: coveralls
53
- prerelease: false
54
52
  requirement: &id006 !ruby/object:Gem::Requirement
55
53
  requirements:
56
54
  - *id003
57
- type: :development
55
+ name: coveralls
56
+ prerelease: false
58
57
  version_requirements: *id006
58
+ type: :development
59
59
  - !ruby/object:Gem::Dependency
60
- name: rack
61
- prerelease: false
62
60
  requirement: &id007 !ruby/object:Gem::Requirement
63
61
  requirements:
64
62
  - *id003
65
- type: :runtime
63
+ name: rack-test
64
+ prerelease: false
66
65
  version_requirements: *id007
66
+ type: :development
67
67
  - !ruby/object:Gem::Dependency
68
- name: pygments.rb
69
- prerelease: false
70
68
  requirement: &id008 !ruby/object:Gem::Requirement
71
69
  requirements:
72
70
  - *id003
73
- type: :runtime
71
+ name: rack
72
+ prerelease: false
74
73
  version_requirements: *id008
74
+ type: :runtime
75
75
  - !ruby/object:Gem::Dependency
76
- name: nokogiri
77
- prerelease: false
78
76
  requirement: &id009 !ruby/object:Gem::Requirement
79
77
  requirements:
80
78
  - *id003
81
- type: :runtime
79
+ name: pygments.rb
80
+ prerelease: false
82
81
  version_requirements: *id009
82
+ type: :runtime
83
+ - !ruby/object:Gem::Dependency
84
+ requirement: &id010 !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - *id003
87
+ name: nokogiri
88
+ prerelease: false
89
+ version_requirements: *id010
90
+ type: :runtime
83
91
  description: Blogengine based on rack applications
84
92
  email:
85
93
  - klotz.benjamin@yahoo.de
@@ -100,9 +108,12 @@ files:
100
108
  - assets/config.yml
101
109
  - assets/content_error.content
102
110
  - assets/date_error.content
111
+ - assets/date_test.content
103
112
  - assets/index.content
104
113
  - assets/layout.html
114
+ - assets/operator.content
105
115
  - assets/operator.rb
116
+ - assets/pygment.content
106
117
  - assets/title_error.content
107
118
  - bin/rack-blogengine
108
119
  - features/hello.feature
@@ -120,10 +131,13 @@ files:
120
131
  - rack-blogengine.gemspec
121
132
  - spec/rack/blogengine/document_spec.rb
122
133
  - spec/spec_helper.rb
134
+ - tasks/default.rake
135
+ - tasks/floodtest.rake
136
+ - tasks/test.rake
123
137
  - test/rack/blogengine/application_router_test.rb
138
+ - test/rack/blogengine/application_test.rb
124
139
  - test/rack/blogengine/command_line_interface_test.rb
125
140
  - test/rack/blogengine/document_parser_test.rb
126
- - test/rack/blogengine/document_test.rb
127
141
  - test/test_helper.rb
128
142
  homepage: http://www.bennyklotz.at
129
143
  licenses:
@@ -156,8 +170,7 @@ test_files:
156
170
  - spec/rack/blogengine/document_spec.rb
157
171
  - spec/spec_helper.rb
158
172
  - test/rack/blogengine/application_router_test.rb
173
+ - test/rack/blogengine/application_test.rb
159
174
  - test/rack/blogengine/command_line_interface_test.rb
160
175
  - test/rack/blogengine/document_parser_test.rb
161
- - test/rack/blogengine/document_test.rb
162
176
  - test/test_helper.rb
163
- has_rdoc:
@@ -1,48 +0,0 @@
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, "#{testpath}")
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