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