deelay 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,16 +1,9 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- # Specify your gem's dependencies in deelay.gemspec
4
- gemspec
5
- gem 'sinatra', "~>1.3.3"
6
- gem 'thin'
3
+ gem 'rake'
7
4
  gem 'async_sinatra'
8
-
9
- group :development do
10
- gem 'shotgun'
11
- end
5
+ gem 'thin'
12
6
 
13
7
  group :test do
14
- gem "rack-test"
15
- gem "rspec"
8
+ gem 'rack-test'
16
9
  end
data/Rakefile CHANGED
@@ -1,7 +1,9 @@
1
1
  require "bundler/gem_tasks"
2
- require 'rspec/core/rake_task'
2
+ require 'rake/testtask'
3
3
 
4
- desc "Run specs"
5
- RSpec::Core::RakeTask.new
4
+ desc "Run tests"
5
+ Rake::TestTask.new do |t|
6
+ t.pattern = "test/test_*.rb"
7
+ end
6
8
 
7
- task :default => :spec
9
+ task :default => :test
@@ -19,6 +19,6 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
21
 
22
- s.add_development_dependency "rake"
22
+ # s.add_development_dependency "rake"
23
23
  # s.add_runtime_dependency "rest-client"
24
24
  end
@@ -1,4 +1,3 @@
1
- require "deelay/version"
2
- require "deelay/homepage"
3
- require "deelay/parse"
4
- require "deelay/app"
1
+ require_relative "deelay/version"
2
+ require_relative "deelay/homepage"
3
+ require_relative "deelay/app"
@@ -1,13 +1,35 @@
1
- require "sinatra/async"
1
+ require 'sinatra/async'
2
+ require 'uri'
2
3
 
3
4
  module Deelay
4
5
  class App < Sinatra::Base
5
6
  register Sinatra::Async
6
7
 
7
- aget '/:delay' do |delay|
8
- EM.add_timer(delay.to_i/1000) do
9
- async_schedule { redirect Deelay.parse(request.query_string) }
8
+ aget '/:delay' do
9
+ resource_url = parse(request.query_string)
10
+
11
+ EM.add_timer(params[:delay].to_i / 1000) do
12
+ em_async_schedule { redirect resource_url }
10
13
  end
11
14
  end
15
+
16
+ private
17
+
18
+ def parse(url)
19
+ unescaped_url = ::URI.unescape(url)
20
+
21
+ raise "Invalid URL" if (::URI::regexp =~ unescaped_url).nil?
22
+ return unescaped_url
23
+ end
24
+
25
+ # swaps env when testing
26
+ def em_async_schedule
27
+ o = self.class.environment
28
+ self.class.set :environment, :normal
29
+ async_schedule { yield }
30
+ ensure
31
+ self.class.set :environment, o
32
+ end
12
33
  end
13
34
  end
35
+
@@ -1,3 +1,3 @@
1
1
  module Deelay
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -0,0 +1,50 @@
1
+ require 'minitest/autorun'
2
+ require 'eventmachine'
3
+ require 'sinatra/async/test'
4
+
5
+ require_relative '../lib/deelay'
6
+
7
+ Sinatra::Base.set :environment, :test
8
+
9
+ class TestDeelayApp < MiniTest::Unit::TestCase
10
+ include Sinatra::Async::Test::Methods
11
+
12
+ def app
13
+ Deelay::App.new
14
+ end
15
+
16
+ def test_redirect_on_valid_request
17
+ get "/10?http://testurl.com"
18
+ em_async_continue
19
+ assert_equal "http://testurl.com", last_response.location
20
+ assert_equal 302, last_response.status
21
+ end
22
+
23
+ def test_redirect_on_valid_request_with_port
24
+ get "/10?http://testurl.com:1234"
25
+ em_async_continue
26
+ assert_equal "http://testurl.com:1234", last_response.location
27
+ assert_equal 302, last_response.status
28
+ end
29
+
30
+ def test_no_query
31
+ get "/10"
32
+ assert_raises(RuntimeError) do
33
+ em_async_continue(0.1)
34
+ end
35
+ end
36
+
37
+ def test_no_link
38
+ get "/10?"
39
+ assert_raises(RuntimeError) do
40
+ em_async_continue(0.1)
41
+ end
42
+ end
43
+
44
+ def test_no_scheme_link
45
+ get "/10?testurl.com"
46
+ assert_raises(RuntimeError) do
47
+ em_async_continue(0.1)
48
+ end
49
+ end
50
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deelay
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,24 +9,8 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-28 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: rake
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :development
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
12
+ date: 2013-09-01 00:00:00.000000000 Z
13
+ dependencies: []
30
14
  description: Delay proxy for http resources
31
15
  email:
32
16
  - gbiesiadecki@gmail.com
@@ -46,9 +30,8 @@ files:
46
30
  - lib/deelay.rb
47
31
  - lib/deelay/app.rb
48
32
  - lib/deelay/homepage.rb
49
- - lib/deelay/parse.rb
50
33
  - lib/deelay/version.rb
51
- - spec/deelay_app_spec.rb
34
+ - test/test_deelay_app.rb
52
35
  homepage: http://deelay.me
53
36
  licenses: []
54
37
  post_install_message:
@@ -63,16 +46,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
63
46
  version: '0'
64
47
  segments:
65
48
  - 0
66
- hash: 3755310507841361791
49
+ hash: 3411104809723433661
67
50
  required_rubygems_version: !ruby/object:Gem::Requirement
68
51
  none: false
69
52
  requirements:
70
53
  - - ! '>='
71
54
  - !ruby/object:Gem::Version
72
55
  version: '0'
73
- segments:
74
- - 0
75
- hash: 3755310507841361791
76
56
  requirements: []
77
57
  rubyforge_project: deelay
78
58
  rubygems_version: 1.8.25
@@ -80,4 +60,4 @@ signing_key:
80
60
  specification_version: 3
81
61
  summary: Delay proxy
82
62
  test_files:
83
- - spec/deelay_app_spec.rb
63
+ - test/test_deelay_app.rb
@@ -1,10 +0,0 @@
1
- require "uri"
2
-
3
- module Deelay
4
- def self.parse(url)
5
- resource_url = URI.unescape(url)
6
- raise "Invalid URL" if (URI::regexp =~ resource_url).nil?
7
-
8
- return resource_url
9
- end
10
- end
@@ -1,41 +0,0 @@
1
- require_relative '../lib/deelay'
2
- require 'rspec'
3
- require 'rack/test'
4
-
5
- Sinatra::Base.set :environment, :test
6
-
7
- describe "Deelay::App" do
8
- include Rack::Test::Methods
9
-
10
- def app
11
- Deelay::App
12
- end
13
-
14
- context "when url invalid" do
15
- it "raise error if query is not a valid url" do
16
- expect { get "/10?testurl.com" }.to raise_error
17
- expect { get "/10?" }.to raise_error
18
- end
19
-
20
- it "raise error if no query" do
21
- expect { get "/10" }.to raise_error
22
- end
23
- end
24
-
25
- context "when url valid" do
26
- it "redirects request to specified url" do
27
- get "/10?http://testurl.com"
28
- last_response.location.should == "http://testurl.com"
29
- end
30
-
31
- it "redirects request" do
32
- get "/10?http://testurl.com"
33
- last_response.status.should == 302
34
- end
35
-
36
- it "redirects request with port" do
37
- get "/10?http://testurl.com:1234"
38
- last_response.status.should == 302
39
- end
40
- end
41
- end