github-markdown-preview 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/sample.png ADDED
Binary file
data/sample_preview.md ADDED
@@ -0,0 +1,22 @@
1
+ # Sample Preview Render
2
+
3
+ Uses github css to preview not only structure and content, but also _look_ and **feel** (awkward bolding and italics for demonstration purposes)
4
+
5
+ Emoji support: :rocket:
6
+
7
+ Relative links: [readme.md](readme.md)
8
+
9
+ Syntax highlighting example courtesy of http://stackoverflow.com/a/705754
10
+ ```ruby
11
+ class HelloWorld
12
+ def initialize(name)
13
+ @name = name.capitalize
14
+ end
15
+ def sayHi
16
+ puts "Hello #{@name}!"
17
+ end
18
+ end
19
+
20
+ hello = HelloWorld.new("World")
21
+ hello.sayHi
22
+ ```
@@ -0,0 +1,25 @@
1
+ require 'minitest/autorun'
2
+
3
+ class TestBin < Minitest::Unit::TestCase
4
+ def setup
5
+ @ghp_scipt = File.join(File.dirname(__FILE__), '..', 'bin', 'github-markdown-preview')
6
+ end
7
+
8
+ def test_no_params
9
+ IO.popen("bundle exec #{@ghp_scipt}") do |io|
10
+ assert_match /Usage.*/, io.read, 'No parameter call should output usage'
11
+ end
12
+ end
13
+
14
+ def test_version_ouput
15
+ IO.popen("bundle exec #{@ghp_scipt} -v") do |io|
16
+ assert_match GithubMarkdownPreview::VERSION, io.read, '-v call should output version'
17
+ end
18
+ end
19
+
20
+ def test_file_not_found
21
+ IO.popen("bundle exec #{@ghp_scipt} this_file_does_not_exist 2>&1") do |io|
22
+ assert_match /.*No such file/, io.read, 'Bad file name should get a helpful error'
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,132 @@
1
+ require 'github-markdown-preview'
2
+ require 'minitest/autorun'
3
+ require 'tmpdir'
4
+
5
+ class TestHtmlPreview < Minitest::Unit::TestCase
6
+
7
+ def setup
8
+ @ghp = GithubMarkdownPreview::HtmlPreview
9
+ @source_file_path = File.join(Dir.tmpdir, 'test.md')
10
+ end
11
+
12
+ def write(file_name, text)
13
+ File.open(file_name, 'w') { |f| f.write(text) }
14
+ end
15
+
16
+ def read(file_name)
17
+ assert File.exist?(file_name), "Cannot read file: #{file_name}"
18
+ File.open(file_name).read
19
+ end
20
+
21
+ ##
22
+ # Helper method based on Fowler's advice in http://martinfowler.com/articles/nonDeterminism.html#AsynchronousBehavior
23
+ #
24
+ # Requires you pass a block which returns true when your asynchronous process has finished
25
+ def wait_for_async_operation
26
+ start_time = Time.now
27
+ wait_limit = 5
28
+ polling_interval = 0.1
29
+
30
+ until yield
31
+ if Time.now - start_time > wait_limit
32
+ flunk 'Async operation should not time out.'
33
+ end
34
+ sleep (polling_interval)
35
+ end
36
+ end
37
+
38
+ def test_create_preview_on_init
39
+ write(@source_file_path, '## foo')
40
+ markdown_preview = @ghp.new( @source_file_path )
41
+ assert_match /.*<h2>foo<\/h2>.*/,
42
+ read(markdown_preview.preview_file),
43
+ 'Preview should be correct on initialization'
44
+ end
45
+
46
+ def test_wrapper_markup_included
47
+ write(@source_file_path, '## foo')
48
+ markdown_preview = @ghp.new( @source_file_path )
49
+ assert_equal markdown_preview.wrap_preview("<h2>foo<\/h2>"),
50
+ read(markdown_preview.preview_file),
51
+ 'Wrapper markup should be in preview file'
52
+ end
53
+
54
+ def test_update_preview
55
+ write(@source_file_path, '## foo')
56
+ markdown_preview = @ghp.new( @source_file_path )
57
+ assert_match /.*<h2>foo<\/h2>.*/, read(markdown_preview.preview_file),
58
+ 'Preview should be initially rendered correctly'
59
+
60
+ write(@source_file_path, '## foo bar')
61
+ markdown_preview.update
62
+ assert_match /.*<h2>foo bar<\/h2>.*/,
63
+ read(markdown_preview.preview_file),
64
+ 'Preview should be updated correctly'
65
+ end
66
+
67
+ def test_preview_beside_src_file
68
+ write(@source_file_path, '## foo')
69
+ markdown_preview = @ghp.new( @source_file_path )
70
+ assert_equal File.dirname(@source_file_path),
71
+ File.dirname(markdown_preview.preview_file),
72
+ 'Preview file should be in same dir as source file'
73
+ end
74
+
75
+ def test_preview_delete
76
+ write(@source_file_path, '## foo')
77
+ markdown_preview = @ghp.new( @source_file_path )
78
+ markdown_preview.delete
79
+ assert !File.exist?(markdown_preview.preview_file), 'Preview file should been deleted'
80
+ end
81
+
82
+ def test_preview_delete_on_exit
83
+ at_exit { assert !File.exist?(@source_file_path + '.html'), 'Preview file should be deleted on exit' }
84
+ write(@source_file_path, '## foo')
85
+ markdown_preview = @ghp.new( @source_file_path )
86
+ markdown_preview.delete_on_exit = true
87
+ end
88
+
89
+ def test_update_callbacks
90
+ write(@source_file_path, '## foo')
91
+ markdown_preview = @ghp.new( @source_file_path )
92
+ first_update_callback_called = false
93
+ second_update_callback_called = false
94
+ markdown_preview.on_update { first_update_callback_called = true }
95
+ markdown_preview.on_update { second_update_callback_called = true }
96
+ markdown_preview.update
97
+ assert first_update_callback_called, 'First update callback should be called'
98
+ assert second_update_callback_called, 'Second update callback should be called'
99
+ end
100
+
101
+ def test_watch_source_file
102
+ write(@source_file_path, '## foo')
103
+ markdown_preview = @ghp.new( @source_file_path )
104
+ updated_by_watch = false
105
+ markdown_preview.on_update { updated_by_watch = true }
106
+ markdown_preview.watch
107
+
108
+ write(@source_file_path, '## foo bar')
109
+
110
+ wait_for_async_operation { updated_by_watch }
111
+
112
+ assert_match /.*<h2>foo bar<\/h2>.*/,
113
+ read(markdown_preview.preview_file)
114
+ 'Preview file should be updated correctly by file watcher'
115
+ end
116
+
117
+ def test_file_not_found
118
+ assert_raises GithubMarkdownPreview::FileNotFoundError do
119
+ @ghp.new('this_file_does_not_exist')
120
+ end
121
+ end
122
+
123
+ def test_file_deleted_behind_us
124
+ assert_raises GithubMarkdownPreview::FileNotFoundError do
125
+ write(@source_file_path, '## foo')
126
+ markdown_preview = @ghp.new( @source_file_path )
127
+ File.delete(@source_file_path)
128
+ markdown_preview.update
129
+ end
130
+ end
131
+
132
+ end
metadata ADDED
@@ -0,0 +1,127 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: github-markdown-preview
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.5.0
5
+ platform: ruby
6
+ authors:
7
+ - Daniel Marcotte
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2013-05-11 00:00:00 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: listen
16
+ prerelease: false
17
+ requirement: &id001 !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.0.3
22
+ type: :runtime
23
+ version_requirements: *id001
24
+ - !ruby/object:Gem::Dependency
25
+ name: github-linguist
26
+ prerelease: false
27
+ requirement: &id002 !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ~>
30
+ - !ruby/object:Gem::Version
31
+ version: 2.6.7
32
+ type: :runtime
33
+ version_requirements: *id002
34
+ - !ruby/object:Gem::Dependency
35
+ name: html-pipeline
36
+ prerelease: false
37
+ requirement: &id003 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: 0.0.12
42
+ type: :runtime
43
+ version_requirements: *id003
44
+ - !ruby/object:Gem::Dependency
45
+ name: minitest
46
+ prerelease: false
47
+ requirement: &id004 !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - &id006
50
+ - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: "0"
53
+ type: :development
54
+ version_requirements: *id004
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ prerelease: false
58
+ requirement: &id005 !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: "1.3"
63
+ type: :development
64
+ version_requirements: *id005
65
+ - !ruby/object:Gem::Dependency
66
+ name: rake
67
+ prerelease: false
68
+ requirement: &id007 !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - *id006
71
+ type: :development
72
+ version_requirements: *id007
73
+ description: Use your favorite editor plus the usual edit/refresh cycle to quickly write and polish your Github markdown files.
74
+ email: dmarcotte@gmail.com
75
+ executables:
76
+ - github-markdown-preview
77
+ extensions: []
78
+
79
+ extra_rdoc_files: []
80
+
81
+ files:
82
+ - .gitignore
83
+ - .travis.yml
84
+ - CHANGELOG.md
85
+ - Gemfile
86
+ - LICENSE.txt
87
+ - Rakefile
88
+ - bin/github-markdown-preview
89
+ - contributing.md
90
+ - data/css/github.css
91
+ - data/css/github2.css
92
+ - github-markdown-preview.gemspec
93
+ - lib/github-markdown-preview.rb
94
+ - lib/github-markdown-preview/html_preview.rb
95
+ - lib/github-markdown-preview/resources.rb
96
+ - lib/github-markdown-preview/version.rb
97
+ - readme.md
98
+ - sample.png
99
+ - sample_preview.md
100
+ - test/github-markdown-preview_test.rb
101
+ - test/html_preview_test.rb
102
+ homepage: https://github.com/dmarcotte/github-markdown-preview
103
+ licenses:
104
+ - MIT
105
+ metadata: {}
106
+
107
+ post_install_message:
108
+ rdoc_options: []
109
+
110
+ require_paths:
111
+ - lib
112
+ required_ruby_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - *id006
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - *id006
118
+ requirements: []
119
+
120
+ rubyforge_project:
121
+ rubygems_version: 2.0.3
122
+ signing_key:
123
+ specification_version: 4
124
+ summary: Local previews for Github Flavored Markdown files
125
+ test_files:
126
+ - test/github-markdown-preview_test.rb
127
+ - test/html_preview_test.rb