almodovar 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/almodovar.rb +1 -0
- data/lib/almodovar/errors.rb +3 -0
- data/lib/almodovar/http_accessor.rb +10 -3
- data/lib/almodovar/resource_collection.rb +2 -1
- data/lib/almodovar/resource_presenter/collection.rb +34 -3
- data/lib/almodovar/single_resource.rb +2 -1
- data/lib/almodovar/to_xml.rb +3 -3
- metadata +100 -106
data/lib/almodovar.rb
CHANGED
@@ -11,6 +11,7 @@ require 'almodovar/http_accessor'
|
|
11
11
|
require 'almodovar/resource'
|
12
12
|
require 'almodovar/resource_collection'
|
13
13
|
require 'almodovar/single_resource'
|
14
|
+
require 'almodovar/errors'
|
14
15
|
require 'almodovar/to_xml'
|
15
16
|
require 'almodovar/resource_presenter'
|
16
17
|
require 'almodovar/resource_presenter/collection'
|
@@ -3,6 +3,7 @@ module Almodovar
|
|
3
3
|
def xml
|
4
4
|
@xml ||= begin
|
5
5
|
response = http.get(url_with_params)
|
6
|
+
check_errors(response)
|
6
7
|
Nokogiri::XML.parse(response.body).root
|
7
8
|
end
|
8
9
|
end
|
@@ -16,11 +17,17 @@ module Almodovar
|
|
16
17
|
|
17
18
|
def http
|
18
19
|
@http ||= Patron::Session.new.tap do |session|
|
19
|
-
|
20
|
-
|
21
|
-
|
20
|
+
if @auth
|
21
|
+
session.username = @auth.username
|
22
|
+
session.password = @auth.password
|
23
|
+
session.auth_type = :digest
|
24
|
+
end
|
22
25
|
end
|
23
26
|
end
|
27
|
+
|
28
|
+
def check_errors(response)
|
29
|
+
raise(Almodovar::HttpError, "Status code: #{response.status}") if response.status >= 400
|
30
|
+
end
|
24
31
|
end
|
25
32
|
|
26
33
|
end
|
@@ -14,7 +14,8 @@ module Almodovar
|
|
14
14
|
def create(attrs = {})
|
15
15
|
raise ArgumentError.new("You must specify one only root element which is the type of resource (e.g. `:project => { :name => 'Wadus' }` instead of just `:name => 'Wadus'`)") if attrs.size > 1
|
16
16
|
root, body = attrs.first
|
17
|
-
response = http.post(url_with_params, body.to_xml(:root => root, :convert_links => true),
|
17
|
+
response = http.post(url_with_params, body.to_xml(:root => root, :convert_links => true), "Content-Type" => "application/xml")
|
18
|
+
check_errors(response)
|
18
19
|
Resource.new(nil, @auth, Nokogiri::XML.parse(response.body).root)
|
19
20
|
end
|
20
21
|
|
@@ -2,17 +2,48 @@ module Almodovar
|
|
2
2
|
|
3
3
|
class ResourcePresenter::Collection
|
4
4
|
|
5
|
-
def initialize(resource_class, resources_args = [])
|
5
|
+
def initialize(resource_class, resources_args = [], options = {})
|
6
6
|
@resource_class = resource_class
|
7
7
|
@resources = resources_args.map { |arg| @resource_class.new(arg) }
|
8
|
+
|
9
|
+
@total = options[:total_entries]
|
10
|
+
@next = options[:next_link]
|
11
|
+
@prev = options[:prev_link]
|
8
12
|
end
|
9
13
|
|
10
14
|
def to_xml(options = {})
|
11
|
-
|
15
|
+
# Most of the following code is borrowed from ActiveSupport's Array#to_xml.
|
16
|
+
# We cannot use Array#to_xml because we need to add a few custom tags for
|
17
|
+
# pagination.
|
18
|
+
require 'active_support/builder' unless defined?(Builder)
|
19
|
+
|
20
|
+
options = options.dup
|
21
|
+
options[:indent] ||= 2
|
22
|
+
options[:builder] ||= ::Builder::XmlMarkup.new(:indent => options[:indent])
|
23
|
+
|
24
|
+
xml = options[:builder]
|
25
|
+
|
26
|
+
xml.instruct! unless options[:skip_instruct]
|
27
|
+
xml.tag! resource_type.pluralize.dasherize, :type => 'array' do
|
28
|
+
xml.tag!('total-entries', @total) if @total
|
29
|
+
xml.link :rel => 'next', :href => @next if @next
|
30
|
+
xml.link :rel => 'prev', :href => @prev if @prev
|
31
|
+
@resources.each { |value| value.to_xml(options.merge(:root => resource_type.singularize, :skip_instruct => true)) }
|
32
|
+
end
|
12
33
|
end
|
13
34
|
|
14
35
|
def as_json(options = {})
|
15
|
-
|
36
|
+
ActiveSupport::OrderedHash.new.tap do |message|
|
37
|
+
message[:total_entries] = @total if @total
|
38
|
+
message[:next_link] = @next if @next
|
39
|
+
message[:prev_link] = @prev if @prev
|
40
|
+
message[:entries] = @resources.map { |resource| resource.as_json(options) }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_json(options = {})
|
45
|
+
require 'yajl'
|
46
|
+
Yajl::Encoder.encode(as_json(options), :pretty => true) + "\n"
|
16
47
|
end
|
17
48
|
|
18
49
|
def resource_type
|
@@ -16,11 +16,12 @@ module Almodovar
|
|
16
16
|
raise ArgumentError.new("You must specify one only root element which is the type of resource (e.g. `:project => { :name => 'Wadus' }` instead of just `:name => 'Wadus'`)") if attrs.size > 1
|
17
17
|
root, body = attrs.first
|
18
18
|
response = http.put(@url, body.to_xml(:root => root), :content_type => "application/xml")
|
19
|
+
check_errors(response)
|
19
20
|
@xml = Nokogiri::XML.parse(response.body).root
|
20
21
|
end
|
21
22
|
|
22
23
|
def delete
|
23
|
-
http.delete(@url)
|
24
|
+
check_errors(http.delete(@url))
|
24
25
|
end
|
25
26
|
|
26
27
|
def url
|
data/lib/almodovar/to_xml.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
module Almodovar
|
2
2
|
module ArrayToXml
|
3
|
-
def to_xml_with_links(options = {})
|
4
|
-
return to_xml_without_links(options) unless options[:convert_links]
|
3
|
+
def to_xml_with_links(options = {}, &block)
|
4
|
+
return to_xml_without_links(options, &block) unless options[:convert_links]
|
5
5
|
options[:builder].tag!(:link, :rel => options[:root]) do |xml|
|
6
|
-
to_xml_without_links options.merge(:builder => xml)
|
6
|
+
to_xml_without_links options.merge(:builder => xml), &block
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
metadata
CHANGED
@@ -1,118 +1,122 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: almodovar
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.6.1
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 6
|
9
|
-
- 0
|
10
|
-
version: 0.6.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- BeBanjo S.L.
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-05-03 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: patron
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
33
22
|
type: :runtime
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: builder
|
37
23
|
prerelease: false
|
38
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
25
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: builder
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
47
38
|
type: :runtime
|
48
|
-
version_requirements: *id002
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: nokogiri
|
51
39
|
prerelease: false
|
52
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
41
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: nokogiri
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
61
54
|
type: :runtime
|
62
|
-
version_requirements: *id003
|
63
|
-
- !ruby/object:Gem::Dependency
|
64
|
-
name: activesupport
|
65
55
|
prerelease: false
|
66
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: activesupport
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
67
65
|
none: false
|
68
|
-
requirements:
|
69
|
-
- -
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
|
72
|
-
segments:
|
73
|
-
- 0
|
74
|
-
version: "0"
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
75
70
|
type: :runtime
|
76
|
-
version_requirements: *id004
|
77
|
-
- !ruby/object:Gem::Dependency
|
78
|
-
name: i18n
|
79
71
|
prerelease: false
|
80
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
73
|
none: false
|
82
|
-
requirements:
|
83
|
-
- -
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: i18n
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
89
86
|
type: :runtime
|
90
|
-
version_requirements: *id005
|
91
|
-
- !ruby/object:Gem::Dependency
|
92
|
-
name: yajl-ruby
|
93
87
|
prerelease: false
|
94
|
-
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
89
|
none: false
|
96
|
-
requirements:
|
97
|
-
- -
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: yajl-ruby
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
103
102
|
type: :runtime
|
104
|
-
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
105
110
|
description:
|
106
111
|
email: ballsbreaking@bebanjo.com
|
107
112
|
executables: []
|
108
|
-
|
109
113
|
extensions: []
|
110
|
-
|
111
|
-
extra_rdoc_files:
|
114
|
+
extra_rdoc_files:
|
112
115
|
- README.rdoc
|
113
|
-
files:
|
116
|
+
files:
|
114
117
|
- README.rdoc
|
115
118
|
- lib/almodovar/digest_auth.rb
|
119
|
+
- lib/almodovar/errors.rb
|
116
120
|
- lib/almodovar/http_accessor.rb
|
117
121
|
- lib/almodovar/resource.rb
|
118
122
|
- lib/almodovar/resource_collection.rb
|
@@ -122,40 +126,30 @@ files:
|
|
122
126
|
- lib/almodovar/single_resource.rb
|
123
127
|
- lib/almodovar/to_xml.rb
|
124
128
|
- lib/almodovar.rb
|
125
|
-
has_rdoc: true
|
126
129
|
homepage: http://wiki.github.com/bebanjo/almodovar/
|
127
130
|
licenses: []
|
128
|
-
|
129
131
|
post_install_message:
|
130
|
-
rdoc_options:
|
132
|
+
rdoc_options:
|
131
133
|
- --main
|
132
134
|
- README.rdoc
|
133
|
-
require_paths:
|
135
|
+
require_paths:
|
134
136
|
- lib
|
135
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
137
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
136
138
|
none: false
|
137
|
-
requirements:
|
138
|
-
- -
|
139
|
-
- !ruby/object:Gem::Version
|
140
|
-
|
141
|
-
|
142
|
-
- 0
|
143
|
-
version: "0"
|
144
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
143
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
144
|
none: false
|
146
|
-
requirements:
|
147
|
-
- -
|
148
|
-
- !ruby/object:Gem::Version
|
149
|
-
|
150
|
-
segments:
|
151
|
-
- 0
|
152
|
-
version: "0"
|
145
|
+
requirements:
|
146
|
+
- - ! '>='
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
153
149
|
requirements: []
|
154
|
-
|
155
150
|
rubyforge_project:
|
156
|
-
rubygems_version: 1.
|
151
|
+
rubygems_version: 1.8.24
|
157
152
|
signing_key:
|
158
153
|
specification_version: 3
|
159
154
|
summary: BeBanjo API client
|
160
155
|
test_files: []
|
161
|
-
|