content_directory 0.1.0 → 0.1.1
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 +8 -8
- data/CHANGELOG.md +9 -0
- data/README.md +81 -5
- data/content_directory.gemspec +5 -5
- data/lib/content_directory/entry.rb +2 -2
- data/lib/content_directory/version.rb +1 -1
- data/test/support/content/home/empty.md +1 -0
- data/test/unit/content_directory_test.rb +1 -1
- data/test/unit/entry_test.rb +12 -1
- metadata +10 -5
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YWQyZDYxMDlmMjI1ODg3YjgzM2UyNmRlYjBlY2U5Y2YxYTE0YzZlNw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZWNmZjYxOWJjMTUwNGQxYzM1MWVmN2ZkYzA4YjAzOTE5ZmI2Yzc3ZA==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MWUxYzM2MjBmNGEyZDRhYWFiZGU0ZjMzNmRmNzc2ZmU3MzllODU4NmE0ZmQz
|
10
|
+
NDNmZWYxNWE4NWQwODM4YmNhMzY1MDExNGZiMDIwYWI4Yjg2MDk4NWQ2Zjkw
|
11
|
+
MTY0YzBhOGQ5NGYwM2Q0MmZjY2Y3N2VhODMzYTBmZDJkNDI0YTI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YWExNGRkZGRjM2U1NWQ3MzdjY2E1MGI4MDJjN2Q5MTA3NjEwZjM2Y2M3ZTEy
|
14
|
+
OTMwZmQ1ODE5ZThlMDQ3NTZmMTk3ZjFjMTk2NmZkMTFhN2FiNGI1NTc1ZmYz
|
15
|
+
NjEwN2FlYTUxODY2M2M1YWVkODRkZTZiY2ZjY2EzYzAxOTVjNDM=
|
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -1,12 +1,73 @@
|
|
1
|
-
#
|
1
|
+
# Content Directory
|
2
2
|
|
3
|
-
|
3
|
+
Content Directory is a lightweight replacement of Content Management System. It provides structure for text based content. It comes with a parser, which allows content entries to have metadata and rich formatting.
|
4
|
+
|
5
|
+
## Structure
|
6
|
+
|
7
|
+
Content Directory does not require a database. Instead, it uses file system. An entry is a file written in Markdown syntax. You can group related entries in a folder.
|
8
|
+
|
9
|
+
- content
|
10
|
+
- home
|
11
|
+
- main.md
|
12
|
+
- features
|
13
|
+
- collaboration.md
|
14
|
+
- manage.md
|
15
|
+
- posts
|
16
|
+
- a-new-blog.md
|
17
|
+
- sortable-stars.md
|
18
|
+
|
19
|
+
## Writing entries
|
20
|
+
|
21
|
+
Entry uses Markdown syntax, but there is an additional rule that every entry must have a metadata declaration on the top. Metadata declaration block uses YAML syntax.
|
22
|
+
|
23
|
+
Title: Introduction
|
24
|
+
Date: 2013/03/10
|
25
|
+
Tags: ["post", "short"]
|
26
|
+
|
27
|
+
It was a bright cold day in April, and the clocks were striking
|
28
|
+
thirteen. Winston Smith, his chin nuzzled into his breast in an
|
29
|
+
effort to escape the vile wind, slipped quickly through the
|
30
|
+
glass doors of *Victory Mansions*, though not quickly enough to
|
31
|
+
prevent a swirl of gritty dust from entering along with him.
|
32
|
+
|
33
|
+
The hallway smelt of boiled cabbage and old rag mats. At one end
|
34
|
+
of it a coloured poster, too large for indoor display, had been
|
35
|
+
tacked to the wall. It depicted simply an **enormous** face,
|
36
|
+
more than a metre wide: the face of a man of about forty-five,
|
37
|
+
with a heavy black moustache and ruggedly handsome features.
|
38
|
+
|
39
|
+
## Reading entries
|
40
|
+
|
41
|
+
Once you have written entries, you can use `ContentDirectory.find` to get the processed entries and render them into views.
|
42
|
+
|
43
|
+
`ContentDirectory.find` returns a `Hash` of `ContentDirectory::Entry`. It accepts one argument, which is a path relative to `ContentDirectory.root`. If path is not specified, `ContentDirectory.find` will find all possible entries.
|
44
|
+
|
45
|
+
posts = ContentDirectory.find "posts"
|
46
|
+
|
47
|
+
You can use metadata to sort posts by date
|
48
|
+
|
49
|
+
posts = ContentDirectory.find("posts").values
|
50
|
+
posts.sort_by! { |post| post.metadata["Date"] }
|
51
|
+
|
52
|
+
Entry has three important values: `metadata`, `text`, `html`.
|
53
|
+
|
54
|
+
1. `metadata` is a `Hash` of parsed metadata block from entry file.
|
55
|
+
2. `text` is a `String` of original entry text.
|
56
|
+
3. `html` is a `String` of the result of original text after processed by Redcarpet Markdown parser.
|
57
|
+
|
58
|
+
You can you these three values to render entry to a view.
|
59
|
+
|
60
|
+
for post in posts
|
61
|
+
puts post.metadata["Title"]
|
62
|
+
puts post.text
|
63
|
+
puts post.html
|
64
|
+
end
|
4
65
|
|
5
66
|
## Installation
|
6
67
|
|
7
68
|
Add this line to your application's Gemfile:
|
8
69
|
|
9
|
-
gem
|
70
|
+
gem "content_directory"
|
10
71
|
|
11
72
|
And then execute:
|
12
73
|
|
@@ -16,9 +77,24 @@ Or install it yourself as:
|
|
16
77
|
|
17
78
|
$ gem install content_directory
|
18
79
|
|
19
|
-
##
|
80
|
+
## Configuration
|
81
|
+
|
82
|
+
ContentDirectory.root is default to `"#{Rails.root}/content"` when used in Rails. If you want to use other directory, you can easily change it in the initializer.
|
83
|
+
|
84
|
+
ContentDirectory.root = "path/to/content"
|
85
|
+
|
86
|
+
## Use with Rails
|
87
|
+
|
88
|
+
Content Directory is intended to be used in Rails to extract content from view templates. In this fashion, content can be easily reused and queried.
|
89
|
+
|
90
|
+
1. Create `content` directory in Rails root path.
|
91
|
+
2. Write entries in this directory.
|
92
|
+
3. Use `ContentDirectory.find` in the controllers.
|
93
|
+
4. Render entry `html` or `text` in the templates.
|
94
|
+
|
95
|
+
## Test
|
20
96
|
|
21
|
-
|
97
|
+
rake test
|
22
98
|
|
23
99
|
## Contributing
|
24
100
|
|
data/content_directory.gemspec
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
lib = File.expand_path(
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
4
|
+
require "content_directory/version"
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "content_directory"
|
8
8
|
spec.version = ContentDirectory::VERSION
|
9
9
|
spec.authors = ["Steve Randy Tantra"]
|
10
10
|
spec.email = ["steve.randy@gmail.com"]
|
11
|
-
spec.description = ""
|
12
|
-
spec.summary = ""
|
13
|
-
spec.homepage = ""
|
11
|
+
spec.description = "Content Directory is a lightweight replacement of Content Management System. It provides structure for text based content. It comes with a parser, which allows content entries to have metadata and rich formatting."
|
12
|
+
spec.summary = "Lightweight replacement of Content Management System"
|
13
|
+
spec.homepage = "https://github.com/steverandy/content_directory"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
@@ -8,17 +8,17 @@ module ContentDirectory
|
|
8
8
|
def initialize(path)
|
9
9
|
@path = path
|
10
10
|
@text = File.read "#{ContentDirectory.root}/#{@path}"
|
11
|
-
@metadata = @text.split("\n\n")
|
11
|
+
@metadata, @text = @text.split("\n\n", 2)
|
12
12
|
|
13
13
|
begin
|
14
14
|
@metadata = YAML.load @metadata
|
15
|
-
@text = @text.split("\n\n", 2).last
|
16
15
|
rescue Exception => e
|
17
16
|
@metadata = nil
|
18
17
|
end
|
19
18
|
end
|
20
19
|
|
21
20
|
def html
|
21
|
+
return nil unless @text
|
22
22
|
markdown = Redcarpet::Markdown.new Redcarpet::Render::HTML
|
23
23
|
html = markdown.render @text
|
24
24
|
Redcarpet::Render::SmartyPants.render html
|
@@ -0,0 +1 @@
|
|
1
|
+
Title: Empty
|
@@ -19,7 +19,7 @@ class ContentDirectoryTest < ActiveSupport::TestCase
|
|
19
19
|
assert_equal 2, content.length
|
20
20
|
|
21
21
|
home = ContentDirectory.find "home"
|
22
|
-
assert_equal
|
22
|
+
assert_equal 3, home.length
|
23
23
|
assert_equal 2, home["features"].length
|
24
24
|
assert_kind_of ContentDirectory::Entry, home["main"]
|
25
25
|
end
|
data/test/unit/entry_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require "test_helper"
|
2
2
|
|
3
3
|
class EntryTest < ActiveSupport::TestCase
|
4
|
-
test "entry" do
|
4
|
+
test "entry with metadata and text" do
|
5
5
|
ContentDirectory.root = File.expand_path("../../support/content", __FILE__)
|
6
6
|
home = ContentDirectory.find "home"
|
7
7
|
main = home["main"]
|
@@ -11,4 +11,15 @@ class EntryTest < ActiveSupport::TestCase
|
|
11
11
|
assert_equal "Build software better, together.\n\nPowerful collaboration, review, and code management for open source and private development projects.\n", main.text
|
12
12
|
assert_equal "<p>Build software better, together.</p>\n\n<p>Powerful collaboration, review, and code management for open source and private development projects.</p>\n", main.html
|
13
13
|
end
|
14
|
+
|
15
|
+
test "entry with metadata and no text" do
|
16
|
+
ContentDirectory.root = File.expand_path("../../support/content", __FILE__)
|
17
|
+
home = ContentDirectory.find "home"
|
18
|
+
empty = home["empty"]
|
19
|
+
assert_kind_of ContentDirectory::Entry, empty
|
20
|
+
assert_equal "Empty", empty.metadata["Title"]
|
21
|
+
puts empty.text
|
22
|
+
assert_nil empty.text
|
23
|
+
assert_nil empty.html
|
24
|
+
end
|
14
25
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: content_directory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Randy Tantra
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-03-
|
11
|
+
date: 2013-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redcarpet
|
@@ -66,7 +66,9 @@ dependencies:
|
|
66
66
|
- - ! '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
-
description:
|
69
|
+
description: Content Directory is a lightweight replacement of Content Management
|
70
|
+
System. It provides structure for text based content. It comes with a parser, which
|
71
|
+
allows content entries to have metadata and rich formatting.
|
70
72
|
email:
|
71
73
|
- steve.randy@gmail.com
|
72
74
|
executables: []
|
@@ -74,6 +76,7 @@ extensions: []
|
|
74
76
|
extra_rdoc_files: []
|
75
77
|
files:
|
76
78
|
- .gitignore
|
79
|
+
- CHANGELOG.md
|
77
80
|
- Gemfile
|
78
81
|
- LICENSE.txt
|
79
82
|
- README.md
|
@@ -82,6 +85,7 @@ files:
|
|
82
85
|
- lib/content_directory.rb
|
83
86
|
- lib/content_directory/entry.rb
|
84
87
|
- lib/content_directory/version.rb
|
88
|
+
- test/support/content/home/empty.md
|
85
89
|
- test/support/content/home/features/collaboration.md
|
86
90
|
- test/support/content/home/features/manage.md
|
87
91
|
- test/support/content/home/main.md
|
@@ -90,7 +94,7 @@ files:
|
|
90
94
|
- test/test_helper.rb
|
91
95
|
- test/unit/content_directory_test.rb
|
92
96
|
- test/unit/entry_test.rb
|
93
|
-
homepage:
|
97
|
+
homepage: https://github.com/steverandy/content_directory
|
94
98
|
licenses:
|
95
99
|
- MIT
|
96
100
|
metadata: {}
|
@@ -113,8 +117,9 @@ rubyforge_project:
|
|
113
117
|
rubygems_version: 2.0.2
|
114
118
|
signing_key:
|
115
119
|
specification_version: 4
|
116
|
-
summary:
|
120
|
+
summary: Lightweight replacement of Content Management System
|
117
121
|
test_files:
|
122
|
+
- test/support/content/home/empty.md
|
118
123
|
- test/support/content/home/features/collaboration.md
|
119
124
|
- test/support/content/home/features/manage.md
|
120
125
|
- test/support/content/home/main.md
|