spire 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -12,6 +12,12 @@ This will install spire, create a project called 'project_name' in the same dire
12
12
 
13
13
  = Usage
14
14
 
15
+ == Creating a project
16
+
17
+ To create a new project you simply use the spire executable like so:
18
+ spire -c my_project
19
+ and it will make a template app in ./my_project in the folder it was executed.
20
+
15
21
  == Routes
16
22
 
17
23
  Routes are used in the config.ru, they work like the old-style Rails routes:
@@ -49,6 +55,12 @@ This would display a html page with that text. The Response.new initiator could
49
55
  end
50
56
  Where the first instance variable @status is the HTTP status to show, the second being the content type, and the last being the returned value as a string.
51
57
 
58
+ === Controller generator
59
+
60
+ You can generate controllers using the spire executable. To do this you can simply run:
61
+ spire -g foo
62
+ Which will generate the FooController in the app/controllers directory with all the necessary code for you.
63
+
52
64
  == Views
53
65
 
54
66
  === RHTML
@@ -58,18 +70,30 @@ With the naming scheme of:
58
70
  template.rhtml
59
71
  The .rhtml is important so Spire knows what file it is. To pass data to a view, you simply define an instance variable before you render the template and it will automatically be accessible in your view template.
60
72
  To render a template, you simply use:
61
- render("index.rhtml")
73
+ render :view => "index.rhtml"
62
74
 
63
75
  === HAML
64
76
  HAML templates can be rendered like so:
65
- render("index.haml")
77
+ render :view => "index.haml"
66
78
  This would load the index.haml view in:
67
79
  /app/views/index.haml
68
80
  To pass data to the view, define and fill an instance variable with content or an object, and you can use it inside your HAML view.
69
81
 
70
82
  === HTML
71
83
  HTML are static templates to be used in your project/app, they can't use variables, nor can they execute ruby code. They can be rendered using:
72
- render("index.html")
84
+ render :view => "index.html"
73
85
  Which would load the 'index.html' file from:
74
86
  project_name/app/views/index.html
75
- The first argument is the file name, the second being the extension.
87
+ The first argument is the file name, the second being the extension.
88
+ You could also use:
89
+ render :file => "index.html"
90
+ if the html file is in:
91
+ /public/index.html
92
+
93
+ == Files
94
+ To return a file from a method, you can use the render method for this task:
95
+ render :file => "test.pdf"
96
+ This will give the browser the file 'test.pdf' from the /public directory. This method will also match the content-type of this automatically using magic and will give the browser the correct content type and response automatically. This will also give a HTML 404 error page if the file does not exist.
97
+
98
+ == Dependencies
99
+ You will need 'git', 'wget' and 'ruby' and 'rubygems' to get started.
data/Rakefile CHANGED
@@ -18,8 +18,7 @@ Jeweler::Tasks.new do |gem|
18
18
  gem.homepage = "http://github.com/snicol/spire"
19
19
  gem.license = "MIT"
20
20
  gem.summary = %Q{A light controller-only rack framework with a dash of views}
21
- gem.description = %Q{Light rack-based framework with controllers, static views and a router
22
- with templating engine support coming soon}
21
+ gem.description = %Q{Light rack-based framework with controllers, HAML/ERB views, router & error handler}
23
22
  gem.email = "scott@scottnicol.co.uk"
24
23
  gem.authors = ["Scott Nicol"]
25
24
  # dependencies defined in Gemfile
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.3
1
+ 0.4.0
@@ -18,6 +18,7 @@ module Spire
18
18
  file = contents.extension_check
19
19
  return file
20
20
  end
21
+
21
22
  if opts[:view].is_a? Array
22
23
  @storage = ""
23
24
  opts[:view].each do |file|
data/lib/spire/error.rb CHANGED
@@ -1,33 +1,27 @@
1
1
  module Spire
2
2
  class Error
3
- def initialize(opts={})
4
- status = opts[:status] or 200
5
- message = opts[:message] or "Unknown Error"
6
-
7
- case status
3
+ def initialize(opts={:status => 200, :message=> "Unknown Error"})
4
+
5
+ case opts[:status]
8
6
  when 200
9
- self.return_error(message, status)
7
+ self.return_error(opts[:message], opts[:status])
10
8
  when 404
9
+ if opts[:message]
10
+ self.return_error(opts[:message], opts[:status])
11
+ else
11
12
  self.return_404
13
+ end
14
+ when 444
15
+ self.return_444
12
16
  when 401
13
17
  self.return_401
14
18
  when 204
15
19
  self.return_204
16
20
  when 301
17
21
  self.return_301
18
- when 444
19
- self.return_444
20
22
  end
21
23
  end
22
24
 
23
- def return_404
24
- @return = Response.new("404 // Page not found", 'text/html;', 404)
25
- end
26
-
27
- def return_401
28
- @return = Response.new("401 // Not authorized", 'text/html;', 401)
29
- end
30
-
31
25
  def return_204
32
26
  @return = Response.new("204 // No content", 'text/html;', 204)
33
27
  end
@@ -35,15 +29,23 @@ module Spire
35
29
  def return_301
36
30
  @return = Response.new("301 // Moved permanently", 'text/html;', 301)
37
31
  end
38
-
39
- def return_error(message, status)
40
- @return = Response.new(message, 'text/html;', status)
32
+
33
+ def return_401
34
+ @return = Response.new("401 // Not authorized", 'text/html;', 401)
35
+ end
36
+
37
+ def return_404
38
+ @return = Response.new("404 // Page not found", 'text/html;', 404)
41
39
  end
42
-
40
+
43
41
  def return_444
44
42
  @return = Response.new("No response made by the server, check for a valid response", 'text/html;', 404)
45
43
  end
46
-
44
+
45
+ def return_error(message, status)
46
+ @return = Response.new(message, 'text/html;', status)
47
+ end
48
+
47
49
  def to_rack
48
50
  @return.to_rack
49
51
  end
data/lib/spire/public.rb CHANGED
@@ -3,21 +3,20 @@ require 'spire/resource/mime'
3
3
  module Spire
4
4
  class Public
5
5
  def initialize(opts={:render=>true})
6
- @file = opts[:file]
7
- @render = opts[:render]
6
+ @opts = opts
8
7
  mime = Mime.new
9
8
  @mime_types = mime.return_mimes
10
9
  end
11
10
 
12
11
  def extension_check
13
- file_extension = File.extname(@file)
12
+ file_extension = File.extname(@opts[:file])
14
13
  @mime_types.each do |ext, type|
15
14
  if file_extension == ext
16
15
  @content_type = type
17
16
  end
18
17
  end
19
18
 
20
- if @render
19
+ if @opts[:render]
21
20
  self.create_response
22
21
  else
23
22
  return [false, @content_type]
@@ -26,18 +25,14 @@ module Spire
26
25
 
27
26
  def create_response
28
27
  path = File.expand_path(__FILE__)
29
- path["lib/spire/public.rb"] = "public/#{@file}"
30
- return Error.new(:status => 404) unless File.exists?(path)
28
+ path["lib/spire/public.rb"] = "public/#{@opts[:file]}"
29
+ return Error.new(:status => 404, :message => "404 // File not found") unless File.exists?(path)
31
30
  file = IO.read(path)
32
31
  @return = {}
33
32
  @return[:file] = file
34
33
  @return[:content_type] = @content_type
35
34
  return @return
36
35
  end
37
-
38
- def to_rack
39
- @return.to_rack
40
- end
41
36
 
42
37
  end
43
38
  end
@@ -8,12 +8,13 @@ module Spire
8
8
  ".css" => "text/css",
9
9
  ".ics" => "text/calendar",
10
10
  ".csv" => "text/csv",
11
-
11
+
12
12
  ".png" => "image/png",
13
13
  ".jpeg" => "image/jpeg",
14
14
  ".gif" => "image/gif",
15
15
  ".bmp" => "image/bmp",
16
16
  ".tiff" => "image/tiff",
17
+ ".ico" => "image/image/x-icon",
17
18
 
18
19
  ".mpeg" => "video/mpeg",
19
20
 
data/lib/spire/router.rb CHANGED
@@ -13,9 +13,8 @@ module Spire
13
13
 
14
14
  def route
15
15
  @app["controller"] = nil
16
-
17
- if @request["controller"] == "public"
18
- self.return_file
16
+ if @request["controller"] == "favicon.ico"
17
+ return self.return_file("favicon.ico")
19
18
  end
20
19
 
21
20
  if @request["controller"] == nil
@@ -36,15 +35,15 @@ module Spire
36
35
  end
37
36
  end
38
37
 
39
- unless @app["controller"]
40
- return Error.new :status => 404
38
+ unless @app["controller"]
39
+ return Error.new :message => "404 // Route not found in system/routes.rb", :status => 404
41
40
  end
42
41
 
43
42
  return self.run
44
43
  end
45
44
 
46
- def return_file
47
- result = Public.new :file => "test.html", :render => true
45
+ def return_file(file)
46
+ result = Public.new :file => file, :render => true
48
47
  file = result.extension_check
49
48
  return Response.new(file[:file], file[:content_type], 200)
50
49
  end
@@ -63,9 +62,9 @@ module Spire
63
62
 
64
63
  content_type = "text/html;"
65
64
  status = 200
66
-
67
- if result == 404
68
- return Error.new :status => 404
65
+
66
+ if result == 404 or result == nil
67
+ return Error.new :message => "404 // No method/Response from method. See #{@app["controller"]}##{@app["action"]} and check for a response", :status => 404
69
68
  end
70
69
 
71
70
  if @class.instance_variable_get(:@status)
data/spire.gemspec CHANGED
@@ -5,12 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "spire"
8
- s.version = "0.3.3"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Scott Nicol"]
12
- s.date = "2011-10-20"
13
- s.description = "Light rack-based framework with controllers, static views and a router \n with templating engine support coming soon"
12
+ s.date = "2011-10-21"
13
+ s.description = "Light rack-based framework with controllers, HAML/ERB views, router & error handler"
14
14
  s.email = "scott@scottnicol.co.uk"
15
15
  s.executables = ["spire"]
16
16
  s.extra_rdoc_files = [
@@ -30,7 +30,6 @@ Gem::Specification.new do |s|
30
30
  "lib/spire/public.rb",
31
31
  "lib/spire/resource/mime.rb",
32
32
  "lib/spire/router.rb",
33
- "routes.rb",
34
33
  "spire.gemspec"
35
34
  ]
36
35
  s.homepage = "http://github.com/snicol/spire"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spire
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-20 00:00:00.000000000Z
12
+ date: 2011-10-21 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
- requirement: &70258656997880 !ruby/object:Gem::Requirement
16
+ requirement: &70167713606260 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.3.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70258656997880
24
+ version_requirements: *70167713606260
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rack-rewrite
27
- requirement: &70258656997400 !ruby/object:Gem::Requirement
27
+ requirement: &70167713605780 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.2.1
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70258656997400
35
+ version_requirements: *70167713605780
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: haml
38
- requirement: &70258656996920 !ruby/object:Gem::Requirement
38
+ requirement: &70167713605300 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 3.1.0
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70258656996920
46
+ version_requirements: *70167713605300
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: erubis
49
- requirement: &70258656996440 !ruby/object:Gem::Requirement
49
+ requirement: &70167713604820 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 2.7.0
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70258656996440
57
+ version_requirements: *70167713604820
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: bundler
60
- requirement: &70258656995960 !ruby/object:Gem::Requirement
60
+ requirement: &70167713604340 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.0.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70258656995960
68
+ version_requirements: *70167713604340
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: jeweler
71
- requirement: &70258656995480 !ruby/object:Gem::Requirement
71
+ requirement: &70167713603860 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 1.6.4
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70258656995480
79
+ version_requirements: *70167713603860
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rcov
82
- requirement: &70258656995000 !ruby/object:Gem::Requirement
82
+ requirement: &70167713603380 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,9 +87,9 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70258656995000
91
- description: ! "Light rack-based framework with controllers, static views and a router
92
- \n with templating engine support coming soon"
90
+ version_requirements: *70167713603380
91
+ description: Light rack-based framework with controllers, HAML/ERB views, router &
92
+ error handler
93
93
  email: scott@scottnicol.co.uk
94
94
  executables:
95
95
  - spire
@@ -110,7 +110,6 @@ files:
110
110
  - lib/spire/public.rb
111
111
  - lib/spire/resource/mime.rb
112
112
  - lib/spire/router.rb
113
- - routes.rb
114
113
  - spire.gemspec
115
114
  homepage: http://github.com/snicol/spire
116
115
  licenses:
@@ -127,7 +126,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
127
126
  version: '0'
128
127
  segments:
129
128
  - 0
130
- hash: 1719392172410138947
129
+ hash: 2784368830073330069
131
130
  required_rubygems_version: !ruby/object:Gem::Requirement
132
131
  none: false
133
132
  requirements:
data/routes.rb DELETED
@@ -1,4 +0,0 @@
1
- routes = {
2
- "default" => "index#index", # the default route!
3
- "/index" => "index#index",
4
- }