hydeweb 0.0.8.pre2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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