relax 0.1.3 → 0.2.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.
@@ -0,0 +1,18 @@
1
+ require 'faraday'
2
+
3
+ module Relax
4
+ module Client
5
+ USER_AGENT = "Relax Ruby Gem Client #{Relax::VERSION}"
6
+
7
+ def config
8
+ @config ||= Config.new.configure do |config|
9
+ config.adapter = Faraday.default_adapter
10
+ config.user_agent = USER_AGENT
11
+ end
12
+ end
13
+
14
+ def configure(&block)
15
+ config.configure(&block)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,12 @@
1
+ module Relax
2
+ class Config
3
+ attr :adapter, true
4
+ attr :base_uri, true
5
+ attr :user_agent, true
6
+
7
+ def configure
8
+ yield(self)
9
+ self
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,25 @@
1
+ module Relax
2
+ module Delegator
3
+ def self.[](client_method)
4
+ Module.new do
5
+ include ClassMethods
6
+
7
+ define_method(:client_instance) { send(client_method) }
8
+ end
9
+ end
10
+
11
+ module ClassMethods
12
+ def respond_to?(method, include_private=false)
13
+ super || client_instance.respond_to?(method, include_private)
14
+ end
15
+
16
+ def method_missing(method, *args, &block)
17
+ if client_instance.respond_to?(method)
18
+ client_instance.send(method, *args, &block)
19
+ else
20
+ super
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,32 @@
1
+ require 'faraday'
2
+
3
+ module Relax
4
+ module Resource
5
+ extend Forwardable
6
+
7
+ delegate Faraday::Connection::METHODS => :connection
8
+ private *Faraday::Connection::METHODS
9
+
10
+ def initialize(client, options={})
11
+ @client = client
12
+ @options = options
13
+ end
14
+
15
+ def connection(options={})
16
+ options[:url] ||= config.base_uri
17
+ options[:headers] ||= {}
18
+ options[:headers][:user_agent] ||= config.user_agent
19
+
20
+ Faraday.new(options) do |builder|
21
+ yield(builder) if block_given?
22
+ builder.adapter(config.adapter)
23
+ end
24
+ end
25
+ private :connection
26
+
27
+ def config
28
+ @client.config
29
+ end
30
+ private :config
31
+ end
32
+ end
@@ -0,0 +1,3 @@
1
+ module Relax
2
+ VERSION = '0.2.0'
3
+ end
data/relax.gemspec ADDED
@@ -0,0 +1,17 @@
1
+ require './lib/relax/version'
2
+
3
+ Gem::Specification.new do |gem|
4
+ gem.name = 'relax'
5
+ gem.version = Relax::VERSION
6
+ gem.summary = 'A flexible library for creating web service consumers.'
7
+ gem.homepage = 'http://github.com/tylerhunt/relax'
8
+ gem.author = 'Tyler Hunt'
9
+
10
+ gem.add_dependency 'faraday', '~> 0.8.0'
11
+ gem.add_development_dependency 'rspec', '~> 2.6'
12
+
13
+ gem.files = `git ls-files`.split($\)
14
+ gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
15
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
16
+ gem.require_paths = ['lib']
17
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe Relax::Client do
4
+ let(:client) { Class.new { include Relax::Client }.new }
5
+
6
+ subject { client }
7
+
8
+ context '#config' do
9
+ it 'returns an instance of Relax::Config' do
10
+ subject.config.should be_a(Relax::Config)
11
+ end
12
+
13
+ it 'memoizes the configuration' do
14
+ subject.config.should == subject.config
15
+ end
16
+
17
+ context 'defaults' do
18
+ subject { client.config }
19
+
20
+ its(:adapter) { should == Faraday.default_adapter }
21
+ its(:base_uri) { should be_nil }
22
+ its(:user_agent) { should == "Relax Ruby Gem Client #{Relax::VERSION}" }
23
+ end
24
+ end
25
+
26
+ context '#configure' do
27
+ it 'yields an instance of the configuration' do
28
+ expect {
29
+ subject.configure do |config|
30
+ config.base_uri = 'http://api.example.com/v2'
31
+ end
32
+ }.to change(subject.config, :base_uri).to('http://api.example.com/v2')
33
+ end
34
+
35
+ it 'returns the configuration' do
36
+ subject.configure { }.should == subject.config
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Relax::Config do
4
+ context '#configure' do
5
+ it 'yields an instance of the configuration' do
6
+ expect {
7
+ subject.configure do |config|
8
+ config.base_uri = 'http://api.example.com/v2'
9
+ end
10
+ }.to change(subject, :base_uri).to('http://api.example.com/v2')
11
+ end
12
+
13
+ it 'returns the configuration' do
14
+ subject.configure { }.should == subject
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Relax::Delegator do
4
+ let(:client) { Class.new { include Relax::Client } }
5
+
6
+ subject do
7
+ Class.new do
8
+ extend Relax::Delegator[:client]
9
+
10
+ class << self
11
+ attr :client, true
12
+ end
13
+ end
14
+ end
15
+
16
+ before { subject.client = client.new }
17
+
18
+ context '.[]' do
19
+ it 'accepts a client method name and returns a module' do
20
+ described_class[:client].should be_a(Module)
21
+ end
22
+ end
23
+
24
+ context 'delegation' do
25
+ Relax::Client.instance_methods.each do |method|
26
+ it "delegates .#{method} to the client" do
27
+ subject.client.should_receive(method)
28
+ subject.send(method)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe Relax::Resource do
4
+ let(:client) do
5
+ Class.new do
6
+ include Relax::Client
7
+
8
+ def initialize
9
+ config.base_uri = 'http://api.example.com/v2'
10
+ end
11
+ end.new
12
+ end
13
+
14
+ let(:resource_class) { Class.new { include Relax::Resource } }
15
+
16
+ subject { resource_class.new(client) }
17
+
18
+ context '.new' do
19
+ it 'accepts an options hash' do
20
+ resource_class.new(client, key: :value)
21
+ end
22
+ end
23
+
24
+ context '#connection' do
25
+ let(:connection) { subject.send(:connection) }
26
+
27
+ it 'returns an instance of Faraday::Connection' do
28
+ connection.should be_a(Faraday::Connection)
29
+ end
30
+
31
+ it 'uses the configured base URI as the URL' do
32
+ connection.url_prefix.should == URI.parse(client.config.base_uri)
33
+ end
34
+
35
+ it 'accepts an options hash to be passed to Faraday::Connection' do
36
+ headers = { user_agent: "#{described_class} Test" }
37
+ connection = subject.send(:connection, headers: headers)
38
+ connection.headers['User-Agent'].should == headers[:user_agent]
39
+ end
40
+
41
+ it 'yields a builder to allow the middleware to be customized' do
42
+ subject.send(:connection) do |builder|
43
+ builder.use(Faraday::Response::Logger)
44
+ end.builder.handlers.should include(Faraday::Response::Logger)
45
+ end
46
+ end
47
+
48
+ context 'connection delegation' do
49
+ let(:connection) { stub(:connection) }
50
+
51
+ before { subject.stub(:connection).and_return(connection) }
52
+
53
+ Faraday::Connection::METHODS.each do |method|
54
+ it "delegates ##{method} to #connection" do
55
+ connection.should_receive(method)
56
+ subject.send(method)
57
+ end
58
+ end
59
+ end
60
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,15 +1,11 @@
1
- $:.push File.join(File.dirname(__FILE__), '..', 'lib')
1
+ require 'relax'
2
2
 
3
- require 'rubygems'
3
+ Dir[File.expand_path('../support/**/*.rb', __FILE__)].each do |file|
4
+ require(file)
5
+ end
4
6
 
5
- gem 'rspec', '~> 1.2.2'
6
- require 'spec'
7
-
8
- gem 'fakeweb', '~> 1.2.2'
9
- require 'fakeweb'
10
-
11
- require File.join(File.dirname(__FILE__), '..', 'lib', 'relax')
12
- require File.join(File.dirname(__FILE__), 'services', 'flickr')
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')
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+ end
metadata CHANGED
@@ -1,124 +1,103 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: relax
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ prerelease:
5
6
  platform: ruby
6
- authors:
7
+ authors:
7
8
  - Tyler Hunt
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
-
12
- date: 2009-08-31 00:00:00 -04:00
13
- default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: rest-client
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
12
+ date: 2012-05-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: faraday
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
21
19
  - - ~>
22
- - !ruby/object:Gem::Version
23
- version: 0.9.2
24
- version:
25
- - !ruby/object:Gem::Dependency
26
- name: relief
20
+ - !ruby/object:Gem::Version
21
+ version: 0.8.0
27
22
  type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ~>
32
- - !ruby/object:Gem::Version
33
- version: 0.0.4
34
- version:
35
- - !ruby/object:Gem::Dependency
36
- name: jeweler
37
- type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
40
- requirements:
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
41
27
  - - ~>
42
- - !ruby/object:Gem::Version
43
- version: 0.11.0
44
- version:
45
- - !ruby/object:Gem::Dependency
28
+ - !ruby/object:Gem::Version
29
+ version: 0.8.0
30
+ - !ruby/object:Gem::Dependency
46
31
  name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '2.6'
47
38
  type: :development
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
50
- requirements:
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
51
43
  - - ~>
52
- - !ruby/object:Gem::Version
53
- version: 1.2.2
54
- version:
44
+ - !ruby/object:Gem::Version
45
+ version: '2.6'
55
46
  description:
56
- email: tyler@tylerhunt.com
47
+ email:
57
48
  executables: []
58
-
59
49
  extensions: []
60
-
61
- extra_rdoc_files:
62
- - LICENSE
63
- - README.rdoc
64
- files:
50
+ extra_rdoc_files: []
51
+ files:
52
+ - .gitignore
53
+ - .rspec
54
+ - CHANGELOG.md
55
+ - Gemfile
65
56
  - LICENSE
66
- - README.rdoc
57
+ - README.md
67
58
  - Rakefile
68
- - VERSION.yml
59
+ - examples/delicious.rb
60
+ - examples/flickr.rb
61
+ - examples/vimeo.rb
69
62
  - lib/relax.rb
70
- - lib/relax/action.rb
71
- - lib/relax/context.rb
72
- - lib/relax/contextable.rb
73
- - lib/relax/endpoint.rb
74
- - lib/relax/instance.rb
75
- - lib/relax/parameter.rb
76
- - lib/relax/performer.rb
77
- - lib/relax/service.rb
78
- - spec/relax/context_spec.rb
79
- - spec/relax/endpoint_spec.rb
80
- - spec/relax/integration_spec.rb
81
- - spec/relax/service_spec.rb
82
- - spec/services/blank_values_service.rb
83
- - spec/services/custom_parser_service.rb
84
- - spec/services/flickr.rb
85
- - spec/services/parameter_alias_service.rb
63
+ - lib/relax/client.rb
64
+ - lib/relax/config.rb
65
+ - lib/relax/delegator.rb
66
+ - lib/relax/resource.rb
67
+ - lib/relax/version.rb
68
+ - relax.gemspec
69
+ - spec/relax/client_spec.rb
70
+ - spec/relax/config_spec.rb
71
+ - spec/relax/delegator_spec.rb
72
+ - spec/relax/resource_spec.rb
86
73
  - spec/spec_helper.rb
87
- has_rdoc: true
88
74
  homepage: http://github.com/tylerhunt/relax
89
75
  licenses: []
90
-
91
76
  post_install_message:
92
- rdoc_options:
93
- - --charset=UTF-8
94
- require_paths:
77
+ rdoc_options: []
78
+ require_paths:
95
79
  - lib
96
- required_ruby_version: !ruby/object:Gem::Requirement
97
- requirements:
98
- - - ">="
99
- - !ruby/object:Gem::Version
100
- version: "0"
101
- version:
102
- required_rubygems_version: !ruby/object:Gem::Requirement
103
- requirements:
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- version: "0"
107
- version:
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ! '>='
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
108
92
  requirements: []
109
-
110
- rubyforge_project: relax
111
- rubygems_version: 1.3.5
93
+ rubyforge_project:
94
+ rubygems_version: 1.8.24
112
95
  signing_key:
113
96
  specification_version: 3
114
97
  summary: A flexible library for creating web service consumers.
115
- test_files:
116
- - spec/relax/context_spec.rb
117
- - spec/relax/endpoint_spec.rb
118
- - spec/relax/integration_spec.rb
119
- - spec/relax/service_spec.rb
120
- - spec/services/blank_values_service.rb
121
- - spec/services/custom_parser_service.rb
122
- - spec/services/flickr.rb
123
- - spec/services/parameter_alias_service.rb
98
+ test_files:
99
+ - spec/relax/client_spec.rb
100
+ - spec/relax/config_spec.rb
101
+ - spec/relax/delegator_spec.rb
102
+ - spec/relax/resource_spec.rb
124
103
  - spec/spec_helper.rb