hydeweb 0.0.8.pre2 → 0.1.0

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.
Files changed (151) hide show
  1. data/{CHANGELOG → HISTORY.md} +6 -0
  2. data/Rakefile +2 -52
  3. data/bin/hyde +3 -23
  4. data/bin/hyde01 +7 -0
  5. data/data/new_site/README.md +1 -1
  6. data/data/new_site/hyde.conf +9 -6
  7. data/lib/hyde/cli/helpers.rb +40 -0
  8. data/lib/hyde/cli.rb +86 -0
  9. data/lib/hyde/config.rb +37 -0
  10. data/lib/hyde/helpers.rb +6 -47
  11. data/lib/hyde/layout.rb +17 -9
  12. data/lib/hyde/meta.rb +5 -21
  13. data/lib/hyde/page.rb +207 -159
  14. data/lib/hyde/partial.rb +10 -5
  15. data/lib/hyde/project.rb +58 -208
  16. data/lib/hyde/server.rb +57 -0
  17. data/lib/hyde.rb +28 -51
  18. data/test/fixture/extensions/extensions/a/a.rb +1 -0
  19. data/test/fixture/extensions/hyde.conf +8 -0
  20. data/test/fixture/extensions/site/index.haml +1 -0
  21. data/test/fixture/fail_type/control/about/index.html +2 -0
  22. data/test/fixture/fail_type/control/about/us.html +2 -0
  23. data/test/fixture/fail_type/control/index.html +1 -0
  24. data/test/fixture/fail_type/hyde.conf +8 -0
  25. data/test/fixture/fail_type/site/index.haml +4 -0
  26. data/test/fixture/nested_layout/control/index.html +2 -0
  27. data/test/fixture/nested_layout/hyde.conf +8 -0
  28. data/test/fixture/nested_layout/layouts/default.haml +2 -0
  29. data/test/{fixtures/content_for/site/default.html.haml → fixture/nested_layout/layouts/post.haml} +1 -0
  30. data/test/fixture/nested_layout/site/index.haml +4 -0
  31. data/test/fixture/one/control/about/index.css +2 -0
  32. data/test/fixture/one/control/cheers.html +5 -0
  33. data/test/fixture/one/control/css/style.css +2 -0
  34. data/test/fixture/one/control/hello.html +5 -0
  35. data/test/fixture/one/control/hi.html +1 -0
  36. data/test/fixture/one/control/index.html +7 -0
  37. data/test/fixture/one/hyde.conf +9 -0
  38. data/test/fixture/one/layouts/default.haml +4 -0
  39. data/test/fixture/one/partials/menu.haml +3 -0
  40. data/test/fixture/one/site/about/index.scss +1 -0
  41. data/test/fixture/one/site/cheers.html.haml +1 -0
  42. data/test/fixture/one/site/css/style.scss +2 -0
  43. data/test/fixture/one/site/hello.haml +1 -0
  44. data/test/fixture/one/site/hi.html +1 -0
  45. data/test/fixture/one/site/index.haml +7 -0
  46. data/test/fixture/parent/control/about/index.html +2 -0
  47. data/test/fixture/parent/control/about/us.html +2 -0
  48. data/test/fixture/parent/control/index.html +1 -0
  49. data/test/fixture/parent/hyde.conf +8 -0
  50. data/test/fixture/parent/site/about/index.haml +3 -0
  51. data/test/fixture/parent/site/about/us.haml +3 -0
  52. data/test/fixture/parent/site/index.haml +3 -0
  53. data/test/fixture/sort/hyde.conf +8 -0
  54. data/test/fixture/sort/site/about/hardy.haml +4 -0
  55. data/test/fixture/sort/site/about/intrepid.haml +4 -0
  56. data/test/fixture/sort/site/about.haml +3 -0
  57. data/test/fixture/subclass/control/index.html +1 -0
  58. data/test/fixture/subclass/extensions/a/a.rb +12 -0
  59. data/test/fixture/subclass/hyde.conf +8 -0
  60. data/test/fixture/subclass/layouts/default.haml +1 -0
  61. data/test/fixture/subclass/layouts/post.haml +1 -0
  62. data/test/fixture/subclass/site/index.haml +4 -0
  63. data/test/helper.rb +15 -21
  64. data/test/unit/extensions_test.rb +16 -0
  65. data/test/unit/fixture_test.rb +77 -0
  66. data/test/unit/hyde_test.rb +30 -0
  67. metadata +107 -153
  68. data/.yardopts +0 -5
  69. data/LICENSE +0 -20
  70. data/VERSION +0 -1
  71. data/data/new_site/.gitignore +0 -24
  72. data/data/pages/404.html +0 -3
  73. data/hydeweb.gemspec +0 -159
  74. data/lib/hyde/clicommand.rb +0 -60
  75. data/lib/hyde/clicommands.rb +0 -128
  76. data/lib/hyde/ostruct.rb +0 -13
  77. data/lib/hyde/page_factory.rb +0 -90
  78. data/lib/hyde/renderer.rb +0 -133
  79. data/lib/hyde/renderers.rb +0 -100
  80. data/lib/hyde/sinatra/init.rb +0 -64
  81. data/lib/hyde/utils.rb +0 -43
  82. data/lib/hyde_misc/console.rb +0 -4
  83. data/manual/Extending/ExtendingHyde.md +0 -118
  84. data/manual/Hyde.md +0 -63
  85. data/manual/Introduction/Configuration.md +0 -70
  86. data/manual/Introduction/GettingStarted.md +0 -64
  87. data/manual/Introduction/Installation.md +0 -16
  88. data/manual/Introduction/Layouts.md +0 -14
  89. data/manual/Introduction/Metadata.md +0 -94
  90. data/manual/Introduction/Partials.md +0 -73
  91. data/manual/Introduction/TemplateLanguages.md +0 -59
  92. data/manual/Tips/Tips.md +0 -42
  93. data/test/fixtures/content_for/_config.yml +0 -8
  94. data/test/fixtures/content_for/layouts/cf-args.haml +0 -2
  95. data/test/fixtures/content_for/layouts/cf.haml +0 -14
  96. data/test/fixtures/content_for/layouts/default.haml +0 -4
  97. data/test/fixtures/content_for/layouts/shared/test.haml +0 -4
  98. data/test/fixtures/content_for/site/cf-args-default.haml +0 -2
  99. data/test/fixtures/content_for/site/cf-args.haml +0 -5
  100. data/test/fixtures/content_for/site/cf.haml +0 -6
  101. data/test/fixtures/content_for/site/cf2.haml +0 -3
  102. data/test/fixtures/content_for/site/index.html.haml +0 -9
  103. data/test/fixtures/content_for/site/var.html.haml +0 -5
  104. data/test/fixtures/content_for/www_control/cf-args-default.html +0 -1
  105. data/test/fixtures/content_for/www_control/cf-args.html +0 -2
  106. data/test/fixtures/content_for/www_control/cf.html +0 -17
  107. data/test/fixtures/content_for/www_control/cf2.html +0 -19
  108. data/test/fixtures/content_for/www_control/default.html +0 -2
  109. data/test/fixtures/content_for/www_control/index.html +0 -10
  110. data/test/fixtures/content_for/www_control/var.html +0 -2
  111. data/test/fixtures/custom/_config.yml +0 -8
  112. data/test/fixtures/custom/extensions/custom/custom.rb +0 -9
  113. data/test/fixtures/custom/layouts/default.haml +0 -8
  114. data/test/fixtures/custom/layouts/erbtest.erb +0 -2
  115. data/test/fixtures/custom/layouts/shared/sidebar.haml +0 -4
  116. data/test/fixtures/custom/site/about/index.html +0 -1
  117. data/test/fixtures/custom/site/assets/common.css.less +0 -1
  118. data/test/fixtures/custom/site/assets/style.css.less +0 -3
  119. data/test/fixtures/custom/site/foo.html.haml +0 -3
  120. data/test/fixtures/custom/site/index.html.haml +0 -6
  121. data/test/fixtures/custom/site/layout_test.html.haml +0 -6
  122. data/test/fixtures/custom/site/lol.html.erb +0 -7
  123. data/test/fixtures/custom/site/markdown.html.md +0 -8
  124. data/test/fixtures/custom/site/yes.html +0 -2
  125. data/test/fixtures/custom/www_control/about/index.html +0 -1
  126. data/test/fixtures/custom/www_control/assets/common.css +0 -1
  127. data/test/fixtures/custom/www_control/assets/style.css +0 -6
  128. data/test/fixtures/custom/www_control/foo.html +0 -1
  129. data/test/fixtures/custom/www_control/index.html +0 -16
  130. data/test/fixtures/custom/www_control/layout_test.html +0 -16
  131. data/test/fixtures/custom/www_control/lol.html +0 -5
  132. data/test/fixtures/custom/www_control/markdown.html +0 -17
  133. data/test/fixtures/custom/www_control/yes.html +0 -2
  134. data/test/fixtures/default/_config.yml +0 -8
  135. data/test/fixtures/default/extensions/custom/custom.rb +0 -2
  136. data/test/fixtures/default/layouts/default.haml +0 -5
  137. data/test/fixtures/default/site/about/index.html +0 -1
  138. data/test/fixtures/default/site/foo.html.haml +0 -3
  139. data/test/fixtures/default/site/index.html.haml +0 -6
  140. data/test/fixtures/default/site/layout_test.html.haml +0 -6
  141. data/test/fixtures/default/site/yes.html +0 -2
  142. data/test/fixtures/default/www_control/about/index.html +0 -1
  143. data/test/fixtures/default/www_control/foo.html +0 -1
  144. data/test/fixtures/default/www_control/index.html +0 -9
  145. data/test/fixtures/default/www_control/layout_test.html +0 -9
  146. data/test/fixtures/default/www_control/yes.html +0 -2
  147. data/test/test_all_fixtures.rb +0 -51
  148. data/test/test_build.rb +0 -20
  149. data/test/test_hyde.rb +0 -75
  150. data/test/test_page.rb +0 -26
  151. data/test/test_utils.rb +0 -22
@@ -1,3 +1,9 @@
1
+ v0.1.0
2
+ ------
3
+
4
+ - Complete rewrite. Many thing have been deprecated.
5
+ - Now uses Tilt and Shake.
6
+
1
7
  v0.0.8
2
8
  ------
3
9
 
data/Rakefile CHANGED
@@ -1,55 +1,5 @@
1
- begin
2
- require 'jeweler'
3
- Jeweler::Tasks.new do |s|
4
- s.name = "hydeweb"
5
- s.authors = ["Rico Sta. Cruz", "Sinefunc, Inc."]
6
- s.email = "rico@sinefunc.com"
7
- s.summary = "Website preprocessor"
8
- s.homepage = "http://github.com/sinefunc/hyde"
9
- s.description = "Website preprocessor"
10
- s.add_dependency('sinatra', '>= 1.0.0')
11
- s.add_dependency('less', '>= 1.2.21')
12
- s.add_dependency('haml', '>= 2.2.20')
13
- end
14
- Jeweler::GemcutterTasks.new
15
- rescue LoadError
16
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
1
+ task :test do
2
+ Dir['test/**/*_test.rb'].each { |f| load f }
17
3
  end
18
4
 
19
- require 'rake/testtask'
20
- Rake::TestTask.new(:test) do |test|
21
- test.libs << 'lib' << 'test'
22
- test.pattern = 'test/**/test_*.rb'
23
- test.verbose = true
24
- end
25
-
26
- begin
27
- require 'rcov/rcovtask'
28
- Rcov::RcovTask.new do |test|
29
- test.libs << 'test'
30
- test.pattern = 'test/**/test_*.rb'
31
- test.verbose = true
32
- end
33
- rescue LoadError
34
- task :rcov do
35
- abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
36
- end
37
- end
38
-
39
- task :test => :check_dependencies
40
-
41
5
  task :default => :test
42
-
43
- require 'rake/rdoctask'
44
- Rake::RDocTask.new do |rdoc|
45
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
46
-
47
- rdoc.rdoc_dir = 'rdoc'
48
- rdoc.title = "Hyde #{version}"
49
- rdoc.rdoc_files.include('README*')
50
- rdoc.rdoc_files.include('lib/**/*.rb')
51
- end
52
-
53
- task :autotest do
54
- system "rstakeout 'rake test' **/*.rb"
55
- end
data/bin/hyde CHANGED
@@ -1,27 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
- lib_path = File.dirname(__FILE__) + "/../lib"
3
- $:.unshift lib_path
2
+ $:.push File.expand_path('../../lib', __FILE__)
4
3
 
5
- require 'optparse'
6
- require 'rubygems'
7
4
  require 'hyde'
8
5
 
9
- # This will load the extensions
10
- begin
11
- $project = Hyde::Project.new
12
-
13
- rescue Hyde::IncompatibleError => e
14
- $stderr << e.message << "\n"
15
- exit
16
-
17
- rescue Hyde::NoRootError; end
18
-
19
- if ARGV.size == 0
20
- Hyde::CLICommands::Help.run
21
- exit
22
- end
23
-
24
- # Can error
25
- controller = Hyde::CLICommands.get_controller ARGV[0]
26
- params = ARGV[1..-1]
27
- controller.run(*params)
6
+ hydefile = Hyde::CLI.find_in_project('hyde.conf')
7
+ Hyde::CLI.run! :file => hydefile
data/bin/hyde01 ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ $:.push File.expand_path('../../lib', __FILE__)
3
+
4
+ require 'hyde'
5
+
6
+ hydefile = Hyde::CLI.find_in_project('hyde.conf')
7
+ Hyde::CLI.run! :file => hydefile
@@ -8,7 +8,7 @@ Instructions
8
8
  ------------
9
9
 
10
10
  1. Make sure Ruby (>= v1.8) is installed.
11
- 2. Install the hydeweb gem: `gem install hydeweb --pre`
11
+ 2. Install the hydeweb gem: `gem install hydeweb --pre -v "~> 0.1"`
12
12
  3. Build the site HTML files by typing: `hyde build`
13
13
 
14
14
  You may also type `hyde start` to serve the files in a local web server.
@@ -1,7 +1,7 @@
1
1
  # This is a Hyde site.
2
2
  # Install the `hydeweb` Ruby gem and type `hyde` for help.
3
3
 
4
- hyde_requirement: 0.0.5
4
+ hyde_requirement: 0.1
5
5
 
6
6
  # Path options
7
7
  # -------------
@@ -24,9 +24,12 @@ output_path: public
24
24
  # Any files matching these in the site_path will be excluded.
25
25
  ignore:
26
26
  - **/*~
27
+ - **/_*.scss
28
+
29
+ # Specify engine options here. These are optional.
30
+ tilt_options:
31
+ haml:
32
+ :escape_html: true
33
+ scss:
34
+ :load_paths: [ 'site/css' ]
27
35
 
28
- # Put any custom gems here.
29
- # gems:
30
- # - hyde-rst
31
- # - hyde-minify
32
- # - hyde-zip
@@ -0,0 +1,40 @@
1
+ class Hyde
2
+ class CLI
3
+ module Helpers
4
+ def say_info(str)
5
+ say_status '*', str, 30
6
+ end
7
+
8
+ def say_status(what, cmd, color=32)
9
+ c1 = "\033[0;#{color}m"
10
+ c0 = "\033[0;m"
11
+ puts "#{c1}%10s#{c0} %s" % [ what, cmd ]
12
+ end
13
+
14
+ def no_project
15
+ "No project file here."
16
+ end
17
+
18
+ def project
19
+ @project ||= begin
20
+ pass no_project unless @hydefile
21
+ Dir.chdir File.dirname(@hydefile)
22
+
23
+ begin
24
+ project = Hyde::Project.new
25
+ pass no_project unless project.config_file?
26
+ rescue LegacyError
27
+ err "This is a legacy Hyde project."
28
+ err "To force it, try editing `hyde.conf` and upgrade the version line to `hyde_requirement: 0.1`."
29
+ pass
30
+ rescue VersionError => e
31
+ err e.message
32
+ pass
33
+ end
34
+
35
+ project
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
data/lib/hyde/cli.rb ADDED
@@ -0,0 +1,86 @@
1
+ class Hyde
2
+ class CLI < Shake
3
+ autoload :Helpers, "#{PREFIX}/hyde/cli/helpers"
4
+
5
+ extend Helpers
6
+ include Defaults
7
+
8
+ task(:create) do
9
+ wrong_usage unless params.size == 1
10
+
11
+ template = File.expand_path('../../../data/new_site', __FILE__)
12
+ target = params.first
13
+
14
+ pass "Error: target directory already exists." if File.directory?(target)
15
+
16
+ puts "Creating files in #{target}:"
17
+ puts
18
+
19
+ FileUtils.cp_r template, target
20
+ Dir[File.join(target, '**', '*')].sort.each do |f|
21
+ say_status :create, f if File.file?(f)
22
+ end
23
+
24
+ puts ""
25
+ puts "Done! You've created a new project in #{target}."
26
+ puts "Get started now:"
27
+ puts ""
28
+ puts " $ cd #{target}"
29
+ puts " $ #{executable} start"
30
+ puts ""
31
+ puts "Or build the HTML files:"
32
+ puts ""
33
+ puts " $ #{executable} build"
34
+ puts ""
35
+ end
36
+
37
+ task.description = "Starts a new Hyde project"
38
+ task.usage = "create NAME"
39
+
40
+ task(:build) do
41
+ pre = project.config.output_path
42
+
43
+ begin
44
+ project.pages.each { |page|
45
+ handler = ''
46
+ handler = "(#{page.tilt_engine_name})" if page.tilt?
47
+ puts ("\033[0;33m*\033[0;32m #{pre}\033[0;m%-50s%s" % [ page.path, handler ]).strip
48
+ page.write
49
+ }
50
+ rescue NoGemError => e
51
+ err "Error: #{e.message}"
52
+ ensure
53
+ project.build_cleanup
54
+ end
55
+ end
56
+
57
+ task.description = "Builds the current project"
58
+
59
+ task(:start) do
60
+ port = (params.extract('-p') || 4833).to_i
61
+ host = (params.extract('-o') || '0.0.0.0')
62
+
63
+ require 'hyde/server'
64
+
65
+ Hyde::Server.run! :Host => host, :Port => port
66
+ end
67
+
68
+ task.description = "Starts the server"
69
+
70
+ task(:version) do
71
+ puts "Hyde #{Hyde::VERSION}"
72
+ end
73
+
74
+ task.description = "Shows the current version"
75
+
76
+ def self.run!(options={})
77
+ @hydefile = options[:file]
78
+ return invoke(:version) if ARGV == ['-v']
79
+ return invoke(:version) if ARGV == ['--version']
80
+
81
+ begin
82
+ super *[]
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,37 @@
1
+ class Hyde
2
+ class Config < OpenStruct
3
+ DEFAULTS = {
4
+ :site_path => '.',
5
+ :layouts_path => 'layouts',
6
+ :extensions_path => nil,
7
+ :partials_path => 'partials',
8
+ :output_path => 'public'
9
+ }
10
+
11
+ def self.load(config_file)
12
+ new(YAML::load_file(config_file)) rescue new
13
+ end
14
+
15
+ def initialize(options={})
16
+ super DEFAULTS.merge(options)
17
+ end
18
+
19
+ # Returns tilt options for a given file.
20
+ # @example tilt_options('index.haml') # { :escape_html => ... }
21
+ def tilt_options_for(file)
22
+ tilt_options file.split('.').last.downcase
23
+ end
24
+
25
+ # Returns tilt options for a given engine.
26
+ # @example tilt_options('haml') # { :escape_html => ... }
27
+ def tilt_options(what)
28
+ @tilt_options ||= begin
29
+ o = @table[:tilt_options] || Hash.new
30
+ o['haml'] ||= { :escape_html => true }
31
+ o
32
+ end
33
+
34
+ @tilt_options[what.to_s]
35
+ end
36
+ end
37
+ end
data/lib/hyde/helpers.rb CHANGED
@@ -1,49 +1,8 @@
1
- module Hyde
2
- module Helpers
3
- def partial(partial_path, locals = {})
4
- begin
5
- p = project[partial_path.to_s, :Partial]
6
- p.referrer = (referrer || self)
7
- p.render locals
8
-
9
- rescue ::Hyde::NotFound
10
- "<!-- Can't find #{partial_path.to_s} -->"
11
- end
12
- end
13
-
14
- def content_for(key, &block)
15
- content_block[key.to_sym] = block
16
- end
17
-
18
- def has_content?(key)
19
- content_block.keys.include? key.to_sym
20
- end
21
-
22
- def yield_content(key, *args, &default_block)
23
- block = content_block[key.to_sym]
24
-
25
- if respond_to?(:block_is_haml?) && block_is_haml?(block)
26
- capture_haml *args, &block
27
-
28
- elsif block.respond_to?(:call)
29
- block.call *args
30
-
31
- elsif block_given? and respond_to(:block_is_haml?) and block_is_haml?(default_block)
32
- capture_haml *args, &default_block
33
-
34
- elsif block_given?
35
- yield
36
-
37
- else
38
- ''
39
- end
40
- end
41
-
42
- protected
43
- def content_block
44
- file_key = (referrer || self).to_sym
45
- @@content_blocks ||= Hash.new
46
- @@content_blocks[file_key] ||= Hash.new
47
- end
1
+ class Hyde
2
+ module Helpers
3
+ def partial(path, locals={})
4
+ partial = Partial[path.to_s, page] or return ''
5
+ partial.to_html :page => self
48
6
  end
49
7
  end
8
+ end
data/lib/hyde/layout.rb CHANGED
@@ -1,12 +1,20 @@
1
- module Hyde
2
- class Layout < Page
3
- def self.get_filename(path, project)
4
- project.root(:layouts, path)
5
- end
1
+ class Hyde
2
+ class Layout < Page
3
+ attr_accessor :page
6
4
 
7
- def layout
8
- # Don't try a default layout.
9
- @layout
10
- end
5
+ def self.[](id, page)
6
+ object = super(id, page.project)
7
+ object.page = page if object
8
+ object
11
9
  end
10
+
11
+ protected
12
+ def self.root_path(project, *a)
13
+ project.path(:layouts, *a)
14
+ end
15
+
16
+ def default_layout
17
+ nil
18
+ end
19
+ end
12
20
  end
data/lib/hyde/meta.rb CHANGED
@@ -1,23 +1,7 @@
1
- module Hyde
2
- class Meta < OStruct
3
- attr_reader :page
4
-
5
- def initialize(page)
6
- @page = page
7
- super nil
8
- end
9
-
10
- def |(data)
11
- # TODO: Consider OStruct here?
12
- @table.merge data #if data.is_a? Hash
13
- end
14
-
15
- def layout=(value)
16
- super value
17
- if value.is_a?(String)
18
- @page.layout = @page.project[value, :Layout]
19
- @page.layout.referrer = (page.referrer || page)
20
- end
21
- end
1
+ class Hyde
2
+ class Meta < OpenStruct
3
+ def merge!(hash)
4
+ @table.merge(hash)
22
5
  end
23
6
  end
7
+ end