Adds tests, travis support and more

This commit is contained in:
Abhay Rana 2015-08-22 18:22:32 +05:30
parent ab78b5e144
commit e44902899c
9 changed files with 63 additions and 11 deletions

4
.travis.yml Normal file
View File

@ -0,0 +1,4 @@
language: ruby
rvm:
- 2.2.2
script: ruby test.rb

View File

@ -2,4 +2,11 @@ source "https://rubygems.org"
ruby '2.2.2' ruby '2.2.2'
gem 'sinatra' gem 'sinatra'
gem 'minitest'
group :test do
gem 'minitest'
end
group :production do
gem 'thin'
end

View File

@ -1,6 +1,8 @@
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
daemons (1.2.3)
eventmachine (1.0.8)
minitest (5.7.0) minitest (5.7.0)
rack (1.6.4) rack (1.6.4)
rack-protection (1.5.3) rack-protection (1.5.3)
@ -9,6 +11,10 @@ GEM
rack (~> 1.4) rack (~> 1.4)
rack-protection (~> 1.4) rack-protection (~> 1.4)
tilt (>= 1.3, < 3) tilt (>= 1.3, < 3)
thin (1.6.3)
daemons (~> 1.0, >= 1.0.9)
eventmachine (~> 1.0)
rack (~> 1.0)
tilt (2.0.1) tilt (2.0.1)
PLATFORMS PLATFORMS
@ -17,6 +23,7 @@ PLATFORMS
DEPENDENCIES DEPENDENCIES
minitest minitest
sinatra sinatra
thin
BUNDLED WITH BUNDLED WITH
1.10.5 1.10.5

View File

@ -1,4 +1,4 @@
# lightsaber # lightsaber [![Build Status](https://travis-ci.org/captn3m0/lightsaber.svg)](https://travis-ci.org/captn3m0/lightsaber)
Lightsaber is a simple DNS Redirect service. It offers 301/302 redirects for Lightsaber is a simple DNS Redirect service. It offers 301/302 redirects for
your domains. The configuration is kept public on this github repository itself. your domains. The configuration is kept public on this github repository itself.

15
app.rb Normal file
View File

@ -0,0 +1,15 @@
require 'rubygems'
require 'bundler/setup'
require 'sinatra'
require 'yaml'
get '/' do
hostname = request.host
YAML::load_file('redirects.yml').each do |code, zone|
if zone.has_key? hostname
redirect zone[hostname], code
end
end
halt 404, "#{hostname} hasn't been setup yet."
end

3
config.ru Normal file
View File

@ -0,0 +1,3 @@
require File.expand_path '../app.rb', __FILE__
run Sinatra::Application

View File

@ -1,4 +1,14 @@
301: ---
github.captnemo.in: https://github.com/captn3m0 environment: production
302: chdir: /home/lightsaber/lightsaber
fb.captnemo.in: https://facebook.com/captn3m0 address: 127.0.0.1
user: lightsaber
group: lightsaber
port: 4567
pid: /tmp/lightsaber.pid
rackup: /home/lightsaber/lightsaber/config.ru
log: /home/lightsaber/lightsaber/thin.log
max_conns: 1024
timeout: 5
max_persistent_conns: 256
daemonize: true

6
redirects.yml Normal file
View File

@ -0,0 +1,6 @@
---
301:
github.captnemo.in: https://github.com/captn3m0
lightsaber.captnemo.in: https://github.com/captn3m0/lightsaber
302:
fb.captnemo.in: https://facebook.com/captn3m0

10
test.rb
View File

@ -4,14 +4,14 @@ require 'yaml'
require 'pp' require 'pp'
class TestConfig < Minitest::Test class TestConfig < Minitest::Test
REDIRECTS = ['301', '302'] REDIRECTS = [301, 302]
def setup def setup
@config = YAML::load_file 'config.yml' @config = YAML::load_file 'redirects.yml'
end end
def test_redirect_sections def test_redirect_sections
@config.each do |section, zone| @config.each do |code, zone|
assert REDIRECTS.include? section.to_s assert REDIRECTS.include? code
end end
end end
@ -25,7 +25,7 @@ class TestConfig < Minitest::Test
end end
def resolves_to_lightsaber(domain) def resolves_to_lightsaber(domain)
flag = false flag = domain === "lightsaber.captnemo.in"
Resolv::DNS.open do |dns| Resolv::DNS.open do |dns|
records = dns.getresources domain, Resolv::DNS::Resource::IN::CNAME records = dns.getresources domain, Resolv::DNS::Resource::IN::CNAME
records.each do |record| records.each do |record|