tg-firefly 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,11 @@
1
+ one:
2
+ url: http://example.com/
3
+ code: abc
4
+ clicks: 123
5
+ created_at: 2010-04-01 12:00:00
6
+
7
+ two:
8
+ url: http://example.org/
9
+ code: def
10
+ clicks: 456
11
+ created_at: 2010-02-24 14:55:00
@@ -0,0 +1,4 @@
1
+ --colour
2
+ --format progress
3
+ --loadby mtime
4
+ --reverse
@@ -0,0 +1,54 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'firefly.rb')
2
+
3
+ require "bundler/setup"
4
+
5
+ require 'sinatra'
6
+ require 'rack/test'
7
+ require 'yaml'
8
+ require 'database_cleaner'
9
+
10
+ # set test environment
11
+ set :environment, :test
12
+ set :run, false
13
+ set :raise_errors, true
14
+ set :logging, false
15
+
16
+ @@app = Firefly::Server.new do
17
+ set :hostname, "test.host"
18
+ set :api_key, "test"
19
+ set :database, "mysql://root@localhost/firefly-test"
20
+
21
+ set :sharing_key, "asdfasdf"
22
+ set :sharing_targets, [:twitter, :hyves, :facebook]
23
+ set :sharing_domains, ["example.com", "example.net"]
24
+ end
25
+
26
+ RSpec.configure do |config|
27
+
28
+ config.before(:suite) do
29
+ DatabaseCleaner.strategy = :truncation
30
+ DatabaseCleaner.clean_with(:truncation)
31
+ Firefly::CodeFactory.create(:count => 0)
32
+ end
33
+
34
+ config.before(:each) do
35
+ DatabaseCleaner.start
36
+ end
37
+
38
+ config.after(:each) do
39
+ DatabaseCleaner.clean
40
+ Firefly::CodeFactory.create(:count => 0)
41
+ end
42
+
43
+ # Loads the urls.yml fixtures.
44
+ def load_fixtures
45
+ Firefly::Url.destroy
46
+ urls = YAML::load(File.open('spec/fixtures/urls.yml'))
47
+ urls.each { |key, url| Firefly::Url.create(url) }
48
+ end
49
+
50
+ # Load a spec file and return its contents
51
+ def spec_file(filename)
52
+ File.open('spec/files/'+filename) { |f| f.read }
53
+ end
54
+ end
@@ -0,0 +1,11 @@
1
+ %h1 Whoops!
2
+
3
+ %p
4
+ There was an error processing your request:
5
+
6
+ %p
7
+ %blockquote
8
+ = @result
9
+
10
+ %p
11
+ %a(href='/') Go back
@@ -0,0 +1,80 @@
1
+ - if true #@authenticated
2
+ .sidebox
3
+ %h2 Bookmarklet
4
+
5
+ %p
6
+ Drag the following link to your bookmarks. Click it to shorten the URL to the page you're currently viewing.
7
+ %p
8
+ %a{ :href => "javascript:var%20d=document,w=window,enc=encodeURIComponent,e=w.getSelection,k=d.getSelection,x=d.selection,s=(e?e():(k)?k():(x?x.createRange().text:0)),s2=((s.toString()=='')?s:('%22'+enc(s)+'%22')),key=enc('#{@config[:api_key]}'),f='http://#{@config[:hostname]}/api/add',l=d.location,p='?visual=1&api_key='+key+'&url='+enc(l.href),u=f+p;try{if(!/^(.*\.)?tumblrzzz[^.]*$/.test(l.host))throw(0);tstbklt();}catch(z){a%20=function(){if(!w.open(u))l.href=u;};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else%20a();}void(0)" } Shorten with #{@config[:hostname]}
9
+
10
+ %h1 How about shortening a URL?
11
+
12
+ .the_form
13
+ %form{ :action => '/api/add', :method => 'post' }
14
+ %input{ :type => "hidden", :name => "visual", :value => "1" }
15
+ %p
16
+ %input.big_url{ :type => 'text', :placeholder => "Paste your long URL here...", :name => 'url', :id => 'url', :size => 40, :spellcheck => 'false' }
17
+ %span{ :style => "font-size: 1.8em;" }= '?'
18
+ %input.big_url{ :type => 'text', :placeholder => "User ID", :name => 'user_id', :id => 'user_id', :size => 4, :spellcheck => 'false' }
19
+ %span{ :style => "font-size: 1.8em;" }= '>'
20
+ %input.big_url{ :type => 'text', :placeholder => "Optional code", :name => 'short', :id => 'short', :size => 16, :spellcheck => 'false' }
21
+ %p
22
+ %input.big_url{ :type => 'submit', :name => 'submit', :id => 'submit', :value => "Make it short!" }
23
+
24
+ %h2 Recently shortened
25
+
26
+ %table
27
+ %tr
28
+ %td.label(nowrap='nowrap') Short URL <a href="/?s=code&d=asc">▲</a> <a href="/?s=code&d=desc">▼</a>
29
+ %td.label(nowrap='nowrap') Full URL <a href="/?s=url&d=asc">▲</a> <a href="/?s=url&d=desc">▼</a>
30
+ %td.label(nowrap='nowrap') User ID
31
+ %td.label(nowrap='nowrap') Clicks <a href="/?s=clicks&d=asc">▲</a> <a href="/?s=clicks&d=desc">▼</a>
32
+ %td.label(nowrap='nowrap') Shortened At <a href="/?s=created_at&d=asc">▲</a> <a href="/?s=created_at&d=desc">▼</a>
33
+ %td.label &nbsp;
34
+ - @urls.each do |url|
35
+ %tr{ :class => is_highlighted?(url) ? 'highlighted' : '' }
36
+ %td.value
37
+ %input{ :type => "text", :value => short_url(url), :class => 'short_url', :size => 31 }
38
+ %td.value.fill <a href="#{url.url}">#{truncate url.url, 130}</a>
39
+ %td.value= url.user_id
40
+ %td.value.center= url.clicks
41
+ %td.value= url.created_at.strftime("%Y-%m-%d %H:%M")
42
+ %td.value.actions
43
+ - if @config[:sharing_targets].include? :twitter
44
+ %a.twitter{ :href => twitter(short_url(url)) }
45
+ - if @config[:sharing_targets].include? :facebook
46
+ %a.facebook{ :href => facebook(short_url(url)) }
47
+ - if @config[:sharing_targets].include? :hyves
48
+ %a.hyves{ :href => hyves(short_url(url)) }
49
+ %a.qrcode{ :href => "#{short_url(url)}.png" }
50
+
51
+ :javascript
52
+ $(document).ready(function() {
53
+ $('input.short_url').each(function(index) {
54
+ $(this).mouseup(function() { $(this).select(); });
55
+ });
56
+
57
+ if (window.location.search == "") {
58
+ var pathname = window.location.pathname + '?s=created_at&d=desc';
59
+ } else {
60
+ var pathname = window.location.pathname + window.location.search;
61
+ }
62
+
63
+ $('#main table tr td.label a').each(function(index) {
64
+ if ($(this).attr('href') == pathname) {
65
+ $(this).addClass('highlight');
66
+ }
67
+ });
68
+ });
69
+ - else
70
+ %h1 Please enter your API key
71
+
72
+ %p
73
+ Please enter your API key below to make sure only you can shorten URLs here.
74
+
75
+ %form{ :action => '/api/set', :method => 'post' }
76
+ %p
77
+ %label{ :for => 'api_key' } API Key
78
+ %input{ :type => 'password', :name => 'api_key', :id => 'api_key' }
79
+ %p
80
+ %input{ :type => 'submit', :name => 'submit', :id => 'submit', :value => "Let me in" }
@@ -0,0 +1,28 @@
1
+ %p.link
2
+ %a{ :href => "/" } &laquo; Back
3
+
4
+ %h1 http://#{@config[:hostname]}/#{@url.code}
5
+
6
+ %table
7
+ %tr
8
+ %td.label Short URL
9
+ %td.label Full URL
10
+ %td.label User ID
11
+ %td.label Clicks
12
+ %td.label Shortened at
13
+
14
+ %tr
15
+ %td.value
16
+ %input{ :type => "text", :value => short_url(@url), :class => 'short_url', :size => 21 }
17
+ %td.value.fill <a href="#{@url.url}">#{@url.url}</a>
18
+ %td.value= @url.user_id
19
+ %td.value.center= @url.clicks
20
+ %td.value= @url.created_at.strftime("%Y-%m-%d %H:%M")
21
+
22
+ :javascript
23
+ $(document).ready(function() {
24
+ $('input.short_url').each(function(index) {
25
+ $(this).mouseup(function() { $(this).select(); });
26
+ });
27
+ });
28
+
@@ -0,0 +1,21 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %title #{@title}
5
+ %meta(charset="UTF-8")
6
+ %link{ :rel => "stylesheet", :href => u('reset.css') }
7
+ %link{ :rel => "stylesheet", :href => u('style.css') }
8
+ %script{ :type => "text/javascript", :src => u('jquery-1.4.2.min.js') }
9
+ %body
10
+ .header
11
+ .logo
12
+ %img{ :src => "http://www.tugg.com/images/logo.png" }
13
+ /
14
+ %h1= @title
15
+
16
+ #main
17
+ = yield
18
+
19
+ #footer
20
+ %p
21
+ Powered by <a href="http://github.com/ariejan/firefly">Firefly</a> v#{Firefly::VERSION} | <a href="http://github.com/ariejan/firefly/tree/v#{Firefly::VERSION}">Original Source</a> | <a href="http://github.com/lukewendling/firefly">Modified Source</a>
metadata ADDED
@@ -0,0 +1,242 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tg-firefly
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Luke Wendling
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-07 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sinatra
16
+ requirement: &79871000 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.3.2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *79871000
25
+ - !ruby/object:Gem::Dependency
26
+ name: sinatra-contrib
27
+ requirement: &79870730 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 1.3.1
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *79870730
36
+ - !ruby/object:Gem::Dependency
37
+ name: dm-core
38
+ requirement: &79870500 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 1.2.0
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *79870500
47
+ - !ruby/object:Gem::Dependency
48
+ name: dm-migrations
49
+ requirement: &79870270 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.2.0
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *79870270
58
+ - !ruby/object:Gem::Dependency
59
+ name: dm-transactions
60
+ requirement: &79848070 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 1.2.0
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *79848070
69
+ - !ruby/object:Gem::Dependency
70
+ name: dm-aggregates
71
+ requirement: &79847810 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: 1.2.0
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *79847810
80
+ - !ruby/object:Gem::Dependency
81
+ name: dm-mysql-adapter
82
+ requirement: &79847520 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: 1.2.0
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: *79847520
91
+ - !ruby/object:Gem::Dependency
92
+ name: haml
93
+ requirement: &79847230 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ~>
97
+ - !ruby/object:Gem::Version
98
+ version: 3.1.4
99
+ type: :runtime
100
+ prerelease: false
101
+ version_requirements: *79847230
102
+ - !ruby/object:Gem::Dependency
103
+ name: escape_utils
104
+ requirement: &79846940 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 0.2.4
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: *79846940
113
+ - !ruby/object:Gem::Dependency
114
+ name: thin
115
+ requirement: &79846690 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :runtime
122
+ prerelease: false
123
+ version_requirements: *79846690
124
+ - !ruby/object:Gem::Dependency
125
+ name: rspec
126
+ requirement: &79846360 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: 2.8.0
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: *79846360
135
+ - !ruby/object:Gem::Dependency
136
+ name: rack-test
137
+ requirement: &79846020 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ~>
141
+ - !ruby/object:Gem::Version
142
+ version: 0.6.1
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: *79846020
146
+ - !ruby/object:Gem::Dependency
147
+ name: dm-sqlite-adapter
148
+ requirement: &79845730 !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ~>
152
+ - !ruby/object:Gem::Version
153
+ version: 1.2.0
154
+ type: :development
155
+ prerelease: false
156
+ version_requirements: *79845730
157
+ - !ruby/object:Gem::Dependency
158
+ name: database_cleaner
159
+ requirement: &79845440 !ruby/object:Gem::Requirement
160
+ none: false
161
+ requirements:
162
+ - - ~>
163
+ - !ruby/object:Gem::Version
164
+ version: 0.7.1
165
+ type: :development
166
+ prerelease: false
167
+ version_requirements: *79845440
168
+ description: A URL shortener forked from ariejan/firefly project. Adds user context
169
+ to click tracking
170
+ email:
171
+ - luke@example.com
172
+ executables: []
173
+ extensions: []
174
+ extra_rdoc_files: []
175
+ files:
176
+ - .gitignore
177
+ - .rspec
178
+ - .travis.yml
179
+ - Gemfile
180
+ - Gemfile.lock
181
+ - LICENSE
182
+ - README.md
183
+ - Rakefile
184
+ - config.ru.example
185
+ - firefly.gemspec
186
+ - lib/firefly.rb
187
+ - lib/firefly/base62.rb
188
+ - lib/firefly/click.rb
189
+ - lib/firefly/code_factory.rb
190
+ - lib/firefly/config.rb
191
+ - lib/firefly/server.rb
192
+ - lib/firefly/share.rb
193
+ - lib/firefly/url.rb
194
+ - lib/firefly/version.rb
195
+ - public/favicon.ico
196
+ - public/images/facebook.png
197
+ - public/images/hyves.png
198
+ - public/images/qrcode.png
199
+ - public/images/twitter.png
200
+ - public/jquery-1.4.2.min.js
201
+ - public/reset.css
202
+ - public/style.css
203
+ - spec/firefly/api_spec.rb
204
+ - spec/firefly/base62_spec.rb
205
+ - spec/firefly/code_factory_spec.rb
206
+ - spec/firefly/server_spec.rb
207
+ - spec/firefly/sharing_facebook_spec.rb
208
+ - spec/firefly/sharing_hyves_spec.rb
209
+ - spec/firefly/sharing_twitter_spec.rb
210
+ - spec/firefly/url_spec.rb
211
+ - spec/fixtures/urls.yml
212
+ - spec/spec.opts
213
+ - spec/spec_helper.rb
214
+ - views/error.haml
215
+ - views/index.haml
216
+ - views/info.haml
217
+ - views/layout.haml
218
+ homepage: https://github.com/lukewendling/firefly
219
+ licenses: []
220
+ post_install_message:
221
+ rdoc_options: []
222
+ require_paths:
223
+ - lib
224
+ required_ruby_version: !ruby/object:Gem::Requirement
225
+ none: false
226
+ requirements:
227
+ - - ! '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ required_rubygems_version: !ruby/object:Gem::Requirement
231
+ none: false
232
+ requirements:
233
+ - - ! '>='
234
+ - !ruby/object:Gem::Version
235
+ version: '0'
236
+ requirements: []
237
+ rubyforge_project:
238
+ rubygems_version: 1.8.10
239
+ signing_key:
240
+ specification_version: 3
241
+ summary: A URL shortener with user tracking
242
+ test_files: []