gnarly 0.0.4 → 0.0.5

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.
@@ -22,7 +22,8 @@ module Gnarly
22
22
  url
23
23
  end
24
24
 
25
- def helper(helper)
25
+ def helper(helper=nil, &block)
26
+ helper = Module.new &block if block and not helper
26
27
  (@helpers ||= []) << helper
27
28
  end
28
29
 
@@ -65,7 +66,7 @@ module Gnarly
65
66
  environment.instance_exec *url.parameters, &before
66
67
  end
67
68
  keys = url.keys request.method
68
- response = environment.instance_exec *url.parameters(*keys), &@responder
69
+ response = environment.instance_exec *url.parameters(keys, request.params), &@responder
69
70
  if after = url.after
70
71
  environment.instance_exec *url.parameters, &after
71
72
  end
@@ -0,0 +1,36 @@
1
+ require 'em-http'
2
+
3
+ require 'gnarly/client.rb'
4
+
5
+ module Gnarly
6
+
7
+ module Client
8
+
9
+ module EMHttp
10
+
11
+ def http(request, &block)
12
+ if block
13
+ method, url, headers, body = request
14
+ opts = {}
15
+ opts[:head] = headers if headers
16
+ case url
17
+ when Array
18
+ url, query = url
19
+ opts[:query] = query
20
+ end
21
+ http = EventMachine::HttpRequest.new(url).__send__(method, opts)
22
+ http.callback {
23
+ headers = Client.symbolize_headers http.response_header.to_hash
24
+ block.call [http.response_header.status, headers, http.response]
25
+ EventMachine.stop
26
+ }
27
+ else
28
+ raise :async_only
29
+ end
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,33 @@
1
+ require 'patron'
2
+
3
+ require 'gnarly/client.rb'
4
+
5
+ module Gnarly
6
+
7
+ module Client
8
+
9
+ module Patron
10
+
11
+ def http(request)
12
+ method, url, headers, body = request
13
+ session = ::Patron::Session.new
14
+ options = {}
15
+ options[:data] = body if body
16
+ r = session.request method, Client.create_url(url), headers, options
17
+ response = [r.status, Client.symbolize_headers(r.headers), r.body]
18
+ if block_given?
19
+ yield response
20
+ else
21
+ response
22
+ end
23
+ end
24
+
25
+ def self.http(request)
26
+ Object.new.extend(self).http request
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,42 @@
1
+ require 'stringio'
2
+ require 'addressable/uri'
3
+
4
+ module Gnarly
5
+
6
+ module Client
7
+
8
+ def self.symbolize_headers(headers)
9
+ symbolized = {}
10
+ headers.each_pair do |key, value|
11
+ sym = key.downcase.gsub('-', '_').to_sym
12
+ symbolized[sym] = value
13
+ end
14
+ symbolized
15
+ end
16
+
17
+ def self.create_url(url)
18
+ case url
19
+ when Array
20
+ path, params = url
21
+ sio = StringIO.new
22
+ sio << path
23
+ if params.size > 0
24
+ key, value = params.shift
25
+ sio << "?" << key << "=" << value
26
+ params.each_pair do |key, value|
27
+ sio << "&" << key << "=" << value
28
+ end
29
+ end
30
+ sio.string
31
+ else
32
+ url
33
+ end
34
+ end
35
+
36
+ def self.url_encode(url)
37
+ Addressable::URI::encode url
38
+ end
39
+
40
+ end
41
+
42
+ end
@@ -1,5 +1,6 @@
1
1
  require 'gnarly/provides.rb'
2
2
  require 'gnarly/understands.rb'
3
+ require 'gnarly/parameters.rb'
3
4
 
4
5
  module Gnarly
5
6
 
@@ -16,6 +17,11 @@ module Gnarly
16
17
  @application
17
18
  end
18
19
 
20
+ def helper(helper=nil, &block)
21
+ helper = Module.new &block if block and not helper
22
+ extend helper
23
+ end
24
+
19
25
  end
20
26
 
21
27
  end
@@ -0,0 +1,32 @@
1
+ require 'gnarly/base.rb'
2
+ require 'gnarly/status.rb'
3
+
4
+ module Gnarly
5
+
6
+ module Provides
7
+ include Base
8
+ include Status
9
+
10
+ def parameters(*names)
11
+ params = names.collect do |n|
12
+ name, type = n
13
+ p = request.params[name.to_s]
14
+ case type
15
+ when :integer, :int
16
+ if /^-?[0-9]+$/ =~ p
17
+ p.to_i
18
+ else
19
+ nil
20
+ end
21
+ when :symbol
22
+ p.to_sym
23
+ else
24
+ p
25
+ end
26
+ end
27
+ yield *params
28
+ end
29
+
30
+ end
31
+
32
+ end
@@ -1,8 +1,10 @@
1
- require 'rack/utils'
1
+ require 'query_string_parser'
2
2
 
3
3
  module Gnarly
4
4
 
5
5
  class Request
6
+ include QueryStringParser
7
+
6
8
  attr_reader :state
7
9
 
8
10
  def initialize(state)
@@ -41,7 +43,7 @@ module Gnarly
41
43
  end
42
44
 
43
45
  def params()
44
- @params ||= ::Rack::Utils.parse_query(@state["QUERY_STRING"])
46
+ @params ||= qs_parse(@state["QUERY_STRING"])
45
47
  end
46
48
 
47
49
  private
data/lib/gnarly/url.rb CHANGED
@@ -20,8 +20,23 @@ module Gnarly
20
20
  @match != nil
21
21
  end
22
22
 
23
- def parameters(*keys)
24
- if keys.empty?
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
25
40
  a = @match.to_a
26
41
  a.shift
27
42
  if @types
@@ -36,21 +51,15 @@ module Gnarly
36
51
  else
37
52
  a
38
53
  end
39
- else
40
- if @type_map
41
- keys.collect do |key|
42
- case @type_map[key.to_s]
43
- when :integer
44
- @match[key].to_i
45
- else
46
- @match[key]
47
- end
48
- end
49
- else
50
- keys.collect do |key|
51
- @match[key]
52
- end
53
- end
54
+ end
55
+ 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
54
63
  end
55
64
  end
56
65
 
@@ -66,7 +75,8 @@ module Gnarly
66
75
  @allow.join " "
67
76
  end
68
77
 
69
- def helper(helper)
78
+ def helper(helper=nil, &block)
79
+ helper = Module.new &block if block and not helper
70
80
  (@helpers ||= []) << helper
71
81
  end
72
82
 
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gnarly
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 21
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 0
8
- - 4
9
- version: 0.0.4
9
+ - 5
10
+ version: 0.0.5
10
11
  platform: ruby
11
12
  authors:
12
13
  - Kim Dalsgaard
@@ -14,10 +15,23 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-05-06 00:00:00 +02:00
18
+ date: 2010-07-19 00:00:00 +02:00
18
19
  default_executable:
19
- dependencies: []
20
-
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: query_string_parser
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
21
35
  description: Super simple DSL style web framework on top of Rack. Makes real HTTP'ish REST services easy.
22
36
  email: kim@kimdalsgaard.com
23
37
  executables: []
@@ -29,9 +43,13 @@ extra_rdoc_files: []
29
43
  files:
30
44
  - lib/gnarly/application.rb
31
45
  - lib/gnarly/base.rb
46
+ - lib/gnarly/client/emhttp.rb
47
+ - lib/gnarly/client/patron.rb
48
+ - lib/gnarly/client.rb
32
49
  - lib/gnarly/environment.rb
33
50
  - lib/gnarly/haml.rb
34
51
  - lib/gnarly/mimeparse.rb
52
+ - lib/gnarly/parameters.rb
35
53
  - lib/gnarly/provides.rb
36
54
  - lib/gnarly/request.rb
37
55
  - lib/gnarly/status.rb
@@ -51,23 +69,27 @@ rdoc_options: []
51
69
  require_paths:
52
70
  - lib
53
71
  required_ruby_version: !ruby/object:Gem::Requirement
72
+ none: false
54
73
  requirements:
55
74
  - - ">="
56
75
  - !ruby/object:Gem::Version
76
+ hash: 3
57
77
  segments:
58
78
  - 0
59
79
  version: "0"
60
80
  required_rubygems_version: !ruby/object:Gem::Requirement
81
+ none: false
61
82
  requirements:
62
83
  - - ">="
63
84
  - !ruby/object:Gem::Version
85
+ hash: 3
64
86
  segments:
65
87
  - 0
66
88
  version: "0"
67
89
  requirements: []
68
90
 
69
91
  rubyforge_project:
70
- rubygems_version: 1.3.6
92
+ rubygems_version: 1.3.7
71
93
  signing_key:
72
94
  specification_version: 3
73
95
  summary: Super simple web framework on top of Rack