relax 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION.yml +1 -1
- data/lib/relax/action.rb +5 -5
- data/lib/relax/context.rb +9 -4
- data/lib/relax/instance.rb +6 -4
- data/lib/relax/parameter.rb +4 -0
- data/lib/relax/performer.rb +10 -4
- data/lib/relax/service.rb +14 -3
- data/spec/relax/context_spec.rb +11 -3
- data/spec/services/blank_values_service.rb +19 -0
- data/spec/services/{service_with_custom_parser.rb → custom_parser_service.rb} +2 -6
- data/spec/services/parameter_alias_service.rb +17 -0
- data/spec/spec_helper.rb +3 -1
- metadata +8 -4
data/VERSION.yml
CHANGED
data/lib/relax/action.rb
CHANGED
@@ -14,10 +14,10 @@ module Relax
|
|
14
14
|
context.evaluate(&block) if block_given?
|
15
15
|
end
|
16
16
|
|
17
|
-
def execute(values,
|
17
|
+
def execute(values, options, *args)
|
18
18
|
args.unshift(values) if values
|
19
|
-
instance = Instance.new(*args)
|
20
|
-
response = performer(instance,
|
19
|
+
instance = Instance.new(options, *args)
|
20
|
+
response = performer(instance, options).perform
|
21
21
|
context.parse(response)
|
22
22
|
end
|
23
23
|
|
@@ -31,9 +31,9 @@ module Relax
|
|
31
31
|
end
|
32
32
|
private :url
|
33
33
|
|
34
|
-
def performer(instance,
|
34
|
+
def performer(instance, options)
|
35
35
|
values = instance.values(context)
|
36
|
-
Performer.new(method, url, values,
|
36
|
+
Performer.new(method, url, values, options)
|
37
37
|
end
|
38
38
|
private :performer
|
39
39
|
|
data/lib/relax/context.rb
CHANGED
@@ -11,7 +11,7 @@ module Relax
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def parameter(name, options={})
|
14
|
-
unless @parameters.find { |parameter| parameter.name
|
14
|
+
unless @parameters.find { |parameter| parameter.named?(name) }
|
15
15
|
@parameters << Parameter.new(name, options)
|
16
16
|
else
|
17
17
|
raise ArgumentError.new("Duplicate parameter '#{name}'.")
|
@@ -19,14 +19,19 @@ module Relax
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def set(name, value)
|
22
|
-
if parameter = @parameters.find { |parameter| parameter.name
|
22
|
+
if parameter = @parameters.find { |parameter| parameter.named?(name) }
|
23
23
|
parameter.value = value
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
def parser(root, options={}, &block) # :nodoc:
|
28
|
-
@parser ||=
|
29
|
-
|
28
|
+
@parser ||= begin
|
29
|
+
if root.kind_of?(Class)
|
30
|
+
root.new(options, &block)
|
31
|
+
else
|
32
|
+
Relief::Parser.new(root, options, &block)
|
33
|
+
end
|
34
|
+
end
|
30
35
|
end
|
31
36
|
|
32
37
|
def parse(response) # :nodoc:
|
data/lib/relax/instance.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
module Relax
|
2
2
|
class Instance # :nodoc:
|
3
|
-
def initialize(*args)
|
3
|
+
def initialize(options, *args)
|
4
|
+
@options = options
|
5
|
+
|
4
6
|
@values = args.inject({}) do |values, arg|
|
5
7
|
arg.is_a?(Hash) ? values.merge(arg) : values
|
6
8
|
end
|
@@ -8,12 +10,12 @@ module Relax
|
|
8
10
|
|
9
11
|
def values(context)
|
10
12
|
context.parameters.inject({}) do |values, parameter|
|
11
|
-
name = parameter.name
|
13
|
+
name = parameter.options[:as] || parameter.name
|
12
14
|
|
13
|
-
if value = @values[
|
15
|
+
if (value = @values[name] || parameter.value) || @options[:include_blank_values]
|
14
16
|
values[parameter.name] = value
|
15
17
|
elsif parameter.required?
|
16
|
-
raise ArgumentError.new("Missing value for '#{
|
18
|
+
raise ArgumentError.new("Missing value for '#{name}'.")
|
17
19
|
end
|
18
20
|
|
19
21
|
values
|
data/lib/relax/parameter.rb
CHANGED
data/lib/relax/performer.rb
CHANGED
@@ -1,15 +1,19 @@
|
|
1
1
|
module Relax
|
2
2
|
class Performer
|
3
|
-
def initialize(method, url, values,
|
3
|
+
def initialize(method, url, values, options={})
|
4
4
|
@method = method
|
5
5
|
@url = url
|
6
6
|
@values = values
|
7
|
-
@credentials = credentials
|
7
|
+
@credentials = options.delete(:credentials)
|
8
|
+
@proxy = options.delete(:proxy)
|
9
|
+
@options = options
|
8
10
|
|
9
11
|
parse_url_tokens
|
10
12
|
end
|
11
13
|
|
12
14
|
def perform
|
15
|
+
RestClient.proxy = @proxy if @proxy
|
16
|
+
|
13
17
|
case @method
|
14
18
|
when :delete, :get, :head then RestClient.send(@method, url)
|
15
19
|
when :post, :put then RestClient.send(@method, url, query)
|
@@ -30,13 +34,15 @@ module Relax
|
|
30
34
|
|
31
35
|
def query
|
32
36
|
@values.collect do |name, value|
|
33
|
-
"#{name}=#{value}" if value
|
37
|
+
"#{name}=#{value}" if value || @options[:include_blank_values]
|
34
38
|
end.compact.join('&')
|
35
39
|
end
|
36
40
|
private :query
|
37
41
|
|
38
42
|
def parse_url_tokens
|
39
|
-
|
43
|
+
tokens = @url.scan(/(?:\:)([a-z_]+)/).flatten
|
44
|
+
|
45
|
+
@url_values = tokens.inject({}) do |values, name|
|
40
46
|
name = name.to_sym
|
41
47
|
values[name] = @values.delete(name) if @values.key?(name)
|
42
48
|
values
|
data/lib/relax/service.rb
CHANGED
@@ -1,11 +1,22 @@
|
|
1
1
|
module Relax
|
2
2
|
class Service
|
3
|
-
def initialize(values={})
|
3
|
+
def initialize(values={}, options={})
|
4
4
|
@values = values
|
5
|
+
@options = options
|
5
6
|
end
|
6
7
|
|
7
8
|
def authenticate(*args)
|
8
|
-
@credentials = args
|
9
|
+
@options[:credentials] = args
|
10
|
+
self
|
11
|
+
end
|
12
|
+
|
13
|
+
def proxy(url)
|
14
|
+
@options[:proxy] = url
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
def include_blank_values(value)
|
19
|
+
@options[:include_blank_values] = value
|
9
20
|
self
|
10
21
|
end
|
11
22
|
|
@@ -23,7 +34,7 @@ module Relax
|
|
23
34
|
@actions[action.name] = action.name
|
24
35
|
|
25
36
|
define_method(action.name) do |*args|
|
26
|
-
action.execute(@values, @
|
37
|
+
action.execute(@values, @options, *args)
|
27
38
|
end
|
28
39
|
else
|
29
40
|
raise ArgumentError.new("Duplicate action '#{action.name}'.")
|
data/spec/relax/context_spec.rb
CHANGED
@@ -1,10 +1,18 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
2
2
|
|
3
3
|
describe Relax::Context do
|
4
|
-
|
5
4
|
it "utilizes a custom parser for Class parsers" do
|
6
|
-
service =
|
5
|
+
service = CustomParserService.new
|
7
6
|
service.test.should == 'parsed'
|
8
7
|
end
|
9
|
-
|
8
|
+
|
9
|
+
it "allows parameters with aliases" do
|
10
|
+
service = ParameterAliasService.new
|
11
|
+
service.test(:api_key => 'secret')[:stat].should == 'ok'
|
12
|
+
end
|
13
|
+
|
14
|
+
it "allows blank parameters values" do
|
15
|
+
service = BlankValuesService.new({}, :include_blank_values => true)
|
16
|
+
service.test[:stat].should == 'ok'
|
17
|
+
end
|
10
18
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class BlankValuesService < Relax::Service
|
2
|
+
endpoint 'http://example.com/' do
|
3
|
+
action :test do
|
4
|
+
parameter :one
|
5
|
+
parameter :two
|
6
|
+
parameter :three
|
7
|
+
|
8
|
+
parser :response do
|
9
|
+
attribute :stat
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
FakeWeb.register_uri(:get, 'http://example.com/?one=&two=&three=', :string => <<-RESPONSE)
|
16
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
17
|
+
<response stat="ok">
|
18
|
+
</response>
|
19
|
+
RESPONSE
|
@@ -1,23 +1,19 @@
|
|
1
1
|
class TestCustomParser
|
2
|
-
|
3
2
|
def initialize(options = {}, &block)
|
4
3
|
end
|
5
|
-
|
4
|
+
|
6
5
|
def parse(input)
|
7
6
|
'parsed'
|
8
7
|
end
|
9
|
-
|
10
8
|
end
|
11
9
|
|
12
|
-
class
|
10
|
+
class CustomParserService < Relax::Service
|
13
11
|
endpoint "http://test.local/rest" do
|
14
|
-
|
15
12
|
action :test do
|
16
13
|
parser TestCustomParser do
|
17
14
|
element :status, :attribute => :stat
|
18
15
|
end
|
19
16
|
end
|
20
|
-
|
21
17
|
end
|
22
18
|
end
|
23
19
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class ParameterAliasService < Relax::Service
|
2
|
+
endpoint 'http://example.com/' do
|
3
|
+
action :test do
|
4
|
+
parameter :APIKey, :as => :api_key, :required => true
|
5
|
+
|
6
|
+
parser :response do
|
7
|
+
attribute :stat
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
FakeWeb.register_uri(:get, 'http://example.com/?APIKey=secret', :string => <<-RESPONSE)
|
14
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
15
|
+
<response stat="ok">
|
16
|
+
</response>
|
17
|
+
RESPONSE
|
data/spec/spec_helper.rb
CHANGED
@@ -10,4 +10,6 @@ require 'fakeweb'
|
|
10
10
|
|
11
11
|
require File.join(File.dirname(__FILE__), '..', 'lib', 'relax')
|
12
12
|
require File.join(File.dirname(__FILE__), 'services', 'flickr')
|
13
|
-
require File.join(File.dirname(__FILE__), 'services', '
|
13
|
+
require File.join(File.dirname(__FILE__), 'services', 'custom_parser_service')
|
14
|
+
require File.join(File.dirname(__FILE__), 'services', 'parameter_alias_service')
|
15
|
+
require File.join(File.dirname(__FILE__), 'services', 'blank_values_service')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: relax
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Hunt
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-06-
|
12
|
+
date: 2009-06-30 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -89,8 +89,10 @@ files:
|
|
89
89
|
- spec/relax/endpoint_spec.rb
|
90
90
|
- spec/relax/integration_spec.rb
|
91
91
|
- spec/relax/service_spec.rb
|
92
|
+
- spec/services/blank_values_service.rb
|
93
|
+
- spec/services/custom_parser_service.rb
|
92
94
|
- spec/services/flickr.rb
|
93
|
-
- spec/services/
|
95
|
+
- spec/services/parameter_alias_service.rb
|
94
96
|
- spec/spec_helper.rb
|
95
97
|
has_rdoc: true
|
96
98
|
homepage: http://github.com/tylerhunt/relax
|
@@ -123,6 +125,8 @@ test_files:
|
|
123
125
|
- spec/relax/endpoint_spec.rb
|
124
126
|
- spec/relax/integration_spec.rb
|
125
127
|
- spec/relax/service_spec.rb
|
128
|
+
- spec/services/blank_values_service.rb
|
129
|
+
- spec/services/custom_parser_service.rb
|
126
130
|
- spec/services/flickr.rb
|
127
|
-
- spec/services/
|
131
|
+
- spec/services/parameter_alias_service.rb
|
128
132
|
- spec/spec_helper.rb
|