hyper 0.3.0beta1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -14,6 +14,16 @@ Five steps from install to a functioning website:
14
14
 
15
15
  Point your browser at <a href="http://0.0.0.0:9292/">0.0.0.0:9292</a> and you'll see your website's home page.
16
16
 
17
+ ## Deployment
18
+
19
+ If you love Heroku, deployment is easy:
20
+
21
+ $ cd my_website
22
+ $ heroku create
23
+ $ git push heroku master
24
+
25
+ Any other rack-compatible host should work too.
26
+
17
27
  ## Adding Content
18
28
 
19
29
  To add content to your site, you just need to know two things:
@@ -29,19 +39,32 @@ Also note: your home page content goes in <code>views/index.html.erb</code>; Hyp
29
39
 
30
40
  Put your stylesheets, images, javascripts, etc in <code>public</code>: Hyper will handle the rest. When referencing these files in your HTML, drop the "public" from the path &mdash; <code>public/images/logo.png</code> should become <code>&lt;img src="/images/logo.png" /&gt;</code>.
31
41
 
32
- ## Deployment
42
+ ## Helper Code
33
43
 
34
- If you love Heroku, deployment is easy:
44
+ Put your custom helper methods in <code>lib/helper.rb</code>:
35
45
 
36
- $ cd my_website
37
- $ heroku create
38
- $ git push heroku master
46
+ # in lib/helper.rb
47
+ module Hyper::Helper
48
+ def the_time
49
+ Time.now.to_s
50
+ end
51
+ end
39
52
 
40
- Any other rack-compatible host should work too.
53
+ # in templates/layout.html.erb
54
+ <html>
55
+ <head>
56
+ <title>Clock</title>
57
+ </head>
58
+ <body>
59
+ <h1>Hello! The time is <%= the_time -%></h1>
60
+ </body>
61
+ </html>
62
+
63
+ Helper methods have access to a <code>request</code> object which is an instance of <a href="http://rack.rubyforge.org/doc/classes/Rack/Request.html"><code>Rack::Request</code></a>.
41
64
 
42
65
  ## In-Depth
43
66
 
44
- There's not a whole lot of depth to go into: hyper is intentionally simple. Once you've generated a new site, you'll get the following files and folders:
67
+ Hyper is intentionally simple. Once you've generated a new site, you'll get the following files and folders:
45
68
 
46
69
  <table>
47
70
  <tr>
@@ -54,7 +77,7 @@ There's not a whole lot of depth to go into: hyper is intentionally simple. Once
54
77
  </tr>
55
78
  <tr>
56
79
  <td><code>templates/views</code></td>
57
- <td>This is where your page-specific content lives. See "Adding Content for more details"</td>
80
+ <td>This is where your page-specific content lives. See "Adding Content" for more details</td>
58
81
  </tr>
59
82
  <tr>
60
83
  <td><code>public</code></td>
@@ -70,7 +93,7 @@ There's not a whole lot of depth to go into: hyper is intentionally simple. Once
70
93
  </tr>
71
94
  </table>
72
95
 
73
- Defaults are set so you don't have to worry about anything outside <code>templates</code> if you don't want to. If you understand rack and want to add middleware, do that in <code>config.ru</code> (but note that Hyper already knows to serve static content from <code>public</code>, so you don't need to use <code>Rack::Static</code>).
96
+ Defaults are set so you don't have to worry about anything outside <code>templates</code> if you don't want to. If you understand rack and want to add middleware, do that in <code>config.ru</code> &mdash; note that Hyper already knows to serve static content from <code>public</code>, so you don't need to use <code>Rack::Static</code>.
74
97
 
75
98
  ## Author
76
99
 
data/bin/hyper CHANGED
@@ -6,15 +6,20 @@ options = {}
6
6
  parser = OptionParser.new do |opts|
7
7
  opts.banner = "Usage: hyper new NAME [options]"
8
8
 
9
- opts.on('-f', '--force', 'Overwrite existing files') do
9
+ opts.on('-f', '--force', '# Overwrite existing files') do
10
10
  options[:force] = true
11
11
  end
12
+
13
+ opts.on('-v', '--version', '# Show version and exit') do
14
+ puts "Hyper #{Hyper::Version.to_s}"; exit
15
+ end
12
16
  end
13
17
 
18
+ parser.parse!
19
+
14
20
  case ARGV.first
15
21
  when 'new'
16
22
  if name = ARGV[1]
17
- parser.parse!
18
23
  Hyper::Generator.new(name, options).generate
19
24
  else
20
25
  puts "Please provide a name"
@@ -1,30 +1,35 @@
1
1
  require 'rack/builder'
2
2
 
3
3
  module Hyper
4
- autoload :Generator, 'hyper/generator'
5
- autoload :Response, 'hyper/response'
6
- autoload :Static, 'hyper/static'
7
- autoload :Utils, 'hyper/utils'
8
- autoload :Version, 'hyper/version'
4
+ autoload :Application, 'hyper/application'
5
+ autoload :Generator, 'hyper/generator'
6
+ autoload :Static, 'hyper/static'
7
+ autoload :Utils, 'hyper/utils'
8
+ autoload :Version, 'hyper/version'
9
9
 
10
10
  extend self
11
11
 
12
- # @api public
13
12
  def call(env)
14
13
  builder = Rack::Builder.new do
15
14
  use Hyper::Static
16
- run Hyper::Response.new
15
+ run Hyper::Application.new
17
16
  end
18
17
 
19
18
  builder.to_app.call(env)
20
19
  end
21
20
 
22
- # @api public
23
21
  def root
24
- Pathname.new(Dir.pwd)
22
+ @root ||= Pathname.new(Dir.pwd)
23
+ end
24
+
25
+ def root=(path)
26
+ @root = Pathname.new(path)
27
+ end
28
+
29
+ def template_root
30
+ @template_root ||= root.join('templates')
25
31
  end
26
32
 
27
- # @api public
28
33
  def template_root=(path)
29
34
  @template_root = Pathname.new(path)
30
35
  end
@@ -32,9 +37,4 @@ module Hyper
32
37
  def view_root
33
38
  @view_root ||= template_root.join('views')
34
39
  end
35
-
36
- # @api private
37
- def template_root
38
- @template_root ||= root.join('templates')
39
- end
40
40
  end
@@ -0,0 +1,41 @@
1
+ require 'rack/request'
2
+ require 'tilt'
3
+ require Hyper.root.join('lib/helper')
4
+
5
+ module Hyper
6
+ class Application
7
+ include Hyper::Helper
8
+
9
+ attr :request
10
+
11
+ def call(env)
12
+ @request = Rack::Request.new(env)
13
+ url = request.path
14
+ layout = Utils.layout_path
15
+ view = Utils.view_path(url)
16
+
17
+ if File.file?(view)
18
+ respond_with(200, rendered_templates(layout, view))
19
+ else
20
+ respond_with(404, "404 Not Found: #{url}")
21
+ end
22
+ end
23
+
24
+ private
25
+ def respond_with(status, body)
26
+ [status, headers_for(body), StringIO.new(body)]
27
+ end
28
+
29
+ def headers_for(body)
30
+ {'Content-Type' => 'text/html', 'Content-Length' => body.length.to_s}
31
+ end
32
+
33
+ def rendered_templates(layout, view)
34
+ render_erb(layout) { render_erb(view) }
35
+ end
36
+
37
+ def render_erb(template, &block)
38
+ Tilt.new(template, :trim => '-').render(self, &block)
39
+ end
40
+ end
41
+ end
@@ -1,7 +1,6 @@
1
1
  require 'term/ansicolor'
2
2
 
3
3
  module Hyper
4
- # @api private
5
4
  class Generator
6
5
  include Term::ANSIColor
7
6
 
@@ -1,7 +1,6 @@
1
1
  require 'rack/builder'
2
2
 
3
3
  module Hyper
4
- # @api private
5
4
  class Static
6
5
  class << self
7
6
  def urls
@@ -1,5 +1,4 @@
1
1
  module Hyper
2
- # @api private
3
2
  module Utils
4
3
  extend self
5
4
 
@@ -25,7 +24,7 @@ module Hyper
25
24
  if ['', '/'].include?(url) # Root URL
26
25
  '/index'
27
26
  elsif url =~ /.+\/$/ # Folder indexes
28
- File.join(url, 'index')
27
+ url + 'index'
29
28
  else # Everything else
30
29
  url
31
30
  end
@@ -2,7 +2,7 @@ module Hyper
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 3
5
- TINY = '0beta1'
5
+ TINY = 0
6
6
 
7
7
  def self.to_s
8
8
  [MAJOR, MINOR, TINY].join('.')
metadata CHANGED
@@ -1,15 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyper
3
3
  version: !ruby/object:Gem::Version
4
- hash: 62196369
5
- prerelease: 5
4
+ hash: 19
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
9
  - 0
10
- - beta
11
- - 1
12
- version: 0.3.0beta1
10
+ version: 0.3.0
13
11
  platform: ruby
14
12
  authors:
15
13
  - James Wilding
@@ -17,7 +15,7 @@ autorequire:
17
15
  bindir: bin
18
16
  cert_chain: []
19
17
 
20
- date: 2011-05-18 00:00:00 +01:00
18
+ date: 2011-07-07 00:00:00 +01:00
21
19
  default_executable:
22
20
  dependencies:
23
21
  - !ruby/object:Gem::Dependency
@@ -89,8 +87,8 @@ extensions: []
89
87
  extra_rdoc_files: []
90
88
 
91
89
  files:
90
+ - lib/hyper/application.rb
92
91
  - lib/hyper/generator.rb
93
- - lib/hyper/response.rb
94
92
  - lib/hyper/static.rb
95
93
  - lib/hyper/template/config.ru
96
94
  - lib/hyper/template/Gemfile
@@ -122,14 +120,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
122
120
  required_rubygems_version: !ruby/object:Gem::Requirement
123
121
  none: false
124
122
  requirements:
125
- - - ">"
123
+ - - ">="
126
124
  - !ruby/object:Gem::Version
127
- hash: 25
125
+ hash: 3
128
126
  segments:
129
- - 1
130
- - 3
131
- - 1
132
- version: 1.3.1
127
+ - 0
128
+ version: "0"
133
129
  requirements: []
134
130
 
135
131
  rubyforge_project:
@@ -1,34 +0,0 @@
1
- require 'rack/request'
2
- require 'tilt'
3
-
4
-
5
- module Hyper
6
- # @api private
7
- class Response
8
- def call(env)
9
- request = Rack::Request.new(env)
10
- headers = {'Content-Type' => 'text/html'}
11
- layout = Utils.layout_path
12
- view = Utils.view_path(request.path)
13
-
14
- if File.file?(view)
15
- status = 200
16
- body = render_templates(layout, view)
17
- else
18
- status = 404
19
- body = "404 Not Found: #{request.path}"
20
- end
21
-
22
- [status, headers, StringIO.new(body)]
23
- end
24
-
25
- private
26
- def render_templates(layout, view)
27
- render_erb(layout) { render_erb(view) }
28
- end
29
-
30
- def render_erb(template, &block)
31
- Tilt.new(template, :trim => '-').render(&block)
32
- end
33
- end
34
- end