gumdrop 0.4.0 → 0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. data/.gitignore +2 -2
  2. data/ChangeLog.md +17 -0
  3. data/Notes.md +8 -1
  4. data/lib/gumdrop.rb +82 -45
  5. data/lib/gumdrop/build.rb +10 -0
  6. data/lib/gumdrop/cli.rb +119 -33
  7. data/lib/gumdrop/context.rb +6 -1
  8. data/lib/gumdrop/deferred_loader.rb +54 -15
  9. data/lib/gumdrop/dsl.rb +8 -2
  10. data/lib/gumdrop/generator.rb +41 -2
  11. data/lib/gumdrop/version.rb +1 -1
  12. data/{lib/gumdrop/template/default → templates/backbone}/Gemfile +6 -4
  13. data/templates/backbone/Gumdrop +119 -0
  14. data/{lib/gumdrop/template → templates}/backbone/Rakefile +0 -0
  15. data/{lib/gumdrop/template → templates}/backbone/app/app.js.coffee +0 -0
  16. data/{lib/gumdrop/template → templates}/backbone/app/init.js.coffee +0 -0
  17. data/{lib/gumdrop/template → templates}/backbone/app/models/.gitkeep +0 -0
  18. data/{lib/gumdrop/template → templates}/backbone/app/utils/index.js.coffee +0 -0
  19. data/{lib/gumdrop/template → templates}/backbone/app/views/home.js.coffee +0 -0
  20. data/{lib/gumdrop/template → templates}/backbone/app/views/styles/home.scss +0 -0
  21. data/{lib/gumdrop/template → templates}/backbone/app/views/templates/home.mustache +0 -0
  22. data/{lib/gumdrop/template → templates}/backbone/config.ru +0 -0
  23. data/{lib/gumdrop/template/backbone/lib/javascript → templates/backbone/lib}/all.js.coffee +0 -0
  24. data/{lib/gumdrop/template/backbone/lib/javascript → templates/backbone/lib}/backbone.js +0 -0
  25. data/{lib/gumdrop/template/backbone/lib/javascript → templates/backbone/lib}/hogan.js +0 -0
  26. data/{lib/gumdrop/template/backbone/lib/javascript → templates/backbone/lib}/jquery.js +0 -0
  27. data/{lib/gumdrop/template/backbone/lib/javascript → templates/backbone/lib}/underscore.js +0 -0
  28. data/{lib/gumdrop/template → templates}/backbone/powrc +0 -0
  29. data/{lib/gumdrop/template/backbone/source/default.htaccess → templates/backbone/source/default.htaccess.erb} +4 -0
  30. data/{examples/simple → templates/backbone}/source/favicon.ico +0 -0
  31. data/{lib/gumdrop/template → templates}/backbone/source/feed.xml.builder.txt +8 -8
  32. data/{lib/gumdrop/template → templates}/backbone/source/index.html.erb +0 -0
  33. data/{lib/gumdrop/template → templates}/backbone/source/theme/screen.css.sass +0 -0
  34. data/{lib/gumdrop/template → templates}/backbone/source/theme/scripts/app.js.coffee +0 -0
  35. data/{examples/simple → templates/backbone}/source/theme/styles/_tools.scss +0 -0
  36. data/{lib/gumdrop/template → templates}/backbone/source/theme/templates/app.template.slim +1 -1
  37. data/{lib/gumdrop/template → templates}/backbone/source/theme/templates/site.template.slim +3 -3
  38. data/{lib/gumdrop/template/backbone → templates/default}/Gemfile +6 -4
  39. data/templates/default/Gumdrop +109 -0
  40. data/{lib/gumdrop/template → templates}/default/Rakefile +0 -0
  41. data/{lib/gumdrop/template → templates}/default/config.ru +0 -0
  42. data/{lib/gumdrop/template → templates}/default/powrc +0 -0
  43. data/{lib/gumdrop/template/default/source/default.htaccess → templates/default/source/default.htaccess.erb} +11 -1
  44. data/{lib/gumdrop/template/backbone → templates/default}/source/favicon.ico +0 -0
  45. data/{lib/gumdrop/template → templates}/default/source/feed.xml.builder.txt +8 -8
  46. data/templates/default/source/index.html.erb +1 -0
  47. data/{lib/gumdrop/template → templates}/default/source/theme/screen.css.sass +0 -0
  48. data/{lib/gumdrop/template → templates}/default/source/theme/scripts/app.js.coffee +0 -0
  49. data/{lib/gumdrop/template/backbone → templates/default}/source/theme/styles/_tools.scss +0 -0
  50. data/{lib/gumdrop/template → templates}/default/source/theme/templates/site.template.slim +3 -3
  51. metadata +56 -83
  52. data/examples/simple/Gemfile +0 -22
  53. data/examples/simple/Rakefile +0 -42
  54. data/examples/simple/config.ru +0 -15
  55. data/examples/simple/data/config.yml +0 -10
  56. data/examples/simple/data/posts.yamldb +0 -28
  57. data/examples/simple/lib/site.rb +0 -24
  58. data/examples/simple/lib/view_helpers.rb +0 -17
  59. data/examples/simple/source/.htaccess +0 -16
  60. data/examples/simple/source/_pager_control.html.erb +0 -14
  61. data/examples/simple/source/_sidebar.html.haml +0 -2
  62. data/examples/simple/source/feed.xml.builder +0 -23
  63. data/examples/simple/source/index.html.erb +0 -4
  64. data/examples/simple/source/posts.generator.rb +0 -11
  65. data/examples/simple/source/posts/index.html.erb +0 -6
  66. data/examples/simple/source/theme/screen.css.scss +0 -10
  67. data/examples/simple/source/theme/scripts/app.js.coffee +0 -0
  68. data/examples/simple/source/theme/templates/post.template.haml +0 -3
  69. data/examples/simple/source/theme/templates/post_page.template.haml +0 -6
  70. data/examples/simple/source/theme/templates/site.template.haml +0 -33
  71. data/examples/simple/source/theme/templates/test.template.erb +0 -1
  72. data/lib/gumdrop/template/backbone/data/config.yml +0 -4
  73. data/lib/gumdrop/template/backbone/lib/site.rb +0 -62
  74. data/lib/gumdrop/template/backbone/lib/stitch_compilers.rb +0 -1
  75. data/lib/gumdrop/template/backbone/lib/view_helpers.rb +0 -17
  76. data/lib/gumdrop/template/default/data/config.yml +0 -4
  77. data/lib/gumdrop/template/default/lib/site.rb +0 -50
  78. data/lib/gumdrop/template/default/lib/view_helpers.rb +0 -17
  79. data/lib/gumdrop/template/default/source/favicon.ico +0 -0
  80. data/lib/gumdrop/template/default/source/index.html.erb +0 -1
  81. data/lib/gumdrop/template/default/source/theme/styles/_tools.scss +0 -434
@@ -11,14 +11,20 @@ module Gumdrop
11
11
  end
12
12
 
13
13
  def self.skip(path)
14
- Gumdrop.report " blacklist: #{path}", :info
15
14
  Gumdrop.blacklist << path
16
15
  end
17
16
 
18
17
  def self.ignore(path)
19
- Gumdrop.report " greylist: #{path}", :info
20
18
  Gumdrop.greylist << path
21
19
  end
20
+
21
+ def self.view_helpers(&block)
22
+ Gumdrop::ViewHelpers.class_eval &block
23
+ end
24
+
25
+ def self.configure(&block)
26
+ Gumdrop::Configurator.instance_eval &block
27
+ end
22
28
 
23
29
  end
24
30
  end
@@ -51,16 +51,55 @@ module Gumdrop
51
51
 
52
52
  Gumdrop.site[content.uri]= content
53
53
  end
54
+
55
+ # FIXME: Does redirect require abs-paths?
56
+ def redirect(from, opts={})
57
+ if opts[:to]
58
+ page from do
59
+ <<-EOF
60
+ <meta http-equiv="refresh" content="0;url=#{ opts[:to] }">
61
+ <script> window.location.href='#{ opts[:to] }'; </script>
62
+ EOF
63
+ end
64
+ opts[:from]= from
65
+ Gumdrop.redirects << opts
66
+ else
67
+ Gumdrop.report "You must specify :to in a redirect", :warning
68
+ end
69
+ end
54
70
 
55
71
  def stitch(name, opts)
56
72
  require 'gumdrop/stitch_ex'
57
73
  require 'gumdrop/stitch_compilers'
74
+ content= Stitch::Package.new(opts).compile
58
75
  page name do
59
- content= Stitch::Package.new(opts).compile
60
- if opts[:compress]
76
+ case opts[:compress]
77
+
78
+ when true, :jsmin
61
79
  require 'jsmin'
62
80
  JSMin.minify content
81
+
82
+ when :yuic
83
+ require "yui/compressor"
84
+ compressor = YUI::JavaScriptCompressor.new(:munge => opts[:obfuscate])
85
+ compressor.compress(content)
86
+
87
+ when :uglify
88
+ require "uglifier"
89
+ Uglifier.compile( content, :mangle=>opts[:obfuscate])
90
+
91
+ when false
92
+ content
93
+
63
94
  else
95
+ # UNKNOWN Compressor type!
96
+ Gumdrop.report "Unknown javascript compressor type! (#{ opts[:compressor] })", :warning
97
+ content
98
+ end
99
+ end
100
+ if opts[:keep_src] or opts[:keep_source]
101
+ ext= File.extname name
102
+ page name.gsub(ext, "#{opts.fetch(:source_postfix, '-src')}#{ext}") do
64
103
  content
65
104
  end
66
105
  end
@@ -1,5 +1,5 @@
1
1
  module Gumdrop
2
2
 
3
- VERSION = "0.4.0" unless defined?(::Gumdrop::VERSION)
3
+ VERSION = "0.5" unless defined?(::Gumdrop::VERSION)
4
4
 
5
5
  end
@@ -9,10 +9,16 @@ gem "gumdrop"
9
9
 
10
10
  # Add your dependencies here:
11
11
 
12
+ # For template support:
13
+ # gem "less"
14
+ # gem "haml"
12
15
  gem "slim"
13
16
  gem "sass"
14
17
  gem "coffee-script"
15
18
 
19
+ # For JavaScript stitching and compressing:
20
+ #gem 'uglifier'
21
+ #gem 'yui-compressor'
16
22
  gem 'jsmin'
17
23
  gem 'stitch-rb'
18
24
 
@@ -20,10 +26,6 @@ gem 'stitch-rb'
20
26
  # gem "rdiscount"
21
27
  # gem 'maruku'
22
28
 
23
- # For template support:
24
- # gem "less"
25
- # gem "haml"
26
-
27
29
  # For xml generation support:
28
30
  # gem 'builder'
29
31
 
@@ -0,0 +1,119 @@
1
+ puts "Gumdrop v#{Gumdrop::VERSION} building..."
2
+
3
+ configure do
4
+
5
+ set :site_title, "My Site"
6
+ set :site_tagline, "My home on thar intarwebs!"
7
+ set :site_author, "Me"
8
+ set :site_url, "http://www.mysite.com"
9
+
10
+ # All the supported build configuration settings and their defaults:
11
+
12
+ # set :output_dir, "./output"
13
+ # set :lib_dir, "./lib"
14
+ # set :source_dir, "./source"
15
+ # set :data_dir, './data'
16
+ # set :relative_paths, true
17
+ # set :proxy_enabled, true
18
+ # set :log_level, :info
19
+ # set :log, 'logs/build.log'
20
+
21
+ end
22
+
23
+ # Skipping files entirely from build process... Like they don't exist.
24
+ # skip 'file-to-ignore.html'
25
+ # skip 'dont-show/'
26
+
27
+ # Ignores source file(s) from compilation, but does load the content into memory
28
+ # ignore 'pages/'
29
+
30
+ # NOTE: Skipping and ignoring matches simply with starts_with?... So if a path, from the
31
+ # source directory, starts with the specified string, it'll skip or ignor it. (this
32
+ # doesn't work for files detected by stitch)
33
+
34
+
35
+ # Example site-level generator
36
+ generate do
37
+
38
+ stitch 'app.js', # JavaScript to assemble
39
+ :identifier=>'app', # variable name for the library
40
+ :paths=>['./app'],
41
+ :root=>'./app',
42
+ :dependencies=>[], # List of scripts to prepend to top of file (non moduled)
43
+ :prune=>false, # If true, removes the source files from Gumdrop.site hash
44
+ :compress=>:jsmin, # Options are :jsmin, :yuic, :uglify
45
+ :obfuscate=>false, # For compressors that support munging/mangling
46
+ :keep_src=>true # Creates another file, ex: app-src.js
47
+
48
+ stitch 'lib.js',
49
+ :identifier=>'lib',
50
+ :paths=>['./lib'],
51
+ :root=>'./lib',
52
+ :prune=>true,
53
+ :compress=>false,
54
+ :obfuscate=>false,
55
+ :keep_src=>false
56
+
57
+
58
+ # Requires a about.template.XX file
59
+ # page "about.html",
60
+ # :template=>'about',
61
+ # :passthru=>'Available in the template'
62
+
63
+ # page 'robots.txt' do
64
+ # # And content returned will be put in the file
65
+ # """
66
+ # User-Agent: *
67
+ # Disallow: /
68
+ # """
69
+ # end
70
+
71
+ # Maybe for a tumblr-like pager
72
+ # pager= Gumdrop.data.pager_for :posts, base_path:'posts/page', page_size:5
73
+
74
+ # pager.each do |page|
75
+ # page "#{page.uri}.html",
76
+ # template:'post_page',
77
+ # posts:page.items,
78
+ # pager:pager,
79
+ # current_page:pager.current_page
80
+ # end
81
+
82
+ end
83
+
84
+ # Example of using a content filter to compress CSS output
85
+ # require 'yui/compressor'
86
+ # content_filter do |content, info|
87
+ # if info.ext == '.css'
88
+ # puts " Compress: #{info.filename}"
89
+ # compressor= YUI::CssCompressor.new
90
+ # compressor.compress( content )
91
+ # else
92
+ # content
93
+ # end
94
+ # end
95
+
96
+
97
+ # View helpers (available in rendering context):
98
+ view_helpers do
99
+
100
+ # Calculate the years for a copyright
101
+ def copyright_years(start_year, divider="&#8211;")
102
+ end_year = Date.today.year
103
+ if start_year == end_year
104
+ "#{start_year}"
105
+ else
106
+ "#{start_year}#{divider}#{end_year}"
107
+ end
108
+ end
109
+
110
+ #
111
+ # Your custom helpers go here!
112
+ #
113
+
114
+ end
115
+
116
+ # Any specialized code for your site goes here...
117
+
118
+ require 'slim'
119
+ Slim::Engine.set_default_options pretty:true
@@ -20,3 +20,7 @@ DirectoryIndex index.html
20
20
  AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
21
21
  </IfModule>
22
22
  # END Gzip
23
+
24
+ <% Gumdrop.redirects.each do |opts| %>
25
+ # Redirect <%= opts[:from] %> <%= opts[:to] %>
26
+ <% end %>
@@ -1,22 +1,22 @@
1
1
  xml.instruct!
2
2
  xml.feed "xmlns" => "http://www.w3.org/2005/Atom" do
3
- xml.title data.config.title
4
- xml.subtitle data.config.tagline
5
- xml.id data.config.url
6
- xml.link "href" => data.config.url
7
- xml.link "href" => "#{data.config.url}/feed.xml", "rel" => "self"
3
+ xml.title config.site_title
4
+ xml.subtitle config.site_tagline
5
+ xml.id config.site_url
6
+ xml.link "href" => config.site_url
7
+ xml.link "href" => "#{config.site_url}/feed.xml", "rel" => "self"
8
8
  xml.updated data.blog.first.date.to_time.iso8601
9
- xml.author { xml.name data.config.author }
9
+ xml.author { xml.name config.site_author }
10
10
 
11
11
  data.blog.each do |post|
12
12
  xml.entry do
13
- url= "#{data.config.url}/posts/#{post.slug}"
13
+ url= "#{config.site_url}/posts/#{post.slug}"
14
14
  xml.title post.title
15
15
  xml.link "rel" => "alternate", "href" => url
16
16
  xml.id url
17
17
  xml.published post.date.to_time.iso8601
18
18
  xml.updated post.date.to_time.iso8601
19
- xml.author { xml.name data.config.author }
19
+ xml.author { xml.name config.site_author }
20
20
  xml.content post.body, "type" => "html"
21
21
  end
22
22
  end
@@ -2,7 +2,7 @@ doctype html
2
2
  html lang="en"
3
3
  head
4
4
  meta charset="utf-8"
5
- title= data.config.title
5
+ title= config.site_title
6
6
  /[if le IE 9]
7
7
  script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"
8
8
  /link rel="stylesheet" href==uri('theme/screen.css') type="text/css" media="screen" charset="utf-8"
@@ -2,7 +2,7 @@ doctype html
2
2
  html lang="en"
3
3
  head
4
4
  meta charset="utf-8"
5
- title= data.config.title
5
+ title= config.site_title
6
6
  /[if le IE 9]
7
7
  script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"
8
8
  link rel="stylesheet" href==uri('theme/screen.css') type="text/css" media="screen" charset="utf-8"
@@ -11,8 +11,8 @@ html lang="en"
11
11
  div.row
12
12
  div.col.span-12
13
13
  header
14
- h1= data.config.title
15
- h4= data.config.tagline
14
+ h1= config.site_title
15
+ h4= config.site_tagline
16
16
  div.row
17
17
  div.col.span-12
18
18
  nav
@@ -9,10 +9,16 @@ gem "gumdrop"
9
9
 
10
10
  # Add your dependencies here:
11
11
 
12
+ # For template support:
13
+ # gem "less"
14
+ # gem "haml"
12
15
  gem "slim"
13
16
  gem "sass"
14
17
  gem "coffee-script"
15
18
 
19
+ # For JavaScript stitching and compressing:
20
+ #gem 'uglifier'
21
+ #gem 'yui-compressor'
16
22
  gem 'jsmin'
17
23
  gem 'stitch-rb'
18
24
 
@@ -20,10 +26,6 @@ gem 'stitch-rb'
20
26
  # gem "rdiscount"
21
27
  # gem 'maruku'
22
28
 
23
- # For template support:
24
- # gem "less"
25
- # gem "haml"
26
-
27
29
  # For xml generation support:
28
30
  # gem 'builder'
29
31
 
@@ -0,0 +1,109 @@
1
+ puts "Gumdrop v#{Gumdrop::VERSION} building..."
2
+
3
+ configure do
4
+
5
+ set :site_title, "My Site"
6
+ set :site_tagline, "My home on thar intarwebs!"
7
+ set :site_author, "Me"
8
+ set :site_url, "http://www.mysite.com"
9
+
10
+ # All the supported build configuration settings and their defaults:
11
+ # set :output_dir, "./output"
12
+ # set :lib_dir, "./lib"
13
+ # set :source_dir, "./source"
14
+ # set :data_dir, './data'
15
+ # set :relative_paths, true
16
+ # set :proxy_enabled, true
17
+ # set :log_level, :info
18
+ # set :log, 'logs/build.log'
19
+ end
20
+
21
+
22
+ # Skipping files entirely from build process... Like they don't exist.
23
+ # skip 'file-to-ignore.html'
24
+ # skip 'dont-show/'
25
+
26
+ # Ignores source file(s) from compilation, but does load the content into memory
27
+ # ignore 'pages/'
28
+
29
+ # NOTE: Skipping and ignoring matches simply with starts_with?... So if a path, from the
30
+ # source directory, starts with the specified string, it'll skip or ignor it. (this
31
+ # doesn't work for files detected by stitch)
32
+
33
+
34
+ # Example site-level generator
35
+ generate do
36
+
37
+ # Requires a about.template.XX file
38
+ # page "about.html",
39
+ # :template=>'about',
40
+ # :passthru=>'Available in the template'
41
+
42
+ # page 'robots.txt' do
43
+ # # And content returned will be put in the file
44
+ # """
45
+ # User-Agent: *
46
+ # Disallow: /
47
+ # """
48
+ # end
49
+
50
+ # Maybe for a tumblr-like pager
51
+ # pager= Gumdrop.data.pager_for :posts, base_path:'posts/page', page_size:5
52
+
53
+ # pager.each do |page|
54
+ # page "#{page.uri}.html",
55
+ # template:'post_page',
56
+ # posts:page.items,
57
+ # pager:pager,
58
+ # current_page:pager.current_page
59
+ # end
60
+
61
+ # Assemble javscript files in a CommonJS-like way with stitch-rb
62
+ # stitch 'app.js', # JavaScript to assemble
63
+ # :identifier=>'app', # variable name for the library
64
+ # :paths=>['./app'],
65
+ # :root=>'./app',
66
+ # :dependencies=>[], # List of scripts to prepend to top of file (non moduled)
67
+ # :prune=>false, # If true, removes the source files from Gumdrop.site hash
68
+ # :compress=>:jsmin, # Options are :jsmin, :yuic, :uglify
69
+ # :obfuscate=>false, # For compressors that support munging/mangling
70
+ # :keep_src=>true # Creates another file, ex: app-src.js
71
+
72
+ end
73
+
74
+ # Example of using a content filter to compress CSS output
75
+ # require 'yui/compressor'
76
+ # content_filter do |content, info|
77
+ # if info.ext == '.css'
78
+ # puts " Compress: #{info.filename}"
79
+ # compressor= YUI::CssCompressor.new
80
+ # compressor.compress( content )
81
+ # else
82
+ # content
83
+ # end
84
+ # end
85
+
86
+
87
+ # View helpers (available in rendering context):
88
+ view_helpers do
89
+
90
+ # Calculate the years for a copyright
91
+ def copyright_years(start_year, divider="&#8211;")
92
+ end_year = Date.today.year
93
+ if start_year == end_year
94
+ "#{start_year}"
95
+ else
96
+ "#{start_year}#{divider}#{end_year}"
97
+ end
98
+ end
99
+
100
+ #
101
+ # Your custom helpers go here!
102
+ #
103
+
104
+ end
105
+
106
+ # Any specialized code for your site goes here...
107
+
108
+ require 'slim'
109
+ Slim::Engine.set_default_options pretty:true