murlsh 1.0.0 → 1.1.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.
- data/.htaccess +5 -0
- data/COPYING +27 -0
- data/README.textile +2 -2
- data/Rakefile +133 -66
- data/VERSION +1 -1
- data/config.ru +9 -8
- data/config.yaml +3 -2
- data/lib/murlsh/auth.rb +6 -8
- data/lib/murlsh/config_server.rb +4 -6
- data/lib/murlsh/dispatch.rb +5 -7
- data/lib/murlsh/doc.rb +1 -1
- data/lib/murlsh/etag_add_encoding.rb +1 -3
- data/lib/murlsh/failproof.rb +0 -1
- data/lib/murlsh/far_future_expires.rb +2 -4
- data/lib/murlsh/head_from_get.rb +2 -2
- data/lib/murlsh/image_list.rb +32 -0
- data/lib/murlsh/img_store.rb +47 -9
- data/lib/murlsh/markup.rb +53 -20
- data/lib/murlsh/must_revalidate.rb +2 -4
- data/lib/murlsh/plugin.rb +1 -1
- data/lib/murlsh/sqlite3_adapter.rb +2 -4
- data/lib/murlsh/time_ago.rb +6 -8
- data/lib/murlsh/uri.rb +1 -3
- data/lib/murlsh/uri_ask.rb +23 -25
- data/lib/murlsh/url.rb +4 -6
- data/lib/murlsh/url_body.rb +19 -21
- data/lib/murlsh/url_server.rb +8 -10
- data/lib/murlsh/yaml_ordered_hash.rb +2 -4
- data/lib/murlsh.rb +21 -4
- data/murlsh.gemspec +95 -90
- data/plugins/add_post_50_update_feed.rb +22 -10
- data/plugins/add_post_50_update_podcast.rb +3 -5
- data/plugins/add_post_50_update_rss.rb +4 -6
- data/plugins/add_post_60_notify_hubs.rb +3 -5
- data/plugins/add_pre_40_convert_mobile.rb +4 -10
- data/plugins/add_pre_50_lookup_content_type_title.rb +4 -6
- data/plugins/add_pre_60_flickr.rb +3 -14
- data/plugins/add_pre_60_github_title.rb +4 -6
- data/plugins/add_pre_60_google_code_title.rb +4 -6
- data/plugins/add_pre_60_imgur.rb +4 -16
- data/plugins/add_pre_60_s3_image.rb +7 -6
- data/plugins/add_pre_60_twitter.rb +3 -14
- data/plugins/add_pre_60_vimeo.rb +7 -6
- data/plugins/add_pre_60_youtube.rb +8 -7
- data/plugins/add_pre_65_html_thumb.rb +41 -0
- data/plugins/add_pre_65_img_thumb.rb +39 -0
- data/plugins/html_parse_50_hpricot.rb +2 -4
- data/plugins/url_display_add_45_audio.rb +28 -0
- data/plugins/url_display_add_50_hostrec.rb +15 -18
- data/plugins/url_display_add_55_content_type.rb +6 -8
- data/plugins/url_display_add_60_via.rb +12 -19
- data/plugins/url_display_add_65_time.rb +4 -6
- data/public/css/screen.css +2 -3
- data/public/img/thumb/.gitignore +3 -0
- data/public/js/jquery-1.4.4.min.js +167 -0
- data/public/js/js.js +6 -5
- data/public/js/{twitter-text-1.0.3.js → twitter-text-1.0.4.js} +3 -1
- data/spec/auth_spec.rb +4 -6
- data/spec/dispatch_spec.rb +3 -5
- data/spec/doc_spec.rb +2 -4
- data/spec/img_store_spec.rb +46 -20
- data/spec/markup_spec.rb +22 -24
- data/spec/uri_ask_spec.rb +5 -7
- data/spec/uri_spec.rb +2 -4
- data/spec/url_spec.rb +5 -9
- data/spec/yaml_ordered_hash_spec.rb +1 -3
- metadata +85 -53
- data/.gitignore +0 -6
- data/plugins/add_pre_60_imageshack.rb +0 -31
- data/plugins/url_display_add_45_mp3.rb +0 -30
- data/public/img/thumb/README +0 -0
- data/public/js/jquery-1.4.3.min.js +0 -166
- data/public/swf/player_mp3_mini.swf +0 -0
data/lib/murlsh/markup.rb
CHANGED
@@ -9,8 +9,8 @@ module Murlsh
|
|
9
9
|
# * :prefix - prefix to append to all script urls
|
10
10
|
def javascript(sources, options={})
|
11
11
|
[*sources].each do |src|
|
12
|
-
script
|
13
|
-
:src => "#{options[:prefix]}#{src}"
|
12
|
+
script '', :type => 'text/javascript',
|
13
|
+
:src => "#{options[:prefix]}#{src}"
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -24,23 +24,24 @@ module Murlsh
|
|
24
24
|
#
|
25
25
|
# Any other options in hash will be added as attributes.
|
26
26
|
def murlsh_img(options={})
|
27
|
-
img_convert_prefix
|
28
|
-
img_convert_size
|
29
|
-
img_convert_text
|
27
|
+
img_convert_prefix options
|
28
|
+
img_convert_size options
|
29
|
+
img_convert_text options
|
30
|
+
img_convert_data_uri options
|
30
31
|
|
31
32
|
if options[:href]
|
32
33
|
a(:href => options[:href]) {
|
33
|
-
options.delete
|
34
|
-
img
|
34
|
+
options.delete :href
|
35
|
+
img options
|
35
36
|
}
|
36
37
|
else
|
37
|
-
img
|
38
|
+
img options
|
38
39
|
end
|
39
40
|
end
|
40
41
|
|
41
42
|
# ATOM feed link builder.
|
42
43
|
def atom(href)
|
43
|
-
link
|
44
|
+
link :rel => 'alternate', :type => 'application/atom+xml', :href => href
|
44
45
|
end
|
45
46
|
|
46
47
|
# CSS link builder.
|
@@ -54,14 +55,14 @@ module Murlsh
|
|
54
55
|
:href => "#{options[:prefix]}#{href}",
|
55
56
|
:rel => 'stylesheet',
|
56
57
|
}
|
57
|
-
attrs[:media] = options[:media]
|
58
|
-
link
|
58
|
+
attrs[:media] = options[:media] if options[:media]
|
59
|
+
link attrs
|
59
60
|
end
|
60
61
|
end
|
61
62
|
|
62
63
|
# Meta tag builder. Takes a hash of name => content.
|
63
64
|
def metas(tags)
|
64
|
-
tags.each { |k,v| meta
|
65
|
+
tags.each { |k,v| meta :name => k, :content => v }
|
65
66
|
end
|
66
67
|
|
67
68
|
# Gravatar builder. Takes MD5 hash of email address.
|
@@ -76,19 +77,19 @@ module Murlsh
|
|
76
77
|
(k == 'r' and %w{g pg r x}.include?(v)))
|
77
78
|
end
|
78
79
|
|
79
|
-
return
|
80
|
+
return if query['s'] and query['s'] < 1
|
80
81
|
|
81
|
-
options.reject! { |k,v| %w{d s r}.include?
|
82
|
+
options.reject! { |k,v| %w{d s r}.include? k }
|
82
83
|
options[:src] = URI.join('http://www.gravatar.com/avatar/',
|
83
84
|
email_hash + build_query(query))
|
84
85
|
|
85
|
-
murlsh_img
|
86
|
+
murlsh_img options
|
86
87
|
end
|
87
88
|
|
88
89
|
# Query string builder. Takes hash of query string variables.
|
89
90
|
def build_query(h)
|
90
91
|
h.empty? ? '' :
|
91
|
-
'?' + h.map { |k,v| URI.escape
|
92
|
+
'?' + h.map { |k,v| URI.escape "#{k}=#{v}" }.join('&')
|
92
93
|
end
|
93
94
|
|
94
95
|
# Form input builder.
|
@@ -101,7 +102,7 @@ module Murlsh
|
|
101
102
|
options[:name] ||= options[:id]
|
102
103
|
end
|
103
104
|
|
104
|
-
options.delete
|
105
|
+
options.delete :label
|
105
106
|
|
106
107
|
input({
|
107
108
|
:type => 'text',
|
@@ -113,7 +114,7 @@ module Murlsh
|
|
113
114
|
def img_convert_prefix(options)
|
114
115
|
if options.has_key?(:prefix) and options.has_key?(:src)
|
115
116
|
options[:src] = options[:prefix] + options[:src]
|
116
|
-
options.delete
|
117
|
+
options.delete :prefix
|
117
118
|
end
|
118
119
|
end
|
119
120
|
|
@@ -124,14 +125,46 @@ module Murlsh
|
|
124
125
|
else
|
125
126
|
options[:width] = options[:height] = options[:size]
|
126
127
|
end
|
127
|
-
options.delete
|
128
|
+
options.delete :size
|
128
129
|
end
|
129
130
|
end
|
130
131
|
|
131
132
|
def img_convert_text(options)
|
132
133
|
if options.has_key?(:text)
|
133
134
|
options[:alt] = options[:title] = options[:text]
|
134
|
-
options.delete
|
135
|
+
options.delete :text
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
# If given options[:data_uri_prefix], render the image as a data uri with
|
140
|
+
# the base64 encoded image data directly in the src attribute.
|
141
|
+
#
|
142
|
+
# Only works if options[:src] is a relative url.
|
143
|
+
#
|
144
|
+
# Local image file path is site root (current working directory) +
|
145
|
+
# options[:data_uri_prefix] + options[:src].
|
146
|
+
#
|
147
|
+
# Options:
|
148
|
+
# * :src - image src
|
149
|
+
# * :data_uri_prefix - prefix for finding images on local filesystem
|
150
|
+
# * :max_size - images larger than this will not be converted to data uris
|
151
|
+
def img_convert_data_uri(options)
|
152
|
+
if options[:data_uri_prefix]
|
153
|
+
Murlsh::failproof do
|
154
|
+
# try to prevent getting outside current working directory
|
155
|
+
img_path = File.join(Dir.getwd, File.expand_path(
|
156
|
+
File.join(options[:data_uri_prefix], options[:src]), '/'))
|
157
|
+
img_size = File.size(img_path)
|
158
|
+
|
159
|
+
unless size == 0 or
|
160
|
+
(options[:max_size] and size > options[:max_size])
|
161
|
+
options[:src] = Magick::ImageList.new(img_path).extend(
|
162
|
+
Murlsh::ImageList).data_uri
|
163
|
+
|
164
|
+
options.delete :data_uri_prefix
|
165
|
+
options.delete :max_size
|
166
|
+
end
|
167
|
+
end
|
135
168
|
end
|
136
169
|
end
|
137
170
|
|
data/lib/murlsh/plugin.rb
CHANGED
@@ -21,7 +21,7 @@ module Murlsh
|
|
21
21
|
|
22
22
|
# Get registered plugins by hook (add_pre, add_post, etc.)
|
23
23
|
def self.hooks(name)
|
24
|
-
matches = registered.
|
24
|
+
matches = registered.find_all { |p| p.hook == name }.
|
25
25
|
sort { |a,b| a.to_s <=> b.to_s }
|
26
26
|
|
27
27
|
if block_given?
|
@@ -1,10 +1,8 @@
|
|
1
|
-
|
2
|
-
active_record/connection_adapters/sqlite3_adapter
|
3
|
-
}.each { |m| require m }
|
1
|
+
require 'active_record/connection_adapters/sqlite3_adapter'
|
4
2
|
|
5
3
|
class ActiveRecord::ConnectionAdapters::SQLite3Adapter
|
6
4
|
|
7
|
-
# Add
|
5
|
+
# Add MURLSHMATCH function for regex matching.
|
8
6
|
def initialize(connection, logger, config)
|
9
7
|
super
|
10
8
|
@connection.create_function('MURLSHMATCH', 2) do |func,search_in,search_for|
|
data/lib/murlsh/time_ago.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
time
|
3
|
-
}.each { |m| require m }
|
1
|
+
require 'time'
|
4
2
|
|
5
3
|
module Murlsh
|
6
4
|
|
@@ -13,11 +11,11 @@ module Murlsh
|
|
13
11
|
days_ago = (Time.now.to_i - to_i) / 86400
|
14
12
|
|
15
13
|
case days_ago
|
16
|
-
when 0
|
17
|
-
when 1
|
18
|
-
when (2..4)
|
19
|
-
when (5..7)
|
20
|
-
when (8..180)
|
14
|
+
when 0; 'today'
|
15
|
+
when 1; 'yesterday'
|
16
|
+
when (2..4); "#{days_ago} days ago"
|
17
|
+
when (5..7); strftime('%a %e %b')
|
18
|
+
when (8..180); strftime('%e %b').strip
|
21
19
|
else strftime('%e %b %Y').strip
|
22
20
|
end
|
23
21
|
end
|
data/lib/murlsh/uri.rb
CHANGED
data/lib/murlsh/uri_ask.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
|
-
|
2
|
-
net/
|
3
|
-
|
4
|
-
|
5
|
-
uri
|
1
|
+
require 'net/http'
|
2
|
+
require 'net/https'
|
3
|
+
require 'open-uri'
|
4
|
+
require 'uri'
|
6
5
|
|
7
|
-
hpricot
|
8
|
-
htmlentities
|
9
|
-
iconv
|
10
|
-
}.each { |m| require m }
|
6
|
+
require 'hpricot'
|
7
|
+
require 'htmlentities'
|
8
|
+
require 'iconv'
|
11
9
|
|
12
10
|
module Murlsh
|
13
11
|
|
@@ -19,14 +17,14 @@ module Murlsh
|
|
19
17
|
# Options:
|
20
18
|
# * :failproof - if true hide all exceptions and return empty string on failure
|
21
19
|
# * :headers - hash of headers to send in request
|
22
|
-
def content_length(options={}); header
|
20
|
+
def content_length(options={}); header 'content-length', options; end
|
23
21
|
|
24
22
|
# Get the content type.
|
25
23
|
#
|
26
24
|
# Options:
|
27
25
|
# * :failproof - if true hide all exceptions and return empty string on failure
|
28
26
|
# * :headers - hash of headers to send in request
|
29
|
-
def content_type(options={}); header
|
27
|
+
def content_type(options={}); header 'content-type', options; end
|
30
28
|
|
31
29
|
# Get the HTML title.
|
32
30
|
#
|
@@ -34,15 +32,13 @@ module Murlsh
|
|
34
32
|
# * :failproof - if true hide all exceptions and return url on failure
|
35
33
|
# * :headers - hash of headers to send in request
|
36
34
|
def title(options={})
|
37
|
-
return @title
|
35
|
+
return @title if defined?(@title)
|
38
36
|
|
39
37
|
@title = to_s
|
40
38
|
|
41
39
|
d = doc(options)
|
42
40
|
|
43
|
-
if d and d.title and
|
44
|
-
@title = decode(d.title)
|
45
|
-
end
|
41
|
+
if d and d.title and not d.title.empty?; @title = decode(d.title); end
|
46
42
|
|
47
43
|
@title
|
48
44
|
end
|
@@ -53,13 +49,13 @@ module Murlsh
|
|
53
49
|
# * :failproof - if true hide all exceptions and return empty string on failure
|
54
50
|
# * :headers - hash of headers to send in request
|
55
51
|
def description(options={})
|
56
|
-
return @description
|
52
|
+
return @description if defined?(@description)
|
57
53
|
|
58
54
|
@description = ''
|
59
55
|
|
60
56
|
d = doc(options)
|
61
57
|
|
62
|
-
if d and d.description and
|
58
|
+
if d and d.description and not d.description.empty?
|
63
59
|
@description = decode(d.description)
|
64
60
|
end
|
65
61
|
|
@@ -75,7 +71,7 @@ module Murlsh
|
|
75
71
|
# * :failproof - if true hide all exceptions and return empty string on failure
|
76
72
|
# * :headers - hash of headers to send in request
|
77
73
|
def doc(options={})
|
78
|
-
return @doc
|
74
|
+
return @doc if defined?(@doc)
|
79
75
|
options[:headers] = default_headers.merge(options.fetch(:headers, {}))
|
80
76
|
|
81
77
|
@doc = nil
|
@@ -93,6 +89,7 @@ module Murlsh
|
|
93
89
|
end
|
94
90
|
end
|
95
91
|
end
|
92
|
+
|
96
93
|
@doc
|
97
94
|
end
|
98
95
|
|
@@ -109,10 +106,10 @@ module Murlsh
|
|
109
106
|
result
|
110
107
|
end
|
111
108
|
|
109
|
+
HtmlContentTypePattern = %r{^text/html}i
|
110
|
+
|
112
111
|
# Return true if the content type is HTML.
|
113
|
-
def html?(options={})
|
114
|
-
content_type(options)[/^text\/html/]
|
115
|
-
end
|
112
|
+
def html?(options={}); content_type(options)[HtmlContentTypePattern]; end
|
116
113
|
|
117
114
|
# Convert from the character set of this url to utf-8 and decode HTML
|
118
115
|
# entities.
|
@@ -127,7 +124,7 @@ module Murlsh
|
|
127
124
|
# * :headers - hash of headers to send in request
|
128
125
|
def header(header_name, options={})
|
129
126
|
result = [*head_headers(options)[header_name]][0]
|
130
|
-
result = get_headers(options)[header_name]
|
127
|
+
result = get_headers(options)[header_name] if not result or result.empty?
|
131
128
|
result || ''
|
132
129
|
end
|
133
130
|
|
@@ -139,7 +136,7 @@ module Murlsh
|
|
139
136
|
# * :failproof - if true hide all exceptions and return empty hash on failure
|
140
137
|
# * :headers - hash of headers to send in request
|
141
138
|
def head_headers(options={})
|
142
|
-
return @head_headers
|
139
|
+
return @head_headers if defined?(@head_headers)
|
143
140
|
|
144
141
|
request_headers = default_headers.merge(options.fetch(:headers, {}))
|
145
142
|
|
@@ -153,8 +150,8 @@ module Murlsh
|
|
153
150
|
if Net::HTTPSuccess === resp
|
154
151
|
response_headers = resp.to_hash
|
155
152
|
end
|
156
|
-
|
157
153
|
end
|
154
|
+
|
158
155
|
@head_headers = response_headers
|
159
156
|
end
|
160
157
|
|
@@ -166,7 +163,7 @@ module Murlsh
|
|
166
163
|
# * :failproof - if true hide all exceptions and return empty hash on failure
|
167
164
|
# * :headers - hash of headers to send in request
|
168
165
|
def get_headers(options={})
|
169
|
-
return @get_headers
|
166
|
+
return @get_headers if defined?(@get_headers)
|
170
167
|
|
171
168
|
request_headers = default_headers.merge(options.fetch(:headers, {}))
|
172
169
|
|
@@ -175,6 +172,7 @@ module Murlsh
|
|
175
172
|
Murlsh::failproof(options) do
|
176
173
|
response_headers = self.open(request_headers) { |f| f.meta }
|
177
174
|
end
|
175
|
+
|
178
176
|
@get_headers = response_headers
|
179
177
|
end
|
180
178
|
|
data/lib/murlsh/url.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
|
2
|
-
uri
|
1
|
+
require 'uri'
|
3
2
|
|
4
|
-
active_record
|
5
|
-
}.each { |m| require m }
|
3
|
+
require 'active_record'
|
6
4
|
|
7
5
|
module Murlsh
|
8
6
|
|
@@ -13,10 +11,10 @@ module Murlsh
|
|
13
11
|
# Get the title of this url.
|
14
12
|
def title
|
15
13
|
ta = read_attribute(:title)
|
16
|
-
ta = nil
|
14
|
+
ta = nil if ta and ta.empty?
|
17
15
|
|
18
16
|
ua = read_attribute(:url)
|
19
|
-
ua = nil
|
17
|
+
ua = nil if ua and ua.empty?
|
20
18
|
|
21
19
|
ta || ua || 'title missing'
|
22
20
|
end
|
data/lib/murlsh/url_body.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
builder
|
3
|
-
}.each { |m| require m }
|
1
|
+
require 'builder'
|
4
2
|
|
5
3
|
module Murlsh
|
6
4
|
|
@@ -14,7 +12,7 @@ module Murlsh
|
|
14
12
|
super(:indent => @config['html_indent'] || 0)
|
15
13
|
end
|
16
14
|
|
17
|
-
# Fetch urls
|
15
|
+
# Fetch urls based on query string parameters.
|
18
16
|
def urls
|
19
17
|
Murlsh::Url.all(:conditions => search_conditions, :order => 'id DESC',
|
20
18
|
:limit => @req.params['n'] ? @req.params['n'].to_i :
|
@@ -50,20 +48,20 @@ module Murlsh
|
|
50
48
|
unless mu.same_author?(last)
|
51
49
|
div(:class => 'icon') {
|
52
50
|
gravatar(mu.email, 's' => gravatar_size, :text => mu.name)
|
53
|
-
}
|
54
|
-
div(mu.name, :class => 'name')
|
51
|
+
} if mu.email and gravatar_size > 0
|
52
|
+
div(mu.name, :class => 'name') if
|
55
53
|
@config.fetch('show_names', false) and mu.name
|
56
54
|
end
|
57
55
|
|
58
56
|
if mu.thumbnail_url
|
59
|
-
murlsh_img
|
60
|
-
:text => mu.title_stripped, :class => 'thumb'
|
57
|
+
murlsh_img :src => mu.thumbnail_url,
|
58
|
+
:text => mu.title_stripped, :class => 'thumb'
|
61
59
|
end
|
62
60
|
|
63
|
-
a
|
61
|
+
a mu.title_stripped, :href => mu.url, :class => 'm'
|
64
62
|
|
65
63
|
Murlsh::Plugin.hooks('url_display_add') do |p|
|
66
|
-
p.run
|
64
|
+
p.run self, mu, @config
|
67
65
|
end
|
68
66
|
|
69
67
|
last = mu
|
@@ -76,7 +74,7 @@ module Murlsh
|
|
76
74
|
clear
|
77
75
|
powered_by
|
78
76
|
js
|
79
|
-
div
|
77
|
+
div '', :id => 'bottom'
|
80
78
|
}
|
81
79
|
}
|
82
80
|
end
|
@@ -86,10 +84,10 @@ module Murlsh
|
|
86
84
|
head {
|
87
85
|
titlee
|
88
86
|
meta :'http-equiv' => 'Content-Type', :content => @content_type
|
89
|
-
metas(@config.
|
87
|
+
metas(@config.find_all { |k,v| k =~ /^meta_tag_/ and v }.
|
90
88
|
map { |k,v| [k.sub('meta_tag_', ''), v] })
|
91
89
|
css(@config['css_compressed'] || @config['css_files'])
|
92
|
-
atom
|
90
|
+
atom @config.fetch('feed_file')
|
93
91
|
}
|
94
92
|
end
|
95
93
|
|
@@ -109,8 +107,8 @@ module Murlsh
|
|
109
107
|
def search_form
|
110
108
|
form(:action => '', :method => 'get') {
|
111
109
|
fieldset {
|
112
|
-
form_input
|
113
|
-
form_input
|
110
|
+
form_input :id => 'q', :size => 32, :value => @q
|
111
|
+
form_input :type => 'submit', :value => 'Regex Search'
|
114
112
|
}
|
115
113
|
}
|
116
114
|
end
|
@@ -119,12 +117,12 @@ module Murlsh
|
|
119
117
|
def add_form
|
120
118
|
form(:action => '', :method => 'post') {
|
121
119
|
fieldset(:id => 'add') {
|
122
|
-
self.p { form_input
|
123
|
-
self.p { form_input
|
120
|
+
self.p { form_input :id => 'url', :label => 'Add URL', :size => 32 }
|
121
|
+
self.p { form_input :id => 'via', :label => 'Via', :size => 32 }
|
124
122
|
self.p {
|
125
|
-
form_input
|
126
|
-
:
|
127
|
-
form_input
|
123
|
+
form_input :type => 'password', :id => 'auth', :label => 'Password',
|
124
|
+
:size => 16
|
125
|
+
form_input :id => 'submit', :type => 'button', :value => 'Add'
|
128
126
|
}
|
129
127
|
}
|
130
128
|
}
|
@@ -137,7 +135,7 @@ module Murlsh
|
|
137
135
|
def powered_by
|
138
136
|
self.p {
|
139
137
|
text! 'powered by '
|
140
|
-
a
|
138
|
+
a 'murlsh', :href => 'http://github.com/mmb/murlsh/'
|
141
139
|
}
|
142
140
|
end
|
143
141
|
|
data/lib/murlsh/url_server.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
rack
|
4
|
-
}.each { |m| require m }
|
1
|
+
require 'active_record'
|
2
|
+
require 'rack'
|
5
3
|
|
6
4
|
module Murlsh
|
7
5
|
|
@@ -39,23 +37,23 @@ module Murlsh
|
|
39
37
|
auth = req.params['auth']
|
40
38
|
if user = auth.empty? ? nil : Murlsh::Auth.new(
|
41
39
|
@config.fetch('auth_file')).auth(auth)
|
42
|
-
ActiveRecord::Base.establish_connection
|
43
|
-
:database => @config.fetch('db_file')
|
40
|
+
ActiveRecord::Base.establish_connection :adapter => 'sqlite3',
|
41
|
+
:database => @config.fetch('db_file')
|
44
42
|
|
45
43
|
mu = Murlsh::Url.new do |u|
|
46
44
|
u.time = Time.now.gmtime
|
47
45
|
u.url = req.params['url']
|
48
46
|
u.email = user[:email]
|
49
47
|
u.name = user[:name]
|
50
|
-
u.via = req.params['via']
|
48
|
+
u.via = req.params['via'] unless (req.params['via'] || []).empty?
|
51
49
|
end
|
52
50
|
|
53
51
|
begin
|
54
52
|
# validate before add_pre plugins have run and also after (in save!)
|
55
|
-
raise ActiveRecord::RecordInvalid.new(mu)
|
56
|
-
Murlsh::Plugin.hooks('add_pre') { |p| p.run
|
53
|
+
raise ActiveRecord::RecordInvalid.new(mu) unless mu.valid?
|
54
|
+
Murlsh::Plugin.hooks('add_pre') { |p| p.run mu, @config }
|
57
55
|
mu.save!
|
58
|
-
Murlsh::Plugin.hooks('add_post') { |p| p.run
|
56
|
+
Murlsh::Plugin.hooks('add_post') { |p| p.run mu, @config }
|
59
57
|
response_body, response_code = [mu], 200
|
60
58
|
rescue ActiveRecord::RecordInvalid => error
|
61
59
|
response_body = {
|
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
yaml
|
3
|
-
}.each { |m| require m }
|
1
|
+
require 'yaml'
|
4
2
|
|
5
3
|
module Murlsh
|
6
4
|
|
@@ -11,7 +9,7 @@ module Murlsh
|
|
11
9
|
YAML::quick_emit(self, opts) do |out|
|
12
10
|
out.map(taguri, to_yaml_style) do |map|
|
13
11
|
sort { |a,b| a[0].to_s <=> b[0].to_s }.each do |k, v|
|
14
|
-
map.add
|
12
|
+
map.add k, v
|
15
13
|
end
|
16
14
|
end
|
17
15
|
end
|
data/lib/murlsh.rb
CHANGED
@@ -1,6 +1,23 @@
|
|
1
1
|
require 'murlsh/head_from_get'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
require 'murlsh/auth'
|
4
|
+
require 'murlsh/config_server'
|
5
|
+
require 'murlsh/dispatch'
|
6
|
+
require 'murlsh/doc'
|
7
|
+
require 'murlsh/etag_add_encoding'
|
8
|
+
require 'murlsh/failproof'
|
9
|
+
require 'murlsh/far_future_expires'
|
10
|
+
require 'murlsh/image_list'
|
11
|
+
require 'murlsh/img_store'
|
12
|
+
require 'murlsh/markup'
|
13
|
+
require 'murlsh/must_revalidate'
|
14
|
+
require 'murlsh/openlock'
|
15
|
+
require 'murlsh/plugin'
|
16
|
+
require 'murlsh/sqlite3_adapter'
|
17
|
+
require 'murlsh/time_ago'
|
18
|
+
require 'murlsh/uri_ask'
|
19
|
+
require 'murlsh/uri'
|
20
|
+
require 'murlsh/url_body'
|
21
|
+
require 'murlsh/url'
|
22
|
+
require 'murlsh/url_server'
|
23
|
+
require 'murlsh/yaml_ordered_hash'
|