spire 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
File without changes
data/Gemfile.lock CHANGED
File without changes
data/README.rdoc CHANGED
File without changes
data/Rakefile CHANGED
File without changes
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.3
1
+ 0.2.4
data/bin/spire CHANGED
File without changes
@@ -3,31 +3,61 @@ require 'spire/http'
3
3
  module Spire
4
4
  class MainController
5
5
 
6
- def initialize(base_path)
7
- @base_path = base_path
8
- end
9
-
10
- def render(view)
6
+ def render(opts={})
11
7
  data = {}
12
8
  instance_variables.each do |var|
13
9
  data[var] = instance_variable_get(var)
14
10
  end
15
11
 
16
- type = view.split('.')[1]
12
+ if opts[:text]
13
+ return opts[:text]
14
+ end
15
+
16
+ if opts[:file]
17
+ contents = Public.new :file => "test.html", :render => true
18
+ file = contents.extension_check
19
+ return file
20
+ end
21
+ if opts[:view].is_a? Array
22
+ @storage = ""
23
+ opts[:view].each do |file|
24
+ file_path = File.join($base_path, 'views', file)
25
+ return Error.new(:status => 404) unless File.exists?(file_path)
26
+ contents = IO.read(file_path)
27
+ extension = File.extname(file_path)
28
+
29
+ case extension
30
+ when '.haml'
31
+ require 'haml'
32
+ @storage = @storage + Haml::Engine.new(contents).render(Object.new)
33
+ when '.rhtml'
34
+ require 'erubis'
35
+ eruby = Erubis::Eruby.new(contents)
36
+ @storage = @storage + eruby.result(data)
37
+ else
38
+ @storage = @storage + contents
39
+ end
40
+ end
41
+ return @storage
42
+ end
43
+
44
+ file_path = File.join($base_path, 'views', opts[:view])
45
+ return Error.new(:status => 404) unless File.exists?(file_path)
46
+ contents = IO.read(file_path)
47
+ extension = File.extname(file_path)
17
48
 
18
- if type == "html"
19
- File.open(@base_path+'/views/'+view, 'r').read
20
- elsif type == "haml"
49
+ case extension
50
+ when '.haml'
21
51
  require 'haml'
22
- file = File.open(@base_path+'/views/'+view, 'r').read
23
- Haml::Engine.new(file).render(Object.new, data)
24
- elsif type == "rhtml"
52
+ Haml::Engine.new(contents).render(Object.new)
53
+ when '.rhtml'
25
54
  require 'erubis'
26
- file = File.open(@base_path+'/views/'+view, 'r').read
27
- eruby = Erubis::Eruby.new(file)
28
- return eruby.result(data)
55
+ eruby = Erubis::Eruby.new(contents)
56
+ eruby.result(data)
57
+ else
58
+ contents
29
59
  end
30
60
  end
31
61
 
32
62
  end
33
- end
63
+ end
data/lib/spire/error.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  module Spire
2
2
  class Error
3
- def initialize(message, status='200')
3
+ def initialize(opts={})
4
+ status = opts[:status] or 200
5
+ message = opts[:message] or "Unknown Error"
6
+
4
7
  case status
5
8
  when 200
6
9
  self.return_error(message, status)
@@ -12,6 +15,8 @@ module Spire
12
15
  self.return_204
13
16
  when 301
14
17
  self.return_301
18
+ when 444
19
+ self.return_444
15
20
  end
16
21
  end
17
22
 
@@ -34,7 +39,11 @@ module Spire
34
39
  def return_error(message, status)
35
40
  @return = Response.new(message, 'text/html;', status)
36
41
  end
37
-
42
+
43
+ def return_444
44
+ @return = Response.new("No response made by the server, check for a valid response", 'text/html;', 404)
45
+ end
46
+
38
47
  def to_rack
39
48
  @return.to_rack
40
49
  end
data/lib/spire/http.rb CHANGED
@@ -7,6 +7,12 @@ module Spire
7
7
  @headers = {'Content-Type' => content_type}
8
8
  @status_code = status
9
9
  end
10
+
11
+ def manual_response(content, headers, status)
12
+ @content = content
13
+ @headers = headers
14
+ @status_code = status
15
+ end
10
16
 
11
17
  def to_rack
12
18
  [status_code, headers, [content]]
@@ -0,0 +1,43 @@
1
+ require 'spire/resource/mime'
2
+
3
+ module Spire
4
+ class Public
5
+ def initialize(opts={:render=>true})
6
+ @file = opts[:file]
7
+ @render = opts[:render]
8
+ mime = Mime.new
9
+ @mime_types = mime.return_mimes
10
+ end
11
+
12
+ def extension_check
13
+ file_extension = File.extname(@file)
14
+ @mime_types.each do |ext, type|
15
+ if file_extension == ext
16
+ @content_type = type
17
+ end
18
+ end
19
+
20
+ if @render
21
+ self.create_response
22
+ else
23
+ return [false, @content_type]
24
+ end
25
+ end
26
+
27
+ def create_response
28
+ path = File.expand_path(__FILE__)
29
+ path["lib/spire/public.rb"] = "public/#{@file}"
30
+ return Error.new(:status => 404) unless File.exists?(path)
31
+ file = IO.read(path)
32
+ @return = {}
33
+ @return[:file] = file
34
+ @return[:content_type] = @content_type
35
+ return @return
36
+ end
37
+
38
+ def to_rack
39
+ @return.to_rack
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,31 @@
1
+ module Spire
2
+ class Mime
3
+ def return_mimes
4
+ return @mime_types = {
5
+ ".html" => "text/html",
6
+ ".text" => "text/plain",
7
+ ".js" => "text/javascript",
8
+ ".css" => "text/css",
9
+ ".ics" => "text/calendar",
10
+ ".csv" => "text/csv",
11
+
12
+ ".png" => "image/png",
13
+ ".jpeg" => "image/jpeg",
14
+ ".gif" => "image/gif",
15
+ ".bmp" => "image/bmp",
16
+ ".tiff" => "image/tiff",
17
+
18
+ ".mpeg" => "video/mpeg",
19
+
20
+ ".xml" => "application/xml",
21
+ ".rss" => "application/rss+xml",
22
+ ".atom" => "application/atom+xml",
23
+ ".yaml" => "application/x-yaml",
24
+
25
+ ".json" => "application/json",
26
+ ".pdf" => "application/pdf",
27
+ ".zip" => "application/zip"
28
+ }
29
+ end
30
+ end
31
+ end
data/lib/spire/router.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Spire
2
2
  class Router
3
3
  def initialize(base_path, routes)
4
- @base_path = base_path
4
+ $base_path = base_path
5
5
  @routes = routes
6
6
  @app = {}
7
7
  end
@@ -35,23 +35,30 @@ module Spire
35
35
  end
36
36
 
37
37
  unless @app["controller"]
38
- return Error.new(nil ,404)
38
+ return Error.new :status => 404
39
39
  end
40
40
 
41
41
  return self.run
42
42
  end
43
43
 
44
44
  def return_file
45
- # still need to add checks for mime types. this will be done in a seperate class once i get round to it
46
- return Response.new(File.open("/public/#{@request["action"]}", "r").read)
45
+ result = Public.new :file => "test.html", :render => true
46
+ file = result.extension_check
47
+ return Response.new(file[:file], file[:content_type], 200)
47
48
  end
48
49
 
49
50
  def run
50
- require "#{@base_path}/controllers/#{@app["controller"]}Controller"
51
- @class = Kernel.const_get(@app["controller"]).new(@base_path)
51
+ require "#{$base_path}/controllers/#{@app["controller"]}Controller"
52
+ @class = Kernel.const_get(@app["controller"]).new()
52
53
 
53
54
  result = @class.method(@app["action"]).call
54
55
 
56
+ if result.is_a? Hash
57
+ if result[:file]
58
+ return Response.new(result[:file], result[:content_type], 200)
59
+ end
60
+ end
61
+
55
62
  content_type = "text/html;"
56
63
  status = 200
57
64
 
@@ -73,6 +80,8 @@ module Spire
73
80
  puts response
74
81
  if response
75
82
  response.to_rack
83
+ else
84
+ Error.new :status => 444
76
85
  end
77
86
  end
78
87
  end
data/lib/spire.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'spire/error'
2
2
  require 'spire/router'
3
3
  require 'spire/http'
4
+ require 'spire/public'
4
5
 
5
6
  require 'spire/class/MainController'
6
7
 
data/spire.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "spire"
8
- s.version = "0.2.3"
8
+ s.version = "0.2.4"
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-07"
12
+ s.date = "2011-10-19"
13
13
  s.description = "Light rack-based framework with controllers, static views and a router \n with templating engine support coming soon"
14
14
  s.email = "scott@scottnicol.co.uk"
15
15
  s.executables = ["spire"]
@@ -27,6 +27,8 @@ Gem::Specification.new do |s|
27
27
  "lib/spire/class/MainController.rb",
28
28
  "lib/spire/error.rb",
29
29
  "lib/spire/http.rb",
30
+ "lib/spire/public.rb",
31
+ "lib/spire/resource/mime.rb",
30
32
  "lib/spire/router.rb",
31
33
  "spire.gemspec"
32
34
  ]
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.2.3
4
+ version: 0.2.4
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-07 00:00:00.000000000Z
12
+ date: 2011-10-19 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
- requirement: &70227958728580 !ruby/object:Gem::Requirement
16
+ requirement: &70270452034600 !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: *70227958728580
24
+ version_requirements: *70270452034600
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rack-rewrite
27
- requirement: &70227958723620 !ruby/object:Gem::Requirement
27
+ requirement: &70270452033320 !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: *70227958723620
35
+ version_requirements: *70270452033320
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: haml
38
- requirement: &70227958712040 !ruby/object:Gem::Requirement
38
+ requirement: &70270452031420 !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: *70227958712040
46
+ version_requirements: *70270452031420
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: erubis
49
- requirement: &70227958709100 !ruby/object:Gem::Requirement
49
+ requirement: &70270452030140 !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: *70227958709100
57
+ version_requirements: *70270452030140
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: bundler
60
- requirement: &70227958707440 !ruby/object:Gem::Requirement
60
+ requirement: &70270452001980 !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: *70227958707440
68
+ version_requirements: *70270452001980
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: jeweler
71
- requirement: &70227958705300 !ruby/object:Gem::Requirement
71
+ requirement: &70270452001000 !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: *70227958705300
79
+ version_requirements: *70270452001000
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rcov
82
- requirement: &70227958703260 !ruby/object:Gem::Requirement
82
+ requirement: &70270451999840 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70227958703260
90
+ version_requirements: *70270451999840
91
91
  description: ! "Light rack-based framework with controllers, static views and a router
92
92
  \n with templating engine support coming soon"
93
93
  email: scott@scottnicol.co.uk
@@ -107,6 +107,8 @@ files:
107
107
  - lib/spire/class/MainController.rb
108
108
  - lib/spire/error.rb
109
109
  - lib/spire/http.rb
110
+ - lib/spire/public.rb
111
+ - lib/spire/resource/mime.rb
110
112
  - lib/spire/router.rb
111
113
  - spire.gemspec
112
114
  homepage: http://github.com/snicol/spire
@@ -124,7 +126,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
124
126
  version: '0'
125
127
  segments:
126
128
  - 0
127
- hash: -337069759895717094
129
+ hash: 829611496356220362
128
130
  required_rubygems_version: !ruby/object:Gem::Requirement
129
131
  none: false
130
132
  requirements: