method conditional option pattern

45 views
Skip to first unread message

Erwin

unread,
Nov 9, 2012, 2:27:59 AM11/9/12
to rubyonra...@googlegroups.com
When I have this pattern 

       sign_me(@user, :event => :authentication, :subdomain => subdomain)

how can I write it to avoid sending the :subdomain option if subdomain.nil?   ( if possible ..)

       sign_me(@user, :event => :authentication  #?, :subdomain => subdomain unless subdomain.nil?  )

Jim Ruther Nill

unread,
Nov 9, 2012, 3:10:02 AM11/9/12
to rubyonra...@googlegroups.com
I'm not sure if it's possible to do it in a single line (as far as you want to have a tidy code)

opts = { event: :authentication }
opts[:subdomain] = subdomain if subdomain

sign_me @user, opts

 

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonra...@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/TOTAudTTAa8J.
For more options, visit https://groups.google.com/groups/opt_out.
 
 



--
-------------------------------------------------------------
visit my blog at http://jimlabs.heroku.com

Erwin

unread,
Nov 9, 2012, 3:59:02 AM11/9/12
to rubyonra...@googlegroups.com
thanks 

Colin Law

unread,
Nov 9, 2012, 4:25:24 AM11/9/12
to rubyonra...@googlegroups.com
You could try
sign_me(@user, :event => :authentication, (:subdomain =>
subdomain unless subdomain.nil?) )
or
sign_me(@user, :event => :authentication, :subdomain =>
(subdomain unless subdomain.nil?) )

Colin

Jim Ruther Nill

unread,
Nov 9, 2012, 4:37:36 AM11/9/12
to rubyonra...@googlegroups.com
On Fri, Nov 9, 2012 at 5:25 PM, Colin Law <cla...@googlemail.com> wrote:
On 9 November 2012 07:27, Erwin <yves_...@mac.com> wrote:
> When I have this pattern
>
>        sign_me(@user, :event => :authentication, :subdomain => subdomain)
>
> how can I write it to avoid sending the :subdomain option if subdomain.nil?
> ( if possible ..)
>
>        sign_me(@user, :event => :authentication  #?, :subdomain => subdomain
> unless subdomain.nil?  )

You could try
        sign_me(@user, :event => :authentication, (:subdomain =>
subdomain unless subdomain.nil?)  )

I was surprised that you answered this Colin so I tried it out but I got a syntax error

>> app.root_path(foo: 'me', (bar: 'blah' if false)) 
SyntaxError: (irb):17: syntax error, unexpected tLABEL
app.root_path(foo: 'me', (bar: 'blah' if false))
                              ^
(irb):17: syntax error, unexpected ')', expecting tASSOC
from /home/jim/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.2/lib/rails/commands/console.rb:47:in `start'
from /home/jim/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.2/lib/rails/commands/console.rb:8:in `start'
from /home/jim/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.2/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
 
or
        sign_me(@user, :event => :authentication, :subdomain =>
(subdomain unless subdomain.nil?)  )

and this still passes subdomain as a key if used in a hash but if used in a routes helper, this will work :D

>> app.root_path(foo: 'me', bar: ('blah' if false))
=> "/?foo=me"


Colin

>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Talk" group.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To unsubscribe from this group, send email to
> rubyonrails-ta...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/rubyonrails-talk/-/TOTAudTTAa8J.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonra...@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Colin Law

unread,
Nov 9, 2012, 5:13:35 AM11/9/12
to rubyonra...@googlegroups.com
I am not surprised that did not work, my answer was not intended to
convey any suggestion that it would work, just something that would be
interesting to try.

>
>>
>> or
>> sign_me(@user, :event => :authentication, :subdomain =>
>> (subdomain unless subdomain.nil?) )
>
>
> and this still passes subdomain as a key if used in a hash but if used in a
> routes helper, this will work :D

Yes, it will pass the subdomain as nil, so it depends on the context
whether this is satisfactory.

Colin

Tommaso Visconti

unread,
Nov 9, 2012, 8:44:08 AM11/9/12
to rubyonra...@googlegroups.com
I have a related question.
I was suggesting Erwin to use just:

sign_me(@user, :event => :authentication #?, :subdomain => subdomain)

because if subdomain is nil, sign_me should correctly handle it.
I mean, in an hypothetical sign_in method I'd write:

def sign_me(user, options)
if options[:subdomain]
# do_something
end
end

if subdomain is nil the method handles it correctly.
but with this code:

def sign_me(user, options)
if options.has_key? :subdomain
# do_something
end
end

this goes wrong ("options.has_key? :subdomain" is true)! So I'd say the
first implementation seems more correct, do you agree with me or I'
missing something important about checking hash parameters?

Colin Law

unread,
Nov 9, 2012, 10:31:48 AM11/9/12
to rubyonra...@googlegroups.com
On 9 November 2012 13:44, Tommaso Visconti <tommaso....@gmail.com> wrote:
> I have a related question.
> I was suggesting Erwin to use just:
>
> sign_me(@user, :event => :authentication #?, :subdomain => subdomain)
>
> because if subdomain is nil, sign_me should correctly handle it.
> I mean, in an hypothetical sign_in method I'd write:
>
> def sign_me(user, options)
> if options[:subdomain]
> # do_something
> end
> end
>
> if subdomain is nil the method handles it correctly.

That is the way I would do it.

Colin

> but with this code:
>
> def sign_me(user, options)
> if options.has_key? :subdomain
> # do_something
> end
> end
>
> this goes wrong ("options.has_key? :subdomain" is true)! So I'd say the
> first implementation seems more correct, do you agree with me or I' missing
> something important about checking hash parameters?
>
>

Erwin

unread,
Nov 9, 2012, 11:19:29 AM11/9/12
to rubyonra...@googlegroups.com, cla...@googlemail.com
Thanks Colin

I finally decided to keep the :subdomain option and let the method decide about what to do with it ( seems to be the common pattern)
Reply all
Reply to author
Forward
0 new messages