hydeweb 0.2.2 → 0.2.3

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/Rakefile CHANGED
@@ -3,9 +3,3 @@ task :test do
3
3
  end
4
4
 
5
5
  task :default => :test
6
-
7
- task :gembuild do
8
- require './lib/hyde'
9
- v = Hyde.version
10
- system "joe build && git commit -a -m \"Update to version #{v}.\" && git tag v#{v}"
11
- end
@@ -1,6 +1,16 @@
1
1
  # This file exists to make this project Rack-compatible.
2
2
  # You may delete it if you're not concerned about this.
3
3
 
4
+ if File.file?('Gemfile') && File.file?('Gemfile.lock')
5
+ # Use Bundler to load hydeweb, if a Gemfile is around.
6
+ require 'bundler'
7
+ Bundler.setup
8
+ else
9
+ # Else, just go Rubygems.
10
+ require 'rubygems' unless defined?(::Gem)
11
+ gem 'hydeweb', '~> 0.2.0'
12
+ end
13
+
4
14
  require 'hyde'
5
15
  require 'hyde/server'
6
16
 
@@ -13,6 +13,9 @@ Encoding.default_external = 'utf-8' if defined?(::Encoding)
13
13
  # HTML files as ERB
14
14
  Tilt.mappings['html'] = Tilt.mappings['erb']
15
15
 
16
+ # Class: Hyde
17
+ # The Hyde class.
18
+
16
19
  class Hyde
17
20
  PREFIX = File.expand_path('../', __FILE__)
18
21
 
@@ -36,7 +39,12 @@ class Hyde
36
39
  require "#{PREFIX}/hyde/version"
37
40
 
38
41
  class << self
39
- # The latest project.
42
+ # Attribute: project (Hyde)
43
+ # Returns the latest project.
44
+ #
45
+ # ## Example
46
+ # Hyde.project.path(:site)
47
+
40
48
  attr_accessor :project
41
49
  end
42
50
  end
@@ -1,3 +1,6 @@
1
+ # Class: Hyde::CLI (Hyde)
2
+ # Command line runner.
3
+
1
4
  class Hyde
2
5
  class CLI < Shake
3
6
  autoload :Helpers, "#{PREFIX}/hyde/cli/helpers"
@@ -192,6 +195,7 @@ class CLI < Shake
192
195
 
193
196
  def self.run!(options={})
194
197
  @hydefile = options[:file]
198
+ project rescue nil
195
199
  super *[]
196
200
  end
197
201
  end
@@ -1,13 +1,24 @@
1
1
  class Hyde
2
+ # Class: Hyde::Config
2
3
  # Configuration.
3
4
  #
4
- # == Common usage
5
+ # ## Common usage
5
6
  #
6
- # Hyde.project.config
7
- # Hyde.project.config.tilt_options('sass')[:load_path]
7
+ # Access it via `Hyde.project`.
8
8
  #
9
- # Hyde.project.config.site_path
10
- # Hyde.project.config.layouts_path
9
+ # Hyde.project.config
10
+ #
11
+ # You may access config variables as attributes.
12
+ #
13
+ # Hyde.project.config.site_path
14
+ # Hyde.project.config.layouts_path
15
+ # Hyde.project.config.extensions_path
16
+ # Hyde.project.config.output_path
17
+ #
18
+ # Tilt options:
19
+ #
20
+ # Hyde.project.config.tilt_options('sass')[:load_path]
21
+ # Hyde.project.config.tilt_options_for('filename.haml')[:style]
11
22
  #
12
23
  class Config
13
24
  DEFAULTS = {
@@ -60,8 +71,15 @@ class Config
60
71
  @table.send meth, *args
61
72
  end
62
73
 
74
+ # Method: tilt_options_for (Hyde::Config)
63
75
  # Returns tilt options for a given file.
64
- # @example tilt_options('index.haml') # { :escape_html => ... }
76
+ #
77
+ # ## Usage
78
+ # tilt_options_for(filename, options={})
79
+ #
80
+ # ## Example
81
+ # tilt_options_for('index.haml') # { :escape_html => ... }
82
+ #
65
83
  def tilt_options_for(file, options={})
66
84
  ext = file.split('.').last.downcase
67
85
  opts = tilt_options(ext) || Hash.new
@@ -70,8 +88,15 @@ class Config
70
88
  to_hash opts
71
89
  end
72
90
 
91
+ # Method: tilt_options (Hyde::Config)
73
92
  # Returns tilt options for a given engine.
74
- # @example tilt_options('haml') # { :escape_html => ... }
93
+ #
94
+ # ## Usage
95
+ # tilt_options(engine_name)
96
+ #
97
+ # ## Example
98
+ # tilt_options('haml') # { :escape_html => ... }
99
+ #
75
100
  def tilt_options(what, key=:tilt_options)
76
101
  @table[key] ||= Hash.new
77
102
  @table[key][what.to_s] ||= Hash.new
@@ -1,16 +1,84 @@
1
+ # Module: Hyde::Helpers (Hyde)
2
+ # Helpers you can use in your pages.
3
+ #
4
+ # ## Creating your own helpers
5
+ # To create for own helpers, make an extension. See [Extending Hyde:
6
+ # Helpers][1] for more info.
7
+ #
8
+ # [1]: /extending/helpers.html
9
+
1
10
  class Hyde
2
11
  module Helpers
12
+
13
+ # Method: partial (Hyde::Helpers)
14
+ # Renders a partial.
15
+ #
16
+ # ## Usage
17
+ # <%= partial path, locals %>
18
+ #
19
+ # ## Description
20
+ # See [Introduction: Partials](/introduction/partials.html) for more
21
+ # info.
22
+ #
23
+ # ## Example
24
+ #
25
+ # If your `_layouts/_banner.erb` looks like this:
26
+ #
27
+ # <div class='banner'>
28
+ # Welcome to <%= start.title %>
29
+ # </div>
30
+ #
31
+ # ...Then this will embed the partial `_layouts/_nav.erb`. The partial
32
+ # will be rendered with `start` being set to the current page.
33
+ #
34
+ # <%= partial '_banner', :start => page %>
35
+ #
3
36
  def partial(path, locals={})
4
37
  partial = Partial[path.to_s, page] or return ''
5
38
  partial.to_html locals.merge(:page => self)
6
39
  end
7
40
 
41
+ # Method: rel (Hyde::Helpers)
42
+ # Turns a path into a relative path.
43
+ #
44
+ # ## Usage
45
+ # <%= rel(path) %>
46
+ #
47
+ # ## Description
48
+ # `rel` takes a given absolute path that begins with a `/` (for instance,
49
+ # `/x/y/z.html`) and returns a relative path (maybe `../y/z.html`). This is
50
+ # useful if your site will not be be hosted on it's own domain.
51
+ #
52
+ # ## Example
53
+ # <% page.children.each do |child| %>
54
+ # <a href="<%= rel(child.path) %>">
55
+ # <%= child.title %>
56
+ # </a>
57
+ # <% end %>
58
+ #
59
+ # This may output:
60
+ #
61
+ # <a href="../../foo.html">
62
+ # Foobar
63
+ # </a>
64
+ #
65
+ # ...where the `../../` depends on the current page's path.
66
+ #
8
67
  def rel(path)
9
- depth = page.depth
10
- dotdot = depth > 1 ? ('../' * (page.depth-1)) : './'
68
+ depth = page.path.count('/')
69
+ dotdot = depth > 1 ? ('../' * (depth-1)) : './'
11
70
  (dotdot[0...-1] + path)
12
71
  end
13
72
 
73
+ # Method: content_for (Hyde::Helpers)
74
+ # Content for.
75
+ #
76
+ # ## See also
77
+ #
78
+ # * {Hyde::Helpers::has_content?}
79
+ # * {Hyde::Helpers::content_for}
80
+ # * {Hyde::Helpers::yield_content}
81
+ #
14
82
  def content_for(key, &blk)
15
83
  content_blocks[key.to_sym] = blk
16
84
  end
@@ -20,10 +88,32 @@ module Helpers
20
88
  $content_blocks[page.path] ||= Hash.new
21
89
  end
22
90
 
91
+ # Method: has_content? (Hyde::Helpers)
92
+ # Checks if there's something defined for a given content block.
93
+ #
94
+ # ## Example
95
+ # See {Hyde::Helpers::content_for} for an example.
96
+ #
97
+ # ## See also
98
+ # * {Hyde::Helpers::has_content?}
99
+ # * {Hyde::Helpers::content_for}
100
+ # * {Hyde::Helpers::yield_content}
101
+ #
23
102
  def has_content?(key)
24
103
  content_blocks.member? key.to_sym
25
104
  end
26
105
 
106
+ # Method: yield_content (Hyde::Helpers)
107
+ # Yield
108
+ #
109
+ # ## Example
110
+ # See {Hyde::Helpers::content_for} for an example.
111
+ #
112
+ # ## See also
113
+ # * {Hyde::Helpers::has_content?}
114
+ # * {Hyde::Helpers::content_for}
115
+ # * {Hyde::Helpers::yield_content}
116
+ #
27
117
  def yield_content(key, *args)
28
118
  content = content_blocks[key.to_sym]
29
119
  if respond_to?(:block_is_haml?) && block_is_haml?(content)
@@ -1,3 +1,8 @@
1
+ # Class: Hyde::Meta
2
+ # Metadata.
3
+ #
4
+ # This is usually accessed via {Hyde::Page.meta}.
5
+
1
6
  class Hyde
2
7
  class Meta < OpenStruct
3
8
  def merge!(hash)
@@ -298,7 +298,10 @@ class Page
298
298
  File.expand_path("../#{base}/*", @file)
299
299
  end
300
300
 
301
- Set.new Dir[files].reject { |f| f == @file }.map { |f| self.class[f, project] }.compact.sort
301
+ Set.new Dir[files].
302
+ reject { |f| f == @file || project.ignored_files.include?(f) }.
303
+ map { |f| self.class[f, project] }.
304
+ compact.sort
302
305
  end
303
306
 
304
307
  def siblings
@@ -1,39 +1,42 @@
1
1
  class Hyde
2
+ # Class: Hyde::Project
2
3
  # A project.
3
4
  #
5
+ # ## Common usage
6
+ #
4
7
  # Instanciating:
5
8
  #
6
- # project = Project.new('~/spur')
7
- # project == Hyde.project # the last defined project
9
+ # project = Project.new('~/spur')
10
+ # project == Hyde.project # the last defined project
8
11
  #
9
12
  # Building:
10
13
  #
11
- # project.build
12
- # project.build { |file| puts "Building #{file}..." }
14
+ # project.build
15
+ # project.build { |file| puts "Building #{file}..." }
13
16
  #
14
17
  # Getting pages:
15
18
  #
16
- # Hyde::Page['/index.html'] # ~/spur/index.md; uses Hyde.project
19
+ # Hyde::Page['/index.html'] # ~/spur/index.md; uses Hyde.project
17
20
  #
18
21
  # Configuration:
19
22
  #
20
- # project.config_file # ~/spur/hyde.conf
21
- # project.config # Config from above file (OpenStruct)
22
- # project.config.site_path
23
+ # project.config_file # ~/spur/hyde.conf
24
+ # project.config # Config from above file (OpenStruct)
25
+ # project.config.site_path
23
26
  #
24
27
  # Paths:
25
28
  #
26
- # project.path(:site) # ~/spur/site (based on config site_path)
27
- # project.path(:extensions)
29
+ # project.path(:site) # ~/spur/site (based on config site_path)
30
+ # project.path(:extensions)
28
31
  #
29
- # project.root('a/b', 'c') # ~/spur/a/b/c
32
+ # project.root('a/b', 'c') # ~/spur/a/b/c
30
33
  #
31
34
  # Indexing:
32
35
  #
33
- # project.pages # [<#Page>, <#Page>, ...]
34
- # project.files # ['/index.md', '/style.sass', ...]
35
- # # (only site files)
36
- # project.ignored_files
36
+ # project.pages # [<#Page>, <#Page>, ...]
37
+ # project.files # ['/index.md', '/style.sass', ...]
38
+ # # (only site files)
39
+ # project.ignored_files
37
40
  #
38
41
  class Project
39
42
  def initialize(root=Dir.pwd)
@@ -69,6 +72,9 @@ class Project
69
72
  ).sort.each { |f| require f } if path
70
73
  end
71
74
 
75
+ # Method: config_file (Hyde::Project)
76
+ # Returns the configuration file for the project.
77
+
72
78
  def config_file
73
79
  try = lambda { |path| p = root(path); p if File.file?(p) }
74
80
  try['hyde.conf'] || try['.hyderc']
@@ -78,26 +84,43 @@ class Project
78
84
  config_file
79
85
  end
80
86
 
87
+ # Method: config (Hyde::Project)
88
+ # Returns a Hyde::Config instance.
89
+
81
90
  def config
82
91
  @config ||= Config.load(config_file)
83
92
  end
84
93
 
94
+ # Method: path (Hyde::Project)
85
95
  # Returns the path for a certain aspect.
86
- # @example path(:site)
96
+ #
97
+ # ## Example
98
+ #
99
+ # Hyde.project.path(:site)
100
+ #
87
101
  def path(what, *a)
88
102
  return nil unless [:output, :site, :layouts, :extensions, :partials].include?(what)
89
103
  path = config.send(:"#{what}_path")
90
104
  root path, *a if path
91
105
  end
92
106
 
107
+ # Method: root (Hyde::Project)
108
+ # Returns the root path of the project.
109
+
93
110
  def root(*args)
94
111
  File.join @root, *(args.compact)
95
112
  end
96
113
 
114
+ # Method: pages (Hyde::Project)
115
+ # Returns the pages for the project.
116
+
97
117
  def pages
98
118
  files.map { |f| Page[f, self] }.compact
99
119
  end
100
120
 
121
+ # Method: files (Hyde::Project)
122
+ # Returns the site files for the project, free from the ignored files.
123
+
101
124
  def files
102
125
  files = Dir[File.join(path(:site), '**', '*')]
103
126
  files = files.select { |f| File.file?(f) }
@@ -105,6 +128,9 @@ class Project
105
128
  files - ignored_files
106
129
  end
107
130
 
131
+ # Method: ignored_files (Hyde::Project)
132
+ # Returns the files to be ignored for the project.
133
+
108
134
  def ignored_files
109
135
  specs = [*config.ignore].map { |s| root(s) }
110
136
  specs << config_file
@@ -120,6 +146,9 @@ class Project
120
146
  specs.compact.map { |s| glob(s) }.flatten.uniq
121
147
  end
122
148
 
149
+ # Method: build (Hyde::Project)
150
+ # Builds.
151
+
123
152
  def build(&blk)
124
153
  pages.each do |page|
125
154
  yield page
@@ -2,6 +2,9 @@ require 'cuba'
2
2
  require 'rack'
3
3
  require 'hyde'
4
4
 
5
+ # Module: Hyde::Server
6
+ # The Hyde server rack application.
7
+
5
8
  class Hyde
6
9
  Server = Cuba.dup
7
10
 
@@ -1,9 +1,13 @@
1
+ # Class: Hyde::Set
2
+ # A set of pages.
3
+
1
4
  class Hyde
2
5
  class Set < Array
6
+ # Method: find (Hyde::Set)
3
7
  # Filters a set by given metadata criteria.
4
8
  #
5
- # @example
6
- # Page['/'].children.find(layout: 'default')
9
+ # ## Example
10
+ # Page['/'].children.find(layout: 'default')
7
11
  #
8
12
  def find(by={})
9
13
  self.class.new(select do |page|
@@ -11,8 +15,13 @@ class Set < Array
11
15
  end)
12
16
  end
13
17
 
18
+ # Method: except (Hyde::Set)
14
19
  # Filters a set by removing items matching the given metadata criteria.
15
- # This is the opposite of #find.
20
+ #
21
+ # This is the opposite of {Hyde::Set::find}.
22
+ #
23
+ # ## Example
24
+ # Page['/'].children.find(layout: 'default')
16
25
  #
17
26
  def except(by={})
18
27
  self.class.new(reject do |page|
@@ -1,5 +1,11 @@
1
1
  class Hyde
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
+
4
+ # Attribute: version (Hyde)
5
+ # Returns the version.
6
+ #
7
+ # ## Example
8
+ # Hyde.version #=> "0.2.0"
3
9
 
4
10
  def self.version
5
11
  VERSION
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: hydeweb
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.2
5
+ version: 0.2.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Rico Sta. Cruz
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-16 00:00:00 +08:00
13
+ date: 2011-06-20 00:00:00 +08:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency