activeresource 5.1.1 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "active_support/core_ext/benchmark"
4
- require "active_support/core_ext/uri"
5
4
  require "active_support/core_ext/object/inclusion"
6
5
  require "net/https"
7
6
  require "date"
@@ -44,8 +43,8 @@ module ActiveResource
44
43
  def site=(site)
45
44
  @site = site.is_a?(URI) ? site : URI.parse(site)
46
45
  @ssl_options ||= {} if @site.is_a?(URI::HTTPS)
47
- @user = URI.parser.unescape(@site.user) if @site.user
48
- @password = URI.parser.unescape(@site.password) if @site.password
46
+ @user = URI::DEFAULT_PARSER.unescape(@site.user) if @site.user
47
+ @password = URI::DEFAULT_PARSER.unescape(@site.password) if @site.password
49
48
  end
50
49
 
51
50
  # Set the proxy for remote service.
@@ -151,8 +150,12 @@ module ActiveResource
151
150
  raise(ResourceConflict.new(response))
152
151
  when 410
153
152
  raise(ResourceGone.new(response))
153
+ when 412
154
+ raise(PreconditionFailed.new(response))
154
155
  when 422
155
156
  raise(ResourceInvalid.new(response))
157
+ when 429
158
+ raise(TooManyRequests.new(response))
156
159
  when 401...500
157
160
  raise(ClientError.new(response))
158
161
  when 500...600
@@ -170,8 +173,8 @@ module ActiveResource
170
173
 
171
174
  def new_http
172
175
  if @proxy
173
- user = URI.parser.unescape(@proxy.user) if @proxy.user
174
- password = URI.parser.unescape(@proxy.password) if @proxy.password
176
+ user = URI::DEFAULT_PARSER.unescape(@proxy.user) if @proxy.user
177
+ password = URI::DEFAULT_PARSER.unescape(@proxy.password) if @proxy.password
175
178
  Net::HTTP.new(@site.host, @site.port, @proxy.host, @proxy.port, user, password)
176
179
  else
177
180
  Net::HTTP.new(@site.host, @site.port)
@@ -10,7 +10,9 @@ module ActiveResource
10
10
  end
11
11
 
12
12
  def to_s
13
- message = "Failed.".dup
13
+ return @message if @message
14
+
15
+ message = +"Failed."
14
16
  message << " Response code = #{response.code}." if response.respond_to?(:code)
15
17
  message << " Response message = #{response.message}." if response.respond_to?(:message)
16
18
  message
@@ -22,7 +24,7 @@ module ActiveResource
22
24
  def initialize(message)
23
25
  @message = message
24
26
  end
25
- def to_s; @message ;end
27
+ def to_s; @message ; end
26
28
  end
27
29
 
28
30
  # Raised when a OpenSSL::SSL::SSLError occurs.
@@ -30,7 +32,7 @@ module ActiveResource
30
32
  def initialize(message)
31
33
  @message = message
32
34
  end
33
- def to_s; @message ;end
35
+ def to_s; @message ; end
34
36
  end
35
37
 
36
38
  # 3xx Redirection
@@ -71,6 +73,14 @@ module ActiveResource
71
73
  class ResourceGone < ClientError # :nodoc:
72
74
  end
73
75
 
76
+ # 412 Precondition Failed
77
+ class PreconditionFailed < ClientError # :nodoc:
78
+ end
79
+
80
+ # 429 Too Many Requests
81
+ class TooManyRequests < ClientError # :nodoc:
82
+ end
83
+
74
84
  # 5xx Server Error
75
85
  class ServerError < ConnectionError # :nodoc:
76
86
  end
@@ -4,7 +4,7 @@ require "active_support/core_ext/kernel/reporting"
4
4
  require "active_support/core_ext/object/inclusion"
5
5
 
6
6
  module ActiveResource
7
- class InvalidRequestError < StandardError; end #:nodoc:
7
+ class InvalidRequestError < StandardError; end # :nodoc:
8
8
 
9
9
  # One thing that has always been a pain with remote web services is testing. The HttpMock
10
10
  # class makes it easy to test your Active Resource models by creating a set of mock responses to specific
@@ -52,7 +52,7 @@ module ActiveResource
52
52
  # end
53
53
  #
54
54
  class HttpMock
55
- class Responder #:nodoc:
55
+ class Responder # :nodoc:
56
56
  def initialize(responses)
57
57
  @responses = responses
58
58
  end
@@ -74,7 +74,6 @@ module ActiveResource
74
74
  end
75
75
 
76
76
  private
77
-
78
77
  def delete_duplicate_responses(request)
79
78
  @responses.delete_if { |r| r[0] == request }
80
79
  end
@@ -190,7 +189,7 @@ module ActiveResource
190
189
  # ActiveResource::HttpMock.respond_to(pairs, false)
191
190
  # ActiveResource::HttpMock.responses.length #=> 2
192
191
  #
193
- def respond_to(*args) #:yields: mock
192
+ def respond_to(*args) # :yields: mock
194
193
  pairs = args.first || {}
195
194
  reset! if args.last.class != FalseClass
196
195
 
@@ -268,11 +267,11 @@ module ActiveResource
268
267
  end
269
268
  end
270
269
 
271
- def initialize(site) #:nodoc:
270
+ def initialize(site) # :nodoc:
272
271
  @site = site
273
272
  end
274
273
 
275
- def inspect_responses #:nodoc:
274
+ def inspect_responses # :nodoc:
276
275
  self.class.responses.map { |r| r[0].to_s }.inspect
277
276
  end
278
277
  end
@@ -293,7 +292,6 @@ module ActiveResource
293
292
  end
294
293
 
295
294
  private
296
-
297
295
  def headers_match?(req)
298
296
  # Ignore format header on equality if it's not defined
299
297
  format_header = ActiveResource::Connection::HTTP_FORMAT_HEADER_NAMES[method]
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveResource
4
+ class InheritingHash < Hash
5
+ def initialize(parent_hash = {})
6
+ # Default hash value must be nil, which allows fallback lookup on parent hash
7
+ super(nil)
8
+ @parent_hash = parent_hash
9
+ end
10
+
11
+ def [](key)
12
+ super || @parent_hash[key]
13
+ end
14
+ end
15
+ end
@@ -16,7 +16,7 @@ module ActiveResource
16
16
  end
17
17
 
18
18
  initializer "active_resource.add_active_job_serializer" do |app|
19
- if defined? app.config.active_job.custom_serializers
19
+ if app.config.try(:active_job).try(:custom_serializers)
20
20
  require "active_resource/active_job_serializer"
21
21
  app.config.active_job.custom_serializers << ActiveResource::ActiveJobSerializer
22
22
  end
@@ -62,12 +62,12 @@ module ActiveResource
62
62
 
63
63
  # Returns the foreign_key for the macro.
64
64
  def foreign_key
65
- @foreign_key ||= self.options[:foreign_key] || "#{self.name.to_s.downcase}_id"
65
+ @foreign_key ||= derive_foreign_key
66
66
  end
67
67
 
68
68
  private
69
69
  def derive_class_name
70
- (options[:class_name] ? options[:class_name].to_s.camelize : name.to_s.classify)
70
+ options[:class_name] ? options[:class_name].to_s.camelize : name.to_s.classify
71
71
  end
72
72
 
73
73
  def derive_foreign_key
@@ -47,6 +47,7 @@ module ActiveResource # :nodoc:
47
47
  # attr_names.each { |name| attribute(name, 'string', options) }
48
48
  # end
49
49
  class_eval <<-EOV, __FILE__, __LINE__ + 1
50
+ # frozen_string_literal: true
50
51
  def #{attr_type}(*args)
51
52
  options = args.extract_options!
52
53
  attr_names = args
@@ -88,7 +88,6 @@ module ActiveResource
88
88
 
89
89
 
90
90
  protected
91
-
92
91
  # Update the resource on the remote service
93
92
  def update
94
93
  connection.put(singleton_path(prefix_options), encode, self.class.headers).tap do |response|
@@ -105,7 +104,6 @@ module ActiveResource
105
104
  end
106
105
 
107
106
  private
108
-
109
107
  def singleton_path(options = nil)
110
108
  self.class.singleton_path(options || prefix_options)
111
109
  end
@@ -28,7 +28,6 @@ module ThreadsafeAttributes
28
28
  end
29
29
 
30
30
  private
31
-
32
31
  def get_threadsafe_attribute(name, main_thread)
33
32
  if threadsafe_attribute_defined_by_thread?(name, Thread.current)
34
33
  get_threadsafe_attribute_by_thread(name, Thread.current)
@@ -4,7 +4,7 @@ require "active_support/core_ext/array/wrap"
4
4
  require "active_support/core_ext/object/blank"
5
5
 
6
6
  module ActiveResource
7
- class ResourceInvalid < ClientError #:nodoc:
7
+ class ResourceInvalid < ClientError # :nodoc:
8
8
  end
9
9
 
10
10
  # Active Resource validation is reported to and from this object, which is used by Base#save
@@ -22,7 +22,7 @@ module ActiveResource
22
22
  add humanized_attributes[attr_name], message[(attr_name.size + 1)..-1]
23
23
  end
24
24
  end
25
- self[:base] << message if attr_message.nil?
25
+ add(:base, message) if attr_message.nil?
26
26
  end
27
27
  end
28
28
 
@@ -40,11 +40,11 @@ module ActiveResource
40
40
  if @base.known_attributes.include?(key)
41
41
  add key, error
42
42
  elsif key == "base"
43
- self[:base] << error
43
+ add(:base, error)
44
44
  else
45
45
  # reporting an error on an attribute not in attributes
46
46
  # format and add them to base
47
- self[:base] << "#{key.humanize} #{error}"
47
+ add(:base, "#{key.humanize} #{error}")
48
48
  end
49
49
  end
50
50
  end
@@ -133,7 +133,7 @@ module ActiveResource
133
133
 
134
134
  # Loads the set of remote errors into the object's Errors based on the
135
135
  # content-type of the error-block received.
136
- def load_remote_errors(remote_errors, save_cache = false) #:nodoc:
136
+ def load_remote_errors(remote_errors, save_cache = false) # :nodoc:
137
137
  case self.class.format
138
138
  when ActiveResource::Formats[:xml]
139
139
  errors.from_xml(remote_errors.response.body, save_cache)
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveResource
4
- module VERSION #:nodoc:
5
- MAJOR = 5
6
- MINOR = 1
7
- TINY = 1
4
+ module VERSION # :nodoc:
5
+ MAJOR = 6
6
+ MINOR = 0
7
+ TINY = 0
8
8
  PRE = nil
9
9
 
10
10
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
@@ -39,6 +39,7 @@ module ActiveResource
39
39
  autoload :HttpMock
40
40
  autoload :Schema
41
41
  autoload :Singleton
42
+ autoload :InheritingHash
42
43
  autoload :Validations
43
44
  autoload :Collection
44
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activeresource
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.1
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-05 00:00:00.000000000 Z
11
+ date: 2022-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,40 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5.0'
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '7'
19
+ version: '6.0'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - ">="
28
25
  - !ruby/object:Gem::Version
29
- version: '5.0'
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '7'
26
+ version: '6.0'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: activemodel
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
31
  - - ">="
38
32
  - !ruby/object:Gem::Version
39
- version: '5.0'
40
- - - "<"
41
- - !ruby/object:Gem::Version
42
- version: '7'
33
+ version: '6.0'
43
34
  type: :runtime
44
35
  prerelease: false
45
36
  version_requirements: !ruby/object:Gem::Requirement
46
37
  requirements:
47
38
  - - ">="
48
39
  - !ruby/object:Gem::Version
49
- version: '5.0'
50
- - - "<"
51
- - !ruby/object:Gem::Version
52
- version: '7'
40
+ version: '6.0'
53
41
  - !ruby/object:Gem::Dependency
54
42
  name: activemodel-serializers-xml
55
43
  requirement: !ruby/object:Gem::Requirement
@@ -92,16 +80,29 @@ dependencies:
92
80
  - - ">="
93
81
  - !ruby/object:Gem::Version
94
82
  version: 0.13.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: rexml
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
95
97
  description: REST on Rails. Wrap your RESTful web app with Ruby classes and work with
96
98
  them like Active Record models.
97
99
  email: david@loudthinking.com
98
100
  executables: []
99
101
  extensions: []
100
- extra_rdoc_files:
101
- - README.rdoc
102
+ extra_rdoc_files: []
102
103
  files:
103
104
  - MIT-LICENSE
104
- - README.rdoc
105
+ - README.md
105
106
  - lib/active_resource.rb
106
107
  - lib/active_resource/active_job_serializer.rb
107
108
  - lib/active_resource/associations.rb
@@ -119,8 +120,8 @@ files:
119
120
  - lib/active_resource/formats/json_format.rb
120
121
  - lib/active_resource/formats/xml_format.rb
121
122
  - lib/active_resource/http_mock.rb
123
+ - lib/active_resource/inheriting_hash.rb
122
124
  - lib/active_resource/log_subscriber.rb
123
- - lib/active_resource/observing.rb
124
125
  - lib/active_resource/railtie.rb
125
126
  - lib/active_resource/reflection.rb
126
127
  - lib/active_resource/schema.rb
@@ -132,25 +133,28 @@ files:
132
133
  homepage: http://www.rubyonrails.org
133
134
  licenses:
134
135
  - MIT
135
- metadata: {}
136
+ metadata:
137
+ bug_tracker_uri: https://github.com/rails/activeresource/issues
138
+ changelog_uri: https://github.com/rails/activeresource/releases/tag/v6.0.0
139
+ documentation_uri: http://rubydoc.info/gems/activeresource
140
+ source_code_uri: https://github.com/rails/activeresource/tree/v6.0.0
141
+ rubygems_mfa_required: 'true'
136
142
  post_install_message:
137
- rdoc_options:
138
- - "--main"
139
- - README.rdoc
143
+ rdoc_options: []
140
144
  require_paths:
141
145
  - lib
142
146
  required_ruby_version: !ruby/object:Gem::Requirement
143
147
  requirements:
144
148
  - - ">="
145
149
  - !ruby/object:Gem::Version
146
- version: 2.2.2
150
+ version: 2.6.0
147
151
  required_rubygems_version: !ruby/object:Gem::Requirement
148
152
  requirements:
149
153
  - - ">="
150
154
  - !ruby/object:Gem::Version
151
155
  version: '0'
152
156
  requirements: []
153
- rubygems_version: 3.2.0.pre1
157
+ rubygems_version: 3.2.32
154
158
  signing_key:
155
159
  specification_version: 4
156
160
  summary: REST modeling framework (part of Rails).