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 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 simple static blogging engine for Rails.
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
+
@@ -1,4 +1,7 @@
1
1
  module Drift
2
2
  require "drift/version"
3
+ require "drift/static_model"
4
+ require "drift/blog_post_base"
5
+
3
6
  require "github/markup"
4
7
  end
@@ -4,17 +4,15 @@ module Drift
4
4
  attr_accessor :markup_ext
5
5
 
6
6
  def source
7
- @source || 'db/static/blog_posts'
7
+ @source ||= 'db/static/blog_posts'
8
8
  end
9
9
 
10
10
  def markup_ext
11
- @markup_ext || 'md'
11
+ @markup_ext ||= 'md'
12
12
  end
13
13
 
14
14
  def find_by_slug(slug)
15
- file = all_files.detect do |f|
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
@@ -1,3 +1,3 @@
1
1
  module Drift
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -3,12 +3,34 @@ require_relative '../spec_helper'
3
3
  module Drift
4
4
  describe BlogPost do
5
5
  before :each do
6
- @model = BlogPost.new
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 test" do
10
- true
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.
@@ -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
@@ -1,6 +1,13 @@
1
1
  ENV['RAILS_ENV'] ||= 'test'
2
2
 
3
- require File.expand_path("../dummy/config/environment.rb", __FILE__)
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
- require_relative '../lib/drift/blog_post'
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.2.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-14 00:00:00.000000000 Z
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 minimal blogging engine for Rails.
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
- - app/models/drift/blog_post_base.rb
87
- - app/models/drift/static_model.rb
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
@@ -1,8 +0,0 @@
1
- Description:
2
- Explain the generator
3
-
4
- Example:
5
- rails generate blog_post Thing
6
-
7
- This will create:
8
- what/will/it/create
@@ -1,4 +0,0 @@
1
- # desc "Explaining what the task does"
2
- # task :drift do
3
- # # Task goes here
4
- # end