gumdrop 0.4.0 → 0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -2
- data/ChangeLog.md +17 -0
- data/Notes.md +8 -1
- data/lib/gumdrop.rb +82 -45
- data/lib/gumdrop/build.rb +10 -0
- data/lib/gumdrop/cli.rb +119 -33
- data/lib/gumdrop/context.rb +6 -1
- data/lib/gumdrop/deferred_loader.rb +54 -15
- data/lib/gumdrop/dsl.rb +8 -2
- data/lib/gumdrop/generator.rb +41 -2
- data/lib/gumdrop/version.rb +1 -1
- data/{lib/gumdrop/template/default → templates/backbone}/Gemfile +6 -4
- data/templates/backbone/Gumdrop +119 -0
- data/{lib/gumdrop/template → templates}/backbone/Rakefile +0 -0
- data/{lib/gumdrop/template → templates}/backbone/app/app.js.coffee +0 -0
- data/{lib/gumdrop/template → templates}/backbone/app/init.js.coffee +0 -0
- data/{lib/gumdrop/template → templates}/backbone/app/models/.gitkeep +0 -0
- data/{lib/gumdrop/template → templates}/backbone/app/utils/index.js.coffee +0 -0
- data/{lib/gumdrop/template → templates}/backbone/app/views/home.js.coffee +0 -0
- data/{lib/gumdrop/template → templates}/backbone/app/views/styles/home.scss +0 -0
- data/{lib/gumdrop/template → templates}/backbone/app/views/templates/home.mustache +0 -0
- data/{lib/gumdrop/template → templates}/backbone/config.ru +0 -0
- data/{lib/gumdrop/template/backbone/lib/javascript → templates/backbone/lib}/all.js.coffee +0 -0
- data/{lib/gumdrop/template/backbone/lib/javascript → templates/backbone/lib}/backbone.js +0 -0
- data/{lib/gumdrop/template/backbone/lib/javascript → templates/backbone/lib}/hogan.js +0 -0
- data/{lib/gumdrop/template/backbone/lib/javascript → templates/backbone/lib}/jquery.js +0 -0
- data/{lib/gumdrop/template/backbone/lib/javascript → templates/backbone/lib}/underscore.js +0 -0
- data/{lib/gumdrop/template → templates}/backbone/powrc +0 -0
- data/{lib/gumdrop/template/backbone/source/default.htaccess → templates/backbone/source/default.htaccess.erb} +4 -0
- data/{examples/simple → templates/backbone}/source/favicon.ico +0 -0
- data/{lib/gumdrop/template → templates}/backbone/source/feed.xml.builder.txt +8 -8
- data/{lib/gumdrop/template → templates}/backbone/source/index.html.erb +0 -0
- data/{lib/gumdrop/template → templates}/backbone/source/theme/screen.css.sass +0 -0
- data/{lib/gumdrop/template → templates}/backbone/source/theme/scripts/app.js.coffee +0 -0
- data/{examples/simple → templates/backbone}/source/theme/styles/_tools.scss +0 -0
- data/{lib/gumdrop/template → templates}/backbone/source/theme/templates/app.template.slim +1 -1
- data/{lib/gumdrop/template → templates}/backbone/source/theme/templates/site.template.slim +3 -3
- data/{lib/gumdrop/template/backbone → templates/default}/Gemfile +6 -4
- data/templates/default/Gumdrop +109 -0
- data/{lib/gumdrop/template → templates}/default/Rakefile +0 -0
- data/{lib/gumdrop/template → templates}/default/config.ru +0 -0
- data/{lib/gumdrop/template → templates}/default/powrc +0 -0
- data/{lib/gumdrop/template/default/source/default.htaccess → templates/default/source/default.htaccess.erb} +11 -1
- data/{lib/gumdrop/template/backbone → templates/default}/source/favicon.ico +0 -0
- data/{lib/gumdrop/template → templates}/default/source/feed.xml.builder.txt +8 -8
- data/templates/default/source/index.html.erb +1 -0
- data/{lib/gumdrop/template → templates}/default/source/theme/screen.css.sass +0 -0
- data/{lib/gumdrop/template → templates}/default/source/theme/scripts/app.js.coffee +0 -0
- data/{lib/gumdrop/template/backbone → templates/default}/source/theme/styles/_tools.scss +0 -0
- data/{lib/gumdrop/template → templates}/default/source/theme/templates/site.template.slim +3 -3
- metadata +56 -83
- data/examples/simple/Gemfile +0 -22
- data/examples/simple/Rakefile +0 -42
- data/examples/simple/config.ru +0 -15
- data/examples/simple/data/config.yml +0 -10
- data/examples/simple/data/posts.yamldb +0 -28
- data/examples/simple/lib/site.rb +0 -24
- data/examples/simple/lib/view_helpers.rb +0 -17
- data/examples/simple/source/.htaccess +0 -16
- data/examples/simple/source/_pager_control.html.erb +0 -14
- data/examples/simple/source/_sidebar.html.haml +0 -2
- data/examples/simple/source/feed.xml.builder +0 -23
- data/examples/simple/source/index.html.erb +0 -4
- data/examples/simple/source/posts.generator.rb +0 -11
- data/examples/simple/source/posts/index.html.erb +0 -6
- data/examples/simple/source/theme/screen.css.scss +0 -10
- data/examples/simple/source/theme/scripts/app.js.coffee +0 -0
- data/examples/simple/source/theme/templates/post.template.haml +0 -3
- data/examples/simple/source/theme/templates/post_page.template.haml +0 -6
- data/examples/simple/source/theme/templates/site.template.haml +0 -33
- data/examples/simple/source/theme/templates/test.template.erb +0 -1
- data/lib/gumdrop/template/backbone/data/config.yml +0 -4
- data/lib/gumdrop/template/backbone/lib/site.rb +0 -62
- data/lib/gumdrop/template/backbone/lib/stitch_compilers.rb +0 -1
- data/lib/gumdrop/template/backbone/lib/view_helpers.rb +0 -17
- data/lib/gumdrop/template/default/data/config.yml +0 -4
- data/lib/gumdrop/template/default/lib/site.rb +0 -50
- data/lib/gumdrop/template/default/lib/view_helpers.rb +0 -17
- data/lib/gumdrop/template/default/source/favicon.ico +0 -0
- data/lib/gumdrop/template/default/source/index.html.erb +0 -1
- data/lib/gumdrop/template/default/source/theme/styles/_tools.scss +0 -434
data/.gitignore
CHANGED
data/ChangeLog.md
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
# v0.5
|
2
|
+
- Gumdrop projects now require a `Gumdrop` file at the root -- contents are what you used to put in lib/site.rb.
|
3
|
+
- Added new `configure` and `view_helpers` methods for use in `Gumdrop` site file.
|
4
|
+
- Smarter CLI, knows when you're in a gumdrop site or not.
|
5
|
+
- Local templates supported for new sites (looks under ~/.gumdrop/templates)
|
6
|
+
- You can list installed templates using `gumdrop --list`
|
7
|
+
- You can install the current site as a local template using `gumdrop -t new_template_name` in a site folder.
|
8
|
+
- Data folder path is now configurable: `Gumdrop.config.data_dir` or `set :data_dir, "PATH"`
|
9
|
+
- Added `data.site` and `data.site_all` to `DefferedLoader`. Useful for listing all non-grey-listed files or all files.
|
10
|
+
- Data will now load from data/COLLECTION_NAME/*.(json | yaml | yml). Loads as an array array of all entries, adds a key '_id' that's the base filename.
|
11
|
+
- Initial `redirect` options for use in generate blocks.
|
12
|
+
- Extra stitch generator options:
|
13
|
+
- `compress` takes `:jsmin`, `:yuic`, or `:uglify` now. (`true` defaults to `:jsmin`)
|
14
|
+
- `obfuscate: true|false` -- Sets munging/mangling for compressors that support it.
|
15
|
+
- `keep_src: true|false` -- Creates a second filename with :source_postfix added to the end of the filename
|
16
|
+
- `source_postfix: "-src"`
|
17
|
+
|
1
18
|
# v0.4
|
2
19
|
- Added support for special dev proxy at /-proxy/ENDPOINT_URL -- Useful for working with external (non-CORS) apis/websites. Enabled by default. To disable, set Gumdrop.config.proxy_enabled= false
|
3
20
|
|
data/Notes.md
CHANGED
@@ -1,4 +1,11 @@
|
|
1
1
|
# Future Features/Changes
|
2
2
|
- HTML Manifest generation??
|
3
3
|
- Some kind of admin? What would that even do?
|
4
|
-
-
|
4
|
+
- If you could specify a 'prototype' for data collections, could be cool.
|
5
|
+
|
6
|
+
|
7
|
+
# TODO:
|
8
|
+
- New/Update Doc Site
|
9
|
+
- API for retrieving pages and pages under a path (simple query)
|
10
|
+
- Cleanup api and verbiage around blacklisting and ignoring
|
11
|
+
- YamlDoc support (in data anyway)
|
data/lib/gumdrop.rb
CHANGED
@@ -10,11 +10,11 @@ DEFAULT_OPTIONS= {
|
|
10
10
|
auto_run: false,
|
11
11
|
force_reload: false,
|
12
12
|
proxy_enabled: true,
|
13
|
-
log_level: :info,
|
14
|
-
root: ".",
|
15
13
|
output_dir: "./output",
|
16
14
|
lib_dir: "./lib",
|
17
15
|
source_dir: "./source",
|
16
|
+
data_dir: './data',
|
17
|
+
log_level: :info,
|
18
18
|
log: 'logs/build.log'
|
19
19
|
}
|
20
20
|
|
@@ -49,6 +49,7 @@ module Gumdrop
|
|
49
49
|
:layouts,
|
50
50
|
:generators,
|
51
51
|
:partials,
|
52
|
+
:redirects,
|
52
53
|
:config,
|
53
54
|
:data,
|
54
55
|
:content_filters,
|
@@ -58,53 +59,51 @@ module Gumdrop
|
|
58
59
|
:last_run
|
59
60
|
|
60
61
|
def run(opts={})
|
61
|
-
|
62
|
-
Gumdrop.config.merge! opts
|
63
|
-
|
64
|
-
root= File.expand_path Gumdrop.config.root
|
65
|
-
src= File.expand_path Gumdrop.config.source_dir #File.join root, 'source'
|
66
|
-
lib_path= File.expand_path Gumdrop.config.lib_dir
|
67
|
-
$: << lib_path # "#{root}/lib"
|
68
|
-
if File.exists? File.join(lib_path,"view_helpers.rb")
|
69
|
-
# In server mode, we want to reload it every time... right?
|
70
|
-
load File.join(lib_path,"view_helpers.rb")
|
71
|
-
end
|
62
|
+
site_file= Gumdrop.fetch_site_file
|
72
63
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
@data = Gumdrop::DeferredLoader.new()
|
80
|
-
@last_run = Time.now
|
81
|
-
|
82
|
-
begin
|
83
|
-
@log = Logger.new Gumdrop.config.log, 'daily'
|
84
|
-
rescue
|
85
|
-
@log = Logger.new STDOUT
|
86
|
-
end
|
87
|
-
@log.formatter = proc do |severity, datetime, progname, msg|
|
88
|
-
"#{datetime}: #{msg}\n"
|
89
|
-
end
|
64
|
+
unless site_file.nil?
|
65
|
+
@generators = Hash.new {|h,k| h[k]= nil }
|
66
|
+
@content_filters = []
|
67
|
+
@blacklist = []
|
68
|
+
@greylist = []
|
69
|
+
@redirects = []
|
90
70
|
|
91
|
-
@content_filters= []
|
92
|
-
@blacklist = []
|
93
|
-
@greylist = []
|
94
|
-
|
95
|
-
if File.exists? File.join(lib_path, "site.rb") # "#{root}/lib/site.rb"
|
96
71
|
# In server mode, we want to reload it every time... right?
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
72
|
+
load_site_file site_file
|
73
|
+
|
74
|
+
Gumdrop.config.merge! opts # These beat those in the Gumdrop file?
|
75
|
+
|
76
|
+
root= File.expand_path File.dirname(site_file)
|
77
|
+
Dir.chdir root
|
78
|
+
|
101
79
|
src= File.expand_path Gumdrop.config.source_dir #File.join root, 'source'
|
102
|
-
|
103
|
-
|
80
|
+
lib_path= File.expand_path Gumdrop.config.lib_dir
|
81
|
+
|
82
|
+
@root_path = root.split '/'
|
83
|
+
@source_path = src.split '/'
|
84
|
+
@site = Hash.new {|h,k| h[k]= nil }
|
85
|
+
@layouts = Hash.new {|h,k| h[k]= nil }
|
86
|
+
@partials = Hash.new {|h,k| h[k]= nil }
|
87
|
+
@data = Gumdrop::DeferredLoader.new( Gumdrop.config.data_dir )
|
88
|
+
@last_run = Time.now
|
89
|
+
|
90
|
+
begin
|
91
|
+
@log = Logger.new Gumdrop.config.log, 'daily'
|
92
|
+
rescue
|
93
|
+
@log = Logger.new STDOUT
|
94
|
+
end
|
95
|
+
@log.formatter = proc do |severity, datetime, progname, msg|
|
96
|
+
"#{datetime}: #{msg}\n"
|
97
|
+
end
|
104
98
|
|
105
|
-
|
99
|
+
Build.run root, src, opts
|
100
|
+
|
101
|
+
puts "Done."
|
106
102
|
|
107
|
-
|
103
|
+
else
|
104
|
+
puts "Not in a valid Gumdrop site directory."
|
105
|
+
|
106
|
+
end
|
108
107
|
end
|
109
108
|
|
110
109
|
# levels: info, warning, error
|
@@ -112,18 +111,56 @@ module Gumdrop
|
|
112
111
|
ll= Gumdrop.config.log_level
|
113
112
|
case level
|
114
113
|
when :info
|
115
|
-
#puts msg if ll == :info
|
116
114
|
@log.info msg
|
117
115
|
when :warning
|
118
|
-
#puts msg if ll == :info or ll == :warning
|
119
116
|
@log.warn msg
|
120
117
|
else
|
121
118
|
puts msg
|
122
119
|
@log.error msg
|
123
120
|
end
|
124
121
|
end
|
122
|
+
|
123
|
+
def in_site_folder?(filename="Gumdrop")
|
124
|
+
!fetch_site_file(filename).nil?
|
125
|
+
end
|
126
|
+
|
127
|
+
def load_site_file(site_file=nil)
|
128
|
+
site_file= fetch_site_file if site_file.nil?
|
129
|
+
source= IO.readlines( site_file ).join('')
|
130
|
+
DSL.class_eval source
|
131
|
+
end
|
132
|
+
|
133
|
+
def fetch_site_file(filename="Gumdrop")
|
134
|
+
here= Dir.pwd
|
135
|
+
found= File.file? File.join( here, filename )
|
136
|
+
while !found and File.directory?(here) and File.dirname(here).length > 3
|
137
|
+
here= File.expand_path File.join(here, '../')
|
138
|
+
found= File.file? File.join( here, filename )
|
139
|
+
end
|
140
|
+
if found
|
141
|
+
File.expand_path File.join(here, filename)
|
142
|
+
else
|
143
|
+
nil
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def site_folder(filename="Gumdrop")
|
148
|
+
File.dirname( fetch_site_file( filename ) )
|
149
|
+
end
|
150
|
+
|
125
151
|
end
|
126
152
|
|
153
|
+
|
127
154
|
Gumdrop.config= Gumdrop::HashObject.new(DEFAULT_OPTIONS)
|
155
|
+
|
156
|
+
|
157
|
+
module Configurator
|
158
|
+
class << self
|
159
|
+
def set(key,value)
|
160
|
+
# puts "Setting Gumdrop.config.#{key} = #{value}"
|
161
|
+
Gumdrop.config[key.to_sym]= value
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
128
165
|
|
129
166
|
end
|
data/lib/gumdrop/build.rb
CHANGED
@@ -17,6 +17,15 @@ module Gumdrop
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def build_tree
|
20
|
+
Gumdrop.report "[Scanning from #{src}]", :info
|
21
|
+
# Report blacklists and greylists
|
22
|
+
Gumdrop.blacklist.each do |path|
|
23
|
+
Gumdrop.report " blacklist: #{path}", :info
|
24
|
+
end
|
25
|
+
Gumdrop.greylist.each do |path|
|
26
|
+
Gumdrop.report " greylist: #{path}", :info
|
27
|
+
end
|
28
|
+
|
20
29
|
# Scan Filesystem
|
21
30
|
#puts "Running in: #{root}"
|
22
31
|
Dir.glob("#{src}/**/*", File::FNM_DOTMATCH).each do |path|
|
@@ -47,6 +56,7 @@ module Gumdrop
|
|
47
56
|
end
|
48
57
|
|
49
58
|
def run_generators
|
59
|
+
Gumdrop.report "[Executing Generators]", :info
|
50
60
|
Gumdrop.generators.each_pair do |path, generator|
|
51
61
|
generator.execute()
|
52
62
|
end
|
data/lib/gumdrop/cli.rb
CHANGED
@@ -1,41 +1,102 @@
|
|
1
1
|
|
2
2
|
require 'trollop'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
Examples:
|
11
|
-
gumdrop --create my_new_site --template backbone
|
12
|
-
Is the same as:
|
13
|
-
gumdrop -c my_new_site -t backbone
|
14
|
-
|
15
|
-
Options:
|
4
|
+
banner_text= <<-EOS
|
5
|
+
|
6
|
+
Gumdrop v#{ Gumdrop::VERSION }
|
7
|
+
The simple, sweet, static CMS.
|
8
|
+
|
16
9
|
EOS
|
10
|
+
|
11
|
+
opts = Trollop::options do
|
12
|
+
banner banner_text
|
13
|
+
|
17
14
|
opt :verbose,"Verbose output"
|
18
15
|
opt :debug, "Enable debugging output"
|
19
|
-
opt :quiet, "No output"
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
16
|
+
opt :quiet, "No console output"
|
17
|
+
|
18
|
+
if Gumdrop.in_site_folder?
|
19
|
+
banner <<-EOS
|
20
|
+
|
21
|
+
Examples:
|
22
|
+
gumdrop --build
|
23
|
+
gumdrop -b
|
24
|
+
gumdrop --new Post
|
25
|
+
gumdrop --server
|
26
|
+
gumdrop -s -p 8080 -r
|
27
|
+
|
28
|
+
Options:
|
29
|
+
EOS
|
30
|
+
opt :build, "Build HTML output"
|
31
|
+
opt :new, "Create new data item (specify collection name)", :type=>String
|
32
|
+
opt :server, "Runs development server"
|
33
|
+
opt :port, "Specifies port to run server on", :type=>:int
|
34
|
+
opt :reload, "Force reloading on dev server"
|
35
|
+
opt :template, "Create local template from this site (specify template name)", :type=>String
|
36
|
+
else
|
37
|
+
banner <<-EOS
|
38
|
+
|
39
|
+
Examples:
|
40
|
+
gumdrop --create my_site
|
41
|
+
gumdrop -c new_site --template backbone
|
42
|
+
|
43
|
+
Options:
|
44
|
+
EOS
|
45
|
+
opt :create, "Create a gumdrop project", :type=>String
|
46
|
+
opt :template, "Template to create new project from", :type=>String, :default=>'default'
|
47
|
+
opt :list, "List available templates"
|
48
|
+
end
|
49
|
+
|
26
50
|
end
|
27
51
|
|
28
|
-
# Trollop::die :volume, "must be non-negative" if opts[:volume] < 0
|
29
|
-
# Trollop::die :file, "must exist" unless File.exist?(opts[:file]) if opts[:file]
|
30
52
|
|
31
|
-
unless opts[:create_given] or opts[:build_given] or opts[:server_given]
|
32
|
-
|
53
|
+
unless opts[:create_given] or opts[:build_given] or opts[:server_given] or opts[:new_given] or opts[:template_given] or opts[:list_given]
|
54
|
+
puts banner_text
|
55
|
+
Trollop::die "No commands specified"
|
33
56
|
end
|
34
57
|
|
35
58
|
|
36
|
-
|
59
|
+
|
60
|
+
if opts[:build_given]
|
61
|
+
puts banner_text unless opts[:quiet_given]
|
62
|
+
Gumdrop.run(opts)
|
63
|
+
|
64
|
+
|
65
|
+
elsif opts[:server_given]
|
66
|
+
puts banner_text unless opts[:quiet_given]
|
67
|
+
Gumdrop.config.auto_run= true
|
68
|
+
Gumdrop.config.force_reload= opts[:reload_given]
|
69
|
+
Gumdrop::Server
|
70
|
+
|
71
|
+
|
72
|
+
elsif opts[:list_given]
|
73
|
+
# List templates
|
74
|
+
puts banner_text unless opts[:quiet_given]
|
75
|
+
here= File.dirname(__FILE__)
|
76
|
+
lib_dir= File.expand_path File.join(here, '../../templates', '*')
|
77
|
+
user_dir= File.expand_path File.join("~", ".gumdrop", "templates", "*")
|
78
|
+
puts "Gem Templates:"
|
79
|
+
Dir[lib_dir].each do |name|
|
80
|
+
puts " #{File.basename name}" if File.directory?(name)
|
81
|
+
end
|
82
|
+
puts "Local Templates:"
|
83
|
+
Dir[user_dir].each do |name|
|
84
|
+
puts " #{File.basename name}" if File.directory?(name)
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
elsif opts[:new_given]
|
89
|
+
puts banner_text unless opts[:quiet_given]
|
90
|
+
puts "Not implemented yet..."
|
91
|
+
|
92
|
+
|
93
|
+
elsif opts[:create_given]
|
94
|
+
puts banner_text unless opts[:quiet_given]
|
95
|
+
|
37
96
|
require 'fileutils'
|
38
97
|
here= File.dirname(__FILE__)
|
98
|
+
lib_root= File.expand_path File.join(here, '../../')
|
99
|
+
user_gumdrop_dir= File.expand_path File.join("~", ".gumdrop")
|
39
100
|
there= File.expand_path( opts[:create] )
|
40
101
|
template_name = opts[:template]
|
41
102
|
|
@@ -45,24 +106,49 @@ if opts[:create_given]
|
|
45
106
|
FileUtils.mkdir_p there
|
46
107
|
end
|
47
108
|
|
48
|
-
|
109
|
+
# from gem...
|
110
|
+
if File.directory? File.join(lib_root, 'templates', template_name)
|
111
|
+
# FileUtils.cp_r Dir[File.join(here, "template", template_name, "*")], there
|
112
|
+
puts "Creating gumdrop project (from template:#{template_name})"
|
113
|
+
puts " #{there}"
|
114
|
+
FileUtils.cp_r File.join(lib_root, "templates", template_name, "."), there
|
115
|
+
puts "Done."
|
116
|
+
|
117
|
+
# local template...
|
118
|
+
elsif File.directory? File.join(user_gumdrop_dir, 'templates', template_name)
|
49
119
|
# FileUtils.cp_r Dir[File.join(here, "template", template_name, "*")], there
|
50
|
-
puts "Creating gumdrop project
|
51
|
-
|
120
|
+
puts "Creating gumdrop project (from local template:#{template_name})"
|
121
|
+
puts " #{there}"
|
122
|
+
FileUtils.cp_r File.join(user_gumdrop_dir, "templates", template_name, "."), there
|
52
123
|
puts "Done."
|
124
|
+
|
53
125
|
else
|
54
126
|
puts "Invalid template '#{template_name}'!"
|
55
127
|
end
|
128
|
+
|
129
|
+
|
130
|
+
elsif opts[:template_given]
|
131
|
+
# Save as template...
|
132
|
+
puts banner_text unless opts[:quiet_given]
|
133
|
+
template= opts[:template]
|
134
|
+
template_path = File.expand_path File.join('~', '.gumdrop', 'templates', template)
|
135
|
+
if File.exists? template_path
|
136
|
+
puts "A template named '#{template}' already exists!"
|
137
|
+
else
|
138
|
+
require 'fileutils'
|
139
|
+
puts "Creating template: #{template}"
|
140
|
+
puts " ~/.gumdrop/templates/#{template}"
|
141
|
+
site_root= Gumdrop.site_folder
|
142
|
+
FileUtils.mkdir_p File.dirname(template_path)
|
143
|
+
FileUtils.cp_r File.join(site_root, "."), template_path
|
144
|
+
puts "Done."
|
145
|
+
end
|
56
146
|
|
57
|
-
elsif opts[:build_given]
|
58
|
-
Gumdrop.run(opts)
|
59
147
|
|
60
|
-
|
61
|
-
Gumdrop.config.auto_run= true
|
62
|
-
Gumdrop.config.force_reload= opts[:reload_given]
|
63
|
-
Gumdrop::Server
|
148
|
+
|
64
149
|
|
65
150
|
else
|
151
|
+
puts banner_text
|
66
152
|
require 'pp'
|
67
153
|
puts "Unknown options"
|
68
154
|
pp opts
|
data/lib/gumdrop/context.rb
CHANGED
@@ -25,7 +25,7 @@ module Gumdrop
|
|
25
25
|
|
26
26
|
def url(path)
|
27
27
|
path= path[1..-1] if path.starts_with?('/')
|
28
|
-
"#{
|
28
|
+
"#{Gumdrop.config.site_url}/#{path}"
|
29
29
|
end
|
30
30
|
|
31
31
|
def slug
|
@@ -62,6 +62,11 @@ module Gumdrop
|
|
62
62
|
def data
|
63
63
|
Gumdrop.data
|
64
64
|
end
|
65
|
+
|
66
|
+
# Access to settings from configure block
|
67
|
+
def config
|
68
|
+
Gumdrop.config
|
69
|
+
end
|
65
70
|
|
66
71
|
def reset_data(preset={})
|
67
72
|
# TODO: Add a setting for reloading data on every request/page
|
@@ -22,8 +22,9 @@ module Gumdrop
|
|
22
22
|
class DeferredLoader
|
23
23
|
attr_reader :cache
|
24
24
|
|
25
|
-
def initialize
|
25
|
+
def initialize(data_dir="data")
|
26
26
|
#puts "@!@"
|
27
|
+
@dir= data_dir
|
27
28
|
@cache= {}
|
28
29
|
@persisted= {}
|
29
30
|
end
|
@@ -38,8 +39,28 @@ module Gumdrop
|
|
38
39
|
@persisted[key]= value #unless opts[:persist] == false
|
39
40
|
end
|
40
41
|
|
41
|
-
def reset
|
42
|
-
|
42
|
+
def reset(hard=false)
|
43
|
+
if hard
|
44
|
+
@cache={}
|
45
|
+
@persisted={}
|
46
|
+
else
|
47
|
+
@cache= @persisted.clone #Hash.new(@persisted) #{|h,k| h[k]= load_data(k) }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def site
|
52
|
+
# TODO: This is not a great place for this!
|
53
|
+
site= Hash.new {|h,k| h[k]= nil }
|
54
|
+
Gumdrop.site.keys.sort.each do |path|
|
55
|
+
unless Gumdrop.greylist.any? {|p| path.starts_with?(p) }
|
56
|
+
site[path]= Gumdrop.site[path]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
site
|
60
|
+
end
|
61
|
+
|
62
|
+
def site_all
|
63
|
+
Gumdrop.site
|
43
64
|
end
|
44
65
|
|
45
66
|
def pager_for(key, opts={})
|
@@ -59,6 +80,7 @@ module Gumdrop
|
|
59
80
|
|
60
81
|
def cache_or_load_data(key)
|
61
82
|
@cache[key]= load_data(key) unless @cache.has_key? key
|
83
|
+
@persisted[key]= @cache[key] # New persist data loaded from file?
|
62
84
|
end
|
63
85
|
|
64
86
|
def load_data(key)
|
@@ -72,26 +94,43 @@ module Gumdrop
|
|
72
94
|
end
|
73
95
|
end
|
74
96
|
docs
|
97
|
+
elsif File.extname(path) == ""
|
98
|
+
all=[]
|
99
|
+
Dir[ File.join( "#{path}", "{*.yaml,*.json,*.yml}" ) ].each do |filename|
|
100
|
+
# Gumdrop.report ">> Loading data file: #{filename}"
|
101
|
+
id= File.basename filename
|
102
|
+
raw_hash= YAML.load_file(filename)
|
103
|
+
raw_hash['_id']= id
|
104
|
+
obj_hash= hashes2ostruct( raw_hash )
|
105
|
+
all << obj_hash
|
106
|
+
end
|
107
|
+
all
|
75
108
|
else
|
76
109
|
hashes2ostruct( YAML.load_file(path) )
|
77
110
|
end
|
78
111
|
end
|
79
112
|
|
80
|
-
# TODO: Support './data/collection_name/*.(yaml|json)' data loading?
|
81
|
-
|
82
113
|
def get_filename(path)
|
83
|
-
if File.exists? "
|
84
|
-
"
|
85
|
-
elsif File.exists? "
|
86
|
-
"
|
87
|
-
elsif File.exists? "
|
88
|
-
"
|
89
|
-
elsif File.exists? "
|
90
|
-
"
|
114
|
+
if File.exists? local_path_to("#{path}.json")
|
115
|
+
local_path_to "#{path}.json"
|
116
|
+
elsif File.exists? local_path_to("#{path}.yml")
|
117
|
+
local_path_to "#{path}.yml"
|
118
|
+
elsif File.exists? local_path_to("#{path}.yaml")
|
119
|
+
local_path_to "#{path}.yaml"
|
120
|
+
elsif File.exists? local_path_to("#{path}.yamldb")
|
121
|
+
local_path_to "#{path}.yamldb"
|
122
|
+
elsif File.directory? local_path_to(path)
|
123
|
+
local_path_to(path)
|
91
124
|
else
|
92
|
-
|
93
|
-
#
|
125
|
+
#FIXME: Should it die if it can't find data?\
|
126
|
+
# raise "No data found for #{path}"
|
127
|
+
Gumdrop.report "No data found for #{path}", :warning
|
128
|
+
nil
|
94
129
|
end
|
95
130
|
end
|
131
|
+
|
132
|
+
def local_path_to(filename)
|
133
|
+
File.join(@dir.to_s, filename.to_s)
|
134
|
+
end
|
96
135
|
end
|
97
136
|
end
|