I’m trying to use a site called zendesk.com and you authenticate to the site using an email address and a password, so that the self.site definition in the model looks like this:
The problem with this is, because we have the @ sign in our username, Ruby thinks this to be an invalid URL so throws a big hissy fit:
URI::InvalidURIError: bad URI(is not URI?):
from /usr/lib/ruby/1.8/uri/common.rb:436:in split' from /usr/lib/ruby/1.8/uri/common.rb:485:in parse’
from /usr/lib/ruby/gems/1.8/gems/activeresource-2.0.2/lib/active_resource/base.rb:477:in create_site_uri_from' from /usr/lib/ruby/gems/1.8/gems/activeresource-2.0.2/lib/active_resource/base.rb:167:in site=’
from /home/ryan/projects/site/app/models/user.rb:2
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:203:in load_without_new_constant_marking' from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:203:in load_file’
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in new_constants_in' from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:202:in load_file’
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:94:in require_or_load' from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:248:in load_missing_constant’
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:453:in const_missing' from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:465:in const_missing’
from (irb):1
The command line curl has no such complaint however.
I'm trying to use a site called zendesk.com and you authenticate to
the site using an email address and a password, so that the
self.site definition in the model looks like this:
That didn't work. I already tried it before making my post.
It appears that you can set site to either a string or an instance of
URI. If rails'/ruby's parsing of a url string is tripping up in this
case maybe the latter option is worth exploring?
As in URI.parse? That fails too, with an identical error.
No, I was thinking along the lings of
some_uri = URI.parse('http://myplace.zendesk.com')
some_uri.user = 'xxx'
some_uri.password = 'zzz'
self.site = some_uri
irb(main):005:0> uri.user = ‘my@email.com’
URI::InvalidComponentError: bad component(expected userinfo component or user component): daniel@email.com
from c:/ruby/lib/ruby/1.8/uri/generic.rb:269:in check_user' from c:/ruby/lib/ruby/1.8/uri/generic.rb:311:in user=’
from (irb):5
irb(main):005:0> uri.user = 'my@email.com'
URI::InvalidComponentError: bad component(expected userinfo
component or user component): daniel@email.com
from c:/ruby/lib/ruby/1.8/uri/generic.rb:269:in `check_user'
from c:/ruby/lib/ruby/1.8/uri/generic.rb:311:in `user='
from (irb):5
Beginning to look like you're walking down an unfrequently used
path :-). If URI is expecting @ to be encoded as %40, then I suppose
its rails' responsability to convert the %40 into a @ when
constructing the authorization header.
Override authorization_header so that the correct header is produced ?
This might even work:
class X < ActiveResource::Base
self.site = "http://myplace.zendesk.com"
def (self.site).user
'foo@bar.com'
end
def (self.site).password
'xxx'
end
end
X.site.user => "foo@bar.com"
Pretty skanky though. I think the right thing is probably for
authorization_header (in connection.rb) to unescape the username &
password.