shawty-server 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/.gems CHANGED
@@ -1 +1,2 @@
1
1
  alphadecimal --version '>= 1.0.1'
2
+ inline-style
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source :rubygems
2
+
3
+ gem "sinatra", '1.0.0'
4
+ gem "activerecord"
5
+ gem "activesupport"
6
+ gem "alphadecimal"
7
+ gem "pg"
8
+
9
+ group :development, :test do
10
+ gem 'rack-test'
11
+ gem "shoulda", "2.11.0"
12
+ gem "jeweler"
13
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,50 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activemodel (3.2.6)
5
+ activesupport (= 3.2.6)
6
+ builder (~> 3.0.0)
7
+ activerecord (3.2.6)
8
+ activemodel (= 3.2.6)
9
+ activesupport (= 3.2.6)
10
+ arel (~> 3.0.2)
11
+ tzinfo (~> 0.3.29)
12
+ activesupport (3.2.6)
13
+ i18n (~> 0.6)
14
+ multi_json (~> 1.0)
15
+ alphadecimal (1.1.2)
16
+ arel (3.0.2)
17
+ builder (3.0.0)
18
+ git (1.2.5)
19
+ i18n (0.6.0)
20
+ jeweler (1.8.4)
21
+ bundler (~> 1.0)
22
+ git (>= 1.2.5)
23
+ rake
24
+ rdoc
25
+ json (1.7.3)
26
+ multi_json (1.3.6)
27
+ pg (0.13.2)
28
+ rack (1.4.1)
29
+ rack-test (0.6.1)
30
+ rack (>= 1.0)
31
+ rake (0.9.2.2)
32
+ rdoc (3.12)
33
+ json (~> 1.4)
34
+ shoulda (2.11.0)
35
+ sinatra (1.0)
36
+ rack (>= 1.0)
37
+ tzinfo (0.3.33)
38
+
39
+ PLATFORMS
40
+ ruby
41
+
42
+ DEPENDENCIES
43
+ activerecord
44
+ activesupport
45
+ alphadecimal
46
+ jeweler
47
+ pg
48
+ rack-test
49
+ shoulda (= 2.11.0)
50
+ sinatra (= 1.0.0)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.1
1
+ 1.1.3
data/config.ru CHANGED
@@ -1,4 +1,4 @@
1
- require 'shawty'
1
+ require File.expand_path('../lib/shawty', __FILE__)
2
2
 
3
3
  ## There is no need to set directories here anymore;
4
4
  ## Just run the application
@@ -0,0 +1,44 @@
1
+ class Shawty < Sinatra::Base
2
+ module Helpers
3
+
4
+ def select_column sql
5
+ connection.select_rows(sql).flatten.first
6
+ end
7
+
8
+ def execute sql
9
+ connection.execute sql
10
+ end
11
+
12
+ def quote string
13
+ connection.quote string
14
+ end
15
+
16
+ def table_name
17
+ connection.quote_table_name 'shawty'
18
+ end
19
+
20
+ def connection
21
+ ActiveRecord::Base.connection
22
+ end
23
+
24
+ def initialize_database
25
+ table = execute %Q{select * from pg_tables where tablename = #{quote 'shawty'}}
26
+ return if table.any?
27
+ execute %Q{
28
+ CREATE TABLE #{table_name} (
29
+ id SERIAL PRIMARY KEY,
30
+ url varchar(2048) UNIQUE
31
+ )
32
+ }
33
+ end
34
+
35
+ def database_config
36
+ YAML.load(File.read('config/database.yml'))
37
+ end
38
+
39
+ def init(environment)
40
+ ActiveRecord::Base.establish_connection database_config[environment]
41
+ initialize_database
42
+ end
43
+ end
44
+ end
data/lib/shawty.rb ADDED
@@ -0,0 +1,60 @@
1
+ ## Resources
2
+ require 'sinatra/base'
3
+ require 'active_record'
4
+ require 'alphadecimal'
5
+ require File.expand_path('../shawty/helpers', __FILE__)
6
+
7
+ class Shawty < Sinatra::Base
8
+ include Helpers
9
+ extend Helpers
10
+
11
+ get '/' do
12
+ %Q{
13
+ <body style='line-height: 1.8em; font-family: Archer, Museo, Helvetica, Georgia; font-size 25px; text-align: center; padding-top: 20%;'>
14
+ Post to '/' to save a url and receive a plaintext short url in response. Example:
15
+ <pre style='font-family: Iconsolata, monospace;background-color:#EEE'>curl -X POST http://#{request.host}/http://some.url/at.someplace</pre>
16
+ <br />
17
+ <form action=/ method=POST onsubmit='if(\"\"==this.url.value)return false;else{this.action=\"/\"+this.url.value}'>
18
+ <input type=text name='url' />
19
+ <input type=submit value='Get Shawty' />
20
+ </form>
21
+ <small>Also, try <a href='http://github.com/JackDanger/shawty-client'>the official Ruby client</a></small>
22
+ </body
23
+ }
24
+ end
25
+
26
+ get '/:id' do
27
+ url = select_column %Q{
28
+ SELECT url FROM #{table_name}
29
+ WHERE id = #{quote params[:id].alphadecimal.to_i}
30
+ }
31
+
32
+ pass unless url
33
+
34
+ redirect url, 301
35
+ end
36
+
37
+ post '*' do
38
+ url = request.env['REQUEST_URI'] || Array(params[:splat]).first
39
+
40
+ url = url[1, url.size] if url =~ /^\//
41
+
42
+ pass if url.nil? || '' == url
43
+
44
+ quoted = quote url
45
+
46
+ id = select_column %Q{ SELECT id FROM #{table_name} WHERE url = #{quoted} }
47
+
48
+ id ||= select_column %Q{
49
+ INSERT INTO #{table_name} (url, id) VALUES (#{quoted}, nextval('shawty_id_seq'))
50
+ RETURNING id
51
+ }
52
+
53
+ "http://#{request.host}/#{id.to_i.alphadecimal}"
54
+ end
55
+
56
+ ## Environments
57
+ configure :development do init 'development' end
58
+ configure :test do init 'test' end
59
+ configure :production do init 'production' end
60
+ end
@@ -4,51 +4,75 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{shawty-server}
8
- s.version = "1.1.2"
7
+ s.name = "shawty-server"
8
+ s.version = "1.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jack Danger Canty"]
12
- s.date = %q{2011-05-04}
13
- s.description = %q{Run your own url shortener add your own web address for free on Heroku.com}
14
- s.email = %q{gitcommit@6brand.com}
12
+ s.date = "2012-07-11"
13
+ s.description = "Run your own url shortener add your own web address for free on Heroku.com"
14
+ s.email = "gitcommit@6brand.com"
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
17
  "README.markdown"
18
18
  ]
19
19
  s.files = [
20
20
  ".gems",
21
+ "Gemfile",
22
+ "Gemfile.lock",
21
23
  "LICENSE",
22
24
  "README.markdown",
23
25
  "Rakefile",
24
26
  "VERSION",
25
27
  "config.ru",
26
28
  "config/database.yml",
29
+ "lib/shawty.rb",
30
+ "lib/shawty/helpers.rb",
27
31
  "shawty-server.gemspec",
28
- "shawty.rb",
29
32
  "test.rb"
30
33
  ]
31
- s.homepage = %q{http://github.com/JackDanger/shawty-server}
34
+ s.homepage = "http://github.com/JackDanger/shawty-server"
32
35
  s.require_paths = ["lib"]
33
- s.rubygems_version = %q{1.4.2}
34
- s.summary = %q{Ultra-lightweight url shortening server for Heroku.com}
36
+ s.rubygems_version = "1.8.17"
37
+ s.summary = "Ultra-lightweight url shortening server for Heroku.com"
35
38
 
36
39
  if s.respond_to? :specification_version then
37
40
  s.specification_version = 3
38
41
 
39
42
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
40
- s.add_runtime_dependency(%q<rack>, ["= 1.2.1"])
43
+ s.add_runtime_dependency(%q<sinatra>, ["= 1.0.0"])
44
+ s.add_runtime_dependency(%q<activerecord>, [">= 0"])
45
+ s.add_runtime_dependency(%q<activesupport>, [">= 0"])
46
+ s.add_runtime_dependency(%q<alphadecimal>, [">= 0"])
47
+ s.add_runtime_dependency(%q<pg>, [">= 0"])
48
+ s.add_development_dependency(%q<rack-test>, [">= 0"])
49
+ s.add_development_dependency(%q<shoulda>, ["= 2.11.0"])
50
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
41
51
  s.add_runtime_dependency(%q<alphadecimal>, [">= 1.0.1"])
42
52
  s.add_development_dependency(%q<active_record>, [">= 0"])
43
53
  s.add_development_dependency(%q<shoulda>, [">= 0"])
44
54
  else
45
- s.add_dependency(%q<rack>, ["= 1.2.1"])
55
+ s.add_dependency(%q<sinatra>, ["= 1.0.0"])
56
+ s.add_dependency(%q<activerecord>, [">= 0"])
57
+ s.add_dependency(%q<activesupport>, [">= 0"])
58
+ s.add_dependency(%q<alphadecimal>, [">= 0"])
59
+ s.add_dependency(%q<pg>, [">= 0"])
60
+ s.add_dependency(%q<rack-test>, [">= 0"])
61
+ s.add_dependency(%q<shoulda>, ["= 2.11.0"])
62
+ s.add_dependency(%q<jeweler>, [">= 0"])
46
63
  s.add_dependency(%q<alphadecimal>, [">= 1.0.1"])
47
64
  s.add_dependency(%q<active_record>, [">= 0"])
48
65
  s.add_dependency(%q<shoulda>, [">= 0"])
49
66
  end
50
67
  else
51
- s.add_dependency(%q<rack>, ["= 1.2.1"])
68
+ s.add_dependency(%q<sinatra>, ["= 1.0.0"])
69
+ s.add_dependency(%q<activerecord>, [">= 0"])
70
+ s.add_dependency(%q<activesupport>, [">= 0"])
71
+ s.add_dependency(%q<alphadecimal>, [">= 0"])
72
+ s.add_dependency(%q<pg>, [">= 0"])
73
+ s.add_dependency(%q<rack-test>, [">= 0"])
74
+ s.add_dependency(%q<shoulda>, ["= 2.11.0"])
75
+ s.add_dependency(%q<jeweler>, [">= 0"])
52
76
  s.add_dependency(%q<alphadecimal>, [">= 1.0.1"])
53
77
  s.add_dependency(%q<active_record>, [">= 0"])
54
78
  s.add_dependency(%q<shoulda>, [">= 0"])
data/test.rb CHANGED
@@ -5,17 +5,20 @@ require 'test/unit'
5
5
  require 'active_support'
6
6
  require 'shoulda'
7
7
  require 'rack/test'
8
- require 'shawty'
8
+ require 'pp'
9
+ require File.expand_path('../lib/shawty', __FILE__)
9
10
 
10
11
  class ShawtyTest < Test::Unit::TestCase
11
12
  include Rack::Test::Methods
13
+ include Shawty::Helpers
14
+ extend Shawty::Helpers
12
15
 
13
16
  def setup
14
17
  execute "DELETE FROM #{table_name}"
15
18
  end
16
19
 
17
20
  def app
18
- Sinatra::Application
21
+ Shawty
19
22
  end
20
23
 
21
24
  context "on GET to /" do
@@ -88,4 +91,4 @@ class ShawtyTest < Test::Unit::TestCase
88
91
  end
89
92
  end
90
93
  end
91
- end
94
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shawty-server
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
- - 2
10
- version: 1.1.2
9
+ - 3
10
+ version: 1.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jack Danger Canty
@@ -15,28 +15,126 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-05-04 00:00:00 -07:00
19
- default_executable:
18
+ date: 2012-07-11 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
- type: :runtime
23
- version_requirements: &id001 !ruby/object:Gem::Requirement
21
+ requirement: &id001 !ruby/object:Gem::Requirement
24
22
  none: false
25
23
  requirements:
26
24
  - - "="
27
25
  - !ruby/object:Gem::Version
28
- hash: 29
26
+ hash: 23
29
27
  segments:
30
28
  - 1
31
- - 2
32
- - 1
33
- version: 1.2.1
34
- requirement: *id001
29
+ - 0
30
+ - 0
31
+ version: 1.0.0
32
+ version_requirements: *id001
33
+ name: sinatra
34
+ type: :runtime
35
+ prerelease: false
36
+ - !ruby/object:Gem::Dependency
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ version_requirements: *id002
47
+ name: activerecord
48
+ type: :runtime
35
49
  prerelease: false
36
- name: rack
37
50
  - !ruby/object:Gem::Dependency
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ version_requirements: *id003
61
+ name: activesupport
62
+ type: :runtime
63
+ prerelease: false
64
+ - !ruby/object:Gem::Dependency
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
73
+ version: "0"
74
+ version_requirements: *id004
75
+ name: alphadecimal
76
+ type: :runtime
77
+ prerelease: false
78
+ - !ruby/object:Gem::Dependency
79
+ requirement: &id005 !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ hash: 3
85
+ segments:
86
+ - 0
87
+ version: "0"
88
+ version_requirements: *id005
89
+ name: pg
38
90
  type: :runtime
39
- version_requirements: &id002 !ruby/object:Gem::Requirement
91
+ prerelease: false
92
+ - !ruby/object:Gem::Dependency
93
+ requirement: &id006 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ hash: 3
99
+ segments:
100
+ - 0
101
+ version: "0"
102
+ version_requirements: *id006
103
+ name: rack-test
104
+ type: :development
105
+ prerelease: false
106
+ - !ruby/object:Gem::Dependency
107
+ requirement: &id007 !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - "="
111
+ - !ruby/object:Gem::Version
112
+ hash: 35
113
+ segments:
114
+ - 2
115
+ - 11
116
+ - 0
117
+ version: 2.11.0
118
+ version_requirements: *id007
119
+ name: shoulda
120
+ type: :development
121
+ prerelease: false
122
+ - !ruby/object:Gem::Dependency
123
+ requirement: &id008 !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ hash: 3
129
+ segments:
130
+ - 0
131
+ version: "0"
132
+ version_requirements: *id008
133
+ name: jeweler
134
+ type: :development
135
+ prerelease: false
136
+ - !ruby/object:Gem::Dependency
137
+ requirement: &id009 !ruby/object:Gem::Requirement
40
138
  none: false
41
139
  requirements:
42
140
  - - ">="
@@ -47,12 +145,12 @@ dependencies:
47
145
  - 0
48
146
  - 1
49
147
  version: 1.0.1
50
- requirement: *id002
51
- prerelease: false
148
+ version_requirements: *id009
52
149
  name: alphadecimal
150
+ type: :runtime
151
+ prerelease: false
53
152
  - !ruby/object:Gem::Dependency
54
- type: :development
55
- version_requirements: &id003 !ruby/object:Gem::Requirement
153
+ requirement: &id010 !ruby/object:Gem::Requirement
56
154
  none: false
57
155
  requirements:
58
156
  - - ">="
@@ -61,12 +159,12 @@ dependencies:
61
159
  segments:
62
160
  - 0
63
161
  version: "0"
64
- requirement: *id003
65
- prerelease: false
162
+ version_requirements: *id010
66
163
  name: active_record
67
- - !ruby/object:Gem::Dependency
68
164
  type: :development
69
- version_requirements: &id004 !ruby/object:Gem::Requirement
165
+ prerelease: false
166
+ - !ruby/object:Gem::Dependency
167
+ requirement: &id011 !ruby/object:Gem::Requirement
70
168
  none: false
71
169
  requirements:
72
170
  - - ">="
@@ -75,9 +173,10 @@ dependencies:
75
173
  segments:
76
174
  - 0
77
175
  version: "0"
78
- requirement: *id004
79
- prerelease: false
176
+ version_requirements: *id011
80
177
  name: shoulda
178
+ type: :development
179
+ prerelease: false
81
180
  description: Run your own url shortener add your own web address for free on Heroku.com
82
181
  email: gitcommit@6brand.com
83
182
  executables: []
@@ -89,16 +188,18 @@ extra_rdoc_files:
89
188
  - README.markdown
90
189
  files:
91
190
  - .gems
191
+ - Gemfile
192
+ - Gemfile.lock
92
193
  - LICENSE
93
194
  - README.markdown
94
195
  - Rakefile
95
196
  - VERSION
96
197
  - config.ru
97
198
  - config/database.yml
199
+ - lib/shawty.rb
200
+ - lib/shawty/helpers.rb
98
201
  - shawty-server.gemspec
99
- - shawty.rb
100
202
  - test.rb
101
- has_rdoc: true
102
203
  homepage: http://github.com/JackDanger/shawty-server
103
204
  licenses: []
104
205
 
@@ -128,7 +229,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
229
  requirements: []
129
230
 
130
231
  rubyforge_project:
131
- rubygems_version: 1.4.2
232
+ rubygems_version: 1.8.17
132
233
  signing_key:
133
234
  specification_version: 3
134
235
  summary: Ultra-lightweight url shortening server for Heroku.com
data/shawty.rb DELETED
@@ -1,106 +0,0 @@
1
- ## Resources
2
- require 'rubygems' # sorry @defunkt, this is easier
3
- gem 'sinatra', :version => '1.0'
4
- require 'sinatra'
5
- require 'active_record'
6
- gem 'alphadecimal'
7
- require 'alphadecimal'
8
-
9
-
10
-
11
- ## Application
12
-
13
- get '/' do
14
- %Q{
15
- <body style='line-height: 1.8em; font-family: Archer, Museo, Helvetica, Georgia; font-size 25px; text-align: center; padding-top: 20%;'>
16
- Post to '/' to save a url and receive a plaintext short url in response. Example:
17
- <pre style='font-family: Iconsolata, monospace;background-color:#EEE'>curl -X POST http://#{request.host}/http://some.url/at.someplace</pre>
18
- <br />
19
- <form action=/ method=POST onsubmit='if(\"\"==this.url.value)return false;else{this.action=\"/\"+this.url.value}'>
20
- <input type=text name='url' />
21
- <input type=submit value='Get Shawty' />
22
- </form>
23
- <small>Also, try <a href='http://github.com/JackDanger/shawty-client'>the official Ruby client</a></small>
24
- </body
25
- }
26
- end
27
-
28
- get '/:id' do
29
- url = select_column %Q{
30
- SELECT url FROM #{table_name}
31
- WHERE id = #{quote params[:id].alphadecimal.to_i}
32
- }
33
-
34
- pass unless url
35
-
36
- redirect url, 301
37
- end
38
-
39
- post '*' do
40
- url = request.env['REQUEST_URI'] || Array(params[:splat]).first
41
-
42
- url = url[1, url.size] if url =~ /^\//
43
-
44
- pass if url.nil? || '' == url
45
-
46
- quoted = quote url
47
-
48
- id = select_column %Q{ SELECT id FROM #{table_name} WHERE url = #{quoted} }
49
-
50
- id ||= select_column %Q{
51
- INSERT INTO #{table_name} (url, id) VALUES (#{quoted}, nextval('shawty_id_seq'))
52
- RETURNING id
53
- }
54
-
55
- "http://#{request.host}/#{id.to_i.alphadecimal}"
56
- end
57
-
58
-
59
- ## Helpers
60
-
61
- def select_column sql
62
- connection.select_rows(sql).flatten.first
63
- end
64
-
65
- def execute sql
66
- connection.execute sql
67
- end
68
-
69
- def quote string
70
- connection.quote string
71
- end
72
-
73
- def table_name
74
- connection.quote_table_name 'shawty'
75
- end
76
-
77
- def connection
78
- ActiveRecord::Base.connection
79
- end
80
-
81
- def initialize_database
82
- table = execute %Q{select * from pg_tables where tablename = #{quote 'shawty'}}
83
- return if table.any?
84
- execute %Q{
85
- CREATE TABLE #{table_name} (
86
- id SERIAL PRIMARY KEY,
87
- url varchar(255) UNIQUE
88
- )
89
- }
90
- end
91
-
92
- def database_config
93
- YAML.load(File.read('config/database.yml'))
94
- end
95
-
96
- def init(environment)
97
- ActiveRecord::Base.establish_connection database_config[environment]
98
- initialize_database
99
- end
100
-
101
-
102
- ## Environments
103
-
104
- configure :development do init 'development' end
105
- configure :test do init 'test' end
106
- configure :production do init 'production' end