Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions .byebug_history
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
c
new_url.errors
n
new_url.errors.messages[:link]
new_url.errors[:link]
new_url.errors
new_url
c
new_url.errors
new_url
n
c
n
c
new_url.errors.messages[:link]
new_url.errors.message[:link]
n
c
{a: 233}.to_json
[a: 223].to_json
'test'.to_json
new_url.errors.messages[:link].to_json
new_url.errors.messages[:link]
new_url.errors.messages
new_url.errors
new_url
c
new_url.errors.messages[:links]
c
exit
params
exit
params
exit
params
exit
params
exit
@error_messages.messages[:link].each{|e| p e}
@error_messages.messages[:link]
@error_messages.messages
@error_messages
c
new_url.errors.full_messages
new_url.errors.messages
new_url.errors
new_url
4 changes: 3 additions & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ source 'https://rubygems.org'
# Adding Sinatra Drivers
gem 'sinatra'
gem 'sinatra-contrib'

gem 'byebug'
# Adding thin gem as advised
gem 'thin'

Expand All @@ -24,6 +24,8 @@ gem 'rake'
# Adding rspec for running unit testing
gem 'rspec'

gem 'sinatra-flash'

group :development, :test do
# Adding shotgun for local web hosting
gem 'shotgun'
Expand Down
7 changes: 6 additions & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ GEM
arel (6.0.3)
backports (3.6.7)
builder (3.2.2)
byebug (9.0.6)
daemons (1.2.3)
diff-lcs (1.2.5)
eventmachine (1.0.8)
Expand Down Expand Up @@ -66,6 +67,8 @@ GEM
rack-test
sinatra (~> 1.4.0)
tilt (>= 1.3, < 3)
sinatra-flash (0.3.0)
sinatra (>= 1.0.0)
thin (1.6.4)
daemons (~> 1.0, >= 1.0.9)
eventmachine (~> 1.0, >= 1.0.4)
Expand All @@ -81,6 +84,7 @@ PLATFORMS
DEPENDENCIES
activerecord
activesupport
byebug
pg
puma
rails_12factor
Expand All @@ -90,7 +94,8 @@ DEPENDENCIES
sinatra
sinatra-activerecord
sinatra-contrib
sinatra-flash
thin

BUNDLED WITH
1.10.6
1.13.3
33 changes: 33 additions & 0 deletions app/controllers/static.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,36 @@
get '/' do
erb :"static/index"
end

get '/urls' do
redirect '/'
end

get '/howto' do
erb :'static/howto'
end

get '/about' do
erb :'static/about'
end

post '/urls' do
new_url = Url.new
new_url.link = params[:long_url].to_s
if new_url.save
new_url.to_json
elsif (new_url.errors.messages[:link][0] == 'URL already exists')
{error: 'URL already exists'}.to_json
else
{error: 'Invalid URL'}.to_json
end
# @error_messages = new_url.errors
# erb :'static/index'
end

get '/:serial_code' do
url_record = Url.find_by(serial_code: params[:serial_code])
url_record.increment!(:click_count)
long_url = url_record.link
redirect long_url
end
22 changes: 22 additions & 0 deletions app/models/url.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
require 'securerandom'

class Url < ActiveRecord::Base
# This is Sinatra! Remember to create a migration!
validates :link, presence: {message: 'URL required'}
validates :link, uniqueness: {message: 'URL already exists'}
validate :check_uri_validity
before_create :init_serialcode
def check_uri_validity
if URI.parse(URI.escape(self.link)).host.nil?
errors.add(:link, 'Invalid URL entered')
end
end

def init_serialcode
begin
serial_code = SecureRandom.hex(3)
end while Url.where(serial_code: serial_code).exists?
self.serial_code = serial_code
end

end
24 changes: 23 additions & 1 deletion app/views/layouts/application.erb
Original file line number Diff line number Diff line change
@@ -1,8 +1,30 @@
<html>
<head>
<title>Sinatra Framework</title>
<title>Lnkshortnr</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="/css/application.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
</head>
<body>
<h1><span id="header-caps">Lnk</span>shortnr</h1>
<%= yield %>
<script type="text/javascript" src="/js/application.js"></script>
</body>
<footer class="footer">
<span class="footer-links">
<a href="/">
Home
</a>
</span>
<span class="footer-links">
<a href="/howto">
How to use
</a>
</span>
<span class="footer-links">
<a href="/about">
About
</a>
</span>
</footer>
</html>
7 changes: 7 additions & 0 deletions app/views/static/about.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<div class="container">
<div class="row justify-content-center">
<div class="col-7 descriptive-content">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in tincidunt magna. Morbi congue ante ac porta rutrum. Curabitur ac bibendum erat, vulputate placerat ipsum. Suspendisse a sagittis leo. Nunc nec interdum sem, vel fringilla purus. Donec convallis aliquam est, ut pulvinar enim auctor vitae. Proin at tempus mauris. In mattis nisl a dui euismod, ultricies ullamcorper risus malesuada.</p>
</div>
</div>
</div>
13 changes: 13 additions & 0 deletions app/views/static/howto.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<div class="container">
<div class="row justify-content-center">
<div class="col-7 descriptive-content">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in tincidunt magna. Morbi congue ante ac porta rutrum. Curabitur ac bibendum erat, vulputate placerat ipsum. Suspendisse a sagittis leo. Nunc nec interdum sem, vel fringilla purus. Donec convallis aliquam est, ut pulvinar enim auctor vitae. Proin at tempus mauris. In mattis nisl a dui euismod, ultricies ullamcorper risus malesuada.</p>

<ul>
<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</li>
<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</li>
<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</li>
</ul>
</div>
</div>
</div>
50 changes: 48 additions & 2 deletions app/views/static/index.erb
Original file line number Diff line number Diff line change
@@ -1,2 +1,48 @@
<h1>Hello World</h1>
<p>See Me in views/static/index.html.erb</p>
<div class="container">
<div class="form">
<form action="/urls" method="POST" id="url-form">
<div class="row justify-content-center">
<div class="col-6">
<input type="text" name="long_url" class="form-control" placeholder="Enter URL here" id="url-input">
</div>
<input type="submit" value="shortn" class="btn btn-color">
</div>
</form>
</div>

<div class="row justify-content-center">
<div class="col-5" id="error-new-entry">
<% if @error_messages %>
<% @error_messages.messages[:link].each do |msg|%>
<p class="error-msg">
<%= msg %>
</p>
<%end%>
<% end %>
</div>
</div>
</div>

<div class="container">
<div class="url-list row justify-content-center">
<% unless Url.all.empty? %>
<table align="center">
<col width="260">
<col width="260">
<col width="100">
<tr>
<th height="30">URL</th>
<th height="30">Lnkshortnr URL</th>
<th height="30">Click Count</th>
</tr>
<% Url.all.order(click_count: :desc, created_at: :desc).each do |result| %>
<tr>
<td><%= result.link %></td>
<td><a href="<%= request.base_url + '/' + result.serial_code %>"><%= request.base_url + '/' + result.serial_code %></a></td>
<td><%= result.click_count %></td>
</tr>
<% end %>
</table>
<% end %>
</div>
</div>
2 changes: 1 addition & 1 deletion config/environments/init.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
require 'rubygems'
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
require 'pathname'

require 'byebug'
# database
require 'pg'
require 'active_record'
Expand Down
10 changes: 10 additions & 0 deletions db/migrate/20170206151059_create_bitly_url_table.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
class CreateBitlyUrlTable < ActiveRecord::Migration
def change
create_table :urls do |t|
t.string :links
t.string :serial_code

t.timestamps
end
end
end
5 changes: 5 additions & 0 deletions db/migrate/20170206171803_rename_serial_code_column.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class RenameSerialCodeColumn < ActiveRecord::Migration
def change
rename_column :urls, :serial_code, :serial_codes
end
end
6 changes: 6 additions & 0 deletions db/migrate/20170206172530_rename_columns.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class RenameColumns < ActiveRecord::Migration
def change
rename_column :urls, :links, :link
rename_column :urls, :serial_codes, :serial_code
end
end
5 changes: 5 additions & 0 deletions db/migrate/20170207201248_add_click_count_column.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class AddClickCountColumn < ActiveRecord::Migration
def change
add_column :urls, :click_count, :integer
end
end
5 changes: 5 additions & 0 deletions db/migrate/20170210112527_create_index_serial_code.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class CreateIndexSerialCode < ActiveRecord::Migration
def change
add_index :urls, [:serial_code], unique: true
end
end
6 changes: 6 additions & 0 deletions db/migrate/20170210131752_add_clickcount_default_val.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class AddClickcountDefaultVal < ActiveRecord::Migration
def change
remove_column :urls, :click_count, :integer
add_column :urls, :click_count, :integer, :default => 0
end
end
35 changes: 35 additions & 0 deletions db/seeds.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
require 'csv'
require 'securerandom'

url_arr = []
p 'before csv'
count =1

CSV.foreach('test.csv') do |row|
begin
serial_code_gen = SecureRandom.hex(3)
end while url_arr.flatten.include? serial_code_gen

url_arr.push([row[0][/\w.+\w/], serial_code_gen])
p count
count += 1
end

url_str = ''

count = 1
url_arr.each do |elm|
puts count
url_str += "(\'#{elm[0]}\', \'#{elm[1]}\'),"
count += 1
end

url_str.chop!
url_str += ';'
count =1
p count
Url.transaction do
puts count
Url.connection.execute "INSERT INTO urls (link, serial_code) VALUES #{url_str}"
count += 1
end
Loading