restfully 0.4.0 → 0.4.1
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/CHANGELOG +7 -0
- data/README.rdoc +13 -13
- data/VERSION +1 -1
- data/bin/restfully +5 -3
- data/lib/restfully.rb +2 -1
- data/lib/restfully/http/error.rb +11 -3
- data/restfully.gemspec +2 -1
- data/spec/collection_spec.rb +1 -1
- data/spec/fixtures/configuration_file.yml +4 -0
- data/spec/session_spec.rb +14 -3
- metadata +2 -1
data/CHANGELOG
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
0.4.1
|
2
|
+
* added a require 'yaml' in restfully.rb (priteau);
|
3
|
+
* added an introductory message when suing the command-line tool;
|
4
|
+
* removed [root_path] from the list of options in command-line client 'Usage' banner (priteau);
|
5
|
+
* added test for :configuration_file option;
|
6
|
+
* tests are no longer failing on ruby1.9;
|
7
|
+
|
1
8
|
0.4.0
|
2
9
|
* removed 'root_path' option: 'base_uri' must point to the starting resource;
|
3
10
|
* objects can now be pretty printed using 'pp object';
|
data/README.rdoc
CHANGED
@@ -19,19 +19,19 @@ If the connection was successful, you should get a prompt. You may enter
|
|
19
19
|
irb(main):001:0> pp root
|
20
20
|
|
21
21
|
to get back a pretty-printed output of the root resource:
|
22
|
-
#<Restfully::Resource:0x91f08c
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
You can see the LINKS and PROPERTIES headers that respectively indicate what links you can follow from there (by calling
|
22
|
+
#<Restfully::Resource:0x91f08c
|
23
|
+
@uri=#<URI::HTTP:0x123e30c URL:http://api.local/sid/grid5000>
|
24
|
+
LINKS
|
25
|
+
@environments=#<Restfully::Collection:0x917666>,
|
26
|
+
@sites=#<Restfully::Collection:0x9170d0>,
|
27
|
+
@version=#<Restfully::Resource:0x91852a>,
|
28
|
+
@versions=#<Restfully::Collection:0x917e68>
|
29
|
+
PROPERTIES
|
30
|
+
"uid"=>"grid5000",
|
31
|
+
"type"=>"grid",
|
32
|
+
"version"=>"4fe96b25d2cbfee16abe5a4fb999c82dbafc2ee8">
|
33
|
+
|
34
|
+
You can see the LINKS and PROPERTIES headers that respectively indicate what links you can follow from there (by calling <tt>root.link_name</tt>) and what properties are available (by calling <tt>root[property_name]</tt>).
|
35
35
|
|
36
36
|
Let's say you want to access the collection of +sites+, you would enter:
|
37
37
|
irb(main):002:0> pp root.sites
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.1
|
data/bin/restfully
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# The command line Restfully client
|
3
3
|
|
4
|
-
|
4
|
+
lib_dir = File.expand_path(File.dirname(__FILE__) + '/../lib')
|
5
|
+
$LOAD_PATH.unshift lib_dir unless $LOAD_PATH.include? lib_dir
|
5
6
|
|
6
7
|
require 'restfully'
|
7
8
|
require 'optparse'
|
8
9
|
require 'logger'
|
9
|
-
require 'yaml'
|
10
10
|
require 'pp'
|
11
11
|
|
12
12
|
|
@@ -18,7 +18,7 @@ option_parser = OptionParser.new do |opts|
|
|
18
18
|
* Description
|
19
19
|
Restfully #{Restfully::VERSION} - Access REST APIs effortlessly
|
20
20
|
* Usage
|
21
|
-
restfully [base_uri] [
|
21
|
+
restfully [base_uri] [options]
|
22
22
|
* Options
|
23
23
|
BANNER
|
24
24
|
|
@@ -59,6 +59,8 @@ def root
|
|
59
59
|
@root ||= session.root.load
|
60
60
|
end
|
61
61
|
|
62
|
+
puts "Restfully/#{Restfully::VERSION} - The root resource is available in the 'root' variable."
|
63
|
+
|
62
64
|
require 'irb'
|
63
65
|
require 'irb/completion'
|
64
66
|
ARGV.clear
|
data/lib/restfully.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'backports'
|
2
|
+
require 'yaml'
|
2
3
|
require 'restfully/error'
|
3
4
|
require 'restfully/parsing'
|
4
5
|
require 'restfully/http'
|
@@ -13,7 +14,7 @@ require 'restfully/collection'
|
|
13
14
|
|
14
15
|
|
15
16
|
module Restfully
|
16
|
-
VERSION = "0.4.
|
17
|
+
VERSION = "0.4.1"
|
17
18
|
class << self
|
18
19
|
attr_accessor :adapter
|
19
20
|
end
|
data/lib/restfully/http/error.rb
CHANGED
@@ -1,13 +1,21 @@
|
|
1
1
|
module Restfully
|
2
2
|
module HTTP
|
3
3
|
class Error < Restfully::Error
|
4
|
+
STATUS_CODES = {
|
5
|
+
400 => "Bad Request",
|
6
|
+
401 => "Authorization Required",
|
7
|
+
403 => "Forbiden",
|
8
|
+
406 => "Not Acceptable"
|
9
|
+
}
|
10
|
+
|
4
11
|
attr_reader :response
|
5
12
|
def initialize(response)
|
6
13
|
@response = response
|
7
|
-
|
8
|
-
|
14
|
+
response_body = response.body rescue response.raw_body
|
15
|
+
if response_body.kind_of?(Hash)
|
16
|
+
message = "#{response.status} #{response_body['title']}. #{response_body['message']}"
|
9
17
|
else
|
10
|
-
message = response.
|
18
|
+
message = "#{response.status} #{STATUS_CODES[response.status] || (response_body[0..100]+"...")}"
|
11
19
|
end
|
12
20
|
super(message)
|
13
21
|
end
|
data/restfully.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{restfully}
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Cyril Rohr"]
|
@@ -49,6 +49,7 @@ Gem::Specification.new do |s|
|
|
49
49
|
"lib/restfully/special_hash.rb",
|
50
50
|
"restfully.gemspec",
|
51
51
|
"spec/collection_spec.rb",
|
52
|
+
"spec/fixtures/configuration_file.yml",
|
52
53
|
"spec/fixtures/grid5000-sites.json",
|
53
54
|
"spec/http/error_spec.rb",
|
54
55
|
"spec/http/headers_spec.rb",
|
data/spec/collection_spec.rb
CHANGED
@@ -32,7 +32,7 @@ describe Collection do
|
|
32
32
|
it "should not load if already loaded and no :reload" do
|
33
33
|
collection = Collection.new(@uri, mock("session"))
|
34
34
|
options = {:headers => {'key' => 'value'}}
|
35
|
-
collection.should_receive(:executed_requests).and_return({'GET' => {'options' => options, 'body' => {"key"
|
35
|
+
collection.should_receive(:executed_requests).and_return({'GET' => {'options' => options, 'body' => {"key" => "value"}}})
|
36
36
|
collection.load(options.merge(:reload => false)).should == collection
|
37
37
|
end
|
38
38
|
it "should load when :reload param is true [already loaded]" do
|
data/spec/session_spec.rb
CHANGED
@@ -4,7 +4,7 @@ restfully_version = File.read(File.dirname(__FILE__)+'/../VERSION').strip
|
|
4
4
|
include Restfully
|
5
5
|
describe Session do
|
6
6
|
before do
|
7
|
-
@session = Session.new(:base_uri => 'https://api.grid5000.fr/sid/', :
|
7
|
+
@session = Session.new(:base_uri => 'https://api.grid5000.fr/sid/', :user => 'crohr', :password => 'password', :default_headers => {})
|
8
8
|
@request = mock("restfully http request", :uri => mock("uri"), :headers => mock("headers"), :body => nil)
|
9
9
|
@response = mock("restfully http response", :status => 200, :headers => mock("headers"))
|
10
10
|
end
|
@@ -66,15 +66,23 @@ describe Session do
|
|
66
66
|
it "should yield the loaded root resource and the session object" do
|
67
67
|
Restfully::Resource.stub!(:new).and_return(root_resource = mock(Restfully::Resource))
|
68
68
|
root_resource.should_receive(:load).and_return(root_resource)
|
69
|
-
Session.new(:base_uri => 'https://api.grid5000.fr', :
|
69
|
+
Session.new(:base_uri => 'https://api.grid5000.fr', :user => 'crohr', :password => 'password') do |root, session|
|
70
70
|
session.root.should == root
|
71
71
|
root.should == root_resource
|
72
72
|
end
|
73
73
|
end
|
74
|
+
|
75
|
+
it "should use the options defined in the given configuration file" do
|
76
|
+
config_file =
|
77
|
+
session = Session.new(:base_uri => 'https://api.grid5000.fr', :username => 'x', :password => 'y', :verbose => true, :configuration_file => (File.dirname(__FILE__)+'/fixtures/configuration_file.yml'))
|
78
|
+
session.base_uri.should == URI.parse('http://somewhere.net/x/y/z')
|
79
|
+
session.logger.should_not == Logger::DEBUG
|
80
|
+
end
|
74
81
|
end
|
75
82
|
|
76
83
|
describe "Transmitting requests" do
|
77
84
|
before do
|
85
|
+
Session.send(:public, :transmit)
|
78
86
|
@request.should_receive(:add_headers).with("User-Agent"=>"Restfully/#{restfully_version}", "Accept"=>"application/json")
|
79
87
|
end
|
80
88
|
it "should send a head" do
|
@@ -106,7 +114,10 @@ describe Session do
|
|
106
114
|
end
|
107
115
|
end
|
108
116
|
|
109
|
-
describe "Dealing with errors" do
|
117
|
+
describe "Dealing with errors" do
|
118
|
+
before do
|
119
|
+
Session.send(:public, :deal_with_eventual_errors)
|
120
|
+
end
|
110
121
|
it "should raise a Restfully::HTTP::ClientError error on 4xx errors" do
|
111
122
|
response = mock("404 response", :status => 404, :body => {'code' => 404, 'message' => 'The requested resource cannot be found.', 'title' => 'Not Found'}, :headers => mock("headers"))
|
112
123
|
lambda{ @session.send(:deal_with_eventual_errors, response, @request) }.should raise_error(Restfully::HTTP::ClientError, "404 Not Found. The requested resource cannot be found.")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: restfully
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cyril Rohr
|
@@ -72,6 +72,7 @@ files:
|
|
72
72
|
- lib/restfully/special_hash.rb
|
73
73
|
- restfully.gemspec
|
74
74
|
- spec/collection_spec.rb
|
75
|
+
- spec/fixtures/configuration_file.yml
|
75
76
|
- spec/fixtures/grid5000-sites.json
|
76
77
|
- spec/http/error_spec.rb
|
77
78
|
- spec/http/headers_spec.rb
|