slim_fast 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +136 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/javascripts/errors.js +2 -0
  5. data/app/assets/stylesheets/errors.css +4 -0
  6. data/app/controllers/errors_controller.rb +4 -0
  7. data/app/controllers/expansions_controller.rb +84 -0
  8. data/app/controllers/short_domains_controller.rb +85 -0
  9. data/app/controllers/short_urls_controller.rb +115 -0
  10. data/app/helpers/errors_helper.rb +2 -0
  11. data/app/helpers/slim_fast/application_helper.rb +4 -0
  12. data/app/helpers/slim_fast/expansions_helper.rb +4 -0
  13. data/app/helpers/slim_fast/short_domains_helper.rb +4 -0
  14. data/app/helpers/slim_fast/short_urls_helper.rb +4 -0
  15. data/app/models/expansion.rb +6 -0
  16. data/app/models/short_domain.rb +6 -0
  17. data/app/models/short_url.rb +35 -0
  18. data/app/views/errors/invalid_code.html.erb +2 -0
  19. data/app/views/expansions/_form.html.erb +45 -0
  20. data/app/views/expansions/edit.html.erb +5 -0
  21. data/app/views/expansions/index.html.erb +43 -0
  22. data/app/views/expansions/new.html.erb +5 -0
  23. data/app/views/expansions/show.html.erb +42 -0
  24. data/app/views/shared/_slim_fast_navigation.html.erb +11 -0
  25. data/app/views/short_domains/_form.html.erb +26 -0
  26. data/app/views/short_domains/edit.html.erb +5 -0
  27. data/app/views/short_domains/index.html.erb +38 -0
  28. data/app/views/short_domains/new.html.erb +5 -0
  29. data/app/views/short_domains/show.html.erb +27 -0
  30. data/app/views/short_urls/_form.html.erb +61 -0
  31. data/app/views/short_urls/_short_urls_table.html.erb +24 -0
  32. data/app/views/short_urls/edit.html.erb +5 -0
  33. data/app/views/short_urls/index.html.erb +19 -0
  34. data/app/views/short_urls/new.html.erb +5 -0
  35. data/app/views/short_urls/show.html.erb +77 -0
  36. data/config/routes.rb +17 -0
  37. data/db/migrate/20121004232924_create_slim_fast_short_domains.rb +10 -0
  38. data/db/migrate/20121004234409_create_slim_fast_short_urls.rb +22 -0
  39. data/db/migrate/20121004234536_create_slim_fast_expansions.rb +15 -0
  40. data/lib/slim_fast.rb +4 -0
  41. data/lib/slim_fast/engine.rb +5 -0
  42. data/lib/slim_fast/version.rb +3 -0
  43. data/lib/tasks/slim_fast_tasks.rake +4 -0
  44. data/test/dummy/README.rdoc +261 -0
  45. data/test/dummy/Rakefile +7 -0
  46. data/test/dummy/app/assets/javascripts/application.js +15 -0
  47. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  48. data/test/dummy/app/controllers/application_controller.rb +3 -0
  49. data/test/dummy/app/helpers/application_helper.rb +2 -0
  50. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  51. data/test/dummy/config.ru +4 -0
  52. data/test/dummy/config/application.rb +59 -0
  53. data/test/dummy/config/boot.rb +10 -0
  54. data/test/dummy/config/database.yml +25 -0
  55. data/test/dummy/config/environment.rb +5 -0
  56. data/test/dummy/config/environments/development.rb +37 -0
  57. data/test/dummy/config/environments/production.rb +67 -0
  58. data/test/dummy/config/environments/test.rb +37 -0
  59. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  60. data/test/dummy/config/initializers/inflections.rb +15 -0
  61. data/test/dummy/config/initializers/mime_types.rb +5 -0
  62. data/test/dummy/config/initializers/secret_token.rb +7 -0
  63. data/test/dummy/config/initializers/session_store.rb +8 -0
  64. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  65. data/test/dummy/config/locales/en.yml +5 -0
  66. data/test/dummy/config/routes.rb +4 -0
  67. data/test/dummy/db/development.sqlite3 +0 -0
  68. data/test/dummy/db/schema.rb +54 -0
  69. data/test/dummy/log/development.log +8542 -0
  70. data/test/dummy/public/404.html +26 -0
  71. data/test/dummy/public/422.html +26 -0
  72. data/test/dummy/public/500.html +25 -0
  73. data/test/dummy/public/favicon.ico +0 -0
  74. data/test/dummy/script/rails +6 -0
  75. data/test/dummy/tmp/cache/assets/C27/920/sprockets%2F1fe65007aa375565a9348253347444f9 +0 -0
  76. data/test/dummy/tmp/cache/assets/C2A/3C0/sprockets%2Fbf216b96e4625134934f18748756b125 +0 -0
  77. data/test/dummy/tmp/cache/assets/C50/380/sprockets%2F26016472b58ca461a65fa6951744c367 +0 -0
  78. data/test/dummy/tmp/cache/assets/C7F/E20/sprockets%2F33d534294133822566119b8d7d5ba6ec +0 -0
  79. data/test/dummy/tmp/cache/assets/CA7/F40/sprockets%2Fb9488f9fbe87445bc38136287d954775 +0 -0
  80. data/test/dummy/tmp/cache/assets/CC2/330/sprockets%2F07797d1858badd3219d57b87954b3d08 +0 -0
  81. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  82. data/test/dummy/tmp/cache/assets/CDF/D90/sprockets%2F0d3e4f0a8075d386a6f5591146a078cd +0 -0
  83. data/test/dummy/tmp/cache/assets/D04/360/sprockets%2Ff72c7ca5bb201c3d8178112b5985cf03 +0 -0
  84. data/test/dummy/tmp/cache/assets/D10/EC0/sprockets%2F265d8e58821c5c1e766ddbf814800ba2 +0 -0
  85. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  86. data/test/dummy/tmp/cache/assets/D38/6D0/sprockets%2F73f8e43a3540a5da61c62fa8b51882ad +0 -0
  87. data/test/dummy/tmp/cache/assets/D4C/060/sprockets%2F696b70f02f9165e9b6b0a874fff13dd5 +0 -0
  88. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  89. data/test/dummy/tmp/cache/assets/D55/CD0/sprockets%2Fceb2e6285ffd7d7545b04757e8e6c357 +0 -0
  90. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  91. data/test/dummy/tmp/cache/assets/D62/500/sprockets%2Ff50e441403287cf5904aad30ffcbe05f +0 -0
  92. data/test/dummy/tmp/cache/assets/D7A/700/sprockets%2F8ec8c9e963236de2b707709ee3bb3f0c +0 -0
  93. data/test/dummy/tmp/cache/assets/DA7/2A0/sprockets%2Fa37ff5e4c7d9d5a93690eeec0c6072a5 +0 -0
  94. data/test/dummy/tmp/cache/assets/DBC/CC0/sprockets%2Fa16ccbfcd61258cc4a59171a1a8d6b1c +0 -0
  95. data/test/dummy/tmp/cache/assets/DC9/490/sprockets%2Ff0b23b7ce1fe240e2916fde55eb9cd51 +0 -0
  96. data/test/dummy/tmp/cache/assets/DCD/0B0/sprockets%2F8e74ddd350631963f4bdeee6cb017cac +0 -0
  97. data/test/dummy/tmp/cache/assets/DCD/3D0/sprockets%2F57b7ab77dabfd46f191fde6d2a45013f +0 -0
  98. data/test/dummy/tmp/cache/assets/DDA/BA0/sprockets%2F956c26dfdede717f68bac19770ee24aa +0 -0
  99. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  100. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  101. data/test/dummy/tmp/cache/assets/E08/650/sprockets%2F5bee8a4b599a4fec8f50da484da0f7b6 +0 -0
  102. data/test/dummy/tmp/cache/assets/E29/DE0/sprockets%2Fef93d515dc6a6f05fee3a79e4bda1ab0 +0 -0
  103. data/test/fixtures/slim_fast/expansions.yml +19 -0
  104. data/test/fixtures/slim_fast/short_domains.yml +9 -0
  105. data/test/fixtures/slim_fast/short_urls.yml +33 -0
  106. data/test/functional/errors_controller_test.rb +9 -0
  107. data/test/functional/slim_fast/expansions_controller_test.rb +51 -0
  108. data/test/functional/slim_fast/short_domains_controller_test.rb +51 -0
  109. data/test/functional/slim_fast/short_urls_controller_test.rb +51 -0
  110. data/test/integration/navigation_test.rb +10 -0
  111. data/test/slim_fast_test.rb +7 -0
  112. data/test/test_helper.rb +15 -0
  113. data/test/unit/helpers/errors_helper_test.rb +4 -0
  114. data/test/unit/helpers/slim_fast/expansions_helper_test.rb +6 -0
  115. data/test/unit/helpers/slim_fast/short_domains_helper_test.rb +6 -0
  116. data/test/unit/helpers/slim_fast/short_urls_helper_test.rb +6 -0
  117. data/test/unit/slim_fast/expansion_test.rb +9 -0
  118. data/test/unit/slim_fast/short_domain_test.rb +9 -0
  119. data/test/unit/slim_fast/short_url_test.rb +9 -0
  120. metadata +278 -0
@@ -0,0 +1,2 @@
1
+ module ErrorsHelper
2
+ end
@@ -0,0 +1,4 @@
1
+ module SlimFast
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module SlimFast
2
+ module ExpansionsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module SlimFast
2
+ module ShortDomainsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module SlimFast
2
+ module ShortUrlsHelper
3
+ end
4
+ end
@@ -0,0 +1,6 @@
1
+ class Expansion < ActiveRecord::Base
2
+ attr_accessible :domain_id, :referrer_url, :remote_addr, :remote_ip
3
+ attr_accessible :request_url, :short_url_id, :user_agent
4
+
5
+ belongs_to :short_url
6
+ end
@@ -0,0 +1,6 @@
1
+ class ShortDomain < ActiveRecord::Base
2
+ attr_accessible :domain, :is_default
3
+
4
+ has_many :short_urls
5
+ has_many :expansions, :through => :short_urls
6
+ end
@@ -0,0 +1,35 @@
1
+ class ShortUrl < ActiveRecord::Base
2
+ attr_accessible :code, :description, :destination_url, :short_domain_id
3
+ attr_accessible :expansion_count, :name, :owner_id, :owner_type
4
+ attr_accessible :utm_campaign, :utm_content, :utm_enabled, :utm_medium, :utm_source, :utm_term
5
+
6
+ belongs_to :short_domain
7
+ belongs_to :owner, :polymorphic => true
8
+ has_many :expansions
9
+
10
+ validates_presence_of :name
11
+ validates_presence_of :code
12
+ validates_uniqueness_of :code
13
+ validates_presence_of :destination_url
14
+
15
+ before_validation :generate_and_set_code
16
+
17
+ def generate_and_set_code
18
+ if self.code.present?
19
+ puts "a valid code is already set for this short url: " + self.code
20
+ else
21
+ temp_code = random_code
22
+ puts "random code = " + temp_code
23
+ while ShortUrl.where(:code => temp_code).count > 0
24
+ puts "code already exists! " + temp_code
25
+ temp_code = random_code
26
+ puts "random code = " + temp_code
27
+ end
28
+ self.code = temp_code
29
+ end
30
+ end
31
+
32
+ def random_code
33
+ rand(36**8).to_s(36).gsub("/","_").gsub(/=+$/,"")
34
+ end
35
+ end
@@ -0,0 +1,2 @@
1
+ <h1>Errors#invalid_code</h1>
2
+ <p>Find me in app/views/errors/invalid_code.html.erb</p>
@@ -0,0 +1,45 @@
1
+ <%= form_for(@expansion) do |f| %>
2
+ <% if @expansion.errors.any? %>
3
+ <div id="error_explanation">
4
+ <h2><%= pluralize(@expansion.errors.count, "error") %> prohibited this expansion from being saved:</h2>
5
+
6
+ <ul>
7
+ <% @expansion.errors.full_messages.each do |msg| %>
8
+ <li><%= msg %></li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
13
+
14
+ <div class="field">
15
+ <%= f.label :short_url_id %><br />
16
+ <%= f.number_field :short_url_id %>
17
+ </div>
18
+ <div class="field">
19
+ <%= f.label :domain_id %><br />
20
+ <%= f.number_field :domain_id %>
21
+ </div>
22
+ <div class="field">
23
+ <%= f.label :request_url %><br />
24
+ <%= f.text_field :request_url %>
25
+ </div>
26
+ <div class="field">
27
+ <%= f.label :referrer_url %><br />
28
+ <%= f.text_field :referrer_url %>
29
+ </div>
30
+ <div class="field">
31
+ <%= f.label :remote_ip %><br />
32
+ <%= f.text_field :remote_ip %>
33
+ </div>
34
+ <div class="field">
35
+ <%= f.label :remote_addr %><br />
36
+ <%= f.text_field :remote_addr %>
37
+ </div>
38
+ <div class="field">
39
+ <%= f.label :user_agent %><br />
40
+ <%= f.text_field :user_agent %>
41
+ </div>
42
+ <div class="actions">
43
+ <%= f.submit %>
44
+ </div>
45
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <%= render 'shared/slim_fast_navigation' %>
2
+
3
+ <h1>Editing Expansion</h1>
4
+
5
+ <%= render 'form' %>
@@ -0,0 +1,43 @@
1
+ <%= render 'shared/slim_fast_navigation' %>
2
+
3
+ <h1>Expansions</h1>
4
+
5
+ <p>
6
+ An expansion is a request for the destination url of a short url. Each time a short url is exapnded (either directly or via an API call) an expansion is created and the expansion count is incremented for the short url.
7
+ </p>
8
+
9
+ <% if @expansions.count > 0 %>
10
+ <table class="table table-striped">
11
+ <tr>
12
+ <th>Short URL</th>
13
+ <th>Request URL</th>
14
+ <th>Referrer URL</th>
15
+ <th>Remote IP</th>
16
+ <th>Remote Address</th>
17
+ <th>User Agent</th>
18
+ <th></th>
19
+ </tr>
20
+
21
+ <% @expansions.each do |expansion| %>
22
+ <tr>
23
+ <td><%= expansion.short_url_id %></td>
24
+ <td><%= expansion.request_url %></td>
25
+ <td><%= expansion.referrer_url %></td>
26
+ <td><%= expansion.remote_ip %></td>
27
+ <td><%= expansion.remote_addr %></td>
28
+ <td><%= expansion.user_agent %></td>
29
+ <td>
30
+ <%= link_to 'Show', expansion %>
31
+ /
32
+ <%= link_to 'Edit', edit_expansion_path(expansion) %>
33
+ </td>
34
+ </tr>
35
+ <% end %>
36
+ </table>
37
+
38
+ <br />
39
+ <% else %>
40
+ <p>
41
+ There are no expansions.
42
+ </p>
43
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <%= render 'shared/slim_fast_navigation' %>
2
+
3
+ <h1>New Expansion</h1>
4
+
5
+ <%= render 'form' %>
@@ -0,0 +1,42 @@
1
+ <%= render 'shared/slim_fast_navigation' %>
2
+
3
+ <p id="notice"><%= notice %></p>
4
+
5
+ <p>
6
+ <b>Short url:</b>
7
+ <%= @expansion.short_url_id %>
8
+ </p>
9
+
10
+ <p>
11
+ <b>Domain:</b>
12
+ <%= @expansion.domain_id %>
13
+ </p>
14
+
15
+ <p>
16
+ <b>Request url:</b>
17
+ <%= @expansion.request_url %>
18
+ </p>
19
+
20
+ <p>
21
+ <b>Referrer url:</b>
22
+ <%= @expansion.referrer_url %>
23
+ </p>
24
+
25
+ <p>
26
+ <b>Remote ip:</b>
27
+ <%= @expansion.remote_ip %>
28
+ </p>
29
+
30
+ <p>
31
+ <b>Remote addr:</b>
32
+ <%= @expansion.remote_addr %>
33
+ </p>
34
+
35
+ <p>
36
+ <b>User agent:</b>
37
+ <%= @expansion.user_agent %>
38
+ </p>
39
+
40
+
41
+ <%= link_to 'Edit', edit_expansion_path(@expansion) %> |
42
+ <%= link_to 'Back', expansions_path %>
@@ -0,0 +1,11 @@
1
+ <ul id="slim_fast_navigation" class="nav nav-tabs">
2
+ <li class="<%= 'active' if controller.controller_name == 'short_domains' %>">
3
+ <%= link_to 'Short Domains', short_domains_path %>
4
+ </li>
5
+ <li class="<%= 'active' if controller.controller_name == 'short_urls' %>">
6
+ <%= link_to 'Short URLs', short_urls_path %>
7
+ </li>
8
+ <li class="<%= 'active' if controller.controller_name == 'expansions' %>">
9
+ <%= link_to 'Expansions', expansions_path %>
10
+ </li>
11
+ </ul>
@@ -0,0 +1,26 @@
1
+ <%= form_for(@short_domain) do |f| %>
2
+ <% if @short_domain.errors.any? %>
3
+ <div id="error_explanation">
4
+ <h2><%= pluralize(@short_domain.errors.count, "error") %> prohibited this short_domain from being saved:</h2>
5
+
6
+ <ul>
7
+ <% @short_domain.errors.full_messages.each do |msg| %>
8
+ <li><%= msg %></li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
13
+
14
+ <div class="field">
15
+ <%= f.label :domain %><br />
16
+ <%= f.text_field :domain %>
17
+ </div>
18
+ <div class="field">
19
+ <%= f.label :is_default %><br />
20
+ <%= f.check_box :is_default %>
21
+ </div>
22
+ <div class="actions">
23
+ <%= link_to 'Cancel', short_domains_path %>
24
+ <%= f.submit %>
25
+ </div>
26
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <%= render 'shared/slim_fast_navigation' %>
2
+
3
+ <h1>Editing Short Domain</h1>
4
+
5
+ <%= render 'form' %>
@@ -0,0 +1,38 @@
1
+ <%= render 'shared/slim_fast_navigation' %>
2
+
3
+ <h1>Short Domains</h1>
4
+
5
+ <% if @short_domains.count > 0 %>
6
+ <p>
7
+ The default domain is denoted by an asterisk (*) next to the domain name.
8
+ </p>
9
+
10
+ <table class="table table-striped">
11
+ <tr>
12
+ <th class="span1"></th>
13
+ <th>Domain</th>
14
+ <th class="span2">Short URLs</th>
15
+ <th class="span3">Actions</th>
16
+ </tr>
17
+
18
+ <% @short_domains.each do |short_domain| %>
19
+ <tr>
20
+ <td><%= short_domain.is_default ? "*" : "" %></td>
21
+ <td><%= link_to short_domain.domain, short_domain %></td>
22
+ <td><%= link_to short_domain.short_urls.count, short_domain_short_urls_path(short_domain) %></td>
23
+ <td>
24
+ <%= link_to 'Edit', edit_short_domain_path(short_domain), :class => 'btn btn-info' %>
25
+ <%= link_to 'Delete', short_domain, class: 'btn btn-danger', method: :delete, data: { confirm: 'All Short URLs specifically attached to this domain will be deleted as well. Are you sure?' } %>
26
+ </td>
27
+ </tr>
28
+ <% end %>
29
+ </table>
30
+
31
+ <br />
32
+ <% else %>
33
+ <p>
34
+ There are no short domains.
35
+ </p>
36
+ <% end %>
37
+
38
+ <%= link_to 'New Short Domain', new_short_domain_path %>
@@ -0,0 +1,5 @@
1
+ <%= render 'shared/slim_fast_navigation' %>
2
+
3
+ <h1>New Short Domain</h1>
4
+
5
+ <%= render 'form' %>
@@ -0,0 +1,27 @@
1
+ <%= render 'shared/slim_fast_navigation' %>
2
+
3
+ <p id="notice"><%= notice %></p>
4
+
5
+ <h1>Short Domain: <%= @short_domain.domain %></h1>
6
+
7
+ <p>
8
+ <b>Is this the default domain?</b>
9
+ <%= @short_domain.is_default ? 'Yes' : 'No' %>
10
+ </p>
11
+
12
+ <p>
13
+ <%= link_to 'Edit', edit_short_domain_path(@short_domain), :class => 'btn btn-primary' %>
14
+ </p>
15
+
16
+ <p>
17
+ <b>Short URLs</b>
18
+ </p>
19
+ <% if @short_domain.short_urls.count > 0 %>
20
+ <%= render 'short_urls/short_urls_table', :short_urls => @short_domain.short_urls %>
21
+ <% else %>
22
+ There are no short URLs for this domain.
23
+ <% end %>
24
+
25
+ <p>
26
+ <%= link_to '<i class="icon-plus icon-white"></i> Add a Short URL'.html_safe, new_short_domain_short_url_path(@short_domain), :class => 'btn btn-primary' %>
27
+ </p>
@@ -0,0 +1,61 @@
1
+ <%= form_for(@short_url) do |f| %>
2
+ <% if @short_url.errors.any? %>
3
+ <div id="error_explanation">
4
+ <h2><%= pluralize(@short_url.errors.count, "error") %> prohibited this short_url from being saved:</h2>
5
+
6
+ <ul>
7
+ <% @short_url.errors.full_messages.each do |msg| %>
8
+ <li><%= msg %></li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
13
+
14
+ <div class="field">
15
+ <%= f.label :name %><br />
16
+ <%= f.text_field :name %>
17
+ </div>
18
+ <div class="field">
19
+ <%= f.label :short_domain_id %><br />
20
+ <%= f.number_field :short_domain_id %>
21
+ </div>
22
+ <div class="field">
23
+ <%= f.label :destination_url, 'Destination URL' %><br />
24
+ <%= f.text_field :destination_url %>
25
+ </div>
26
+ <div class="field">
27
+ <%= f.label :description %><br />
28
+ <%= f.text_area :description %>
29
+ </div>
30
+
31
+ <h2>Optional:</h2>
32
+ <div class="field">
33
+ <%= f.label :utm_enabled, 'UTM Enabled' %><br />
34
+ <%= f.check_box :utm_enabled %>
35
+ </div>
36
+ <div class="field">
37
+ <%= f.label :utm_source, 'UTM Source (google, newsletter4)' %><br />
38
+ <%= f.text_field :utm_source %>
39
+ </div>
40
+ <div class="field">
41
+ <%= f.label :utm_medium, 'UTM Medium (email, web, newspaper, tv)' %><br />
42
+ <%= f.text_field :utm_medium %>
43
+ </div>
44
+ <div class="field">
45
+ <%= f.label :utm_campaign, ' UTM Campaign (Spring Sales)' %><br />
46
+ <%= f.text_field :utm_campaign %>
47
+ </div>
48
+ <div class="field">
49
+ <%= f.label :utm_term, 'UTM Term' %><br />
50
+ <%= f.text_field :utm_term %>
51
+ </div>
52
+ <div class="field">
53
+ <%= f.label :utm_content, 'UTM Content' %><br />
54
+ <%= f.text_field :utm_content %>
55
+ </div>
56
+
57
+ <div class="actions">
58
+ <%= link_to 'Cancel', short_urls_path %>
59
+ <%= f.submit %>
60
+ </div>
61
+ <% end %>
@@ -0,0 +1,24 @@
1
+ <table class="table table-striped">
2
+ <tr>
3
+ <th>Name</th>
4
+ <th>Domain</th>
5
+ <th>Code</th>
6
+ <th>Destination URL</th>
7
+ <th class="span2">Expansions</th>
8
+ <th class="span3">Actions</th>
9
+ </tr>
10
+
11
+ <% short_urls.each do |short_url| %>
12
+ <tr>
13
+ <td><%= short_url.name %></td>
14
+ <td><%= short_url.short_domain.domain if short_url.short_domain %></td>
15
+ <td><%= link_to short_url.code, short_url %></td>
16
+ <td><%= short_url.destination_url %></td>
17
+ <td><%= short_url.expansion_count %></td>
18
+ <td>
19
+ <%= link_to 'Edit', edit_short_url_path(short_url), :class => 'btn btn-info' %>
20
+ <%= link_to 'Destroy', short_url, class: 'btn btn-danger', method: :delete, data: { confirm: 'Are you sure?' } %>
21
+ </td>
22
+ </tr>
23
+ <% end %>
24
+ </table>
@@ -0,0 +1,5 @@
1
+ <%= render 'shared/slim_fast_navigation' %>
2
+
3
+ <h1>Editing Short URL</h1>
4
+
5
+ <%= render 'form' %>