signet 0.2.4 → 0.3.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/{CHANGELOG → CHANGELOG.md} +13 -6
- data/README.md +1 -3
- data/Rakefile +1 -1
- data/lib/signet/errors.rb +2 -2
- data/lib/signet/oauth_1/client.rb +78 -125
- data/lib/signet/oauth_2.rb +6 -6
- data/lib/signet/oauth_2/client.rb +103 -137
- data/lib/signet/version.rb +2 -2
- data/spec/signet/oauth_1/client_spec.rb +31 -34
- data/spec/signet/oauth_1/services/google_spec.rb +72 -94
- data/spec/signet/oauth_2/client_spec.rb +577 -0
- data/spec/signet/oauth_2_spec.rb +22 -0
- data/tasks/gem.rake +3 -4
- data/tasks/git.rake +1 -1
- data/tasks/rdoc.rake +1 -1
- data/tasks/rubyforge.rake +1 -1
- data/tasks/spec.rake +6 -1
- data/tasks/wiki.rake +38 -0
- data/tasks/yard.rake +1 -1
- metadata +11 -21
data/{CHANGELOG → CHANGELOG.md}
RENAMED
@@ -1,3 +1,10 @@
|
|
1
|
+
== 0.3.0
|
2
|
+
|
3
|
+
* Replaced httpadapter gem dependency with faraday
|
4
|
+
* Replaced json gem dependency with multi_json
|
5
|
+
* Updated to OAuth 2.0 draft 22
|
6
|
+
* Complete test coverage
|
7
|
+
|
1
8
|
== 0.2.4
|
2
9
|
|
3
10
|
* Updated to incorporate changes to the Google OAuth endpoints
|
@@ -25,18 +32,18 @@
|
|
25
32
|
|
26
33
|
== 0.1.3
|
27
34
|
|
28
|
-
*
|
29
|
-
*
|
35
|
+
* Fixed issue with headers passed in as a Hash
|
36
|
+
* Fixed incompatibilities with Ruby 1.8.6
|
30
37
|
|
31
38
|
== 0.1.2
|
32
39
|
|
33
|
-
*
|
40
|
+
* Fixed bug with overzealous normalization
|
34
41
|
|
35
42
|
== 0.1.1
|
36
43
|
|
37
|
-
*
|
38
|
-
*
|
44
|
+
* Fixed bug with missing StringIO require
|
45
|
+
* Fixed issue with dependency on unreleased features of addressable
|
39
46
|
|
40
47
|
== 0.1.0
|
41
48
|
|
42
|
-
*
|
49
|
+
* Initial release
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Signet
|
2
2
|
|
3
3
|
<dl>
|
4
|
-
<dt>Homepage</dt><dd><a href="http://
|
4
|
+
<dt>Homepage</dt><dd><a href="http://code.google.com/p/oauth-signet/">http://code.google.com/p/oauth-signet/</a></dd>
|
5
5
|
<dt>Author</dt><dd><a href="mailto:bobaman@google.com">Bob Aman</a></dd>
|
6
6
|
<dt>Copyright</dt><dd>Copyright © 2010 Google, Inc.</dd>
|
7
7
|
<dt>License</dt><dd>Apache 2.0</dd>
|
@@ -40,8 +40,6 @@ Signet is an OAuth 1.0 / OAuth 2.0 implementation.
|
|
40
40
|
response = client.fetch_protected_resource(
|
41
41
|
:uri => 'https://mail.google.com/mail/feed/atom'
|
42
42
|
)
|
43
|
-
# The Rack response format is used here
|
44
|
-
status, headers, body = response
|
45
43
|
|
46
44
|
## Install
|
47
45
|
|
data/Rakefile
CHANGED
@@ -46,7 +46,7 @@ PKG_FILES = FileList[
|
|
46
46
|
"[A-Z]*", "Rakefile"
|
47
47
|
].exclude(/database\.yml/).exclude(/[_\.]git$/)
|
48
48
|
|
49
|
-
RCOV_ENABLED = (RUBY_PLATFORM != "java" && RUBY_VERSION =~ /^1\.8/)
|
49
|
+
RCOV_ENABLED = !!(RUBY_PLATFORM != "java" && RUBY_VERSION =~ /^1\.8/)
|
50
50
|
if RCOV_ENABLED
|
51
51
|
task :default => "spec:verify"
|
52
52
|
else
|
data/lib/signet/errors.rb
CHANGED
@@ -37,9 +37,9 @@ module Signet
|
|
37
37
|
# @param [Hash] options
|
38
38
|
# The configuration parameters for the request.
|
39
39
|
# - <code>:request</code> —
|
40
|
-
# A
|
40
|
+
# A Faraday::Request object. Optional.
|
41
41
|
# - <code>:response</code> —
|
42
|
-
# A
|
42
|
+
# A Faraday::Response object. Optional.
|
43
43
|
# - <code>:code</code> —
|
44
44
|
# An error code.
|
45
45
|
# - <code>:description</code> —
|
@@ -12,6 +12,10 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
gem 'faraday', '~> 0.7.0'
|
16
|
+
require 'faraday'
|
17
|
+
require 'faraday/utils'
|
18
|
+
|
15
19
|
require 'stringio'
|
16
20
|
require 'addressable/uri'
|
17
21
|
require 'signet'
|
@@ -536,7 +540,7 @@ module Signet
|
|
536
540
|
:additional_parameters => [],
|
537
541
|
:realm => nil
|
538
542
|
}.merge(options)
|
539
|
-
method =
|
543
|
+
method = :post
|
540
544
|
parameters = ::Signet::OAuth1.unsigned_temporary_credential_parameters(
|
541
545
|
:client_credential_key => self.client_credential_key,
|
542
546
|
:callback => self.callback,
|
@@ -557,15 +561,14 @@ module Signet
|
|
557
561
|
)
|
558
562
|
]
|
559
563
|
headers = [authorization_header]
|
560
|
-
if method ==
|
564
|
+
if method == :post
|
561
565
|
headers << ['Content-Type', 'application/x-www-form-urlencoded']
|
566
|
+
headers << ['Content-Length', '0']
|
567
|
+
end
|
568
|
+
return Faraday::Request.create(method.to_s.downcase.to_sym) do |req|
|
569
|
+
req.url(Addressable::URI.parse(self.temporary_credential_uri.to_str))
|
570
|
+
req.headers = Faraday::Utils::Headers.new(headers)
|
562
571
|
end
|
563
|
-
return [
|
564
|
-
method,
|
565
|
-
self.temporary_credential_uri.to_str,
|
566
|
-
headers,
|
567
|
-
['']
|
568
|
-
]
|
569
572
|
end
|
570
573
|
alias_method(
|
571
574
|
:generate_request_token_request,
|
@@ -584,14 +587,9 @@ module Signet
|
|
584
587
|
# Non-standard additional parameters.
|
585
588
|
# - <code>:realm</code> —
|
586
589
|
# The Authorization realm. See RFC 2617.
|
587
|
-
# - <code>:adapter</code> —
|
588
|
-
# The HTTP adapter.
|
589
|
-
# Defaults to <code>HTTPAdapter::NetHTTPAdapter.new</code>.
|
590
590
|
# - <code>:connection</code> —
|
591
|
-
#
|
592
|
-
# Must be of type <code>
|
593
|
-
# internal connection representation must match the HTTP adapter
|
594
|
-
# being used.
|
591
|
+
# The HTTP connection to use.
|
592
|
+
# Must be of type <code>Faraday::Connection</code>.
|
595
593
|
#
|
596
594
|
# @return [Signet::OAuth1::Credential] The temporary credential.
|
597
595
|
#
|
@@ -602,35 +600,24 @@ module Signet
|
|
602
600
|
# }
|
603
601
|
# )
|
604
602
|
def fetch_temporary_credential(options={})
|
605
|
-
|
606
|
-
unless adapter
|
607
|
-
require 'httpadapter'
|
608
|
-
require 'httpadapter/adapters/net_http'
|
609
|
-
adapter = HTTPAdapter::NetHTTPAdapter.new
|
610
|
-
end
|
611
|
-
connection = options[:connection]
|
603
|
+
options[:connection] ||= Faraday.default_connection
|
612
604
|
request = self.generate_temporary_credential_request(options)
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
end
|
619
|
-
body = merged_body.string
|
620
|
-
if status.to_i == 200
|
621
|
-
return ::Signet::OAuth1.parse_form_encoded_credentials(body)
|
622
|
-
elsif [400, 401, 403].include?(status.to_i)
|
605
|
+
request_env = request.to_env(options[:connection])
|
606
|
+
response = options[:connection].app.call(request_env)
|
607
|
+
if response.status.to_i == 200
|
608
|
+
return ::Signet::OAuth1.parse_form_encoded_credentials(response.body)
|
609
|
+
elsif [400, 401, 403].include?(response.status.to_i)
|
623
610
|
message = 'Authorization failed.'
|
624
|
-
if body.strip.length > 0
|
625
|
-
message += " Server message:\n#{body.strip}"
|
611
|
+
if response.body.to_s.strip.length > 0
|
612
|
+
message += " Server message:\n#{response.body.to_s.strip}"
|
626
613
|
end
|
627
614
|
raise ::Signet::AuthorizationError.new(
|
628
615
|
message, :request => request, :response => response
|
629
616
|
)
|
630
617
|
else
|
631
|
-
message = "Unexpected status code: #{status}."
|
632
|
-
if body.strip.length > 0
|
633
|
-
message += " Server message:\n#{body.strip}"
|
618
|
+
message = "Unexpected status code: #{response.status}."
|
619
|
+
if response.body.to_s.strip.length > 0
|
620
|
+
message += " Server message:\n#{response.body.to_s.strip}"
|
634
621
|
end
|
635
622
|
raise ::Signet::AuthorizationError.new(
|
636
623
|
message, :request => request, :response => response
|
@@ -654,14 +641,9 @@ module Signet
|
|
654
641
|
# Non-standard additional parameters.
|
655
642
|
# - <code>:realm</code> —
|
656
643
|
# The Authorization realm. See RFC 2617.
|
657
|
-
# - <code>:adapter</code> —
|
658
|
-
# The HTTP adapter.
|
659
|
-
# Defaults to <code>HTTPAdapter::NetHTTPAdapter.new</code>.
|
660
644
|
# - <code>:connection</code> —
|
661
|
-
#
|
662
|
-
# Must be of type <code>
|
663
|
-
# internal connection representation must match the HTTP adapter
|
664
|
-
# being used.
|
645
|
+
# The HTTP connection to use.
|
646
|
+
# Must be of type <code>Faraday::Connection</code>.
|
665
647
|
#
|
666
648
|
# @return [Signet::OAuth1::Credential] The temporary credential.
|
667
649
|
#
|
@@ -709,7 +691,7 @@ module Signet
|
|
709
691
|
:signature_method => 'HMAC-SHA1',
|
710
692
|
:realm => nil
|
711
693
|
}.merge(options)
|
712
|
-
method =
|
694
|
+
method = :post
|
713
695
|
parameters = ::Signet::OAuth1.unsigned_token_credential_parameters(
|
714
696
|
:client_credential_key => self.client_credential_key,
|
715
697
|
:temporary_credential_key => self.temporary_credential_key,
|
@@ -732,15 +714,14 @@ module Signet
|
|
732
714
|
]
|
733
715
|
headers = [authorization_header]
|
734
716
|
headers << ['Cache-Control', 'no-store']
|
735
|
-
if method ==
|
717
|
+
if method == :post
|
736
718
|
headers << ['Content-Type', 'application/x-www-form-urlencoded']
|
719
|
+
headers << ['Content-Length', '0']
|
720
|
+
end
|
721
|
+
return Faraday::Request.create(method.to_s.downcase.to_sym) do |req|
|
722
|
+
req.url(Addressable::URI.parse(self.token_credential_uri.to_str))
|
723
|
+
req.headers = Faraday::Utils::Headers.new(headers)
|
737
724
|
end
|
738
|
-
return [
|
739
|
-
method,
|
740
|
-
self.token_credential_uri.to_str,
|
741
|
-
headers,
|
742
|
-
['']
|
743
|
-
]
|
744
725
|
end
|
745
726
|
alias_method(
|
746
727
|
:generate_access_token_request,
|
@@ -759,14 +740,9 @@ module Signet
|
|
759
740
|
# The signature method. Defaults to <code>'HMAC-SHA1'</code>.
|
760
741
|
# - <code>:realm</code> —
|
761
742
|
# The Authorization realm. See RFC 2617.
|
762
|
-
# - <code>:adapter</code> —
|
763
|
-
# The HTTP adapter.
|
764
|
-
# Defaults to <code>HTTPAdapter::NetHTTPAdapter.new</code>.
|
765
743
|
# - <code>:connection</code> —
|
766
|
-
#
|
767
|
-
# Must be of type <code>
|
768
|
-
# internal connection representation must match the HTTP adapter
|
769
|
-
# being used.
|
744
|
+
# The HTTP connection to use.
|
745
|
+
# Must be of type <code>Faraday::Connection</code>.
|
770
746
|
#
|
771
747
|
# @return [Signet::OAuth1::Credential] The token credential.
|
772
748
|
#
|
@@ -775,35 +751,24 @@ module Signet
|
|
775
751
|
# :verifier => '12345'
|
776
752
|
# )
|
777
753
|
def fetch_token_credential(options={})
|
778
|
-
|
779
|
-
unless adapter
|
780
|
-
require 'httpadapter'
|
781
|
-
require 'httpadapter/adapters/net_http'
|
782
|
-
adapter = HTTPAdapter::NetHTTPAdapter.new
|
783
|
-
end
|
784
|
-
connection = options[:connection]
|
754
|
+
options[:connection] ||= Faraday.default_connection
|
785
755
|
request = self.generate_token_credential_request(options)
|
786
|
-
|
787
|
-
|
788
|
-
|
789
|
-
|
790
|
-
|
791
|
-
end
|
792
|
-
body = merged_body.string
|
793
|
-
if status.to_i == 200
|
794
|
-
return ::Signet::OAuth1.parse_form_encoded_credentials(body)
|
795
|
-
elsif [400, 401, 403].include?(status.to_i)
|
756
|
+
request_env = request.to_env(options[:connection])
|
757
|
+
response = options[:connection].app.call(request_env)
|
758
|
+
if response.status.to_i == 200
|
759
|
+
return ::Signet::OAuth1.parse_form_encoded_credentials(response.body)
|
760
|
+
elsif [400, 401, 403].include?(response.status.to_i)
|
796
761
|
message = 'Authorization failed.'
|
797
|
-
if body.strip.length > 0
|
798
|
-
message += " Server message:\n#{body.strip}"
|
762
|
+
if response.body.to_s.strip.length > 0
|
763
|
+
message += " Server message:\n#{response.body.to_s.strip}"
|
799
764
|
end
|
800
765
|
raise ::Signet::AuthorizationError.new(
|
801
766
|
message, :request => request, :response => response
|
802
767
|
)
|
803
768
|
else
|
804
|
-
message = "Unexpected status code: #{status}."
|
805
|
-
if body.strip.length > 0
|
806
|
-
message += " Server message:\n#{body.strip}"
|
769
|
+
message = "Unexpected status code: #{response.status}."
|
770
|
+
if response.body.to_s.strip.length > 0
|
771
|
+
message += " Server message:\n#{response.body.to_s.strip}"
|
807
772
|
end
|
808
773
|
raise ::Signet::AuthorizationError.new(
|
809
774
|
message, :request => request, :response => response
|
@@ -827,14 +792,9 @@ module Signet
|
|
827
792
|
# Non-standard additional parameters.
|
828
793
|
# - <code>:realm</code> —
|
829
794
|
# The Authorization realm. See RFC 2617.
|
830
|
-
# - <code>:adapter</code> —
|
831
|
-
# The HTTP adapter.
|
832
|
-
# Defaults to <code>HTTPAdapter::NetHTTPAdapter.new</code>.
|
833
795
|
# - <code>:connection</code> —
|
834
|
-
#
|
835
|
-
# Must be of type <code>
|
836
|
-
# internal connection representation must match the HTTP adapter
|
837
|
-
# being used.
|
796
|
+
# The HTTP connection to use.
|
797
|
+
# Must be of type <code>Faraday::Connection</code>.
|
838
798
|
#
|
839
799
|
# @return [Signet::OAuth1::Credential] The token credential.
|
840
800
|
#
|
@@ -857,7 +817,7 @@ module Signet
|
|
857
817
|
# - <code>:request</code> —
|
858
818
|
# A pre-constructed request to sign.
|
859
819
|
# - <code>:method</code> —
|
860
|
-
# The HTTP method for the request. Defaults to
|
820
|
+
# The HTTP method for the request. Defaults to :get.
|
861
821
|
# - <code>:uri</code> —
|
862
822
|
# The URI for the request.
|
863
823
|
# - <code>:headers</code> —
|
@@ -893,13 +853,21 @@ module Signet
|
|
893
853
|
}.merge(options)
|
894
854
|
if options[:request]
|
895
855
|
if options[:request].kind_of?(Array)
|
896
|
-
|
897
|
-
elsif options[:
|
898
|
-
|
856
|
+
method, uri, headers, body = options[:request]
|
857
|
+
elsif options[:request].kind_of?(Faraday::Request)
|
858
|
+
unless options[:connection]
|
859
|
+
raise ArgumentError,
|
860
|
+
"Faraday::Request used, requires a connection to be provided."
|
861
|
+
end
|
862
|
+
method = options[:request].method.to_s.downcase.to_sym
|
863
|
+
uri = options[:connection].build_url(
|
864
|
+
options[:request].path, options[:request].params
|
865
|
+
)
|
866
|
+
headers = options[:request].headers || {}
|
867
|
+
body = options[:request].body || ''
|
899
868
|
end
|
900
|
-
method, uri, headers, body = request
|
901
869
|
else
|
902
|
-
method = options[:method] ||
|
870
|
+
method = options[:method] || :get
|
903
871
|
uri = options[:uri]
|
904
872
|
headers = options[:headers] || []
|
905
873
|
body = options[:body] || ''
|
@@ -928,7 +896,7 @@ module Signet
|
|
928
896
|
if !body.kind_of?(String)
|
929
897
|
raise TypeError, "Expected String, got #{body.class}."
|
930
898
|
end
|
931
|
-
method = method.to_s.
|
899
|
+
method = method.to_s.downcase.to_sym
|
932
900
|
parameters = ::Signet::OAuth1.unsigned_resource_parameters(
|
933
901
|
:client_credential_key => self.client_credential_key,
|
934
902
|
:token_credential_key => self.token_credential_key,
|
@@ -941,7 +909,7 @@ module Signet
|
|
941
909
|
media_type = value.gsub(/^([^;]+)(;.*?)?$/, '\1')
|
942
910
|
end
|
943
911
|
end
|
944
|
-
if method ==
|
912
|
+
if method == :post &&
|
945
913
|
media_type == 'application/x-www-form-urlencoded'
|
946
914
|
post_parameters = Addressable::URI.form_unencode(body)
|
947
915
|
else
|
@@ -966,7 +934,11 @@ module Signet
|
|
966
934
|
]
|
967
935
|
headers << authorization_header
|
968
936
|
headers << ['Cache-Control', 'no-store']
|
969
|
-
return
|
937
|
+
return Faraday::Request.create(method.to_s.downcase.to_sym) do |req|
|
938
|
+
req.url(Addressable::URI.parse(uri))
|
939
|
+
req.headers = Faraday::Utils::Headers.new(headers)
|
940
|
+
req.body = body
|
941
|
+
end
|
970
942
|
end
|
971
943
|
|
972
944
|
##
|
@@ -977,7 +949,7 @@ module Signet
|
|
977
949
|
# - <code>:request</code> —
|
978
950
|
# A pre-constructed request to sign.
|
979
951
|
# - <code>:method</code> —
|
980
|
-
# The HTTP method for the request. Defaults to
|
952
|
+
# The HTTP method for the request. Defaults to :get.
|
981
953
|
# - <code>:uri</code> —
|
982
954
|
# The URI for the request.
|
983
955
|
# - <code>:headers</code> —
|
@@ -988,21 +960,15 @@ module Signet
|
|
988
960
|
# The signature method. Defaults to <code>'HMAC-SHA1'</code>.
|
989
961
|
# - <code>:realm</code> —
|
990
962
|
# The Authorization realm. See RFC 2617.
|
991
|
-
# - <code>:adapter</code> —
|
992
|
-
# The HTTP adapter.
|
993
|
-
# Defaults to <code>HTTPAdapter::NetHTTPAdapter.new</code>.
|
994
963
|
# - <code>:connection</code> —
|
995
|
-
#
|
996
|
-
# Must be of type <code>
|
997
|
-
# internal connection representation must match the HTTP adapter
|
998
|
-
# being used.
|
964
|
+
# The HTTP connection to use.
|
965
|
+
# Must be of type <code>Faraday::Connection</code>.
|
999
966
|
#
|
1000
967
|
# @example
|
1001
968
|
# # Using Net::HTTP
|
1002
969
|
# response = client.fetch_protected_resource(
|
1003
970
|
# :uri => 'http://www.example.com/protected/resource'
|
1004
971
|
# )
|
1005
|
-
# status, headers, body = response
|
1006
972
|
#
|
1007
973
|
# @example
|
1008
974
|
# # Using Typhoeus
|
@@ -1010,34 +976,21 @@ module Signet
|
|
1010
976
|
# :request => Typhoeus::Request.new(
|
1011
977
|
# 'http://www.example.com/protected/resource'
|
1012
978
|
# ),
|
1013
|
-
# :adapter => HTTPAdapter::TyphoeusAdapter.new,
|
1014
979
|
# :connection => connection
|
1015
980
|
# )
|
1016
|
-
# status, headers, body = response
|
1017
981
|
#
|
1018
982
|
# @return [Array] The response object.
|
1019
983
|
def fetch_protected_resource(options={})
|
1020
|
-
|
1021
|
-
unless adapter
|
1022
|
-
require 'httpadapter'
|
1023
|
-
require 'httpadapter/adapters/net_http'
|
1024
|
-
adapter = HTTPAdapter::NetHTTPAdapter.new
|
1025
|
-
end
|
1026
|
-
connection = options[:connection]
|
984
|
+
options[:connection] ||= Faraday.default_connection
|
1027
985
|
request = self.generate_authenticated_request(options)
|
1028
|
-
|
1029
|
-
|
1030
|
-
|
1031
|
-
body.each do |chunk|
|
1032
|
-
merged_body.write(chunk)
|
1033
|
-
end
|
1034
|
-
body = merged_body.string
|
1035
|
-
if status.to_i == 401
|
986
|
+
request_env = request.to_env(options[:connection])
|
987
|
+
response = options[:connection].app.call(request_env)
|
988
|
+
if response.status.to_i == 401
|
1036
989
|
# When accessing a protected resource, we only want to raise an
|
1037
990
|
# error for 401 responses.
|
1038
991
|
message = 'Authorization failed.'
|
1039
|
-
if body.strip.length > 0
|
1040
|
-
message += " Server message:\n#{body.strip}"
|
992
|
+
if response.body.to_s.strip.length > 0
|
993
|
+
message += " Server message:\n#{response.body.to_s.strip}"
|
1041
994
|
end
|
1042
995
|
raise ::Signet::AuthorizationError.new(
|
1043
996
|
message, :request => request, :response => response
|
data/lib/signet/oauth_2.rb
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
require 'base64'
|
16
16
|
require 'signet'
|
17
|
-
require '
|
17
|
+
require 'multi_json'
|
18
18
|
|
19
19
|
module Signet #:nodoc:
|
20
20
|
##
|
@@ -76,7 +76,7 @@ module Signet #:nodoc:
|
|
76
76
|
if !body.kind_of?(String)
|
77
77
|
raise TypeError, "Expected String, got #{body.class}."
|
78
78
|
end
|
79
|
-
return
|
79
|
+
return MultiJson.decode(body)
|
80
80
|
end
|
81
81
|
|
82
82
|
##
|
@@ -114,13 +114,13 @@ module Signet #:nodoc:
|
|
114
114
|
def self.generate_bearer_authorization_header(
|
115
115
|
access_token, auth_params=nil)
|
116
116
|
# TODO: escaping?
|
117
|
-
header = "
|
117
|
+
header = "Bearer #{access_token}"
|
118
118
|
if auth_params && !auth_params.empty?
|
119
119
|
header += (", " +
|
120
|
-
auth_params.inject(
|
121
|
-
accu
|
120
|
+
(auth_params.inject([]) do |accu, (key, value)|
|
121
|
+
accu << "#{key}=\"#{value}\""
|
122
122
|
accu
|
123
|
-
end
|
123
|
+
end).join(", ")
|
124
124
|
)
|
125
125
|
end
|
126
126
|
return header
|