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.
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .rvmrc
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ bin
11
+ coverage
12
+ doc
13
+ lib/bundler/man
14
+ pkg
15
+ rdoc
16
+ spec/reports
17
+ test/tmp
18
+ test/version_tmp
19
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/CHANGELOG.md ADDED
@@ -0,0 +1,63 @@
1
+ # Changelog
2
+
3
+ ## 0.2.0 – Unreleased
4
+
5
+ * Rewrote from scratch to be a smaller, simpler library
6
+
7
+ ## 0.1.3 – August 31, 2009
8
+
9
+ * Added basic request logging
10
+ * Updated to Relief 0.0.4
11
+
12
+ ## 0.1.2 – June 30, 2009
13
+
14
+ * Added support for proxies
15
+ * Added support for parameter name aliases
16
+ * Added an option to force blank values to be used
17
+
18
+ ## 0.1.1 – June 3, 2009
19
+
20
+ * Added support for tokenized URL parameters
21
+ * Modified Service#authenticate to return self to allow chaining
22
+ * Extended parsers to allow for custom parser classes (Nathaniel Bibler)
23
+
24
+ ## 0.1.0 – May 7, 2009
25
+
26
+ * Rewrote the API to use a DSL interface
27
+ * Replaced the embedded parsers with Relief
28
+
29
+ ## 0.0.7 – April 27, 2009
30
+
31
+ * Added support for required request parameters
32
+
33
+ ## 0.0.6 – February 3, 2009
34
+
35
+ * Fixed attribute-based parameters
36
+ * Fixed an issue with `node_name` in the new parsers (Nathaniel Bibler)
37
+
38
+ ## 0.0.5 – October 20, 2008
39
+
40
+ * Added support for multiple parsers (Nathaniel Bibler)
41
+ * Added a REXML parser (Nathaniel Bibler)
42
+ * Added a GitHub gemspec and a Rake task for regenerating it
43
+
44
+ ## 0.0.4 – November 17, 2007
45
+
46
+ * Added support for custom Request parameter types
47
+
48
+ ## 0.0.3 – November 1, 2007
49
+
50
+ * Fixed that parameter values defined in ancestors weren't passed to children
51
+ * Added date and time parameter types to Response
52
+ * Added an accessor for the raw XML to Response
53
+
54
+ ## 0.0.2 – October 10, 2007
55
+
56
+ * Renamed API to Service
57
+ * Added tutorial to the README
58
+ * Added Rdoc documentation
59
+ * Added support for custom Response parameter types
60
+
61
+ ## 0.0.1 – September 27, 2007
62
+
63
+ * First public release
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE CHANGED
@@ -1,4 +1,6 @@
1
- Copyright (c) 2007-2009 Tyler Hunt
1
+ Copyright (c) 2007-2012 Tyler Hunt
2
+
3
+ MIT License
2
4
 
3
5
  Permission is hereby granted, free of charge, to any person obtaining
4
6
  a copy of this software and associated documentation files (the
data/README.md ADDED
@@ -0,0 +1,80 @@
1
+ # Relax
2
+
3
+ A library of simple modules for building web service wrappers.
4
+
5
+
6
+ ## Usage
7
+
8
+ Relax a toolkit of sorts, which makes it easier to write Faraday-based API
9
+ Gems while still leaning heavily on the strengths of the Ruby language.
10
+
11
+ ### Overview
12
+
13
+ Relax is made up of three primary modules:
14
+
15
+ * `Relax::Client` — forms the basis of a web service wrapper by storing the
16
+ configuration and serving as a factory for resources
17
+
18
+ * `Relax::Resource` — used to handle the actual web service connections and
19
+ help organize related endpoints
20
+
21
+ * `Relax::Delegator` — delegates class methods to an instance of the client
22
+ allowing for simple client usage
23
+
24
+ ### Example
25
+
26
+ ``` ruby
27
+ require 'relax'
28
+ require 'faraday_middleware' # for JSON response parsing
29
+
30
+ module Vimeo
31
+ class Client
32
+ include Relax::Client
33
+
34
+ def initialize
35
+ config.base_uri = 'http://vimeo.com/api/v2'
36
+ end
37
+
38
+ def user(username)
39
+ Resources::User.new(self, username: username)
40
+ end
41
+ end
42
+
43
+ module Resource
44
+ include Relax::Resource
45
+
46
+ def connection
47
+ super { |builder| builder.response(:json) }
48
+ end
49
+ end
50
+
51
+ module Resources
52
+ class User
53
+ include Resource
54
+
55
+ def videos
56
+ get("#{@options[:username]}/videos.json").body
57
+ end
58
+ end
59
+ end
60
+
61
+ extend Relax::Delegator
62
+
63
+ delegate_to Client
64
+ end
65
+
66
+ Vimeo.user(ENV['VIMEO_USERNAME']).videos
67
+ ```
68
+
69
+ See the [`examples` directory][examples] for more.
70
+
71
+ [examples]: http://github.com/tylerhunt/relax/examples
72
+
73
+
74
+ ## Contributing
75
+
76
+ 1. Fork it.
77
+ 2. Create your feature branch (`git checkout -b my-new-feature`).
78
+ 3. Commit your changes (`git commit -am 'Add some feature.'`).
79
+ 4. Push to the branch (`git push origin my-new-feature`).
80
+ 5. Create a new Pull Request.
data/Rakefile CHANGED
@@ -1,53 +1,3 @@
1
- require 'rubygems'
2
- require 'rake'
3
- require 'rake/rdoctask'
4
- require 'spec/rake/spectask'
1
+ #!/usr/bin/env rake
5
2
 
6
- begin
7
- require 'jeweler'
8
-
9
- Jeweler::Tasks.new do |gem|
10
- gem.name = "relax"
11
- gem.summary = %Q{A flexible library for creating web service consumers.}
12
- gem.email = "tyler@tylerhunt.com"
13
- gem.homepage = "http://github.com/tylerhunt/relax"
14
- gem.authors = ["Tyler Hunt"]
15
- gem.rubyforge_project = 'relax'
16
-
17
- gem.add_dependency('rest-client', '~> 0.9.2')
18
- gem.add_dependency('relief', '~> 0.0.4')
19
-
20
- gem.add_development_dependency('jeweler', '~> 0.11.0')
21
- gem.add_development_dependency('rspec', '~> 1.2.2')
22
- end
23
- rescue LoadError
24
- puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
25
- end
26
-
27
- task :default => :spec
28
-
29
- Spec::Rake::SpecTask.new(:spec) do |spec|
30
- spec.libs << 'lib' << 'spec'
31
- spec.spec_files = FileList['spec/**/*_spec.rb']
32
- end
33
-
34
- Spec::Rake::SpecTask.new(:rcov) do |spec|
35
- spec.libs << 'lib' << 'spec'
36
- spec.pattern = 'spec/**/*_spec.rb'
37
- spec.rcov = true
38
- end
39
-
40
- Rake::RDocTask.new do |rdoc|
41
- if File.exist?('VERSION.yml')
42
- config = YAML.load(File.read('VERSION.yml'))
43
- version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
44
- else
45
- version = ""
46
- end
47
-
48
- rdoc.rdoc_dir = 'rdoc'
49
- rdoc.title = "relief #{version}"
50
- rdoc.rdoc_files.include('README*')
51
- rdoc.rdoc_files.include('LICENSE*')
52
- rdoc.rdoc_files.include('lib/**/*.rb')
53
- end
3
+ require 'bundler/gem_tasks'
@@ -0,0 +1,61 @@
1
+ require 'relax'
2
+ require 'multi_xml'
3
+ require 'faraday_middleware'
4
+
5
+ module Delicious
6
+ module Config
7
+ attr :username, true
8
+ attr :password, true
9
+ end
10
+
11
+ class Client
12
+ include Relax::Client
13
+
14
+ def initialize
15
+ config.base_uri = 'https://api.del.icio.us/v1'
16
+ config.extend(Config)
17
+ end
18
+
19
+ def posts
20
+ @posts ||= Resources::Posts.new(self)
21
+ end
22
+ end
23
+
24
+ module Resource
25
+ include Relax::Resource
26
+
27
+ def connection
28
+ super do |builder|
29
+ builder.basic_auth(config.username, config.password)
30
+ builder.response(:xml)
31
+ end
32
+ end
33
+ end
34
+
35
+ module Resources
36
+ class Posts
37
+ include Resource
38
+
39
+ def recent(params={})
40
+ get('posts/recent', params).body['posts']['post']
41
+ end
42
+ end
43
+ end
44
+ end
45
+
46
+ delicious = Delicious::Client.new
47
+ pinboard = Delicious::Client.new
48
+
49
+ delicious.configure do |config|
50
+ config.username = ENV['DELICIOUS_USERNAME']
51
+ config.password = ENV['DELICIOUS_PASSWORD']
52
+ end
53
+
54
+ pinboard.configure do |config|
55
+ config.base_uri = 'https://api.pinboard.in/v1'
56
+ config.username = ENV['PINBOARD_USERNAME']
57
+ config.password = ENV['PINBOARD_PASSWORD']
58
+ end
59
+
60
+ puts delicious.posts.recent.first(10).collect { |post| post['href'] }
61
+ puts pinboard.posts.recent.first(10).collect { |post| post['href'] }
@@ -0,0 +1,66 @@
1
+ require 'relax'
2
+ require 'faraday_middleware'
3
+
4
+ module Flickr
5
+ extend Relax::Delegator[:client]
6
+
7
+ module Config
8
+ attr :api_key, true
9
+ end
10
+
11
+ class Client
12
+ include Relax::Client
13
+
14
+ def initialize
15
+ config.base_uri = 'http://api.flickr.com/services/rest/'
16
+ config.extend(Config)
17
+ end
18
+
19
+ def search
20
+ @search ||= Resources::Search.new(self)
21
+ end
22
+ end
23
+
24
+ module Resource
25
+ include Relax::Resource
26
+
27
+ def get(method, parameters={})
28
+ parameters.merge!(
29
+ method: method,
30
+ api_key: config.api_key,
31
+ format: :json,
32
+ nojsoncallback: 1
33
+ )
34
+
35
+ super(nil, parameters)
36
+ end
37
+
38
+ def connection
39
+ super do |builder|
40
+ builder.response(:json)
41
+ end
42
+ end
43
+ end
44
+
45
+ module Resources
46
+ class Search
47
+ include Resource
48
+
49
+ def photos(tags)
50
+ get('flickr.photos.search', tags: tags).body['photos']['photo']
51
+ end
52
+ end
53
+ end
54
+
55
+ def self.client
56
+ @client ||= Client.new
57
+ end
58
+ end
59
+
60
+ Flickr.configure do |config|
61
+ config.api_key = ENV['FLICKR_API_KEY']
62
+ end
63
+
64
+ photos = Flickr.search.photos('ruby')
65
+
66
+ puts photos.first(10).collect { |photo| photo['title'] }
data/examples/vimeo.rb ADDED
@@ -0,0 +1,65 @@
1
+ require 'relax'
2
+ require 'faraday_middleware'
3
+
4
+ module Vimeo
5
+ extend Relax::Delegator[:client]
6
+
7
+ class Client
8
+ include Relax::Client
9
+
10
+ def initialize
11
+ config.base_uri = 'http://vimeo.com/api/v2'
12
+ end
13
+
14
+ def user(username)
15
+ Resources::User.new(self, username: username)
16
+ end
17
+ end
18
+
19
+ module Resource
20
+ include Relax::Resource
21
+
22
+ def connection
23
+ super { |builder| builder.response(:json) }
24
+ end
25
+ end
26
+
27
+ module Resources
28
+ class User
29
+ include Resource
30
+
31
+ def info
32
+ get("#{@options[:username]}/info.json").body
33
+ end
34
+
35
+ def videos
36
+ get("#{@options[:username]}/videos.json").body
37
+ end
38
+
39
+ def likes
40
+ get("#{@options[:username]}/likes.json").body
41
+ end
42
+ end
43
+ end
44
+
45
+ def self.client
46
+ @client ||= Client.new
47
+ end
48
+ end
49
+
50
+ vimeo_user = Vimeo.user(ENV['VIMEO_USERNAME'])
51
+
52
+ info = vimeo_user.info
53
+ videos = vimeo_user.videos.first(10)
54
+ likes = vimeo_user.likes.first(10)
55
+
56
+ puts <<OUTPUT
57
+ Name: #{info['display_name']}
58
+ Location: #{info['location']}
59
+
60
+ Videos:
61
+ #{videos.collect { |post| "- #{post['title']}" }.join("\n")}
62
+
63
+ Likes:
64
+ #{likes.collect { |post| "- #{post['title']}" }.join("\n")}
65
+ OUTPUT
data/lib/relax.rb CHANGED
@@ -1,18 +1,8 @@
1
- require 'rubygems'
1
+ require 'relax/version'
2
2
 
3
- gem 'relief', '~> 0.0.4'
4
- require 'relief'
5
-
6
- gem 'rest-client', '~> 0.9.2'
7
- require 'restclient'
8
-
9
- module Relax # :nodoc:
10
- autoload :Action, 'relax/action'
11
- autoload :Context, 'relax/context'
12
- autoload :Contextable, 'relax/contextable'
13
- autoload :Endpoint, 'relax/endpoint'
14
- autoload :Instance, 'relax/instance'
15
- autoload :Parameter, 'relax/parameter'
16
- autoload :Performer, 'relax/performer'
17
- autoload :Service, 'relax/service'
3
+ module Relax
4
+ autoload :Client, 'relax/client'
5
+ autoload :Config, 'relax/config'
6
+ autoload :Delegator, 'relax/delegator'
7
+ autoload :Resource, 'relax/resource'
18
8
  end