letter_opener-web 0.1.2 → 0.2.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.
- checksums.yaml +4 -4
- data/.travis.yml +7 -5
- data/Gemfile +4 -1
- data/README.md +6 -0
- data/letter_opener-web.gemspec +10 -0
- data/lib/letter_opener/web/app.rb +7 -1
- data/lib/letter_opener/web/assets/javascripts/application.js +15 -1
- data/lib/letter_opener/web/assets/javascripts/jquery.searcher.min.js +5 -0
- data/lib/letter_opener/web/assets/stylesheets/application.css +18 -0
- data/lib/letter_opener/web/railtie.rb +1 -1
- data/lib/letter_opener/web/version.rb +1 -1
- data/lib/letter_opener/web/views/index.erb +8 -2
- data/lib/letter_opener/web/views/layout.erb +1 -0
- data/test/helper.rb +14 -1
- data/test/test_app.rb +38 -0
- metadata +66 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c7cdd2eff4d68d396704911da805e669a21a7c4
|
4
|
+
data.tar.gz: 831abdd6403869d3aedecc07a582c9392d625df2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21ce082ff79021ec0b5bd3bb009386b4fc6e8cb11711bdca6cfebf0724118345682f8af918f67e7581962299b267657690f7109cdf26e5d9838e27a3c2a27945
|
7
|
+
data.tar.gz: 5fd0793678165a9c7cbb8bbfed7f60264112f0a454081547566f6d00d86b880a6037aabec4a323c88a640a70fd018c04ac0c71673abfef8f5b2bb2650943fdd3
|
data/.travis.yml
CHANGED
@@ -3,16 +3,18 @@ before_install: gem install bundler --pre
|
|
3
3
|
install:
|
4
4
|
- gem update --system
|
5
5
|
- bundle update
|
6
|
+
script: xvfb-run rake
|
6
7
|
rvm:
|
7
8
|
- 1.9.3
|
8
9
|
- 2.0.0
|
9
|
-
- 2.1
|
10
|
-
-
|
11
|
-
-
|
10
|
+
- 2.1
|
11
|
+
- 2.2
|
12
|
+
- rbx-2
|
13
|
+
- jruby-19mode
|
12
14
|
branches:
|
13
15
|
only:
|
14
16
|
- master
|
15
17
|
matrix:
|
16
18
|
allow_failures:
|
17
|
-
- rvm: rbx
|
18
|
-
- rvm: jruby
|
19
|
+
- rvm: rbx-2
|
20
|
+
- rvm: jruby-19mode
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
# LetterOpener::Web
|
2
2
|
|
3
|
+
## Notice
|
4
|
+
This project moved to [Goatmail](https://github.com/tyabe/goatmail).
|
5
|
+
|
3
6
|
[](http://badge.fury.io/rb/letter_opener-web)
|
4
7
|
[](https://travis-ci.org/tyabe/letter_opener-web)
|
8
|
+
[](https://coveralls.io/r/tyabe/letter_opener-web)
|
9
|
+
[](https://codeclimate.com/github/tyabe/letter_opener-web)
|
10
|
+
[](https://gemnasium.com/tyabe/letter_opener-web)
|
5
11
|
|
6
12
|
A Sinatra-based frontend to the [letter_opener](https://github.com/ryanb/letter_opener).
|
7
13
|
This provides almost the same feature as the [letter_opener_web](https://github.com/fgrehm/letter_opener_web).
|
data/letter_opener-web.gemspec
CHANGED
@@ -13,6 +13,12 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = "http://github.com/tyabe/letter_opener-web"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
|
+
spec.post_install_message = <<-MESSAGE
|
17
|
+
! The 'letter_opener-web' gem has been deprecated and has been replaced by 'goatmail'.
|
18
|
+
! See: https://rubygems.org/gems/goatmail
|
19
|
+
! And: https://github.com/tyabe/goatmail
|
20
|
+
MESSAGE
|
21
|
+
|
16
22
|
spec.files = `git ls-files -z`.split("\x0")
|
17
23
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
24
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
@@ -27,4 +33,8 @@ Gem::Specification.new do |spec|
|
|
27
33
|
spec.add_development_dependency "minitest-power_assert"
|
28
34
|
spec.add_development_dependency "rack-test"
|
29
35
|
spec.add_development_dependency "mail"
|
36
|
+
spec.add_development_dependency 'capybara'
|
37
|
+
spec.add_development_dependency 'capybara-webkit'
|
38
|
+
spec.add_development_dependency 'capybara_minitest_spec'
|
39
|
+
spec.add_development_dependency 'poltergeist'
|
30
40
|
end
|
@@ -11,7 +11,7 @@ module LetterOpener
|
|
11
11
|
|
12
12
|
enable :method_override
|
13
13
|
|
14
|
-
if defined?(Padrino)
|
14
|
+
if defined?(Padrino) && Padrino.version < '0.13.0'
|
15
15
|
def self.setup_application!; end
|
16
16
|
def self.dependencies; []; end
|
17
17
|
def self.reload!; end
|
@@ -21,6 +21,12 @@ module LetterOpener
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
helpers do
|
25
|
+
def h(text)
|
26
|
+
Rack::Utils.escape_html(text)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
24
30
|
def root_path
|
25
31
|
"#{env['SCRIPT_NAME']}/"
|
26
32
|
end
|
@@ -20,6 +20,20 @@ jQuery(function($) {
|
|
20
20
|
if (ids.length <= 0) { return false; }
|
21
21
|
var self = $(this), message = self.data('confirm');
|
22
22
|
if (message && !confirm(message)) { return false; }
|
23
|
-
|
23
|
+
self.find('button[type=submit]').attr("disabled", "disabled");
|
24
|
+
self.find(':hidden[name=message_ids]').val(ids);
|
25
|
+
});
|
26
|
+
$('#refresh').on('click', function(e) {
|
27
|
+
var self = $(this);
|
28
|
+
var icon = self.find( ".glyphicon" );
|
29
|
+
icon.addClass( "glyphicon-animate" );
|
30
|
+
});
|
31
|
+
$('#search').on('submit', function(e) {
|
32
|
+
e.preventDefault();
|
33
|
+
});
|
34
|
+
$('.message_list').searcher({
|
35
|
+
itemSelector: 'li',
|
36
|
+
textSelector: 'dt',
|
37
|
+
inputSelector: '#search_input'
|
24
38
|
});
|
25
39
|
});
|
@@ -0,0 +1,5 @@
|
|
1
|
+
/*! jQuery Searcher Plugin - v0.1.0 - 2014-01-06
|
2
|
+
* https://github.com/lloiser/jquery-searcher/
|
3
|
+
* Copyright (c) 2014 Lukas Beranek; Licensed MIT
|
4
|
+
*/
|
5
|
+
!function(a){"use strict";function b(b,c){this.element=b,this.options=a.extend({},e,c),this._create()}var c="searcher",d="plugin_"+c,e={itemSelector:"tbody > tr",textSelector:"td",inputSelector:"",caseSensitive:!1,toggle:function(b,c){a(b).toggle(c)}};b.prototype={_create:function(){this._$element=a(this.element);var b=a.proxy(this._onValueChange,this);this._$input=a(this.options.inputSelector).bind("input change keyup",b),this._lastValue=""},_onValueChange:function(){var b=this.options,c=b.textSelector,d=b.caseSensitive,e=b.toggle,f=this._$input.val();d||(f=f.toLowerCase()),f!==this._lastValue&&(this._lastValue=f,this._$element.find(b.itemSelector).each(function(){var b=a(this),g=b;c&&(g=b.find(c)),g=g.filter(function(){var b=a(this).text();return d||(b=b.toLowerCase()),b.indexOf(f)>=0}),e(this,g.length>0)}))}},a.fn[c]=function(c){return this.each(function(){var e=a.data(this,d);e?a.extend(e.options,c):a.data(this,d,new b(this,c))})}}(jQuery,window,document);
|
@@ -56,6 +56,14 @@ input[type="checkbox"] + label {
|
|
56
56
|
#delete {
|
57
57
|
display:inline;
|
58
58
|
}
|
59
|
+
#search {
|
60
|
+
top: 0px;
|
61
|
+
left: 128px;
|
62
|
+
position: absolute;
|
63
|
+
}
|
64
|
+
#search .form-control-feedback {
|
65
|
+
right: 0px;
|
66
|
+
}
|
59
67
|
.left {
|
60
68
|
overflow-y: auto;
|
61
69
|
margin-top: 96px;
|
@@ -118,3 +126,13 @@ li.message.active {
|
|
118
126
|
li.message.active a {
|
119
127
|
color: #fff;
|
120
128
|
}
|
129
|
+
.glyphicon-animate {
|
130
|
+
animation-name: rotateThis;
|
131
|
+
animation-duration: .5s;
|
132
|
+
animation-iteration-count: infinite;
|
133
|
+
animation-timing-function: linear;
|
134
|
+
}
|
135
|
+
@keyframes rotateThis {
|
136
|
+
from { transform: scale( 1 ) rotate( 0deg ); }
|
137
|
+
to { transform: scale( 1 ) rotate( 360deg ); }
|
138
|
+
}
|
@@ -19,9 +19,15 @@
|
|
19
19
|
<span class="glyphicon glyphicon-trash"></span>
|
20
20
|
</button>
|
21
21
|
</form>
|
22
|
-
<a class="btn btn-primary refresh" href="<%= root_path %>">
|
22
|
+
<a id="refresh" class="btn btn-primary refresh" href="<%= root_path %>">
|
23
23
|
<span class="glyphicon glyphicon-refresh"></span>
|
24
24
|
</a>
|
25
|
+
<form id="search" class="form-horizontal">
|
26
|
+
<div class="form-group has-feedback">
|
27
|
+
<input id="search_input" class="form-control" />
|
28
|
+
<span class="form-control-feedback glyphicon glyphicon-search"></span>
|
29
|
+
</div>
|
30
|
+
</form>
|
25
31
|
</div>
|
26
32
|
</li>
|
27
33
|
</ul>
|
@@ -35,7 +41,7 @@
|
|
35
41
|
<label for="message_<%= message.id %>"></label>
|
36
42
|
<a href="<%= root_path + message.id %>" target='mail'>
|
37
43
|
<dl>
|
38
|
-
<dt><%= message.info[:subject] || message.id %></dt>
|
44
|
+
<dt><%=h message.info[:subject] || message.id %></dt>
|
39
45
|
<dd class="text-right"><small><%= message.sent_at %></small></dd>
|
40
46
|
</dl>
|
41
47
|
</a>
|
@@ -9,6 +9,7 @@
|
|
9
9
|
<link href="<%= root_path %>stylesheets/application.css" media="screen" rel="stylesheet" type="text/css" />
|
10
10
|
<script type="text/javascript" src="<%= root_path %>javascripts/jquery.min.js"></script>
|
11
11
|
<script type="text/javascript" src="<%= root_path %>javascripts/bootstrap.min.js"></script>
|
12
|
+
<script type="text/javascript" src="<%= root_path %>javascripts/jquery.searcher.min.js"></script>
|
12
13
|
<script type="text/javascript" src="<%= root_path %>javascripts/application.js"></script>
|
13
14
|
</head>
|
14
15
|
<body>
|
data/test/helper.rb
CHANGED
@@ -3,14 +3,23 @@ require 'rack/test'
|
|
3
3
|
require 'minitest/autorun'
|
4
4
|
require 'minitest/pride'
|
5
5
|
require 'minitest/spec'
|
6
|
+
require 'capybara'
|
7
|
+
require 'capybara/dsl'
|
8
|
+
require 'capybara/webkit'
|
9
|
+
require 'capybara/poltergeist'
|
6
10
|
require 'mail'
|
7
11
|
require 'letter_opener/web'
|
8
|
-
if RUBY_VERSION >= '2.0'
|
12
|
+
if /^ruby/ =~ RUBY_DESCRIPTION && RUBY_VERSION >= '2.0'
|
9
13
|
require 'minitest-power_assert'
|
10
14
|
end
|
15
|
+
if ENV['TRAVIS']
|
16
|
+
require 'coveralls'
|
17
|
+
Coveralls.wear!
|
18
|
+
end
|
11
19
|
|
12
20
|
class MiniTest::Spec
|
13
21
|
include Rack::Test::Methods
|
22
|
+
include Capybara::DSL
|
14
23
|
def app
|
15
24
|
LetterOpener::Web::App
|
16
25
|
end
|
@@ -31,3 +40,7 @@ end
|
|
31
40
|
MiniTest::Spec.after do
|
32
41
|
FileUtils.rm_rf(test_location)
|
33
42
|
end
|
43
|
+
|
44
|
+
Capybara.app = LetterOpener::Web::App
|
45
|
+
Capybara.default_driver = :webkit
|
46
|
+
Capybara.javascript_driver = :poltergeist
|
data/test/test_app.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
2
|
+
|
3
|
+
describe LetterOpener::Web::App do
|
4
|
+
|
5
|
+
before do
|
6
|
+
Mail.new {
|
7
|
+
from 'foo@example.com'
|
8
|
+
to 'bar@example.com'
|
9
|
+
subject '<h1>Hello</h1>'
|
10
|
+
body 'World!'
|
11
|
+
}.deliver!
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'can display index' do
|
15
|
+
visit '/'
|
16
|
+
|
17
|
+
assert_equal page.status_code, 200
|
18
|
+
assert page.has_content? 'Hello'
|
19
|
+
within_frame 'mail' do
|
20
|
+
assert ! page.has_content?('World!')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'can display message' do
|
25
|
+
visit '/'
|
26
|
+
click_link 'Hello'
|
27
|
+
|
28
|
+
within_frame 'mail' do
|
29
|
+
assert page.has_content? 'World!'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'subject of the message are escaped' do
|
34
|
+
visit '/'
|
35
|
+
assert page.has_content? '<h1>Hello</h1>'
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: letter_opener-web
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takeshi Yabe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: letter_opener
|
@@ -122,6 +122,62 @@ dependencies:
|
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: capybara
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: capybara-webkit
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: capybara_minitest_spec
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: poltergeist
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
125
181
|
description: a Sinatra Application to browse the email sent by letter_opener
|
126
182
|
email: tyabe@nilidea.com
|
127
183
|
executables: []
|
@@ -145,6 +201,7 @@ files:
|
|
145
201
|
- lib/letter_opener/web/assets/javascripts/application.js
|
146
202
|
- lib/letter_opener/web/assets/javascripts/bootstrap.min.js
|
147
203
|
- lib/letter_opener/web/assets/javascripts/jquery.min.js
|
204
|
+
- lib/letter_opener/web/assets/javascripts/jquery.searcher.min.js
|
148
205
|
- lib/letter_opener/web/assets/stylesheets/application.css
|
149
206
|
- lib/letter_opener/web/assets/stylesheets/bootstrap.min.css
|
150
207
|
- lib/letter_opener/web/message.rb
|
@@ -153,13 +210,17 @@ files:
|
|
153
210
|
- lib/letter_opener/web/views/index.erb
|
154
211
|
- lib/letter_opener/web/views/layout.erb
|
155
212
|
- test/helper.rb
|
213
|
+
- test/test_app.rb
|
156
214
|
- test/test_delivery_method.rb
|
157
215
|
- test/test_message.rb
|
158
216
|
homepage: http://github.com/tyabe/letter_opener-web
|
159
217
|
licenses:
|
160
218
|
- MIT
|
161
219
|
metadata: {}
|
162
|
-
post_install_message:
|
220
|
+
post_install_message: |2
|
221
|
+
! The 'letter_opener-web' gem has been deprecated and has been replaced by 'goatmail'.
|
222
|
+
! See: https://rubygems.org/gems/goatmail
|
223
|
+
! And: https://github.com/tyabe/goatmail
|
163
224
|
rdoc_options: []
|
164
225
|
require_paths:
|
165
226
|
- lib
|
@@ -175,11 +236,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
236
|
version: '0'
|
176
237
|
requirements: []
|
177
238
|
rubyforge_project:
|
178
|
-
rubygems_version: 2.
|
239
|
+
rubygems_version: 2.4.5
|
179
240
|
signing_key:
|
180
241
|
specification_version: 4
|
181
242
|
summary: Sinatra-based letter_opener web interface
|
182
243
|
test_files:
|
183
244
|
- test/helper.rb
|
245
|
+
- test/test_app.rb
|
184
246
|
- test/test_delivery_method.rb
|
185
247
|
- test/test_message.rb
|