slim_fast 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.md +136 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/errors.js +2 -0
- data/app/assets/stylesheets/errors.css +4 -0
- data/app/controllers/errors_controller.rb +4 -0
- data/app/controllers/expansions_controller.rb +84 -0
- data/app/controllers/short_domains_controller.rb +85 -0
- data/app/controllers/short_urls_controller.rb +115 -0
- data/app/helpers/errors_helper.rb +2 -0
- data/app/helpers/slim_fast/application_helper.rb +4 -0
- data/app/helpers/slim_fast/expansions_helper.rb +4 -0
- data/app/helpers/slim_fast/short_domains_helper.rb +4 -0
- data/app/helpers/slim_fast/short_urls_helper.rb +4 -0
- data/app/models/expansion.rb +6 -0
- data/app/models/short_domain.rb +6 -0
- data/app/models/short_url.rb +35 -0
- data/app/views/errors/invalid_code.html.erb +2 -0
- data/app/views/expansions/_form.html.erb +45 -0
- data/app/views/expansions/edit.html.erb +5 -0
- data/app/views/expansions/index.html.erb +43 -0
- data/app/views/expansions/new.html.erb +5 -0
- data/app/views/expansions/show.html.erb +42 -0
- data/app/views/shared/_slim_fast_navigation.html.erb +11 -0
- data/app/views/short_domains/_form.html.erb +26 -0
- data/app/views/short_domains/edit.html.erb +5 -0
- data/app/views/short_domains/index.html.erb +38 -0
- data/app/views/short_domains/new.html.erb +5 -0
- data/app/views/short_domains/show.html.erb +27 -0
- data/app/views/short_urls/_form.html.erb +61 -0
- data/app/views/short_urls/_short_urls_table.html.erb +24 -0
- data/app/views/short_urls/edit.html.erb +5 -0
- data/app/views/short_urls/index.html.erb +19 -0
- data/app/views/short_urls/new.html.erb +5 -0
- data/app/views/short_urls/show.html.erb +77 -0
- data/config/routes.rb +17 -0
- data/db/migrate/20121004232924_create_slim_fast_short_domains.rb +10 -0
- data/db/migrate/20121004234409_create_slim_fast_short_urls.rb +22 -0
- data/db/migrate/20121004234536_create_slim_fast_expansions.rb +15 -0
- data/lib/slim_fast.rb +4 -0
- data/lib/slim_fast/engine.rb +5 -0
- data/lib/slim_fast/version.rb +3 -0
- data/lib/tasks/slim_fast_tasks.rake +4 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/schema.rb +54 -0
- data/test/dummy/log/development.log +8542 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/tmp/cache/assets/C27/920/sprockets%2F1fe65007aa375565a9348253347444f9 +0 -0
- data/test/dummy/tmp/cache/assets/C2A/3C0/sprockets%2Fbf216b96e4625134934f18748756b125 +0 -0
- data/test/dummy/tmp/cache/assets/C50/380/sprockets%2F26016472b58ca461a65fa6951744c367 +0 -0
- data/test/dummy/tmp/cache/assets/C7F/E20/sprockets%2F33d534294133822566119b8d7d5ba6ec +0 -0
- data/test/dummy/tmp/cache/assets/CA7/F40/sprockets%2Fb9488f9fbe87445bc38136287d954775 +0 -0
- data/test/dummy/tmp/cache/assets/CC2/330/sprockets%2F07797d1858badd3219d57b87954b3d08 +0 -0
- data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/CDF/D90/sprockets%2F0d3e4f0a8075d386a6f5591146a078cd +0 -0
- data/test/dummy/tmp/cache/assets/D04/360/sprockets%2Ff72c7ca5bb201c3d8178112b5985cf03 +0 -0
- data/test/dummy/tmp/cache/assets/D10/EC0/sprockets%2F265d8e58821c5c1e766ddbf814800ba2 +0 -0
- data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/D38/6D0/sprockets%2F73f8e43a3540a5da61c62fa8b51882ad +0 -0
- data/test/dummy/tmp/cache/assets/D4C/060/sprockets%2F696b70f02f9165e9b6b0a874fff13dd5 +0 -0
- data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/D55/CD0/sprockets%2Fceb2e6285ffd7d7545b04757e8e6c357 +0 -0
- data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/D62/500/sprockets%2Ff50e441403287cf5904aad30ffcbe05f +0 -0
- data/test/dummy/tmp/cache/assets/D7A/700/sprockets%2F8ec8c9e963236de2b707709ee3bb3f0c +0 -0
- data/test/dummy/tmp/cache/assets/DA7/2A0/sprockets%2Fa37ff5e4c7d9d5a93690eeec0c6072a5 +0 -0
- data/test/dummy/tmp/cache/assets/DBC/CC0/sprockets%2Fa16ccbfcd61258cc4a59171a1a8d6b1c +0 -0
- data/test/dummy/tmp/cache/assets/DC9/490/sprockets%2Ff0b23b7ce1fe240e2916fde55eb9cd51 +0 -0
- data/test/dummy/tmp/cache/assets/DCD/0B0/sprockets%2F8e74ddd350631963f4bdeee6cb017cac +0 -0
- data/test/dummy/tmp/cache/assets/DCD/3D0/sprockets%2F57b7ab77dabfd46f191fde6d2a45013f +0 -0
- data/test/dummy/tmp/cache/assets/DDA/BA0/sprockets%2F956c26dfdede717f68bac19770ee24aa +0 -0
- data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/E08/650/sprockets%2F5bee8a4b599a4fec8f50da484da0f7b6 +0 -0
- data/test/dummy/tmp/cache/assets/E29/DE0/sprockets%2Fef93d515dc6a6f05fee3a79e4bda1ab0 +0 -0
- data/test/fixtures/slim_fast/expansions.yml +19 -0
- data/test/fixtures/slim_fast/short_domains.yml +9 -0
- data/test/fixtures/slim_fast/short_urls.yml +33 -0
- data/test/functional/errors_controller_test.rb +9 -0
- data/test/functional/slim_fast/expansions_controller_test.rb +51 -0
- data/test/functional/slim_fast/short_domains_controller_test.rb +51 -0
- data/test/functional/slim_fast/short_urls_controller_test.rb +51 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/slim_fast_test.rb +7 -0
- data/test/test_helper.rb +15 -0
- data/test/unit/helpers/errors_helper_test.rb +4 -0
- data/test/unit/helpers/slim_fast/expansions_helper_test.rb +6 -0
- data/test/unit/helpers/slim_fast/short_domains_helper_test.rb +6 -0
- data/test/unit/helpers/slim_fast/short_urls_helper_test.rb +6 -0
- data/test/unit/slim_fast/expansion_test.rb +9 -0
- data/test/unit/slim_fast/short_domain_test.rb +9 -0
- data/test/unit/slim_fast/short_url_test.rb +9 -0
- metadata +278 -0
@@ -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,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,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,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,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,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>
|