slimdown 0.1.2 → 1.2.0

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
- SHA1:
3
- metadata.gz: 97a5dcee1b610ec49bd18729012ecb80fcf4732b
4
- data.tar.gz: c9257a530cc9fc29b3865dba758906e1704df776
2
+ SHA256:
3
+ metadata.gz: 3e845fd99a6108c1c7553637a96316710d824d93df0122260490363a2d91605d
4
+ data.tar.gz: a95a0cb693ed000c5881ea6d055f218180a3617f7c6adcdb95732053719f84b6
5
5
  SHA512:
6
- metadata.gz: 85cd40427c316a0c3d224ceb3fe7475352c62ef3d4f666b06a9c8b8fc44bfcb427e396ba9c198a40ab44b276486e5bfad06aa05bbe17b339402e76d074161f82
7
- data.tar.gz: f4f5ae9fd9c67402468d4f6c77327f79de8e8f37f208306695ad0404e5232c944eef5e484d4f114f1f612de3c9de9dc29824fa546ad2fec43d7b396953b3271d
6
+ metadata.gz: 20d859648791b40e2c65276582d55f4fdc68dffc61c5620cb1b9d74faf471c2841498a2a5f3df516faa03845de9e11ecabb19b001619cce4a505b3cc110c6e0c
7
+ data.tar.gz: c0a24227009eda9d6538af0130d867d920c9ea6b120f51fa1feeb03c0fe98e8f87e23a1dedf64f928253e5909a1d07a325e31e23be16bf31b3edcd898266a71b
@@ -1,10 +1,9 @@
1
1
  language: ruby
2
2
  cache: bundler
3
3
  rvm:
4
- - 1.9.3
5
- - 2.1.5
6
- - 2.2.2
7
- - jruby
4
+ - 2.2.3
5
+ - 2.3.1
6
+ # - jruby
8
7
  before_install:
9
8
  - gem update --system
10
9
  - gem --version
@@ -0,0 +1,43 @@
1
+ # Ruby Slimdown Changelog
2
+
3
+ ## [master]
4
+ [master]: https://github.com/APMG/ruby-slimdown/compare/1.1.0...HEAD
5
+
6
+ * Your contribution here!
7
+
8
+ ## [`1.1.0`] (2017-12-04)
9
+ [`1.1.0`]: https://github.com/APMG/ruby-slimdown/compare/1.0.2...1.1.0
10
+
11
+ * [#2](https://github.com/APMG/ruby-slimdown/pull/2): Added page parent method.
12
+ * [#3](https://github.com/APMG/ruby-slimdown/pull/3): Fixed mutation of `@absolute_path` in `Page`.
13
+
14
+ ## [`1.0.2`] (2017-03-13)
15
+ [`1.0.2`]: https://github.com/APMG/ruby-slimdown/compare/1.0.1...1.0.2
16
+
17
+ * Add support for arbitrary frontmatter via `Page#headers` method.
18
+
19
+ ## [`1.0.1`] (2015-07-07)
20
+ [`1.0.1`]: https://github.com/APMG/ruby-slimdown/compare/1.0.0...1.0.1
21
+
22
+ * Fix for case where no frontmatter.
23
+
24
+ ## [`1.0.0`] (2015-06-23)
25
+ [`1.0.0`]: https://github.com/APMG/ruby-slimdown/compare/0.1.2...1.0.0
26
+
27
+ * Same as 0.1.2, but marking as v1.0.0 to indicate SemVer support.
28
+
29
+ ## [`0.1.2`] (2015-06-18)
30
+ [`0.1.2`]: https://github.com/APMG/ruby-slimdown/compare/0.1.1...0.1.2
31
+
32
+ * Support hard line breaks with `<br />`.
33
+
34
+ ## [`0.1.1`] (2015-06-16)
35
+ [`0.1.1`]: https://github.com/APMG/ruby-slimdown/compare/0.1.0...0.1.1
36
+
37
+ * Don't assume files in `pages/`.
38
+ * Indicate required Ruby version.
39
+
40
+ ## [`0.1.0`] (2015-06-15)
41
+ [`0.1.0`]: https://github.com/APMG/ruby-slimdown/compare/c1c7481d493c444529fe40082fc23b935f20c55b...0.1.0
42
+
43
+ * Initial release
data/README.md CHANGED
@@ -28,41 +28,76 @@ Or install it yourself as:
28
28
  To add to your app, create a controller with one action, such as `show`. In that
29
29
  action, add code to pull in the action:
30
30
 
31
- class SlimdownController < ApplicationController
32
- def show
33
- @page = Slimdown::Page.find(params[:slug])
34
- end
35
- end
31
+ ```ruby
32
+ class SlimdownController < ApplicationController
33
+ def show
34
+ @page = Slimdown::Page.find(params[:slug])
35
+ end
36
+ end
37
+ ```
36
38
 
37
39
  Then add a view for the show action.
38
40
 
39
- <%= @page.body.to_html.html_safe %>
40
-
41
- <h2>Sibling Pages</h2>
42
- <ul>
43
- <% @page.siblings.each do |sibling| %>
44
- <li><%= link_to sibling.title, "/#{sibling.path}" %></li>
45
- <% end %>
46
- </ul>
47
-
48
- <h2>Child Pages</h2>
49
- <ul>
50
- <% @page.children.each do |child| %>
51
- <li><%= link_to child.title, "/#{child.path}" %></li>
52
- <% end %>
53
- </ul>
41
+ ```erb
42
+ <%= @page.body.to_html.html_safe %>
43
+
44
+ <h2>Sibling Pages</h2>
45
+ <ul>
46
+ <% @page.siblings.each do |sibling| %>
47
+ <li><%= link_to sibling.title, "/#{sibling.path}" %></li>
48
+ <% end %>
49
+ </ul>
50
+
51
+ <h2>Child Pages</h2>
52
+ <ul>
53
+ <% @page.children.each do |child| %>
54
+ <li><%= link_to child.title, "/#{child.path}" %></li>
55
+ <% end %>
56
+ </ul>
57
+ ```
54
58
 
55
59
  Add a route to direct all unhandled requests to your controller. Make sure that
56
- it is at the end of your routes.rb so it doesn't superseed other routes.
60
+ it is at the end of your routes.rb so it doesn't supersede other routes.
57
61
 
58
- get '/*slug', to: 'slimdown#show'
62
+ ```ruby
63
+ get '/*slug', to: 'slimdown#show'
64
+ ```
59
65
 
60
66
  Finally, add an initializer in `config/initializers/slimdown.rb` to set the path
61
67
  to your pages.
62
68
 
69
+ ```ruby
70
+ Slimdown.config do |c|
71
+ c.location = Rails.root.join('lib/pages')
72
+ end
73
+ ```
74
+
75
+ ## Testing
76
+
77
+ Testing using a controller spec is not possible because you are testing for an
78
+ arbitrary url. You can do a feature test with Capybara or friends. However,
79
+ given that you are just returning content, you can use a request spec. For
80
+ example, you have an about.md in your remote repo or lib/pages then in your
81
+ spec/requests/slimdown_request_spec.rb. Additionally, you can override the page
82
+ path for the test, allowing you to use a fixture directory.
83
+
84
+ ```ruby
85
+ RSpec.describe "Static Pages", type: :request do
86
+ before :each do
63
87
  Slimdown.config do |c|
64
- c.location = Rails.root.join('lib/pages')
88
+ c.location = Rails.root.join '/spec/fixtures/test_pages'
89
+ end
90
+ end
91
+
92
+ describe "GET /" do
93
+ it "#show" do
94
+ get "/about"
95
+ expect(response).to render_template(:show)
96
+ expect(response.status).to be(200)
65
97
  end
98
+ end
99
+ end
100
+ ```
66
101
 
67
102
 
68
103
  ## General notes
@@ -1,5 +1,6 @@
1
1
  module Slimdown
2
2
  # Exception class for Slimdown errors.
3
+ # TODO: On a major SemVer change, migrate to PageNotFoundException.
3
4
  class Exception < StandardError
4
5
  end
5
6
  end
@@ -1,11 +1,12 @@
1
1
  module Slimdown
2
2
  # The model representing a page
3
3
  class Page
4
-
5
4
  # The title from the document headers
6
5
  attr_reader :title
7
6
  # The template from the document headers
8
7
  attr_reader :template
8
+ # All the document headers
9
+ attr_reader :headers
9
10
 
10
11
  # Get new page object
11
12
  #
@@ -59,30 +60,33 @@ module Slimdown
59
60
  # @return [Array<Slimdown::Page>] a list of child pages.
60
61
  def children
61
62
  # Check to see whether dir exists.
62
- folder = @absolute_path
63
- folder.slice! '.md'
63
+ Slimdown::Folder.new(@absolute_path.chomp('.md')).pages
64
+ end
64
65
 
65
- Slimdown::Folder.new(folder).pages
66
+ # The parent of this document
67
+ #
68
+ # @return [<Slimdown::Page>|nil] the parent, if it exists
69
+ def parent
70
+ parent = File.expand_path('..', @absolute_path).concat('.md')
71
+
72
+ return nil unless File.file?(parent)
73
+
74
+ Slimdown::Page.new(parent)
66
75
  end
67
76
 
68
77
  # The relative path for this document.
69
78
  #
70
79
  # @return [String] the relative path, e.g. 'about/contact'
71
80
  def path
72
- loc = Slimdown.config.location
73
- relative = @absolute_path
74
- relative.slice! "#{loc}/"
75
- relative.slice! '.md'
76
-
77
- relative
81
+ @absolute_path.sub(%r{^#{Slimdown.config.location}/(.*)\.md}, '\1')
78
82
  end
79
83
 
80
- private
84
+ private
81
85
 
82
86
  def load_headers
83
- headers = @parsed_page.headers
84
- @title = headers['title']
85
- @template = headers['template']
87
+ @headers = @parsed_page.headers
88
+ @title = @headers['title']
89
+ @template = @headers['template']
86
90
  end
87
91
  end
88
92
  end
@@ -21,7 +21,10 @@ module Slimdown
21
21
  #
22
22
  # @return [Hash] document headers
23
23
  def headers
24
- YAML.load @header_text
24
+ head = {}
25
+ head = YAML.load @header_text unless @header_text == ''
26
+
27
+ head
25
28
  end
26
29
 
27
30
  # The parsed markdown document body.
@@ -48,7 +51,7 @@ module Slimdown
48
51
  part = :body
49
52
  elsif part == :header
50
53
  @header_text += line
51
- elsif part == :body
54
+ elsif part == :body || part == nil
52
55
  @body_text += line
53
56
  end
54
57
  end
@@ -1,4 +1,4 @@
1
1
  module Slimdown
2
2
  # The slimdown version
3
- VERSION = '0.1.2'
3
+ VERSION = '1.2.0'.freeze
4
4
  end
@@ -21,12 +21,12 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.required_ruby_version = '>= 1.9.3'
23
23
 
24
- spec.add_runtime_dependency 'kramdown', '~> 1.7'
24
+ spec.add_runtime_dependency 'kramdown', '~> 2.3'
25
25
 
26
26
  spec.add_development_dependency "bundler", "~> 1.9"
27
- spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "rake", "~> 12.0"
28
28
  spec.add_development_dependency "guard", "~> 2.12"
29
29
  spec.add_development_dependency "guard-rspec", "~> 4.5"
30
30
  spec.add_development_dependency "pry", "~> 0.10"
31
- spec.add_development_dependency "yard", "~> 0.8"
31
+ spec.add_development_dependency "yard", "~> 0.9.11"
32
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slimdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Johnston
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-06-18 00:00:00.000000000 Z
11
+ date: 2020-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kramdown
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: '2.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.7'
26
+ version: '2.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '12.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '12.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: guard
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0.8'
103
+ version: 0.9.11
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '0.8'
110
+ version: 0.9.11
111
111
  description: A system for using Markdown from a folder and turning it into web pages.
112
112
  email:
113
113
  - wjohnston@mpr.org
@@ -119,6 +119,7 @@ files:
119
119
  - ".rspec"
120
120
  - ".travis.yml"
121
121
  - ".yardocops"
122
+ - CHANGELOG.md
122
123
  - Gemfile
123
124
  - Guardfile
124
125
  - LICENSE.txt
@@ -153,10 +154,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
153
154
  - !ruby/object:Gem::Version
154
155
  version: '0'
155
156
  requirements: []
156
- rubyforge_project:
157
- rubygems_version: 2.4.5
157
+ rubygems_version: 3.0.3
158
158
  signing_key:
159
159
  specification_version: 4
160
160
  summary: A system for using static Markdown for pages.
161
161
  test_files: []
162
- has_rdoc: