inboxer 0.0.1
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/.bundle/config +3 -0
- data/.gitignore +2 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +69 -0
- data/LICENSE +20 -0
- data/README.md +80 -0
- data/Rakefile +12 -0
- data/bin/inboxer +45 -0
- data/inboxer.gemspec +26 -0
- data/lib/inboxer.rb +45 -0
- data/lib/inboxer/version.rb +3 -0
- data/lib/rasterize.js +21 -0
- data/spec/fixtures/multiple.yml +11 -0
- data/spec/fixtures/single.yml +6 -0
- data/spec/reporter_spec.rb +73 -0
- data/spec/spec_helper.rb +11 -0
- metadata +182 -0
data/.bundle/config
ADDED
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
inboxer (0.0.1)
|
5
|
+
gli
|
6
|
+
hpricot
|
7
|
+
phantomjs.rb
|
8
|
+
pony
|
9
|
+
premailer
|
10
|
+
|
11
|
+
GEM
|
12
|
+
remote: http://rubygems.org/
|
13
|
+
specs:
|
14
|
+
addressable (2.2.8)
|
15
|
+
crack (0.3.1)
|
16
|
+
css_parser (1.2.6)
|
17
|
+
addressable
|
18
|
+
rdoc
|
19
|
+
diff-lcs (1.1.3)
|
20
|
+
email_spec (1.2.1)
|
21
|
+
mail (~> 2.2)
|
22
|
+
rspec (~> 2.0)
|
23
|
+
gli (1.6.0)
|
24
|
+
hpricot (0.8.6)
|
25
|
+
htmlentities (4.3.1)
|
26
|
+
i18n (0.6.0)
|
27
|
+
json (1.7.3)
|
28
|
+
mail (2.4.4)
|
29
|
+
i18n (>= 0.4.0)
|
30
|
+
mime-types (~> 1.16)
|
31
|
+
treetop (~> 1.4.8)
|
32
|
+
mime-types (1.19)
|
33
|
+
phantomjs-mac (0.0.3)
|
34
|
+
phantomjs.rb (0.0.4)
|
35
|
+
phantomjs-mac
|
36
|
+
polyglot (0.3.3)
|
37
|
+
pony (1.4)
|
38
|
+
mail (> 2.0)
|
39
|
+
premailer (1.7.3)
|
40
|
+
css_parser (>= 1.1.9)
|
41
|
+
htmlentities (>= 4.0.0)
|
42
|
+
rake (0.9.2.2)
|
43
|
+
rdoc (3.12)
|
44
|
+
json (~> 1.4)
|
45
|
+
rspec (2.10.0)
|
46
|
+
rspec-core (~> 2.10.0)
|
47
|
+
rspec-expectations (~> 2.10.0)
|
48
|
+
rspec-mocks (~> 2.10.0)
|
49
|
+
rspec-core (2.10.1)
|
50
|
+
rspec-expectations (2.10.0)
|
51
|
+
diff-lcs (~> 1.1.3)
|
52
|
+
rspec-mocks (2.10.1)
|
53
|
+
treetop (1.4.10)
|
54
|
+
polyglot
|
55
|
+
polyglot (>= 0.3.1)
|
56
|
+
webmock (1.8.7)
|
57
|
+
addressable (>= 2.2.7)
|
58
|
+
crack (>= 0.1.7)
|
59
|
+
|
60
|
+
PLATFORMS
|
61
|
+
ruby
|
62
|
+
|
63
|
+
DEPENDENCIES
|
64
|
+
email_spec
|
65
|
+
inboxer!
|
66
|
+
rake
|
67
|
+
rdoc
|
68
|
+
rspec
|
69
|
+
webmock
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2012 Gareth Rushgrove
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
17
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
18
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
19
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
20
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
Command line utility to send emails of web pages to specified email addresses.
|
2
|
+
|
3
|
+
Lets say you have some dashboards showing up-to-date information about,
|
4
|
+
well, anything. But sometimes going to view the dashboards is too much
|
5
|
+
effort and what you want it a regular email report. Or maybe your boss
|
6
|
+
wants a nice weekly or month summary.
|
7
|
+
|
8
|
+
# Usage
|
9
|
+
|
10
|
+
> inboxer
|
11
|
+
Send emails of HTML pages to mailing list based on configuration file
|
12
|
+
|
13
|
+
usage: inboxer [global options] command [command options]
|
14
|
+
|
15
|
+
Version: 0.0.1
|
16
|
+
|
17
|
+
Global Options:
|
18
|
+
--help - Show this message
|
19
|
+
|
20
|
+
Commands:
|
21
|
+
help - Shows list of commands or help for one command
|
22
|
+
send - Send all emails described in configuration file
|
23
|
+
view - Display what is going to happen
|
24
|
+
|
25
|
+
So, given a yaml configuration file like so:
|
26
|
+
|
27
|
+
-
|
28
|
+
URL: http://example.com/1/
|
29
|
+
Subject: Example report 1
|
30
|
+
Recipients:
|
31
|
+
- test1@example.com
|
32
|
+
- test2@example.com
|
33
|
+
-
|
34
|
+
URL: http://example.com/2/
|
35
|
+
Subject: Example report 2
|
36
|
+
Recipients:
|
37
|
+
- test1@example.com
|
38
|
+
|
39
|
+
We can run inboxer against it:
|
40
|
+
|
41
|
+
inboxer send example.yml
|
42
|
+
|
43
|
+
You would tend to have separate yaml files for different frequencies
|
44
|
+
(say daily, weekly, monthly) and then setup a cron to trigger those at
|
45
|
+
the relevant times.
|
46
|
+
|
47
|
+
The default is to send an html and inline css version of the page via
|
48
|
+
email. As an alternative you can also send a pdf.
|
49
|
+
|
50
|
+
inboxer pdf example.yml
|
51
|
+
|
52
|
+
# Installation
|
53
|
+
|
54
|
+
inboxer is written in ruby and available as a gem. I'd recommend
|
55
|
+
using bundler but you can also just install with:
|
56
|
+
|
57
|
+
gem install inboxer
|
58
|
+
|
59
|
+
# License
|
60
|
+
|
61
|
+
Copyright (c) 2012 Gareth Rushgrove
|
62
|
+
|
63
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
64
|
+
a copy of this software and associated documentation files (the
|
65
|
+
"Software"), to deal in the Software without restriction, including
|
66
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
67
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
68
|
+
permit persons to whom the Software is furnished to do so, subject to
|
69
|
+
the following conditions:
|
70
|
+
|
71
|
+
The above copyright notice and this permission notice shall be
|
72
|
+
included in all copies or substantial portions of the Software.
|
73
|
+
|
74
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
75
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
76
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
77
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
78
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
79
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
80
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
require 'rspec/core/rake_task'
|
4
|
+
|
5
|
+
desc "Run rspec tests"
|
6
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
7
|
+
t.pattern = 'spec/*_spec.rb'
|
8
|
+
t.rspec_opts = "--color --format documentation"
|
9
|
+
end
|
10
|
+
|
11
|
+
desc "Run rspec tests"
|
12
|
+
task :default => [:spec]
|
data/bin/inboxer
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'gli'
|
5
|
+
require 'yaml'
|
6
|
+
require 'pony'
|
7
|
+
require 'premailer'
|
8
|
+
require 'inboxer'
|
9
|
+
|
10
|
+
include GLI
|
11
|
+
|
12
|
+
program_desc 'Send emails of HTML pages to mailing list based on configuration file'
|
13
|
+
|
14
|
+
version Inboxer::VERSION
|
15
|
+
|
16
|
+
desc 'Display what is going to happen'
|
17
|
+
command :view do |c|
|
18
|
+
c.action do |global_options, options, args|
|
19
|
+
raise "Must supply configuration file as argument" unless args.size == 1
|
20
|
+
puts "A nested set of web addresses to capture and the email addresses to send them to"
|
21
|
+
puts
|
22
|
+
puts File.open(args.first).read
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
desc 'Send all emails described in configuration file'
|
27
|
+
command :send do |c|
|
28
|
+
c.action do |global_options, options, args|
|
29
|
+
raise "Must supply configuration file as argument" unless args.size == 1
|
30
|
+
report = Inboxer::Reporter.new(args.first)
|
31
|
+
report.send!
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
desc 'Send all emails described in configuration file as PDF'
|
36
|
+
command :pdf do |c|
|
37
|
+
c.action do |global_options, options, args|
|
38
|
+
raise "Must supply configuration file as argument" unless args.size == 1
|
39
|
+
report = Inboxer::Reporter.new(args.first)
|
40
|
+
report.send_pdf!
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
exit GLI.run(ARGV)
|
data/inboxer.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/inboxer/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Gareth Rushgrove"]
|
6
|
+
gem.email = ["gareth@morethanseven.net"]
|
7
|
+
gem.homepage = 'https://github.com/garethr/inboxer'
|
8
|
+
gem.summary = 'Send web pages to your inbox as html or PDF'
|
9
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
10
|
+
gem.files = `git ls-files`.split("\n")
|
11
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
12
|
+
gem.name = "inboxer"
|
13
|
+
gem.require_paths = ["lib"]
|
14
|
+
gem.version = Inboxer::VERSION
|
15
|
+
|
16
|
+
gem.add_dependency('pony')
|
17
|
+
gem.add_dependency('hpricot')
|
18
|
+
gem.add_dependency('gli')
|
19
|
+
gem.add_dependency('premailer')
|
20
|
+
gem.add_dependency('phantomjs.rb')
|
21
|
+
gem.add_development_dependency('rake')
|
22
|
+
gem.add_development_dependency('rdoc')
|
23
|
+
gem.add_development_dependency('rspec')
|
24
|
+
gem.add_development_dependency('webmock')
|
25
|
+
gem.add_development_dependency('email_spec')
|
26
|
+
end
|
data/lib/inboxer.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require "inboxer/version"
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
require 'pony'
|
5
|
+
require 'premailer'
|
6
|
+
require 'phantomjs.rb'
|
7
|
+
|
8
|
+
module Inboxer
|
9
|
+
|
10
|
+
class Reporter
|
11
|
+
|
12
|
+
def initialize(filename)
|
13
|
+
@yml = YAML::load(File.open(filename))
|
14
|
+
end
|
15
|
+
|
16
|
+
def send!
|
17
|
+
@yml.each do |report|
|
18
|
+
premailer = Premailer.new(report['URL'], :warn_level => Premailer::Warnings::SAFE)
|
19
|
+
report['Recipients'].each do |email|
|
20
|
+
Pony.mail(:to => email, :from => report['From'],
|
21
|
+
:subject => report['Subject'], :html_body => premailer.to_inline_css,
|
22
|
+
:headers => {'X-Software' => 'Inboxer'}
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def send_pdf!
|
29
|
+
@yml.each do |report|
|
30
|
+
report['Recipients'].each do |email|
|
31
|
+
script = File.expand_path('../rasterize.js', __FILE__)
|
32
|
+
file = "/tmp/output.#{rand(36**8).to_s(36)}.pdf"
|
33
|
+
output = Phantomjs.run(script, report['URL'], file)
|
34
|
+
Pony.mail(:to => email, :from => report['From'],
|
35
|
+
:subject => report['Subject'], :body => report['Content'],
|
36
|
+
:attachments => {'report.pdf' => File.read(file)},
|
37
|
+
:headers => {'X-Software' => 'Inboxer'}
|
38
|
+
)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
data/lib/rasterize.js
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
var page = require('webpage').create(),
|
2
|
+
address, output, size;
|
3
|
+
|
4
|
+
if (phantom.args.length < 2 || phantom.args.length > 3) {
|
5
|
+
console.log('Usage: rasterize.js URL filename');
|
6
|
+
phantom.exit();
|
7
|
+
} else {
|
8
|
+
address = phantom.args[0];
|
9
|
+
output = phantom.args[1];
|
10
|
+
page.viewportSize = { width: 600, height: 600 };
|
11
|
+
page.open(address, function (status) {
|
12
|
+
if (status !== 'success') {
|
13
|
+
console.log('Unable to load the address!');
|
14
|
+
} else {
|
15
|
+
window.setTimeout(function () {
|
16
|
+
page.render(output);
|
17
|
+
phantom.exit();
|
18
|
+
}, 200);
|
19
|
+
}
|
20
|
+
});
|
21
|
+
}
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
|
3
|
+
require 'inboxer'
|
4
|
+
|
5
|
+
def run_report(fixture='spec/fixtures/single.yml')
|
6
|
+
report = Inboxer::Reporter.new(fixture)
|
7
|
+
report.send!
|
8
|
+
end
|
9
|
+
|
10
|
+
def run_pdf_report
|
11
|
+
report = Inboxer::Reporter.new('spec/fixtures/single.yml')
|
12
|
+
report.send_pdf!
|
13
|
+
end
|
14
|
+
|
15
|
+
def run_report_with_multiple_entries
|
16
|
+
run_report 'spec/fixtures/multiple.yml'
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'Running a report with sample data' do
|
20
|
+
before do
|
21
|
+
@content = "sample content"
|
22
|
+
@mailbox = "test@example.com"
|
23
|
+
stub_request(:get, "http://example.com/").to_return(:body => @content)
|
24
|
+
run_report
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should send an email' do
|
28
|
+
unread_emails_for(@mailbox).size.should == 1
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'the email should contain content from the response' do
|
32
|
+
open_last_email_for(@mailbox)
|
33
|
+
current_email.should have_body_text @content
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should have the set subject' do
|
37
|
+
open_last_email_for(@mailbox)
|
38
|
+
current_email.should have_subject "Example report"
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should be from the specified address' do
|
42
|
+
open_last_email_for(@mailbox)
|
43
|
+
current_email.should be_delivered_from "from@example.com"
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should set an identifying header' do
|
47
|
+
open_last_email_for(@mailbox)
|
48
|
+
current_email.should have_header("X-Software", "Inboxer")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe 'Running a report with multiple entries' do
|
53
|
+
before do
|
54
|
+
stub_request(:get, "http://example.com/1/").to_return(:body => "test1")
|
55
|
+
stub_request(:get, "http://example.com/2/").to_return(:body => "test2")
|
56
|
+
run_report_with_multiple_entries
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should send several emails' do
|
60
|
+
unread_emails_for("test1@example.com").size.should == 2
|
61
|
+
unread_emails_for("test2@example.com").size.should == 1
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'should send emails which contain content from the response' do
|
65
|
+
open_last_email_for "test1@example.com"
|
66
|
+
current_email.should have_subject "Example report 2"
|
67
|
+
current_email.should have_body_text "test2"
|
68
|
+
open_last_email_for "test2@example.com"
|
69
|
+
current_email.should have_subject "Example report 1"
|
70
|
+
current_email.should have_body_text "test1"
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,182 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: inboxer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Gareth Rushgrove
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-07-10 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: pony
|
16
|
+
requirement: &70299174733000 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70299174733000
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: hpricot
|
27
|
+
requirement: &70299174731800 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70299174731800
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: gli
|
38
|
+
requirement: &70299174729960 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70299174729960
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: premailer
|
49
|
+
requirement: &70299174728220 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70299174728220
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: phantomjs.rb
|
60
|
+
requirement: &70299174724420 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70299174724420
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: &70299174722140 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *70299174722140
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: rdoc
|
82
|
+
requirement: &70299174719820 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *70299174719820
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: rspec
|
93
|
+
requirement: &70299174708520 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *70299174708520
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: webmock
|
104
|
+
requirement: &70299174706820 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *70299174706820
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: email_spec
|
115
|
+
requirement: &70299174705500 !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
type: :development
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: *70299174705500
|
124
|
+
description:
|
125
|
+
email:
|
126
|
+
- gareth@morethanseven.net
|
127
|
+
executables:
|
128
|
+
- inboxer
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files: []
|
131
|
+
files:
|
132
|
+
- .bundle/config
|
133
|
+
- .gitignore
|
134
|
+
- Gemfile
|
135
|
+
- Gemfile.lock
|
136
|
+
- LICENSE
|
137
|
+
- README.md
|
138
|
+
- Rakefile
|
139
|
+
- bin/inboxer
|
140
|
+
- inboxer.gemspec
|
141
|
+
- lib/inboxer.rb
|
142
|
+
- lib/inboxer/version.rb
|
143
|
+
- lib/rasterize.js
|
144
|
+
- spec/fixtures/multiple.yml
|
145
|
+
- spec/fixtures/single.yml
|
146
|
+
- spec/reporter_spec.rb
|
147
|
+
- spec/spec_helper.rb
|
148
|
+
homepage: https://github.com/garethr/inboxer
|
149
|
+
licenses: []
|
150
|
+
post_install_message:
|
151
|
+
rdoc_options: []
|
152
|
+
require_paths:
|
153
|
+
- lib
|
154
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
155
|
+
none: false
|
156
|
+
requirements:
|
157
|
+
- - ! '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
segments:
|
161
|
+
- 0
|
162
|
+
hash: 2227123263043891155
|
163
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
164
|
+
none: false
|
165
|
+
requirements:
|
166
|
+
- - ! '>='
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: '0'
|
169
|
+
segments:
|
170
|
+
- 0
|
171
|
+
hash: 2227123263043891155
|
172
|
+
requirements: []
|
173
|
+
rubyforge_project:
|
174
|
+
rubygems_version: 1.8.10
|
175
|
+
signing_key:
|
176
|
+
specification_version: 3
|
177
|
+
summary: Send web pages to your inbox as html or PDF
|
178
|
+
test_files:
|
179
|
+
- spec/fixtures/multiple.yml
|
180
|
+
- spec/fixtures/single.yml
|
181
|
+
- spec/reporter_spec.rb
|
182
|
+
- spec/spec_helper.rb
|