cohitre-perro 0.6.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest.txt CHANGED
@@ -3,7 +3,6 @@ Manifest.txt
3
3
  README.txt
4
4
  Rakefile
5
5
  lib/perro.rb
6
- lib/perro/haml_handler.rb
7
- lib/perro/proxy_handler.rb
8
- lib/perro/sass_handler.rb
6
+ lib/perro/route.rb
9
7
  test/test_perro.rb
8
+ test/sample.rb
data/README.txt CHANGED
@@ -26,21 +26,30 @@ help with that if asked nicely.
26
26
 
27
27
  require "rubygems"
28
28
  require "perro"
29
+ require "sass"
30
+ require "open-uri"
29
31
 
30
32
  HOME_FOLDER = File.expand_path( "~" )
31
33
 
32
- server = Perro::Server.new(3001)
33
- server.static( "/javascripts" , "#{HOME_FOLDER}/libs/javascript")
34
- server.sass( "/stylesheets" , "#{HOME_FOLDER}/libs/sass")
35
- server.proxy( "/service" , "http://example.com" )
36
- server.haml( "/" , "#{File.expand_path(".")}/" )
34
+ server = Perro::Server.new(3000)
35
+
36
+ server.get "/javascripts/:file" do |params|
37
+ open( "#{HOME_FOLDER}/libs/javascript#{params[:file]}" ).read
38
+ end
39
+
40
+ server.get "/stylesheets/:file.css" do |params|
41
+ Sass::Engine.new( open("#{HOME_FOLDER}#{params[:file]}.sass").read )
42
+ end
43
+
44
+ server.get "/proxy" do |params|
45
+ open( "http://cohitre.com/#{params[:path]}" )
46
+ end
47
+
37
48
  server.start
38
49
 
39
50
  == REQUIREMENTS:
40
51
 
41
52
  mongrel
42
- haml
43
-
44
53
 
45
54
  == INSTALL:
46
55
 
data/Rakefile CHANGED
@@ -6,5 +6,5 @@ Hoe.new('perro', Perro::VERSION) do |p|
6
6
  p.name = "perro"
7
7
  p.developer('carlos', 'carlosrr@gmail.com')
8
8
  p.summary = "A quick and dirty solution for serving files easily."
9
- p.extra_deps = [ ["mongrel", ">= 1.1.4"], ["haml" , ">= 2.0.2"] ]
9
+ p.extra_deps = [ ["hoe" , ">= 1.8.0"] , ["mongrel", ">= 1.1.4"] ]
10
10
  end
@@ -0,0 +1,19 @@
1
+ module Perro
2
+ class Route
3
+ def initialize( r )
4
+ @regexp = Regexp.new( Regexp.escape( r ).gsub(/:[\w]*/ , '(.*?)' )+"(\\?.*)?$" )
5
+ @params_symbols = r.scan(/:(\w+)/).collect{ |m| m[0] }
6
+ end
7
+
8
+ def match( string )
9
+ match = string.match( @regexp )
10
+ return nil if match.nil?
11
+
12
+ params = {}
13
+ @params_symbols.each_index do |i|
14
+ params[@params_symbols[i].to_sym] = match[i+1]
15
+ end
16
+ params
17
+ end
18
+ end
19
+ end
data/lib/perro.rb CHANGED
@@ -1,52 +1,85 @@
1
1
  begin
2
2
  require 'action_controller'
3
+ ActionView::Base.helper_modules.each {|m| include m }
3
4
  rescue
4
5
  puts "It appears that you don't have action_controller."
5
6
  puts "`sudo gem install rails` might help you with that."
6
7
  end
7
8
 
8
- require "open-uri"
9
9
  require "mongrel"
10
-
11
- ActionView::Base.helper_modules.each {|m| include m }
10
+ require "#{File.expand_path( __FILE__ +"/..")}/perro/route.rb"
12
11
 
13
12
  module Perro
14
- VERSION = '0.6.0'
15
-
16
- class Server
17
- attr_reader :routes
18
- @@route_keys = {}
13
+ VERSION = '0.8.0'
19
14
 
15
+ class StringHandler < Mongrel::HttpHandler
16
+ def initialize
17
+ @routes = []
18
+ @handlers = {}
19
+ end
20
20
 
21
- def self.route_manager key , handler
22
- @@route_keys[key] = handler
21
+ def push( route , block)
22
+ r = Route.new( route[:route] )
23
+ @routes.push( route.merge( { :route_object => r } ) )
24
+ @handlers[r] = block
23
25
  end
24
26
 
25
- def initialize port=3000
26
- @routes_manager = {}
27
- @port = port
27
+ def find_handler( uri )
28
+ @routes.find{|r| r[:route_object].match(uri)}
28
29
  end
29
30
 
30
- def route key , uri , file
31
- @routes_manager[key] ||= []
32
- r = { :route => uri , :resource => file }
33
- @routes_manager[key].push( r )
31
+ def process request , response
32
+ uri = request.params["PATH_INFO"]
33
+
34
+ handler = self.find_handler( uri )
35
+
36
+ if ( handler.nil? )
37
+ response.start(404) do |head,out|
38
+ head['Content-Type'] = 'text/html'
39
+ out.write( "404 error" )
40
+ end
41
+ else
42
+
43
+ route = handler[:route_object]
44
+
45
+ form_params = {}
46
+ (request.params["QUERY_STRING"]||"").split("&").each do |d|
47
+ pair = d.split("=")
48
+ form_params.merge!( {pair[0].to_sym => pair[1] })
49
+ end
50
+
51
+ user_params = route.match( uri ).merge( form_params ).merge({
52
+ :path => request.params["PATH_INFO"]
53
+ })
54
+ puts user_params.inspect
55
+ result = @handlers[route].call( user_params )
56
+
57
+ response.start(200) do |head,out|
58
+ head['Content-Type'] = handler[:mime]
59
+ out.write( result.to_s )
60
+ end
61
+ end
34
62
  end
63
+ end
35
64
 
36
- def static uri , file
37
- route( :static , uri , file )
65
+ class Server
66
+ attr_reader :path
67
+
68
+ def initialize port=3000
69
+ @global_handler = StringHandler.new()
70
+ @port = port
38
71
  end
39
72
 
73
+ def get route , mime="text/html" , &block
74
+ @global_handler.push( { :route => route , :mime=>mime } , block )
75
+ end
76
+
40
77
  def start
41
- routes = @routes_manager
78
+ routes = @global_handler
42
79
  port = @port
43
80
  config = Mongrel::Configurator.new :host => "0.0.0.0" do
44
81
  listener :port => port do
45
- routes.each do |k,v|
46
- v.each do |r|
47
- uri( r[:route] , :handler => @@route_keys[k].new( r[:resource]) )
48
- end
49
- end
82
+ uri("/" , :handler => routes )
50
83
  end
51
84
  run
52
85
  end
@@ -58,10 +91,4 @@ module Perro
58
91
  config.join
59
92
  end
60
93
  end
61
-
62
- Server.route_manager( :static , Mongrel::DirHandler )
63
94
  end
64
-
65
- require "#{File.expand_path( __FILE__+"/.." )}/perro/haml_handler.rb"
66
- require "#{File.expand_path( __FILE__+"/.." )}/perro/proxy_handler.rb"
67
- require "#{File.expand_path( __FILE__+"/.." )}/perro/sass_handler.rb"
data/test/sample.rb ADDED
@@ -0,0 +1,22 @@
1
+ require "rubygems"
2
+ require "perro"
3
+ require "sass"
4
+ require "open-uri"
5
+
6
+ HOME_FOLDER = File.expand_path( "~" )
7
+
8
+ server = Perro::Server.new(3000)
9
+
10
+ server.get "/javascripts/:file" do |params|
11
+ open( "#{HOME_FOLDER}/libs/javascript#{params[:file]}" ).read
12
+ end
13
+
14
+ server.get "/stylesheets/:file.css" do |params|
15
+ Sass::Engine.new( open("#{HOME_FOLDER}#{params[:file]}.sass").read )
16
+ end
17
+
18
+ server.get "/proxy/:uri" do |params|
19
+ open( "http://cohitre.com/#{params[:uri]}" ).read
20
+ end
21
+
22
+ server.start
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cohitre-perro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - carlos
@@ -9,9 +9,18 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-10-10 00:00:00 -07:00
12
+ date: 2008-10-26 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hoe
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.8.0
23
+ version:
15
24
  - !ruby/object:Gem::Dependency
16
25
  name: mongrel
17
26
  version_requirement:
@@ -37,7 +46,7 @@ dependencies:
37
46
  requirements:
38
47
  - - ">="
39
48
  - !ruby/object:Gem::Version
40
- version: 1.7.0
49
+ version: 1.8.0
41
50
  version:
42
51
  description: Perro is a light server built on top of mongrel that helps at least one developer be happy. If it had been designed as production server it would have a cooler name. Like "Dinosaur" or "Freckle". The Internet is a global system of interconnected computer networks. Developer creates files that are served through this global system. Developer may be tempted to develop such files by creating a folder, moving the files to such folder, double clicking them and watching what happens on the browser whose address bar reads "file:///Users/cohitre/development/my-project/index.html". Perro helps developer be happy by helping overcome temptation.
43
52
  email:
@@ -56,10 +65,9 @@ files:
56
65
  - README.txt
57
66
  - Rakefile
58
67
  - lib/perro.rb
59
- - lib/perro/haml_handler.rb
60
- - lib/perro/proxy_handler.rb
61
- - lib/perro/sass_handler.rb
68
+ - lib/perro/route.rb
62
69
  - test/test_perro.rb
70
+ - test/sample.rb
63
71
  has_rdoc: true
64
72
  homepage: http://code.cohitre.com
65
73
  post_install_message:
@@ -1,34 +0,0 @@
1
- require "haml"
2
-
3
- module Perro
4
-
5
- class HAMLHandler < Mongrel::HttpHandler
6
- def initialize file
7
- super()
8
- @file = file
9
- end
10
-
11
- def process request , response
12
- filename = request.params['PATH_INFO'].empty? ? "#{@file}/index.haml" : @file+request.params["PATH_INFO"]
13
- if ( !File.exists?( filename) )
14
- response.start(404) do |head,out|
15
- out.write( "404 Error : File #{filename} was not found" )
16
- end
17
- else
18
- response.start(200) do |head,out|
19
- head['Content-Type'] = 'text/html'
20
- engine = Haml::Engine.new( open(filename).read )
21
- out.write( engine.render )
22
- end
23
- end
24
- end
25
- end
26
-
27
- class Server
28
- def haml uri , file
29
- route( :haml , uri , file )
30
- end
31
- end
32
-
33
- Server.route_manager( :haml , HAMLHandler )
34
- end
@@ -1,23 +0,0 @@
1
- module Perro
2
-
3
- class ProxyHandler < Mongrel::HttpHandler
4
- def initialize url
5
- super()
6
- @url = url
7
- end
8
-
9
- def process request , response
10
- response.start(200) do |head,out|
11
- head['Content-Type'] = 'text/html'
12
- out.write( open(@url + request.params["PATH_INFO"]).read )
13
- end
14
- end
15
- end
16
-
17
- class Server
18
- def proxy uri , file
19
- route( :proxy , uri , file )
20
- end
21
- end
22
- Server.route_manager( :proxy , ProxyHandler )
23
- end
@@ -1,28 +0,0 @@
1
- require "sass"
2
-
3
- module Perro
4
-
5
- class SASSHandler < Mongrel::HttpHandler
6
- def initialize path
7
- super()
8
- @path = path
9
- end
10
-
11
- def process request , response
12
- response.start(200) do |head,out|
13
- head['Content-Type'] = 'text/css'
14
-
15
- engine = Sass::Engine.new( open("#{@path}#{request.params["PATH_INFO"]}").read )
16
-
17
- out.write( engine.render )
18
- end
19
- end
20
- end
21
-
22
- class Server
23
- def sass uri , file
24
- route( :sass , uri , file )
25
- end
26
- end
27
- Server.route_manager( :sass , SASSHandler )
28
- end