meta 0.0.3 → 0.0.5
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.
- data/Gemfile.lock +1 -3
- data/README.md +2 -3
- data/Rakefile +11 -0
- data/db/migrate/005_add_layouts.rb +50 -0
- data/db/migrate/006_add_fkey.rb +26 -0
- data/db/site.sqlite3 +0 -0
- data/docs/backlog +6 -5
- data/docs/design +43 -0
- data/lib/meta.rb +15 -7
- data/lib/meta/catalog.rb +105 -16
- data/lib/meta/cli.rb +75 -53
- data/lib/meta/filelib.rb +4 -8
- data/lib/meta/page.rb +38 -15
- data/lib/meta/skeleton/footer.haml +3 -0
- data/lib/meta/skeleton/index.haml +9 -0
- data/lib/meta/skeleton/layout.haml +11 -0
- data/lib/meta/skeleton/navbar.haml +12 -0
- data/lib/meta/skeleton/page.haml +5 -0
- data/lib/meta/skeleton/sample.md +2 -0
- data/lib/meta/version.rb +1 -1
- data/meta.gemspec +0 -1
- metadata +10 -18
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
meta (0.0.
|
4
|
+
meta (0.0.4)
|
5
5
|
colorize (~> 0.6.0)
|
6
6
|
haml (~> 4.0.4)
|
7
7
|
highline (~> 1.6.20)
|
@@ -12,7 +12,6 @@ PATH
|
|
12
12
|
thin (~> 1.6.1)
|
13
13
|
thor (~> 0.18.1)
|
14
14
|
tilt (~> 2.0.0)
|
15
|
-
url2thumb
|
16
15
|
|
17
16
|
GEM
|
18
17
|
remote: https://rubygems.org/
|
@@ -34,7 +33,6 @@ GEM
|
|
34
33
|
rack (>= 1.0.0)
|
35
34
|
thor (0.18.1)
|
36
35
|
tilt (2.0.0)
|
37
|
-
url2thumb (0.0.1)
|
38
36
|
|
39
37
|
PLATFORMS
|
40
38
|
ruby
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# meta
|
1
|
+
# meta
|
2
2
|
|
3
3
|
## introduction
|
4
4
|
meta is an opinionated static site generator used to compile haml templates
|
@@ -9,7 +9,7 @@ having to deploy into production.
|
|
9
9
|
|
10
10
|
## requirements
|
11
11
|
* linux (tested on ubuntu 12.04.x lts)
|
12
|
-
* ruby (1.9.
|
12
|
+
* ruby (1.9.3+)
|
13
13
|
* bundler
|
14
14
|
* colorize
|
15
15
|
* haml
|
@@ -22,7 +22,6 @@ having to deploy into production.
|
|
22
22
|
* thor
|
23
23
|
* tilt
|
24
24
|
* url2thumb
|
25
|
-
* yaml
|
26
25
|
|
27
26
|
## installation
|
28
27
|
```gem install meta```
|
data/Rakefile
CHANGED
@@ -26,6 +26,17 @@ namespace :db do
|
|
26
26
|
|
27
27
|
end
|
28
28
|
|
29
|
+
desc "seed database"
|
30
|
+
task :seed do
|
31
|
+
|
32
|
+
Sequel::Fixture.path = File.join( File.dirname(__FILE__), "db/fixtures" )
|
33
|
+
conn = Sequel.sqlite(DB)
|
34
|
+
fixture = Sequel::Fixture.new :initial, conn
|
35
|
+
|
36
|
+
fixture.push
|
37
|
+
|
38
|
+
end
|
39
|
+
|
29
40
|
end
|
30
41
|
|
31
42
|
desc "help"
|
@@ -0,0 +1,50 @@
|
|
1
|
+
Sequel.migration do
|
2
|
+
|
3
|
+
up do
|
4
|
+
|
5
|
+
create_table(:layouts) do
|
6
|
+
primary_key :id
|
7
|
+
String :path, :null => false
|
8
|
+
String :hash, :unique => true
|
9
|
+
Time :created_at, :default => Time.now
|
10
|
+
Time :updated_at, :default => Time.now
|
11
|
+
end
|
12
|
+
|
13
|
+
create_table(:navbars) do
|
14
|
+
primary_key :id
|
15
|
+
String :path, :null => false
|
16
|
+
String :hash, :unique => true
|
17
|
+
Time :created_at, :default => Time.now
|
18
|
+
Time :updated_at, :default => Time.now
|
19
|
+
end
|
20
|
+
|
21
|
+
create_table(:pages) do
|
22
|
+
primary_key :id
|
23
|
+
String :path, :null => false
|
24
|
+
String :hash, :unique => true
|
25
|
+
Time :created_at, :default => Time.now
|
26
|
+
Time :updated_at, :default => Time.now
|
27
|
+
end
|
28
|
+
|
29
|
+
create_table(:footers) do
|
30
|
+
primary_key :id
|
31
|
+
String :path, :null => false
|
32
|
+
String :hash, :unique => true
|
33
|
+
Time :created_at, :default => Time.now
|
34
|
+
Time :updated_at, :default => Time.now
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
down do
|
41
|
+
|
42
|
+
drop_table(:layouts)
|
43
|
+
drop_table(:navbars)
|
44
|
+
drop_table(:pages)
|
45
|
+
drop_table(:footers)
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
Sequel.migration do
|
2
|
+
|
3
|
+
up do
|
4
|
+
|
5
|
+
alter_table(:contents) do
|
6
|
+
add_foreign_key :layout_id, :layouts
|
7
|
+
add_foreign_key :navbar_id, :navbars
|
8
|
+
add_foreign_key :page_id, :pages
|
9
|
+
add_foreign_key :footer_id, :footers
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
down do
|
15
|
+
|
16
|
+
alter_table(:contents) do
|
17
|
+
drop_foreign_key :layout_id
|
18
|
+
drop_foreign_key :navbar_id
|
19
|
+
drop_foreign_key :page_id
|
20
|
+
drop_foreign_key :footer_id
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
data/db/site.sqlite3
CHANGED
Binary file
|
data/docs/backlog
CHANGED
@@ -1,21 +1,22 @@
|
|
1
1
|
open:
|
2
2
|
+ custom templates
|
3
|
-
+ referencing a link and commenting on that
|
4
3
|
+ post tags
|
5
4
|
+ rss/atom feed
|
6
5
|
+ config file based configuration
|
7
|
-
+
|
8
|
-
+
|
6
|
+
+ migrate schema and data
|
7
|
+
+ remove from catalog if the file no longer exists
|
8
|
+
+ stats for single page counting incorrectly
|
9
9
|
|
10
10
|
iced:
|
11
11
|
+ syntax highlighting for code
|
12
|
+
+ pull content from other sinks like facebook, flickr, twitter, wechat, etc
|
12
13
|
+ support uppercase file extensions
|
13
|
-
+ migrate schema without losing any data
|
14
14
|
+ detect and compile changes only
|
15
15
|
+ tie static files with source repository
|
16
16
|
+ clone template files
|
17
17
|
+ crop articles
|
18
18
|
+ .haml files all expected to be in current directory along with .md files
|
19
|
+
+ links
|
19
20
|
|
20
21
|
closed:
|
21
22
|
+ create index of articles
|
@@ -30,4 +31,4 @@ closed:
|
|
30
31
|
+ google analytics
|
31
32
|
+ title modification
|
32
33
|
+ statistics
|
33
|
-
|
34
|
+
+ referencing a link and commenting on that
|
data/docs/design
CHANGED
@@ -103,3 +103,46 @@ markdown compendium:
|
|
103
103
|
|
104
104
|
[](web link)
|
105
105
|
|
106
|
+
|
107
|
+
the url capture feature is too complicated, first it requires native
|
108
|
+
dependencies libqt4, xorg or xvfb, and another project that i created
|
109
|
+
called url2thumb. second, it overly complicates the simplicity that
|
110
|
+
meta started with, the ability to customize via the rich template
|
111
|
+
languages. i also thought a use case would be to show all links as
|
112
|
+
a thumbnail, but that's just going to cause more photos to be stored
|
113
|
+
on the server. so to keep things as lightweight as possible, i think
|
114
|
+
a better feature would be to pull things from external sources like
|
115
|
+
flickr, picassa, or even facebook if you have access. i'd like to
|
116
|
+
create a plugin architecture to allow for these different plugins.
|
117
|
+
|
118
|
+
a new column was added in the most recent database
|
119
|
+
|
120
|
+
database migration
|
121
|
+
|
122
|
+
the migrations in sequel basically allow you to change schema, but i'd like
|
123
|
+
to also update or clean data in the table.
|
124
|
+
|
125
|
+
potential scenarios:
|
126
|
+
|
127
|
+
1. Contains an old database with old schema
|
128
|
+
|
129
|
+
2. Contains a new database with the latest schema
|
130
|
+
|
131
|
+
==============
|
132
|
+
|
133
|
+
each page should have the following:
|
134
|
+
|
135
|
+
1. layout
|
136
|
+
2. page
|
137
|
+
3. navbar*
|
138
|
+
4. footer*
|
139
|
+
|
140
|
+
* - optional
|
141
|
+
|
142
|
+
throwing out older versions of meta, they're not ready, plus the migration
|
143
|
+
of the database is causing lots of issues.
|
144
|
+
|
145
|
+
also, i'd like to focus more on a web gui to frontend the database instead of
|
146
|
+
using the command line which will help to make sites more manageable over time,
|
147
|
+
especially large sites.
|
148
|
+
|
data/lib/meta.rb
CHANGED
@@ -18,29 +18,37 @@ require File.join( File.dirname(__FILE__), "meta", "filelib" )
|
|
18
18
|
require File.join( File.dirname(__FILE__), "meta", "page" )
|
19
19
|
require File.join( File.dirname(__FILE__), "meta", "version" )
|
20
20
|
|
21
|
-
# macro-like used to keep haml compatibility
|
22
|
-
def haml(file)
|
23
|
-
return Tilt.new("#{file}.haml").render
|
24
|
-
end
|
25
|
-
|
26
21
|
module Meta
|
27
22
|
|
28
23
|
BASEDIR = ".".freeze
|
29
|
-
CONFIGFILE = "~/.meta"
|
24
|
+
CONFIGFILE = File.expand_path("~/.meta")
|
30
25
|
DATASTORE = File.join( Dir.pwd, "site.sqlite3" )
|
31
26
|
EXCLUDES = [ "layout.haml", "navbar.haml", "footer.haml" ]
|
32
27
|
FEXISTS = "File already exists".freeze
|
28
|
+
FOOTER = "footers/footer.haml".freeze
|
29
|
+
FOOTERS = "footers/*.haml".freeze
|
33
30
|
HAML = ["*.haml"]
|
34
31
|
HAMLEXT = ".haml".freeze
|
35
32
|
HTML = ["*.html"]
|
36
33
|
HTMLEXT = ".html".freeze
|
37
|
-
INDEX = "index.
|
34
|
+
INDEX = "pages/index.haml".freeze
|
35
|
+
LAYOUT = "layouts/layout.haml".freeze
|
36
|
+
LAYOUTS = "layouts/*.haml".freeze
|
38
37
|
MARKDOWN = ["*.md", "*.markdown", "*.mkd"]
|
39
38
|
MDEXT = ".md".freeze
|
39
|
+
NAVBAR = "navbar/navbar.haml".freeze
|
40
|
+
NAVBARS = "navbars/*.haml".freeze
|
41
|
+
PAGE = "pages/page.haml".freeze
|
42
|
+
PAGES = "pages/*.haml".freeze
|
40
43
|
PNGEXT = ".png".freeze
|
44
|
+
REQUIRED = [ "index.haml", "layout.haml", "page.haml" ]
|
45
|
+
SAMPLE = "sample.md".freeze
|
41
46
|
SEED = 1234562
|
47
|
+
SKELETONDIRS = [ "footers", "layouts", "navbars", "pages" ]
|
42
48
|
SLASH = "/".freeze
|
43
49
|
SPACE = " ".freeze
|
44
50
|
|
51
|
+
Sequel.extension :migration
|
52
|
+
|
45
53
|
end
|
46
54
|
|
data/lib/meta/catalog.rb
CHANGED
@@ -2,12 +2,21 @@ module Meta
|
|
2
2
|
|
3
3
|
class Catalog
|
4
4
|
|
5
|
-
attr_accessor :db
|
5
|
+
attr_accessor :db, :resources
|
6
6
|
|
7
7
|
def initialize
|
8
8
|
|
9
9
|
self.db = Sequel.sqlite(Meta::DATASTORE)
|
10
|
-
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.upgrade
|
14
|
+
|
15
|
+
db = Sequel.sqlite(Meta::DATASTORE)
|
16
|
+
|
17
|
+
Sequel::Migrator.run( db, File.join( File.dirname(__FILE__),
|
18
|
+
"../../db/migrate" ) )
|
19
|
+
|
11
20
|
end
|
12
21
|
|
13
22
|
def get_statistics
|
@@ -51,6 +60,7 @@ module Meta
|
|
51
60
|
end
|
52
61
|
|
53
62
|
rs.each do |r|
|
63
|
+
|
54
64
|
content = Tilt.new(r[:path]).render
|
55
65
|
|
56
66
|
content = "abc" if content.empty?
|
@@ -59,42 +69,113 @@ module Meta
|
|
59
69
|
r[:link] = File.basename( r[:path], File.extname(r[:path]) ) +
|
60
70
|
HTMLEXT
|
61
71
|
r[:picture] = false
|
72
|
+
|
62
73
|
end
|
63
74
|
|
64
75
|
return rs
|
65
76
|
|
66
77
|
end
|
67
78
|
|
68
|
-
def
|
79
|
+
def get_template( template, id )
|
80
|
+
|
81
|
+
rs = self.db[template.to_sym].where(:id => id).first
|
82
|
+
|
83
|
+
if rs.nil?
|
84
|
+
return nil
|
85
|
+
else
|
86
|
+
return rs[:path]
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
def get_resource(template)
|
92
|
+
|
93
|
+
dir = File.dirname(template)
|
94
|
+
|
95
|
+
r = self.db[:resources].where(:folder => dir).first()
|
96
|
+
|
97
|
+
if r.nil?
|
98
|
+
return nil
|
99
|
+
else
|
100
|
+
return r[:id]
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
69
104
|
|
70
|
-
|
105
|
+
def select_template(template)
|
106
|
+
|
107
|
+
rs = self.db[template.to_sym].all
|
108
|
+
|
109
|
+
return rs[0][:id] if rs.count == 1
|
110
|
+
return nil if rs.empty?
|
111
|
+
|
112
|
+
choose do |menu|
|
113
|
+
|
114
|
+
menu.prompt = "Choose #{template}: "
|
115
|
+
rs.each do |r|
|
116
|
+
menu.choice File.basename(r[:path]) do return r[:id] end
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
def sync_content(content)
|
124
|
+
|
125
|
+
hash = Digest::MD5.hexdigest(File.read(content))
|
71
126
|
|
72
127
|
if content_exists?(content)
|
73
128
|
revise_content( content, hash )
|
74
129
|
else
|
75
|
-
|
76
|
-
add_content( content, title, hash )
|
130
|
+
add_content( content, hash )
|
77
131
|
end
|
78
132
|
|
79
|
-
|
133
|
+
rs = self.db[:contents].where(:hash => hash).first
|
134
|
+
|
135
|
+
return rs
|
80
136
|
|
81
137
|
end
|
82
138
|
|
83
|
-
def add_content( file,
|
139
|
+
def add_content( file, hash )
|
140
|
+
|
141
|
+
title = ask "Please add a Title for #{file}? "
|
142
|
+
|
143
|
+
layout = select_template("layouts")
|
144
|
+
navbar = select_template("navbars")
|
145
|
+
# leave pages out for now, just default to page.haml
|
146
|
+
#page = select_template("pages")
|
147
|
+
footer = select_template("footers")
|
84
148
|
|
85
149
|
self.db[:contents].insert(
|
86
150
|
:title => title,
|
87
151
|
:hash => hash,
|
88
152
|
:path => file,
|
153
|
+
:layout_id => layout,
|
154
|
+
:navbar_id => navbar,
|
155
|
+
:page_id => 1,
|
156
|
+
:footer_id => footer,
|
89
157
|
:created_at => Time.now )
|
90
158
|
|
91
159
|
end
|
92
160
|
|
93
161
|
def revise_content( file, hash )
|
162
|
+
|
163
|
+
content = self.db[:contents].where(:path => file).first
|
164
|
+
|
165
|
+
puts "Changes detected for #{file}".yellow if hash != content[:hash]
|
166
|
+
|
167
|
+
if content[:layout_id].nil?
|
168
|
+
# for legacy schema purposes
|
169
|
+
puts "Select layout for #{file}:"
|
170
|
+
lid = select_template("layouts")
|
171
|
+
else
|
172
|
+
lid = content[:layout_id]
|
173
|
+
end
|
94
174
|
|
95
|
-
#puts self.db[:contents].where(:path => file).select(:title).first()[:title]
|
96
175
|
self.db[:contents].where(:path => file).update(
|
97
176
|
:hash => hash,
|
177
|
+
:layout_id => lid,
|
178
|
+
:page_id => 1,
|
98
179
|
#:title => title,
|
99
180
|
:updated_at => Time.now )
|
100
181
|
|
@@ -107,12 +188,12 @@ module Meta
|
|
107
188
|
|
108
189
|
end
|
109
190
|
|
110
|
-
def
|
191
|
+
def sync_templates(templates)
|
111
192
|
|
112
193
|
templates.each do |t|
|
113
194
|
|
114
195
|
hash = Digest::MD5.hexdigest(t)
|
115
|
-
|
196
|
+
|
116
197
|
if template_exists?(t)
|
117
198
|
|
118
199
|
revise_template( t, hash )
|
@@ -129,7 +210,9 @@ module Meta
|
|
129
210
|
|
130
211
|
def add_template( file, hash )
|
131
212
|
|
132
|
-
|
213
|
+
dir = File.dirname(file)
|
214
|
+
|
215
|
+
self.db[dir.to_sym].insert(
|
133
216
|
:path => file,
|
134
217
|
:hash => hash )
|
135
218
|
|
@@ -137,11 +220,13 @@ module Meta
|
|
137
220
|
|
138
221
|
def revise_template( file, hash )
|
139
222
|
|
140
|
-
|
223
|
+
dir = File.dirname(file)
|
224
|
+
|
225
|
+
rs = self.db[dir.to_sym].where( :hash => hash, :path => file ).first
|
141
226
|
|
142
227
|
if rs.empty?
|
143
228
|
|
144
|
-
self.db[
|
229
|
+
self.db[dir.to_sym].insert(
|
145
230
|
:path => file,
|
146
231
|
:hash => hash )
|
147
232
|
|
@@ -151,7 +236,9 @@ module Meta
|
|
151
236
|
|
152
237
|
def template_exists?(file)
|
153
238
|
|
154
|
-
|
239
|
+
dir = File.dirname(file)
|
240
|
+
|
241
|
+
rs = self.db[dir.to_sym].where(:path => file).all
|
155
242
|
|
156
243
|
if rs.empty?
|
157
244
|
return false
|
@@ -163,7 +250,9 @@ module Meta
|
|
163
250
|
|
164
251
|
def template_revised?( path, hash )
|
165
252
|
|
166
|
-
|
253
|
+
dir = File.dirname(path)
|
254
|
+
|
255
|
+
rs = self.db[dir.to_sym].where( :hash => hash, :path => path )
|
167
256
|
|
168
257
|
if rs.nil?
|
169
258
|
return true
|
data/lib/meta/cli.rb
CHANGED
@@ -3,8 +3,6 @@ module Meta
|
|
3
3
|
class CLI < Thor
|
4
4
|
include Thor::Actions
|
5
5
|
|
6
|
-
config = YAML.load_file(CONFIGFILE) if File.exists?(CONFIGFILE)
|
7
|
-
|
8
6
|
desc "compile", "compile meta files"
|
9
7
|
method_option :output, :aliases => "-o", :type => :string,
|
10
8
|
:required => false, :desc => "static file output directory"
|
@@ -14,6 +12,8 @@ module Meta
|
|
14
12
|
:required => false, :desc => "don't prompt to overwrite files"
|
15
13
|
def compile
|
16
14
|
|
15
|
+
Meta::Catalog.upgrade
|
16
|
+
|
17
17
|
if options[:output].nil?
|
18
18
|
dest = "."
|
19
19
|
else
|
@@ -30,27 +30,8 @@ module Meta
|
|
30
30
|
desc "init", "initialize static meta project"
|
31
31
|
def init
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
if File.exists?("site.sqlite3")
|
36
|
-
|
37
|
-
puts "Warning: All index data will be lost!".red
|
38
|
-
reply = agree("Database already exists, overwrite?".red) {
|
39
|
-
|q| q.default = "n" }
|
40
|
-
|
41
|
-
if reply
|
42
|
-
FileUtils.cp( f, Dir.pwd )
|
43
|
-
puts "Database re-initialized".green
|
44
|
-
else
|
45
|
-
puts "Database not initialized".red
|
46
|
-
end
|
47
|
-
|
48
|
-
else
|
49
|
-
|
50
|
-
FileUtils.cp( f, Dir.pwd )
|
51
|
-
puts "Database initialized".green
|
52
|
-
|
53
|
-
end
|
33
|
+
db_init
|
34
|
+
create_skeleton
|
54
35
|
|
55
36
|
end
|
56
37
|
|
@@ -98,52 +79,93 @@ module Meta
|
|
98
79
|
|
99
80
|
end
|
100
81
|
|
101
|
-
|
102
|
-
method_option :output, :aliases => "-o", :type => :string,
|
103
|
-
:required => false, :desc => "output directory"
|
104
|
-
def capture(url)
|
82
|
+
default_task :compile
|
105
83
|
|
106
|
-
|
107
|
-
dest = BASEDIR
|
108
|
-
else
|
109
|
-
dest = options[:output]
|
110
|
-
end
|
84
|
+
no_tasks do
|
111
85
|
|
112
|
-
|
86
|
+
def read_config
|
113
87
|
|
114
|
-
|
88
|
+
return YAML.load_file(CONFIGFILE) if File.exists?(CONFIGFILE)
|
115
89
|
|
116
|
-
|
90
|
+
end
|
91
|
+
|
92
|
+
def db_init
|
117
93
|
|
118
|
-
|
94
|
+
f = File.join( File.dirname(__FILE__), "../../db/site.sqlite3" )
|
119
95
|
|
120
|
-
|
96
|
+
if File.exists?("site.sqlite3")
|
121
97
|
|
122
|
-
|
98
|
+
puts "Warning: All index data will be lost!".red
|
99
|
+
reply = agree("Database already exists, overwrite?".red) {
|
100
|
+
|q| q.default = "n" }
|
123
101
|
|
124
|
-
|
102
|
+
if reply
|
103
|
+
FileUtils.cp( f, Dir.pwd )
|
104
|
+
puts "Database re-initialized".green
|
105
|
+
else
|
106
|
+
puts "Database not initialized".red
|
107
|
+
end
|
125
108
|
|
126
|
-
|
109
|
+
else
|
127
110
|
|
128
|
-
|
111
|
+
FileUtils.cp( f, Dir.pwd )
|
112
|
+
puts "Database initialized".green
|
129
113
|
|
130
|
-
|
114
|
+
end
|
131
115
|
|
132
116
|
end
|
133
|
-
|
134
|
-
end
|
135
117
|
|
136
|
-
|
137
|
-
def test
|
118
|
+
def create_skeleton
|
138
119
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
puts stats[:pictures]
|
143
|
-
|
144
|
-
end
|
120
|
+
SKELETONDIRS.each do |d|
|
121
|
+
Meta::Filelib.create_directory(d)
|
122
|
+
end
|
145
123
|
|
146
|
-
|
124
|
+
if File.exists?(LAYOUT)
|
125
|
+
puts "#{LAYOUT} already exists, file skipped".yellow
|
126
|
+
else
|
127
|
+
FileUtils.cp( File.join( File.dirname(__FILE__),
|
128
|
+
"skeleton/layout.haml" ), "layouts" )
|
129
|
+
end
|
130
|
+
|
131
|
+
if File.exists?(NAVBAR)
|
132
|
+
puts "#{NAVBAR} already exists, file skipped".yellow
|
133
|
+
else
|
134
|
+
FileUtils.cp( File.join( File.dirname(__FILE__),
|
135
|
+
"skeleton/navbar.haml" ), "navbars" )
|
136
|
+
end
|
137
|
+
|
138
|
+
if File.exists?(FOOTER)
|
139
|
+
puts "#{FOOTER} already exists, file skipped".yellow
|
140
|
+
else
|
141
|
+
FileUtils.cp( File.join( File.dirname(__FILE__),
|
142
|
+
"skeleton/footer.haml" ), "footers" )
|
143
|
+
end
|
144
|
+
|
145
|
+
if File.exists?(INDEX)
|
146
|
+
puts "#{INDEX} already exists, file skipped".yellow
|
147
|
+
else
|
148
|
+
FileUtils.cp( File.join( File.dirname(__FILE__),
|
149
|
+
"skeleton/index.haml" ), "pages" )
|
150
|
+
end
|
151
|
+
|
152
|
+
if File.exists?(PAGE)
|
153
|
+
puts "#{PAGE} already exists, file skipped".yellow
|
154
|
+
else
|
155
|
+
FileUtils.cp( File.join( File.dirname(__FILE__),
|
156
|
+
"skeleton/page.haml" ), "pages" )
|
157
|
+
end
|
158
|
+
|
159
|
+
if File.exists?(SAMPLE)
|
160
|
+
puts "#{SAMPLE} already exists, file skipped".yellow
|
161
|
+
else
|
162
|
+
FileUtils.cp( File.join( File.dirname(__FILE__),
|
163
|
+
"skeleton/sample.md" ), BASEDIR )
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
147
169
|
|
148
170
|
end
|
149
171
|
|
data/lib/meta/filelib.rb
CHANGED
@@ -7,7 +7,7 @@ module Meta
|
|
7
7
|
unless name.nil?
|
8
8
|
|
9
9
|
if File.directory?(name)
|
10
|
-
puts "directory already exists"
|
10
|
+
puts "directory already exists".yellow
|
11
11
|
else
|
12
12
|
FileUtils.mkdir_p(name)
|
13
13
|
puts "directory #{name} created".green
|
@@ -50,16 +50,12 @@ module Meta
|
|
50
50
|
|
51
51
|
end
|
52
52
|
|
53
|
-
def self.get_templates()
|
54
|
-
|
55
|
-
return Dir.glob( Meta::HAML, File::FNM_CASEFOLD )
|
56
|
-
|
53
|
+
def self.get_templates(pattern)
|
54
|
+
return Dir.glob( pattern, File::FNM_CASEFOLD )
|
57
55
|
end
|
58
56
|
|
59
|
-
def self.get_contents
|
60
|
-
|
57
|
+
def self.get_contents
|
61
58
|
return Dir.glob( Meta::MARKDOWN, File::FNM_CASEFOLD )
|
62
|
-
|
63
59
|
end
|
64
60
|
|
65
61
|
end
|
data/lib/meta/page.rb
CHANGED
@@ -10,29 +10,46 @@ module Meta
|
|
10
10
|
|
11
11
|
@catalog = Meta::Catalog.new
|
12
12
|
|
13
|
-
@
|
13
|
+
@layouts = Meta::Filelib.get_templates(LAYOUTS)
|
14
|
+
@navbars = Meta::Filelib.get_templates(NAVBARS)
|
15
|
+
@pages = Meta::Filelib.get_templates(PAGES)
|
16
|
+
@footers = Meta::Filelib.get_templates(FOOTERS)
|
14
17
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
18
|
+
unless @layouts.include?(LAYOUT)
|
19
|
+
abort("layout.haml not found, #{LAYOUT}, #{INDEX}, and #{PAGE} must exist".red)
|
20
|
+
end
|
21
|
+
|
22
|
+
unless @pages.include?(INDEX)
|
23
|
+
abort("index.haml not found, #{LAYOUT}, #{INDEX}, and #{PAGE} must exist".red)
|
24
|
+
end
|
19
25
|
|
20
|
-
|
21
|
-
abort("
|
26
|
+
unless @pages.include?(PAGE)
|
27
|
+
abort("page.haml not found, #{LAYOUT}, #{INDEX}, #{PAGE} must exist".red)
|
22
28
|
end
|
23
|
-
|
29
|
+
|
30
|
+
templates = @layouts | @pages
|
31
|
+
templates |= @navbars unless @navbars.nil?
|
32
|
+
templates |= @footers unless @footers.nil?
|
33
|
+
|
34
|
+
@catalog.sync_templates(templates)
|
35
|
+
|
36
|
+
@index = Tilt.new(INDEX)
|
37
|
+
@page = Tilt.new(PAGE)
|
38
|
+
@layout = Tilt.new(LAYOUT)
|
24
39
|
|
25
40
|
end
|
26
41
|
|
27
42
|
def generate_index(overwrite=false)
|
28
43
|
|
29
|
-
contents
|
44
|
+
contents = @catalog.get_recent(-1)
|
45
|
+
|
46
|
+
stats = @catalog.get_statistics
|
30
47
|
|
31
|
-
|
48
|
+
doc = @index.render( self, :contents => contents )
|
32
49
|
|
33
|
-
|
50
|
+
html = @layout.render( self, :stats => stats ) { doc }
|
34
51
|
|
35
|
-
|
52
|
+
puts "If any content has been modified, index.html should be updated.".yellow
|
36
53
|
|
37
54
|
Meta::Filelib.create_file( html, INDEX, HTMLEXT, @dest, overwrite )
|
38
55
|
|
@@ -53,15 +70,21 @@ module Meta
|
|
53
70
|
|
54
71
|
end
|
55
72
|
|
56
|
-
content = @catalog.
|
73
|
+
content = @catalog.sync_content(c)
|
57
74
|
|
58
75
|
content[:summary] = Tilt.new(c).render
|
59
76
|
content[:link] = File.basename( content[:path],
|
60
77
|
File.extname(content[:path]) ) + HTMLEXT
|
61
78
|
|
62
|
-
|
79
|
+
layout = @catalog.get_template( "layouts", content[:layout_id] )
|
80
|
+
page = @catalog.get_template( "pages", content[:page_id] )
|
81
|
+
|
82
|
+
@mylayout = Tilt.new(layout)
|
83
|
+
@mypage = Tilt.new(page)
|
84
|
+
|
85
|
+
p = @mypage.render( self, :content => content )
|
63
86
|
|
64
|
-
html
|
87
|
+
html = @mylayout.render( self, :stats => stats ) { p }
|
65
88
|
|
66
89
|
Meta::Filelib.create_file( html, c, HTMLEXT, @dest, overwrite )
|
67
90
|
|
@@ -0,0 +1,11 @@
|
|
1
|
+
!!!
|
2
|
+
%html{:lang => "en"}
|
3
|
+
%head
|
4
|
+
%title Sample: Meta Generated Site
|
5
|
+
%link{:rel => "stylesheet", :href => "//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css"}
|
6
|
+
%link{:rel => "stylesheet", :href => "css/stylesheet.css"}
|
7
|
+
|
8
|
+
%body
|
9
|
+
|
10
|
+
= yield
|
11
|
+
|
data/lib/meta/version.rb
CHANGED
data/meta.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: meta
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
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: 2014-
|
12
|
+
date: 2014-02-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: colorize
|
@@ -203,22 +203,6 @@ dependencies:
|
|
203
203
|
- - ! '>='
|
204
204
|
- !ruby/object:Gem::Version
|
205
205
|
version: '0'
|
206
|
-
- !ruby/object:Gem::Dependency
|
207
|
-
name: url2thumb
|
208
|
-
requirement: !ruby/object:Gem::Requirement
|
209
|
-
none: false
|
210
|
-
requirements:
|
211
|
-
- - ! '>='
|
212
|
-
- !ruby/object:Gem::Version
|
213
|
-
version: '0'
|
214
|
-
type: :runtime
|
215
|
-
prerelease: false
|
216
|
-
version_requirements: !ruby/object:Gem::Requirement
|
217
|
-
none: false
|
218
|
-
requirements:
|
219
|
-
- - ! '>='
|
220
|
-
- !ruby/object:Gem::Version
|
221
|
-
version: '0'
|
222
206
|
description: opinionated static web page generator
|
223
207
|
email:
|
224
208
|
- epynonymous@outlook.com
|
@@ -239,6 +223,8 @@ files:
|
|
239
223
|
- db/migrate/002_picture.rb
|
240
224
|
- db/migrate/003_remove_templates.rb
|
241
225
|
- db/migrate/004_remove_fk.rb
|
226
|
+
- db/migrate/005_add_layouts.rb
|
227
|
+
- db/migrate/006_add_fkey.rb
|
242
228
|
- db/site.sqlite3
|
243
229
|
- docs/backlog
|
244
230
|
- docs/design
|
@@ -247,6 +233,12 @@ files:
|
|
247
233
|
- lib/meta/cli.rb
|
248
234
|
- lib/meta/filelib.rb
|
249
235
|
- lib/meta/page.rb
|
236
|
+
- lib/meta/skeleton/footer.haml
|
237
|
+
- lib/meta/skeleton/index.haml
|
238
|
+
- lib/meta/skeleton/layout.haml
|
239
|
+
- lib/meta/skeleton/navbar.haml
|
240
|
+
- lib/meta/skeleton/page.haml
|
241
|
+
- lib/meta/skeleton/sample.md
|
250
242
|
- lib/meta/version.rb
|
251
243
|
- meta.gemspec
|
252
244
|
homepage: http://github.io/stephenhu/meta
|