drift 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +131 -1
- data/lib/drift.rb +3 -0
- data/{app/models → lib}/drift/blog_post_base.rb +5 -7
- data/{app/models → lib}/drift/static_model.rb +5 -8
- data/lib/drift/version.rb +1 -1
- data/spec/drift/blog_post_spec.rb +25 -3
- data/spec/dummy/db/static/blog_posts/2013-06-14_010101_demo-blog-post.md +13 -0
- data/spec/dummy/db/static/blog_posts/2013-06-15_235801_test-blog-post.md +13 -0
- data/spec/dummy/log/test.log +0 -15
- data/spec/spec_helper.rb +9 -2
- metadata +25 -7
- data/lib/generators/drift/blog_post/USAGE +0 -8
- data/lib/tasks/drift_tasks.rake +0 -4
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
drift [![Build Status](https://travis-ci.org/jpruetting/drift.png?branch=master)](https://travis-ci.org/jpruetting/drift)
|
2
2
|
=============
|
3
3
|
|
4
|
-
Drift is a
|
4
|
+
Drift is a static blogging engine for Rails.
|
5
5
|
|
6
6
|
|
7
7
|
Installation
|
@@ -12,3 +12,133 @@ Include the gem in your Gemfile:
|
|
12
12
|
```ruby
|
13
13
|
gem 'drift'
|
14
14
|
```
|
15
|
+
|
16
|
+
Usage
|
17
|
+
=============
|
18
|
+
|
19
|
+
#### Creating a blog post:
|
20
|
+
```ruby
|
21
|
+
$ rails g drift:blog_post 'Demo Blog Post'
|
22
|
+
|
23
|
+
# creates db/static/blog_posts/2013-06-15_235801_demo-blog-post.md
|
24
|
+
```
|
25
|
+
|
26
|
+
The default location for blog posts is `db/static/blog_posts`.
|
27
|
+
The deafult markup language is Markdown.
|
28
|
+
|
29
|
+
You can specify another markup language when creating a blog post:
|
30
|
+
```ruby
|
31
|
+
$ rails g drift:blog_post 'Demo Blog Post' textile
|
32
|
+
# creates db/static/blog_posts/2013-06-15_235801_demo-blog-post.textile
|
33
|
+
|
34
|
+
$ rails g drift:blog_post 'Demo Blog Post' rdoc
|
35
|
+
# creates db/static/blog_posts/2013-06-15_235801_demo-blog-post.rdoc
|
36
|
+
|
37
|
+
$ rails g drift:blog_post 'Demo Blog Post' asciidoc
|
38
|
+
# creates db/static/blog_posts/2013-06-15_235801_demo-blog-post.asciidoc
|
39
|
+
```
|
40
|
+
|
41
|
+
#### Overriding default settings:
|
42
|
+
|
43
|
+
You can change the default source location and markup language by overriding the blog_post model:
|
44
|
+
|
45
|
+
`app/models/drift/blog_post.rb`
|
46
|
+
```ruby
|
47
|
+
module Drift
|
48
|
+
class BlogPost < Drift::BlogPostBase
|
49
|
+
self.source = 'public/blog/posts'
|
50
|
+
self.markup_ext = 'textile'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
```
|
54
|
+
|
55
|
+
#### Extending functionality:
|
56
|
+
|
57
|
+
You can also use the blog_post model to extend functionality:
|
58
|
+
|
59
|
+
`app/models/drift/blog_post.rb`
|
60
|
+
```ruby
|
61
|
+
module Drift
|
62
|
+
class BlogPost < Drift::BlogPostBase
|
63
|
+
belongs_to :author, :class_name => 'User'
|
64
|
+
end
|
65
|
+
end
|
66
|
+
```
|
67
|
+
|
68
|
+
#### Blog post format:
|
69
|
+
|
70
|
+
```
|
71
|
+
title: Demo Blog Post
|
72
|
+
author: John Smith
|
73
|
+
version: 3
|
74
|
+
|
75
|
+
|
76
|
+
Blog content starts here. Keep two blank lines between the yaml attributes and the content.
|
77
|
+
|
78
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam nisi dolor, aliquam eu
|
79
|
+
condimentum quis, fermentum non augue. Donec quis leo volutpat, convallis arcu at, solli
|
80
|
+
citudin purus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Etiam plac
|
81
|
+
erat tempus sapien, porttitor ornare augue suscipit in. Sed auctor neque sed mauris ornar
|
82
|
+
e, sit amet ullamcorper ipsum commodo. Praesent et vehicula nisl. Vivamus egestas dui a t
|
83
|
+
ortor elementum, et lacinia mauris fringilla. Mauris vestibulum felis in libero elementum,
|
84
|
+
at fermentum odio ultrices. Vivamus tempor arcu a ligula congue, sit amet venenatis elit
|
85
|
+
sodales. Nam eget sem vehicula, scelerisque nisi nec, convallis nulla. Suspendisse pote
|
86
|
+
nti. Aenean ornare, purus a viverra pharetra, lacus velit placerat metus, vel gravida to
|
87
|
+
rtor leo eget urna. Nullam scelerisque auctor ante.
|
88
|
+
|
89
|
+
Sed pharetra enim tortor, rhoncus egestas eros aliquam et. Pellentesque porta est arcu,
|
90
|
+
ac scelerisque tellus sodales ut. Suspendisse ullamcorper, metus a vulputate mollis,
|
91
|
+
felis quam hendrerit sapien, porta interdum orci nunc nec ipsum. Nulla pulvinar ac lacu
|
92
|
+
s at condimentum. Curabitur a diam tristique, rhoncus magna at, adipiscing nibh. Aliqua
|
93
|
+
m erat volutpat. In tempor euismod metus, ac lobortis quam ullamcorper euismod. Morbi i
|
94
|
+
n neque facilisis, egestas nibh auctor, pretium risus.
|
95
|
+
|
96
|
+
Sed vulputate condimentum lorem, elementum venenatis massa imperdiet ut. Nulla ultricies m
|
97
|
+
etus in aliquet malesuada. Maecenas nisi quam, cursus sed tellus ut, posuere ultricies mau
|
98
|
+
ris. Morbi aliquam dignissim nisi ac euismod. Quisque vestibulum neque arcu, ac venenatis
|
99
|
+
dolor tincidunt quis. Suspendisse at dolor libero. Cum sociis natoque penatibus et magnis
|
100
|
+
dis parturient montes, nascetur ridiculus mus. Nulla posuere non lorem sit amet dignissim.
|
101
|
+
Nam eget justo eget mi consectetur dapibus vitae vitae mauris. Nulla vitae ullamcorper ma
|
102
|
+
gna. In in fermentum est. In lacinia venenatis turpis, a rutrum metus laoreet a. Vivamus
|
103
|
+
adipiscing vel enim eu scelerisque.
|
104
|
+
```
|
105
|
+
|
106
|
+
#### Blog post attributes:
|
107
|
+
|
108
|
+
Yaml data set at the top of a blog post is available on the blog post model.
|
109
|
+
|
110
|
+
Don't forget to separate yaml data from blog post content with two blank lines!
|
111
|
+
|
112
|
+
Yaml data:
|
113
|
+
```
|
114
|
+
title: Demo Blog Post
|
115
|
+
author: John Smith
|
116
|
+
version: 3
|
117
|
+
category: Apples
|
118
|
+
```
|
119
|
+
Blog post attributes:
|
120
|
+
```ruby
|
121
|
+
@blog_post.title # Title
|
122
|
+
@blog_post.author # Author
|
123
|
+
@blog_post.version # 1
|
124
|
+
@blog_post.category # Apples
|
125
|
+
```
|
126
|
+
|
127
|
+
#### Rails controller
|
128
|
+
|
129
|
+
Index: `http://www.example.com/blog_posts`
|
130
|
+
|
131
|
+
Show: `http://www.example.com/blog_posts/demo-blog-post`
|
132
|
+
|
133
|
+
```ruby
|
134
|
+
class BlogPostsController < ApplicationController
|
135
|
+
def index
|
136
|
+
@blog_posts = Drift::BlogPost.all
|
137
|
+
end
|
138
|
+
|
139
|
+
def show
|
140
|
+
@blog_post = Drift::BlogPost.find_by_slug(params['id'])
|
141
|
+
end
|
142
|
+
end
|
143
|
+
```
|
144
|
+
|
data/lib/drift.rb
CHANGED
@@ -4,17 +4,15 @@ module Drift
|
|
4
4
|
attr_accessor :markup_ext
|
5
5
|
|
6
6
|
def source
|
7
|
-
@source
|
7
|
+
@source ||= 'db/static/blog_posts'
|
8
8
|
end
|
9
9
|
|
10
10
|
def markup_ext
|
11
|
-
@markup_ext
|
11
|
+
@markup_ext ||= 'md'
|
12
12
|
end
|
13
13
|
|
14
14
|
def find_by_slug(slug)
|
15
|
-
file = all_files.detect
|
16
|
-
slug == parse_slug_from_filename(f)
|
17
|
-
end
|
15
|
+
file = all_files.detect{ |f| slug == parse_slug_from_filename(f) }
|
18
16
|
|
19
17
|
find_by_file(file)
|
20
18
|
end
|
@@ -32,9 +30,9 @@ module Drift
|
|
32
30
|
|
33
31
|
attr_accessor :created_at, :slug, :content, :title, :author, :version
|
34
32
|
|
35
|
-
def initialize(args)
|
33
|
+
def initialize(args = {})
|
36
34
|
super
|
37
|
-
set_attributes_from_filename args[:file]
|
35
|
+
set_attributes_from_filename(args[:file]) unless args[:file].nil?
|
38
36
|
end
|
39
37
|
|
40
38
|
def content
|
@@ -1,14 +1,6 @@
|
|
1
1
|
module Drift
|
2
2
|
class StaticModel
|
3
|
-
|
4
|
-
def initialize(args)
|
5
|
-
args.each do |k,v|
|
6
|
-
instance_variable_set("@#{k.to_s.underscore}", v) unless v.nil?
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
3
|
class << self
|
11
|
-
|
12
4
|
attr_accessor :source
|
13
5
|
|
14
6
|
def all
|
@@ -60,7 +52,12 @@ module Drift
|
|
60
52
|
|
61
53
|
new(attributes)
|
62
54
|
end
|
55
|
+
end
|
63
56
|
|
57
|
+
def initialize(args = {})
|
58
|
+
args.each do |k, v|
|
59
|
+
instance_variable_set("@#{k.to_s.underscore}", v) unless v.nil?
|
60
|
+
end
|
64
61
|
end
|
65
62
|
end
|
66
63
|
end
|
data/lib/drift/version.rb
CHANGED
@@ -3,12 +3,34 @@ require_relative '../spec_helper'
|
|
3
3
|
module Drift
|
4
4
|
describe BlogPost do
|
5
5
|
before :each do
|
6
|
-
@
|
6
|
+
@datetime = DateTime.new(2013, 05, 14, 14, 20, 30)
|
7
|
+
@slug = 'test-blog-post'
|
8
|
+
@file = "#{@datetime.year}-#{@datetime.month}-#{@datetime.day}_#{@datetime.hour}#{@datetime.min}#{@datetime.sec}_#{@slug}.textile"
|
9
|
+
@blog_post = BlogPost.new(:file => @file)
|
7
10
|
end
|
8
11
|
|
9
|
-
it "should have a
|
10
|
-
|
12
|
+
it "should have a default source" do
|
13
|
+
BlogPost.source.length.should be > 0
|
11
14
|
end
|
12
15
|
|
16
|
+
it "should have a default markup_ext" do
|
17
|
+
BlogPost.markup_ext.length.should be > 0
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should parse datetime from filename" do
|
21
|
+
BlogPost.parse_datetime_from_filename(@file).should eq @datetime
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should parse slug from filename" do
|
25
|
+
BlogPost.parse_slug_from_filename(@file).should eq @slug
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should derive created_at from filename" do
|
29
|
+
@blog_post.created_at.should eq @datetime
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should derive slug from filename" do
|
33
|
+
@blog_post.slug.should eq @slug
|
34
|
+
end
|
13
35
|
end
|
14
36
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
title: Demo Blog Post
|
2
|
+
author: John Smith
|
3
|
+
version: 3
|
4
|
+
category: Apples
|
5
|
+
|
6
|
+
|
7
|
+
Blog content starts here. Keep two blank lines between the attributes and the content.
|
8
|
+
|
9
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam nisi dolor, aliquam eu condimentum quis, fermentum non augue. Donec quis leo volutpat, convallis arcu at, sollicitudin purus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Etiam placerat tempus sapien, porttitor ornare augue suscipit in. Sed auctor neque sed mauris ornare, sit amet ullamcorper ipsum commodo. Praesent et vehicula nisl. Vivamus egestas dui a tortor elementum, et lacinia mauris fringilla. Mauris vestibulum felis in libero elementum, at fermentum odio ultrices. Vivamus tempor arcu a ligula congue, sit amet venenatis elit sodales. Nam eget sem vehicula, scelerisque nisi nec, convallis nulla. Suspendisse potenti. Aenean ornare, purus a viverra pharetra, lacus velit placerat metus, vel gravida tortor leo eget urna. Nullam scelerisque auctor ante.
|
10
|
+
|
11
|
+
Sed pharetra enim tortor, rhoncus egestas eros aliquam et. Pellentesque porta est arcu, ac scelerisque tellus sodales ut. Suspendisse ullamcorper, metus a vulputate mollis, felis quam hendrerit sapien, porta interdum orci nunc nec ipsum. Nulla pulvinar ac lacus at condimentum. Curabitur a diam tristique, rhoncus magna at, adipiscing nibh. Aliquam erat volutpat. In tempor euismod metus, ac lobortis quam ullamcorper euismod. Morbi in neque facilisis, egestas nibh auctor, pretium risus.
|
12
|
+
|
13
|
+
Sed vulputate condimentum lorem, elementum venenatis massa imperdiet ut. Nulla ultricies metus in aliquet malesuada. Maecenas nisi quam, cursus sed tellus ut, posuere ultricies mauris. Morbi aliquam dignissim nisi ac euismod. Quisque vestibulum neque arcu, ac venenatis dolor tincidunt quis. Suspendisse at dolor libero. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere non lorem sit amet dignissim. Nam eget justo eget mi consectetur dapibus vitae vitae mauris. Nulla vitae ullamcorper magna. In in fermentum est. In lacinia venenatis turpis, a rutrum metus laoreet a. Vivamus adipiscing vel enim eu scelerisque.
|
@@ -0,0 +1,13 @@
|
|
1
|
+
title: Test Blog Post
|
2
|
+
author: James Anderson
|
3
|
+
version: 6
|
4
|
+
category: Oranges
|
5
|
+
|
6
|
+
|
7
|
+
Blog content starts here. Keep two blank lines between the attributes and the content.
|
8
|
+
|
9
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam nisi dolor, aliquam eu condimentum quis, fermentum non augue. Donec quis leo volutpat, convallis arcu at, sollicitudin purus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Etiam placerat tempus sapien, porttitor ornare augue suscipit in. Sed auctor neque sed mauris ornare, sit amet ullamcorper ipsum commodo. Praesent et vehicula nisl. Vivamus egestas dui a tortor elementum, et lacinia mauris fringilla. Mauris vestibulum felis in libero elementum, at fermentum odio ultrices. Vivamus tempor arcu a ligula congue, sit amet venenatis elit sodales. Nam eget sem vehicula, scelerisque nisi nec, convallis nulla. Suspendisse potenti. Aenean ornare, purus a viverra pharetra, lacus velit placerat metus, vel gravida tortor leo eget urna. Nullam scelerisque auctor ante.
|
10
|
+
|
11
|
+
Sed pharetra enim tortor, rhoncus egestas eros aliquam et. Pellentesque porta est arcu, ac scelerisque tellus sodales ut. Suspendisse ullamcorper, metus a vulputate mollis, felis quam hendrerit sapien, porta interdum orci nunc nec ipsum. Nulla pulvinar ac lacus at condimentum. Curabitur a diam tristique, rhoncus magna at, adipiscing nibh. Aliquam erat volutpat. In tempor euismod metus, ac lobortis quam ullamcorper euismod. Morbi in neque facilisis, egestas nibh auctor, pretium risus.
|
12
|
+
|
13
|
+
Sed vulputate condimentum lorem, elementum venenatis massa imperdiet ut. Nulla ultricies metus in aliquet malesuada. Maecenas nisi quam, cursus sed tellus ut, posuere ultricies mauris. Morbi aliquam dignissim nisi ac euismod. Quisque vestibulum neque arcu, ac venenatis dolor tincidunt quis. Suspendisse at dolor libero. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere non lorem sit amet dignissim. Nam eget justo eget mi consectetur dapibus vitae vitae mauris. Nulla vitae ullamcorper magna. In in fermentum est. In lacinia venenatis turpis, a rutrum metus laoreet a. Vivamus adipiscing vel enim eu scelerisque.
|
data/spec/dummy/log/test.log
CHANGED
@@ -20,18 +20,3 @@ Connecting to database specified by database.yml
|
|
20
20
|
Connecting to database specified by database.yml
|
21
21
|
Connecting to database specified by database.yml
|
22
22
|
Connecting to database specified by database.yml
|
23
|
-
Connecting to database specified by database.yml
|
24
|
-
Connecting to database specified by database.yml
|
25
|
-
Connecting to database specified by database.yml
|
26
|
-
Connecting to database specified by database.yml
|
27
|
-
Connecting to database specified by database.yml
|
28
|
-
Connecting to database specified by database.yml
|
29
|
-
Connecting to database specified by database.yml
|
30
|
-
Connecting to database specified by database.yml
|
31
|
-
Connecting to database specified by database.yml
|
32
|
-
Connecting to database specified by database.yml
|
33
|
-
Connecting to database specified by database.yml
|
34
|
-
Connecting to database specified by database.yml
|
35
|
-
Connecting to database specified by database.yml
|
36
|
-
Connecting to database specified by database.yml
|
37
|
-
Connecting to database specified by database.yml
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
ENV['RAILS_ENV'] ||= 'test'
|
2
2
|
|
3
|
-
require File.expand_path("../dummy/config/environment
|
3
|
+
require File.expand_path("../dummy/config/environment", __FILE__)
|
4
|
+
|
4
5
|
require 'rspec/rails'
|
6
|
+
require 'drift'
|
7
|
+
|
8
|
+
require_relative '../app/models/drift/blog_post'
|
5
9
|
|
6
|
-
|
10
|
+
RSpec.configure do |config|
|
11
|
+
config.color_enabled = true
|
12
|
+
config.formatter = 'documentation'
|
13
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: drift
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -43,6 +43,22 @@ dependencies:
|
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: 0.7.5
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: redcarpet
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 2.2.0
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.2.0
|
46
62
|
- !ruby/object:Gem::Dependency
|
47
63
|
name: rspec-rails
|
48
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -75,7 +91,7 @@ dependencies:
|
|
75
91
|
- - ! '>='
|
76
92
|
- !ruby/object:Gem::Version
|
77
93
|
version: '0'
|
78
|
-
description: Drift is a
|
94
|
+
description: Drift is a static blogging engine for Rails.
|
79
95
|
email:
|
80
96
|
- jim@roboticmethod.com}
|
81
97
|
executables: []
|
@@ -83,14 +99,12 @@ extensions: []
|
|
83
99
|
extra_rdoc_files: []
|
84
100
|
files:
|
85
101
|
- app/models/drift/blog_post.rb
|
86
|
-
-
|
87
|
-
-
|
102
|
+
- lib/drift/blog_post_base.rb
|
103
|
+
- lib/drift/static_model.rb
|
88
104
|
- lib/drift/version.rb
|
89
105
|
- lib/drift.rb
|
90
106
|
- lib/generators/drift/blog_post/blog_post_generator.rb
|
91
107
|
- lib/generators/drift/blog_post/templates/blog_post.erb
|
92
|
-
- lib/generators/drift/blog_post/USAGE
|
93
|
-
- lib/tasks/drift_tasks.rake
|
94
108
|
- MIT-LICENSE
|
95
109
|
- Rakefile
|
96
110
|
- README.md
|
@@ -116,6 +130,8 @@ files:
|
|
116
130
|
- spec/dummy/config/locales/en.yml
|
117
131
|
- spec/dummy/config/routes.rb
|
118
132
|
- spec/dummy/config.ru
|
133
|
+
- spec/dummy/db/static/blog_posts/2013-06-14_010101_demo-blog-post.md
|
134
|
+
- spec/dummy/db/static/blog_posts/2013-06-15_235801_test-blog-post.md
|
119
135
|
- spec/dummy/db/test.sqlite3
|
120
136
|
- spec/dummy/log/development.log
|
121
137
|
- spec/dummy/log/test.log
|
@@ -174,6 +190,8 @@ test_files:
|
|
174
190
|
- spec/dummy/config/locales/en.yml
|
175
191
|
- spec/dummy/config/routes.rb
|
176
192
|
- spec/dummy/config.ru
|
193
|
+
- spec/dummy/db/static/blog_posts/2013-06-14_010101_demo-blog-post.md
|
194
|
+
- spec/dummy/db/static/blog_posts/2013-06-15_235801_test-blog-post.md
|
177
195
|
- spec/dummy/db/test.sqlite3
|
178
196
|
- spec/dummy/log/development.log
|
179
197
|
- spec/dummy/log/test.log
|
data/lib/tasks/drift_tasks.rake
DELETED