slim_fast 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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' %>