gnarly 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -65,17 +65,18 @@ module Gnarly
65
65
  if before = url.before
66
66
  environment.instance_exec *url.parameters, &before
67
67
  end
68
- keys = url.keys request.method
69
- response = environment.instance_exec *url.parameters(keys, request.params), &@responder
68
+ response = environment.instance_exec *url.parameters(request.method), &@responder
69
+ @response = environment.response ? environment.response : response
70
70
  if after = url.after
71
71
  environment.instance_exec *url.parameters, &after
72
72
  end
73
- unless response.is_a? Array and response.size == 3
73
+ if @response.is_a? Array and @response.size == 3
74
+ @response[2] = [@response[2]] unless @response[2].respond_to? :each
75
+ @response
76
+ else
74
77
  name, line = @responder.source_location
75
78
  msg = "Bad return type for block in #{name} line #{line}"
76
79
  internal_server_error msg
77
- else
78
- response
79
80
  end
80
81
  else
81
82
  method_not_allowed url.allow
@@ -8,7 +8,7 @@ module Gnarly
8
8
 
9
9
  module EMHttp
10
10
 
11
- def http(request, &block)
11
+ def http(request, options={}, &block)
12
12
  if block
13
13
  method, url, headers, body = request
14
14
  opts = {}
@@ -18,11 +18,11 @@ module Gnarly
18
18
  url, query = url
19
19
  opts[:query] = query
20
20
  end
21
- http = EventMachine::HttpRequest.new(url).__send__(method, opts)
21
+ http = EventMachine::HttpRequest.new(url).__send__(method, opts)
22
+ http.stream &options[:stream] if options[:stream]
22
23
  http.callback {
23
24
  headers = Client.symbolize_headers http.response_header.to_hash
24
25
  block.call [http.response_header.status, headers, http.response]
25
- EventMachine.stop
26
26
  }
27
27
  else
28
28
  raise :async_only
@@ -8,9 +8,10 @@ module Gnarly
8
8
 
9
9
  module Patron
10
10
 
11
- def http(request)
11
+ def http(request, opts={})
12
12
  method, url, headers, body = request
13
13
  session = ::Patron::Session.new
14
+ session.timeout = opts[:timeout] if opts[:timeout]
14
15
  options = {}
15
16
  options[:data] = body if body
16
17
  r = session.request method, Client.create_url(url), headers, options
@@ -22,8 +23,8 @@ module Gnarly
22
23
  end
23
24
  end
24
25
 
25
- def self.http(request)
26
- Object.new.extend(self).http request
26
+ def self.http(request, opts={})
27
+ Object.new.extend(self).http request, opts
27
28
  end
28
29
 
29
30
  end
@@ -0,0 +1,19 @@
1
+
2
+ module Gnarly
3
+
4
+ module Client
5
+
6
+ module Test
7
+ attr_reader :gnarly_test_request
8
+ attr_writer :gnarly_test_response
9
+
10
+ def http(request)
11
+ @gnarly_test_request = request
12
+ @gnarly_test_response
13
+ end
14
+
15
+ end
16
+
17
+ end
18
+
19
+ end
@@ -0,0 +1,38 @@
1
+ require 'typhoeus'
2
+
3
+ require 'gnarly/client.rb'
4
+
5
+ module Gnarly
6
+
7
+ module Client
8
+
9
+ module Typhoeus
10
+
11
+ def http(request, opts={})
12
+ method, url, headers, body = request
13
+ options = {:headers => headers}
14
+ case url
15
+ when Array
16
+ url, query = url
17
+ options[:params] = query
18
+ end
19
+ options[:body] = body if body
20
+ options[:timeout] = opts[:timeout] * 1000 if opts[:timeout]
21
+ r = ::Typhoeus::Request.send method, url, options
22
+ response = [r.code, Client.symbolize_headers(r.headers_hash), r.body]
23
+ if block_given?
24
+ yield response
25
+ else
26
+ response
27
+ end
28
+ end
29
+
30
+ def self.http(request, opts={})
31
+ Object.new.extend(self).http request, opts
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
38
+ end
data/lib/gnarly/client.rb CHANGED
@@ -8,8 +8,10 @@ module Gnarly
8
8
  def self.symbolize_headers(headers)
9
9
  symbolized = {}
10
10
  headers.each_pair do |key, value|
11
- sym = key.downcase.gsub('-', '_').to_sym
12
- symbolized[sym] = value
11
+ if value
12
+ sym = key.downcase.gsub('-', '_').to_sym
13
+ symbolized[sym] = value
14
+ end
13
15
  end
14
16
  symbolized
15
17
  end
@@ -22,6 +22,14 @@ module Gnarly
22
22
  extend helper
23
23
  end
24
24
 
25
+ def response(response=nil)
26
+ if response
27
+ @response = response
28
+ else
29
+ response
30
+ end
31
+ end
32
+
25
33
  end
26
34
 
27
35
  end
@@ -0,0 +1,26 @@
1
+
2
+ module Gnarly
3
+
4
+ class Static
5
+
6
+ def initialize(app, options={})
7
+ @app = app
8
+ @urls = options[:urls] || ["/favicon.ico"]
9
+ root = options[:root] || Dir.pwd
10
+ @file_server = Rack::File.new(root)
11
+ end
12
+
13
+ def call(env)
14
+ path = env["PATH_INFO"]
15
+ can_serve = @urls.any? { |url| path.index(url) == 0 }
16
+
17
+ if can_serve
18
+ @file_server.call(env)
19
+ else
20
+ @app.call(env)
21
+ end
22
+ end
23
+
24
+ end
25
+
26
+ end
data/lib/gnarly/status.rb CHANGED
@@ -15,9 +15,10 @@ module Gnarly
15
15
  @default_content_types.last if @default_content_types
16
16
  end
17
17
 
18
- def ok(body, mime=nil)
18
+ def ok(body, mime=nil, charset=nil)
19
19
  mime = default_content_type unless mime
20
- headers = mime ? {"Content-type" => mime} : {}
20
+ charset = body.encoding.name.downcase unless charset
21
+ headers = mime ? {"Content-type" => "#{mime}; charset=#{charset}"} : {}
21
22
  [200, headers, [body]]
22
23
  end
23
24
 
data/lib/gnarly/url.rb CHANGED
@@ -20,23 +20,9 @@ module Gnarly
20
20
  @match != nil
21
21
  end
22
22
 
23
- def parameters(keys=nil, defaults=nil)
24
- if keys
25
- if @type_map
26
- keys.collect do |key|
27
- case @type_map[key.to_s]
28
- when :integer
29
- fetch_match(key, defaults).to_i
30
- else
31
- fetch_match key, defaults
32
- end
33
- end
34
- else
35
- keys.collect do |key|
36
- fetch_match key, defaults
37
- end
38
- end
39
- else
23
+ def parameters(method)
24
+ keys = @keys[method]
25
+ if keys.empty?
40
26
  a = @match.to_a
41
27
  a.shift
42
28
  if @types
@@ -51,26 +37,28 @@ module Gnarly
51
37
  else
52
38
  a
53
39
  end
40
+ else
41
+ if @type_map
42
+ keys.collect do |key|
43
+ case @type_map[key.to_s]
44
+ when :integer
45
+ @match[key].to_i
46
+ else
47
+ @match[key]
48
+ end
49
+ end
50
+ else
51
+ keys.collect do |key|
52
+ @match[key]
53
+ end
54
+ end
54
55
  end
55
56
  end
56
-
57
- def fetch_match(key, defaults=nil)
58
- #TODO: Is this a hack?
59
- begin
60
- @match[key]
61
- rescue IndexError
62
- defaults ? defaults[key.to_s] : nil
63
- end
64
- end
65
-
57
+
66
58
  def responder(method)
67
59
  @responders[method]
68
60
  end
69
61
 
70
- def keys(method)
71
- @keys[method]
72
- end
73
-
74
62
  def allow()
75
63
  @allow.join " "
76
64
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gnarly
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 5
10
- version: 0.0.5
9
+ - 6
10
+ version: 0.0.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kim Dalsgaard
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-19 00:00:00 +02:00
18
+ date: 2010-10-31 01:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -45,6 +45,8 @@ files:
45
45
  - lib/gnarly/base.rb
46
46
  - lib/gnarly/client/emhttp.rb
47
47
  - lib/gnarly/client/patron.rb
48
+ - lib/gnarly/client/test.rb
49
+ - lib/gnarly/client/typhoeus.rb
48
50
  - lib/gnarly/client.rb
49
51
  - lib/gnarly/environment.rb
50
52
  - lib/gnarly/haml.rb
@@ -52,6 +54,7 @@ files:
52
54
  - lib/gnarly/parameters.rb
53
55
  - lib/gnarly/provides.rb
54
56
  - lib/gnarly/request.rb
57
+ - lib/gnarly/static.rb
55
58
  - lib/gnarly/status.rb
56
59
  - lib/gnarly/system.rb
57
60
  - lib/gnarly/typhoeus.rb