firefly 1.5.0 → 1.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +0 -1
- data/Gemfile.lock +10 -2
- data/HISTORY +5 -0
- data/firefly.gemspec +1 -1
- data/lib/firefly/base62.rb +4 -3
- data/lib/firefly/code_factory.rb +1 -0
- data/lib/firefly/config.rb +6 -5
- data/lib/firefly/server.rb +17 -2
- data/lib/firefly/url.rb +1 -0
- data/lib/firefly/version.rb +2 -1
- data/lib/firefly.rb +1 -0
- data/spec/firefly/sharing_facebook_spec.rb +1 -1
- data/spec/firefly/sharing_hyves_spec.rb +9 -2
- data/spec/firefly/sharing_twitter_spec.rb +10 -1
- data/views/index.haml +2 -2
- metadata +10 -9
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
firefly (1.
|
4
|
+
firefly (1.5.0)
|
5
5
|
dm-aggregates (~> 1.0.2)
|
6
6
|
dm-core (~> 1.0.2)
|
7
7
|
dm-migrations (~> 1.0.2)
|
@@ -9,7 +9,7 @@ PATH
|
|
9
9
|
dm-transactions (~> 1.0.2)
|
10
10
|
escape_utils (~> 0.2.3)
|
11
11
|
haml (~> 3.0.18)
|
12
|
-
sinatra (~> 1.
|
12
|
+
sinatra (~> 1.2.3)
|
13
13
|
|
14
14
|
GEM
|
15
15
|
remote: http://rubygems.org/
|
@@ -65,7 +65,15 @@ PLATFORMS
|
|
65
65
|
|
66
66
|
DEPENDENCIES
|
67
67
|
database_cleaner (~> 0.6.6)
|
68
|
+
dm-aggregates (~> 1.0.2)
|
69
|
+
dm-core (~> 1.0.2)
|
70
|
+
dm-migrations (~> 1.0.2)
|
71
|
+
dm-mysql-adapter (~> 1.0.2)
|
68
72
|
dm-sqlite-adapter (~> 1.0.2)
|
73
|
+
dm-transactions (~> 1.0.2)
|
74
|
+
escape_utils (~> 0.2.3)
|
69
75
|
firefly!
|
76
|
+
haml (~> 3.0.18)
|
70
77
|
rack-test (~> 0.5.4)
|
71
78
|
rspec (~> 2.5.0)
|
79
|
+
sinatra (~> 1.2.3)
|
data/HISTORY
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
= 1.5.1 - 2011-04-22
|
2
|
+
|
3
|
+
* 2011-04-22 Truncate long URLs in the backend to preserve layout (issue #25) [ariejan]
|
4
|
+
* 2011-04-22 Accept URL encoded titles when sharing to Twitter and Hyves (issue #28) [ariejan]
|
5
|
+
|
1
6
|
= 1.5.0 - 2011-04-21
|
2
7
|
|
3
8
|
* 2011-04-21 Firefly is now compatible with ruby 1.8.7, 1.9.2 and ree-1.8 [ariejan]
|
data/firefly.gemspec
CHANGED
@@ -19,7 +19,7 @@ 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_runtime_dependency("sinatra", ["~> 1.
|
22
|
+
s.add_runtime_dependency("sinatra", ["~> 1.2.3"])
|
23
23
|
s.add_runtime_dependency("dm-core", ["~> 1.0.2"])
|
24
24
|
s.add_runtime_dependency("dm-migrations", ["~> 1.0.2"])
|
25
25
|
s.add_runtime_dependency("dm-transactions", ["~> 1.0.2"])
|
data/lib/firefly/base62.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
+
# encoding: UTF-8
|
1
2
|
module Firefly
|
2
3
|
class Base62
|
3
|
-
|
4
|
+
|
4
5
|
CHARS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split('')
|
5
6
|
BASE = 62
|
6
|
-
|
7
|
+
|
7
8
|
def self.encode(value)
|
8
9
|
s = []
|
9
10
|
while value >= BASE
|
@@ -23,4 +24,4 @@ module Firefly
|
|
23
24
|
total
|
24
25
|
end
|
25
26
|
end
|
26
|
-
end
|
27
|
+
end
|
data/lib/firefly/code_factory.rb
CHANGED
data/lib/firefly/config.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
+
# encoding: UTF-8
|
1
2
|
module Firefly
|
2
3
|
class Config < Hash
|
3
|
-
|
4
|
+
|
4
5
|
DEFAULTS = {
|
5
6
|
:hostname => "localhost:3000",
|
6
7
|
:api_key => "test",
|
@@ -10,12 +11,12 @@ module Firefly
|
|
10
11
|
:hyves_title => "Check this out",
|
11
12
|
:hyves_body => "Check this out: %short_url%"
|
12
13
|
}
|
13
|
-
|
14
|
+
|
14
15
|
def initialize obj
|
15
16
|
self.update DEFAULTS
|
16
17
|
self.update obj
|
17
|
-
end
|
18
|
-
|
18
|
+
end
|
19
|
+
|
19
20
|
def set key, val = nil, &blk
|
20
21
|
if val.is_a? Hash
|
21
22
|
self[key].update val
|
@@ -24,4 +25,4 @@ module Firefly
|
|
24
25
|
end
|
25
26
|
end
|
26
27
|
end
|
27
|
-
end
|
28
|
+
end
|
data/lib/firefly/server.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: UTF-8
|
1
2
|
require 'sinatra/base'
|
2
3
|
require 'haml'
|
3
4
|
require 'digest/md5'
|
@@ -38,6 +39,18 @@ module Firefly
|
|
38
39
|
session["firefly_session"] = Digest::MD5.hexdigest(key)
|
39
40
|
end
|
40
41
|
|
42
|
+
# Taken from Rails
|
43
|
+
def truncate(text, length, options = {})
|
44
|
+
options[:omission] ||= "..."
|
45
|
+
|
46
|
+
length_with_room_for_omission = length - options[:omission].length
|
47
|
+
chars = text
|
48
|
+
stop = options[:separator] ?
|
49
|
+
(chars.rindex(options[:separator], length_with_room_for_omission) || length_with_room_for_omission) : length_with_room_for_omission
|
50
|
+
|
51
|
+
(chars.length > length ? chars[0...stop] + options[:omission] : text).to_s
|
52
|
+
end
|
53
|
+
|
41
54
|
def has_valid_api_cookie?
|
42
55
|
key = session["firefly_session"]
|
43
56
|
key == Digest::MD5.hexdigest(config[:api_key])
|
@@ -191,11 +204,13 @@ module Firefly
|
|
191
204
|
@code, @result = generate_short_url(@url, nil)
|
192
205
|
invalid = @code.nil?
|
193
206
|
|
207
|
+
title = URI.unescape(params[:title])
|
208
|
+
|
194
209
|
case (params[:target].downcase.to_sym)
|
195
210
|
when :twitter
|
196
|
-
redirect(URI.escape("http://twitter.com/home?status=#{tweet("http://#{config[:hostname]}/#{@code}",
|
211
|
+
redirect(URI.escape("http://twitter.com/home?status=#{tweet("http://#{config[:hostname]}/#{@code}", title)}"))
|
197
212
|
when :hyves
|
198
|
-
redirect(URI.escape("http://www.hyves.nl/profielbeheer/toevoegen/tips/?#{hyves_post("http://#{config[:hostname]}/#{@code}",
|
213
|
+
redirect(URI.escape("http://www.hyves.nl/profielbeheer/toevoegen/tips/?#{hyves_post("http://#{config[:hostname]}/#{@code}", title)}"))
|
199
214
|
when :facebook
|
200
215
|
redirect(URI.escape("http://www.facebook.com/share.php?u=http://#{config[:hostname]}/#{@code}"))
|
201
216
|
end
|
data/lib/firefly/url.rb
CHANGED
data/lib/firefly/version.rb
CHANGED
data/lib/firefly.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
-
# encoding: UTF-8
|
3
2
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
4
3
|
|
5
4
|
describe "Sharing" do
|
@@ -19,7 +18,7 @@ describe "Sharing" do
|
|
19
18
|
end
|
20
19
|
|
21
20
|
[:post, :get].each do |verb|
|
22
|
-
describe "hyves" do
|
21
|
+
describe "hyves via #{verb.to_s.upcase}" do
|
23
22
|
it "should create a shortened URL" do
|
24
23
|
lambda {
|
25
24
|
self.send verb, '/api/share', @params
|
@@ -86,6 +85,14 @@ describe "Sharing" do
|
|
86
85
|
last_response['Location'].should_not include(URI.escape(title))
|
87
86
|
end
|
88
87
|
|
88
|
+
it "should strip the title from url encoded entities correctly" do
|
89
|
+
title = "Test%20post"
|
90
|
+
self.send verb, '/api/share', @params.merge(:title => title)
|
91
|
+
url = Firefly::Url.first(:url => @params[:url])
|
92
|
+
|
93
|
+
last_response['Location'].should include(URI.escape("Test post"))
|
94
|
+
last_response['Location'].should_not include(URI.escape(title))
|
95
|
+
end
|
89
96
|
|
90
97
|
it "should escape UTF-8 correctly" do
|
91
98
|
title = "Chávez"
|
@@ -18,7 +18,7 @@ describe "Sharing" do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
[:post, :get].each do |verb|
|
21
|
-
describe "twitter" do
|
21
|
+
describe "twitter via #{verb.to_s.upcase}" do
|
22
22
|
it "should create a shortened URL" do
|
23
23
|
lambda {
|
24
24
|
self.send verb, '/api/share', @params
|
@@ -82,6 +82,15 @@ describe "Sharing" do
|
|
82
82
|
last_response['Location'].should_not include(URI.escape(title))
|
83
83
|
end
|
84
84
|
|
85
|
+
it "should strip the title from url encoded entities correctly" do
|
86
|
+
title = "Test%20post"
|
87
|
+
self.send verb, '/api/share', @params.merge(:title => title)
|
88
|
+
url = Firefly::Url.first(:url => @params[:url])
|
89
|
+
|
90
|
+
last_response['Location'].should include(URI.escape("Test post http://test.host/#{url.code}"))
|
91
|
+
last_response['Location'].should_not include(URI.escape(title))
|
92
|
+
end
|
93
|
+
|
85
94
|
it "should escape UTF-8 correctly" do
|
86
95
|
title = "Chávez"
|
87
96
|
self.send verb, '/api/share', @params.merge(:title => title)
|
data/views/index.haml
CHANGED
@@ -32,7 +32,7 @@
|
|
32
32
|
%tr.highlighted
|
33
33
|
%td.value
|
34
34
|
%input{ :type => "text", :value => short_url(@highlight), :class => 'short_url', :size => 21 }
|
35
|
-
%td.value.fill <a href="#{@highlight.url}">#{@highlight.url}</a>
|
35
|
+
%td.value.fill <a href="#{@highlight.url}">#{truncate @highlight.url, 130}</a>
|
36
36
|
%td.value.center= @highlight.clicks
|
37
37
|
%td.value= @highlight.created_at.strftime("%Y-%m-%d %H:%M")
|
38
38
|
%td.value
|
@@ -52,7 +52,7 @@
|
|
52
52
|
%tr{ :class => is_highlighted?(url) ? 'highlighted' : '' }
|
53
53
|
%td.value
|
54
54
|
%input{ :type => "text", :value => short_url(url), :class => 'short_url', :size => 31 }
|
55
|
-
%td.value.fill <a href="#{url.url}">#{url.url}</a>
|
55
|
+
%td.value.fill <a href="#{url.url}">#{truncate url.url, 130}</a>
|
56
56
|
%td.value.center= url.clicks
|
57
57
|
%td.value= url.created_at.strftime("%Y-%m-%d %H:%M")
|
58
58
|
%td.value
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: firefly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 1
|
5
|
+
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 5
|
9
|
-
-
|
10
|
-
version: 1.5.
|
9
|
+
- 1
|
10
|
+
version: 1.5.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ariejan de Vroom
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-04-
|
18
|
+
date: 2011-04-22 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -26,11 +26,12 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
29
|
+
hash: 25
|
30
30
|
segments:
|
31
31
|
- 1
|
32
|
-
-
|
33
|
-
|
32
|
+
- 2
|
33
|
+
- 3
|
34
|
+
version: 1.2.3
|
34
35
|
type: :runtime
|
35
36
|
version_requirements: *id001
|
36
37
|
- !ruby/object:Gem::Dependency
|
@@ -287,7 +288,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
287
288
|
requirements: []
|
288
289
|
|
289
290
|
rubyforge_project: firefly
|
290
|
-
rubygems_version: 1.
|
291
|
+
rubygems_version: 1.3.7
|
291
292
|
signing_key:
|
292
293
|
specification_version: 3
|
293
294
|
summary: Firefly is your own personal URL shortener for your own domain.
|