cohitre-perro 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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