almodovar 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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'
@@ -0,0 +1,3 @@
1
+ module Almodovar
2
+ class HttpError < Exception; end
3
+ end
@@ -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
- session.username = @auth.username
20
- session.password = @auth.password
21
- session.auth_type = :digest
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), :content_type => "application/xml")
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
- @resources.to_xml(options.merge({:root => resource_type.pluralize}))
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
- { 'entries' => @resources.map { |resource| resource.as_json(options) }}
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
@@ -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
- hash: 7
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
- date: 2011-10-07 00:00:00 +02:00
19
- default_executable:
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
- prerelease: false
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
- hash: 3
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
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
39
25
  none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
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
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
53
41
  none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 0
60
- version: "0"
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
- requirement: &id004 !ruby/object:Gem::Requirement
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
- hash: 3
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
- requirement: &id005 !ruby/object:Gem::Requirement
72
+ version_requirements: !ruby/object:Gem::Requirement
81
73
  none: false
82
- requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- hash: 3
86
- segments:
87
- - 0
88
- version: "0"
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
- requirement: &id006 !ruby/object:Gem::Requirement
88
+ version_requirements: !ruby/object:Gem::Requirement
95
89
  none: false
96
- requirements:
97
- - - ">="
98
- - !ruby/object:Gem::Version
99
- hash: 3
100
- segments:
101
- - 0
102
- version: "0"
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
- version_requirements: *id006
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
- hash: 3
141
- segments:
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
- hash: 3
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.6.2
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
-