Refactor to Helpers
This Rails partial is almost all template escapes. Put it into a helper, and refactor each case to methods so we can build out the controls for each. (I've converted to tabs - fighting with Vimgolf's default config shouldn't be part of the challenge.)
Start file
## _controls.html.erb
<div class='controls'>
<% if event.author == current_user -%>
<%= link_to "Edit Activity", edit_event_path(event), :class => 'button' %>
<% else -%>
<% if current_user.attending? event -%>
<%= link_to "Leave", leave_event_path(event), :class => "button neg", :method => :post %>
<% else -%>
<% if current_user.invited_to? event -%>
<%= link_to "Accept Invite", join_event_path(event), :class => "button pos", :method => :post %>
<% else -%>
<%= link_to "I'm Going", join_event_path(event), :class => "button pos", :method => :post %>
<% end -%>
<% end -%>
<% end -%>
</div>
## event_helper.rb
module EventHelper
end
End file
## _controls.html.erb
<div class='controls'>
<%= event_controls event %>
</div>
## event_helper.rb
module EventHelper
def event_controls(event)
if event.author == current_user
author_controls(event)
elsif current_user.attending? event
attendee_controls(event)
elsif current_user.invited_to? event
invitee_controls(event)
else
public_controls(event)
end
end
def author_controls(event)
link_to "Edit Activity", edit_event_path(event), :class => 'button'
end
def attendee_controls(event)
link_to "Leave", leave_event_path(event), :class => "button neg", :method => :post
end
def invitee_controls(event)
link_to "Accept Invite", join_event_path(event), :class => "button pos", :method => :post
end
def public_controls(event)
link_to "I'm Going", join_event_path(event), :class => "button pos", :method => :post
end
end
View Diff
3,15c3
< <% if event.author == current_user -%>
< <%= link_to "Edit Activity", edit_event_path(event), :class => 'button' %>
< <% else -%>
< <% if current_user.attending? event -%>
< <%= link_to "Leave", leave_event_path(event), :class => "button neg", :method => :post %>
< <% else -%>
< <% if current_user.invited_to? event -%>
< <%= link_to "Accept Invite", join_event_path(event), :class => "button pos", :method => :post %>
< <% else -%>
< <%= link_to "I'm Going", join_event_path(event), :class => "button pos", :method => :post %>
< <% end -%>
< <% end -%>
< <% end -%>
---
> <%= event_controls event %>
19a8,34
> def event_controls(event)
> if event.author == current_user
> author_controls(event)
> elsif current_user.attending? event
> attendee_controls(event)
> elsif current_user.invited_to? event
> invitee_controls(event)
> else
> public_controls(event)
> end
> end
>
> def author_controls(event)
> link_to "Edit Activity", edit_event_path(event), :class => 'button'
> end
>
> def attendee_controls(event)
> link_to "Leave", leave_event_path(event), :class => "button neg", :method => :post
> end
>
> def invitee_controls(event)
> link_to "Accept Invite", join_event_path(event), :class => "button pos", :method => :post
> end
>
> def public_controls(event)
> link_to "I'm Going", join_event_path(event), :class => "button pos", :method => :post
> end
Solutions
The best way to learn is to practice. Below, you will find some of the solutions other golfers have entered. To unlock higher ranked solutions, submit your own entry which does as well or better than the solutions you can currently see - climb the ladder!
Check out these helpful resources to improve your Vim skills... Game on.
Unlock 23 remaining solutions by signing in and submitting your own entry
#24 Pavlo Klets / @p01nt - Score: 855 - 10/27/11 @ 21:47
jdG:se paste<CR>o<div class='controls'><CR><Tab><%= event_controls event %><CR></div><CR><CR>## event_helper.rb<CR>module EventHelper<CR><Tab>def event_controls(event)<CR><Tab><Tab>if event.author == current_user<CR><Tab><Tab><Tab>author_controls(event)<CR><Tab><Tab>elsif current_user.attending? event<CR><Tab><Tab><Tab>attendee_controls(event)<CR><Tab><Tab>elsif current_user.invited_to? event<CR><Tab><Tab><Tab>invitee_controls(event)<CR><Tab><Tab>else<CR><Tab><Tab><Tab>public_controls(event)<CR><Tab><Tab>end<CR><Tab>end<CR><CR><Tab>def author_controls(event)<CR><Tab><Tab>link_to "Edit Activity", edit_event_path(event), :class => 'button'<CR><Tab>end<CR><CR><Tab>def attendee_controls(event)<CR><Tab><Tab>link_to "Leave", leave_event_path(event), :class => "button neg", :method => :post<CR><Tab>end<CR><CR><Tab>def invitee_controls(event)<CR><Tab><Tab>link_to "Accept Invite", join_event_path(event), :class => "button pos", :method => :post<CR><Tab>end<CR><CR><Tab>def public_controls(event)<CR><Tab><Tab>link_to "I'm Going", join_event_path(event), :class => "button pos", :method => :post<CR><Tab>end<CR>end<Esc>ZZ
0 comments
#25 nickGPT / @nickandbro - Score: 855 - 08/28/24 @ 22:30
jdG:se paste<CR>o<div class='controls'><CR><Tab><%= event_controls event %><CR></div><CR><CR>## event_helper.rb<CR>module EventHelper<CR><Tab>def event_controls(event)<CR><Tab><Tab>if event.author == current_user<CR><Tab><Tab><Tab>author_controls(event)<CR><Tab><Tab>elsif current_user.attending? event<CR><Tab><Tab><Tab>attendee_controls(event)<CR><Tab><Tab>elsif current_user.invited_to? event<CR><Tab><Tab><Tab>invitee_controls(event)<CR><Tab><Tab>else<CR><Tab><Tab><Tab>public_controls(event)<CR><Tab><Tab>end<CR><Tab>end<CR><CR><Tab>def author_controls(event)<CR><Tab><Tab>link_to "Edit Activity", edit_event_path(event), :class => 'button'<CR><Tab>end<CR><CR><Tab>def attendee_controls(event)<CR><Tab><Tab>link_to "Leave", leave_event_path(event), :class => "button neg", :method => :post<CR><Tab>end<CR><CR><Tab>def invitee_controls(event)<CR><Tab><Tab>link_to "Accept Invite", join_event_path(event), :class => "button pos", :method => :post<CR><Tab>end<CR><CR><Tab>def public_controls(event)<CR><Tab><Tab>link_to "I'm Going", join_event_path(event), :class => "button pos", :method => :post<CR><Tab>end<CR>end<Esc>ZZ
0 comments