griddler-cloudmailin 0.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/.gitignore +3 -0
- data/.hound.yml +4 -0
- data/.rubocop.yml +53 -0
- data/.travis.yml +13 -0
- data/Gemfile +19 -2
- data/LICENSE.txt +1 -2
- data/README.md +21 -3
- data/Rakefile +1 -2
- data/griddler-cloudmailin.gemspec +12 -16
- data/lib/griddler/cloudmailin.rb +3 -3
- data/lib/griddler/cloudmailin/adapter.rb +56 -15
- data/lib/griddler/cloudmailin/version.rb +1 -1
- data/spec/griddler/cloudmailin/adapter_spec.rb +142 -27
- data/spec/spec_helper.rb +8 -0
- metadata +16 -55
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
Yjk1MmZiNTExNTBjZTQwNTdhOWEzYzU3NGI5ZDMwYWJkZDI1Yzk0OA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MGRjZjRmY2MyMTY1MGEzNDYzZWQyYTJiZTM1MDk4ZmZjOGM1OTc2OA==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
YTBiNDBiNTljNGRkY2EyNTUwNGFhMjhkOTI1NjMwMDE2ZTlhMWQ4YTM2NTZh
|
10
|
+
NTUxMTI4NDgzMDZjNmRmOTFiMzhkYTQ3OTMwNzUxZTAyZjgwYmMyZmVlNTM5
|
11
|
+
ZjU1YjFmMGJiOWQyMTZiYmVkODQ4YTdhYTcwYWJkZDVhMTgzMjc=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NjM5MzRlMjY4ZmZlZjhhNDM5M2NjNzM0M2E2Yzc5MWFkNWFlYjgwZWI1ZDBj
|
14
|
+
ZWEwMDNmY2M3NmY1ODFhMWViNTQ5NjhlM2M3OGU0YTMzYTAxZjk4MDExMDk5
|
15
|
+
MzEyNzNkMGY0NmZiODViOTVlMjY5M2NmYTAwMzA4ZTYyNTc4MDA=
|
data/.gitignore
CHANGED
data/.hound.yml
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
---
|
2
|
+
AllCops:
|
3
|
+
TargetRubyVersion: 1.9
|
4
|
+
DisplayCopNames: true
|
5
|
+
Exclude:
|
6
|
+
- 'tmp/**/*'
|
7
|
+
|
8
|
+
Metrics/BlockLength:
|
9
|
+
CountComments: false # count full line comments?
|
10
|
+
Exclude:
|
11
|
+
- '**/*_spec.rb'
|
12
|
+
|
13
|
+
StringLiterals:
|
14
|
+
EnforcedStyle: single_quotes
|
15
|
+
Enabled: true
|
16
|
+
|
17
|
+
DotPosition:
|
18
|
+
Description: 'Checks the position of the dot in multi-line method calls.'
|
19
|
+
EnforcedStyle: leading
|
20
|
+
Enabled: true
|
21
|
+
|
22
|
+
ClassAndModuleChildren:
|
23
|
+
Description: 'Checks style of children classes and modules.'
|
24
|
+
EnforcedStyle: nested
|
25
|
+
Enabled: true
|
26
|
+
|
27
|
+
Documentation:
|
28
|
+
Description: 'Document classes and non-namespace modules.'
|
29
|
+
Enabled: false
|
30
|
+
|
31
|
+
FileName:
|
32
|
+
Description: 'Use snake_case for source file names.'
|
33
|
+
Enabled: true
|
34
|
+
|
35
|
+
LineLength:
|
36
|
+
Max: 120
|
37
|
+
Enabled: true
|
38
|
+
|
39
|
+
Style/ExtraSpacing:
|
40
|
+
Description: 'Do not use unnecessary spacing.'
|
41
|
+
Enabled: true
|
42
|
+
|
43
|
+
Lint/LiteralInInterpolation:
|
44
|
+
Description: 'Avoid interpolating literals in strings'
|
45
|
+
AutoCorrect: true
|
46
|
+
|
47
|
+
Style/TrailingCommaInLiteral:
|
48
|
+
EnforcedStyleForMultiline: no_comma
|
49
|
+
Enabled: true
|
50
|
+
|
51
|
+
Style/TrailingCommaInArguments:
|
52
|
+
EnforcedStyleForMultiline: no_comma
|
53
|
+
Enabled: true
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
@@ -1,5 +1,22 @@
|
|
1
|
-
source
|
1
|
+
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem
|
3
|
+
gem 'griddler', github: 'thoughtbot/griddler' # So as to include the spec folder
|
4
|
+
gem 'nokogiri', (RUBY_VERSION < '2' ? '< 1.7' : '> 0') # Nokogiri >= 1.7 requires Ruby 2+
|
4
5
|
|
5
6
|
gemspec
|
7
|
+
|
8
|
+
group :development do
|
9
|
+
gem 'bundler'
|
10
|
+
gem 'gem-release'
|
11
|
+
gem 'guard'
|
12
|
+
gem 'guard-rspec'
|
13
|
+
gem 'guard-rubocop'
|
14
|
+
end
|
15
|
+
|
16
|
+
group :test do
|
17
|
+
gem 'coveralls'
|
18
|
+
gem 'fuubar'
|
19
|
+
gem 'rspec'
|
20
|
+
gem 'rspec_junit_formatter'
|
21
|
+
gem 'simplecov', '~> 0.13'
|
22
|
+
end
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,11 @@
|
|
1
1
|
# Griddler::Cloudmailin
|
2
|
+
[![Gem Version](https://badge.fury.io/rb/griddler-cloudmailin.svg)](https://rubygems.org/gems/griddler-cloudmailin)
|
3
|
+
[![Gem downloads](https://img.shields.io/gem/dt/griddler-cloudmailin.svg)](https://rubygems.org/gems/griddler-cloudmailin)
|
4
|
+
[![Code quality](http://img.shields.io/codeclimate/github/thoughtbot/griddler-cloudmailin.svg?style=flat)](https://codeclimate.com/github/thoughtbot/griddler-cloudmailin)
|
5
|
+
[![Dependency Status](https://gemnasium.com/badges/github.com/thoughtbot/griddler-cloudmailin.svg)](https://gemnasium.com/github.com/thoughtbot/griddler-cloudmailin)
|
6
|
+
[![Security](https://hakiri.io/github/thoughtbot/griddler-cloudmailin/master.svg)](https://hakiri.io/github/thoughtbot/griddler-cloudmailin/master)
|
7
|
+
[![Build status](https://img.shields.io/travis/thoughtbot/griddler-cloudmailin/master.svg)](https://travis-ci.org/thoughtbot/griddler-cloudmailin)
|
8
|
+
[![Coverage Status](https://coveralls.io/repos/github/thoughtbot/griddler-cloudmailin/badge.svg?branch=master)](https://coveralls.io/github/thoughtbot/griddler-cloudmailin?branch=master)
|
2
9
|
|
3
10
|
An adapter for [Griddler](https://github.com/thoughtbot/griddler) to allow
|
4
11
|
[Cloudmailin](http://cloudmailin.com) to be used with the gem.
|
@@ -8,14 +15,25 @@ An adapter for [Griddler](https://github.com/thoughtbot/griddler) to allow
|
|
8
15
|
Add this line to your application's Gemfile:
|
9
16
|
|
10
17
|
```ruby
|
11
|
-
gem 'griddler'
|
12
18
|
gem 'griddler-cloudmailin'
|
13
19
|
```
|
14
20
|
|
15
21
|
## Usage
|
16
22
|
|
17
|
-
|
23
|
+
See the [Griddler](https://github.com/thoughtbot/griddler) gem for usage instructions
|
24
|
+
|
25
|
+
## Upgrading from version 0.0.1
|
26
|
+
|
27
|
+
Griddler::Cloudmailin now includes all details of the recipients of the email in the `to` array of a `Griddler::Email`
|
28
|
+
object. In version 0.0.1 this method returned the bare address of the Cloudmailin recipient only.
|
29
|
+
|
30
|
+
The email `date` is now returned as well.
|
31
|
+
|
32
|
+
There is an additional `bcc` array which contains the Cloudmailin recipient if it was BCCed on the email.
|
33
|
+
|
34
|
+
Attachments are now returned in the `attachments` array.
|
18
35
|
|
19
36
|
## More Information
|
20
37
|
|
21
|
-
* [
|
38
|
+
* [Griddler](https://github.com/thoughtbot/griddler)
|
39
|
+
* [Cloudmailin documentation](http://docs.cloudmailin.com/)
|
data/Rakefile
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
require
|
2
|
-
|
1
|
+
require 'bundler/gem_tasks'
|
@@ -4,23 +4,19 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'griddler/cloudmailin/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'griddler-cloudmailin'
|
8
8
|
spec.version = Griddler::Cloudmailin::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
11
|
-
spec.summary =
|
12
|
-
spec.description =
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
9
|
+
spec.authors = ['Dominic Sayers & Caleb Thompson']
|
10
|
+
spec.email = ['dominic@sayers.cc']
|
11
|
+
spec.summary = 'Griddler Plugin for cloudmailin'
|
12
|
+
spec.description = 'Griddler Plugin for cloudmailin email parsing service'
|
13
|
+
spec.homepage = 'https://github.com/thoughtbot/griddler-cloudmailin'
|
14
|
+
spec.license = 'MIT'
|
15
15
|
|
16
|
-
spec.files = `git ls-files
|
17
|
-
spec.executables = spec.files.grep(%r{^bin
|
18
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)
|
19
|
-
spec.require_paths = [
|
16
|
+
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin\/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features|coverage)\/})
|
19
|
+
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.
|
22
|
-
spec.add_development_dependency "rake"
|
23
|
-
spec.add_development_dependency "rspec"
|
24
|
-
|
25
|
-
spec.add_dependency "griddler"
|
21
|
+
spec.add_dependency 'griddler'
|
26
22
|
end
|
data/lib/griddler/cloudmailin.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'griddler'
|
2
|
+
require 'griddler/cloudmailin/version'
|
3
|
+
require 'griddler/cloudmailin/adapter'
|
4
4
|
|
5
5
|
Griddler.adapter_registry.register(:cloudmailin, Griddler::Cloudmailin::Adapter)
|
@@ -1,35 +1,76 @@
|
|
1
|
-
require 'active_support/core_ext/string/strip'
|
2
|
-
|
3
1
|
module Griddler
|
4
2
|
module Cloudmailin
|
5
3
|
class Adapter
|
6
|
-
def initialize(params)
|
7
|
-
@params = params
|
8
|
-
end
|
9
|
-
|
10
4
|
def self.normalize_params(params)
|
11
5
|
adapter = new(params)
|
12
6
|
adapter.normalize_params
|
13
7
|
end
|
14
8
|
|
15
9
|
def normalize_params
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
}
|
10
|
+
normalized_params = base_params
|
11
|
+
normalized_params[:bcc] = bcc unless bcc.empty?
|
12
|
+
normalized_params
|
13
|
+
end
|
14
|
+
|
15
|
+
def legacy?
|
16
|
+
@legacy ||= headers.key? :From
|
24
17
|
end
|
25
18
|
|
26
19
|
private
|
27
20
|
|
28
21
|
attr_reader :params
|
29
22
|
|
23
|
+
def initialize(params)
|
24
|
+
@params = params
|
25
|
+
end
|
26
|
+
|
27
|
+
def recipients(field)
|
28
|
+
headers[field].to_s.split(',').map(&:strip)
|
29
|
+
end
|
30
|
+
|
30
31
|
def ccs
|
31
|
-
|
32
|
+
@ccs ||= recipients(header_keys[:cc])
|
33
|
+
end
|
34
|
+
|
35
|
+
def tos
|
36
|
+
@tos ||= recipients(header_keys[:to])
|
37
|
+
end
|
38
|
+
|
39
|
+
def envelope_to
|
40
|
+
@envelope_to ||= params[:envelope][:to]
|
41
|
+
end
|
42
|
+
|
43
|
+
def header_emails
|
44
|
+
@header_emails ||= (tos | ccs).map { |addressee| Griddler::EmailParser.parse_address(addressee)[:email] }
|
45
|
+
end
|
46
|
+
|
47
|
+
def bcc
|
48
|
+
@bcc ||= header_emails.include?(envelope_to) ? [] : [envelope_to]
|
49
|
+
end
|
50
|
+
|
51
|
+
def headers
|
52
|
+
@headers ||= params[:headers]
|
32
53
|
end
|
54
|
+
|
55
|
+
def base_params # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
56
|
+
@base_params ||= {
|
57
|
+
to: tos,
|
58
|
+
cc: ccs,
|
59
|
+
from: headers[header_keys[:from]],
|
60
|
+
date: headers[header_keys[:date]].try(:to_datetime),
|
61
|
+
subject: headers[header_keys[:subject]],
|
62
|
+
text: params[:plain],
|
63
|
+
html: params[:html],
|
64
|
+
attachments: params.fetch(:attachments) { {} }.values,
|
65
|
+
headers: headers
|
66
|
+
}
|
67
|
+
end
|
68
|
+
|
69
|
+
def header_keys
|
70
|
+
@header_keys ||= Hash[legacy? ? KEY_LIST.map { |s| [s, s.capitalize] } : KEY_LIST.map { |s| [s, s] }]
|
71
|
+
end
|
72
|
+
|
73
|
+
KEY_LIST = [:from, :to, :cc, :date, :subject].freeze
|
33
74
|
end
|
34
75
|
end
|
35
76
|
end
|
@@ -1,50 +1,165 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
+
describe Griddler::Cloudmailin::Adapter do
|
4
|
+
it 'registers itself with griddler' do
|
5
|
+
expect(Griddler.adapter_registry[:cloudmailin]).to be(
|
6
|
+
Griddler::Cloudmailin::Adapter
|
7
|
+
)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
3
11
|
describe Griddler::Cloudmailin::Adapter, '.normalize_params' do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
+
context 'without bcc' do
|
13
|
+
it_should_behave_like(
|
14
|
+
'Griddler adapter',
|
15
|
+
:cloudmailin,
|
16
|
+
envelope: {
|
17
|
+
to: 'hi@example.com',
|
18
|
+
from: 'there@example.com'
|
19
|
+
},
|
20
|
+
plain: 'hi',
|
21
|
+
headers: {
|
22
|
+
From: 'there@example.com',
|
23
|
+
To: 'Hello World <hi@example.com>',
|
24
|
+
Cc: 'emily@example.com'
|
25
|
+
}
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'with bcc' do
|
30
|
+
it_should_behave_like(
|
31
|
+
'Griddler adapter',
|
32
|
+
:cloudmailin,
|
33
|
+
envelope: {
|
34
|
+
to: 'sandra@example.com',
|
35
|
+
from: 'there@example.com'
|
36
|
+
},
|
37
|
+
plain: 'hi',
|
38
|
+
headers: {
|
39
|
+
From: 'there@example.com',
|
40
|
+
To: 'Hello World <hi@example.com>',
|
41
|
+
Cc: 'emily@example.com'
|
42
|
+
}
|
43
|
+
)
|
44
|
+
end
|
12
45
|
|
13
46
|
it 'normalizes parameters' do
|
14
|
-
expect(
|
47
|
+
expect(normalized).to be_normalized_to(
|
48
|
+
to: ['Some Identifier <some-identifier@example.com>'],
|
49
|
+
cc: ['emily@example.com'],
|
50
|
+
from: 'Joe User <joeuser@example.com>',
|
51
|
+
subject: 'Re: [ThisApp] That thing',
|
52
|
+
text: /Dear bob/
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'normalizes parameters where the recipient has been BCCed' do
|
57
|
+
expect(normalized(bcc_params)).to be_normalized_to(
|
15
58
|
to: ['Some Identifier <some-identifier@example.com>'],
|
16
59
|
cc: ['emily@example.com'],
|
60
|
+
bcc: ['sandra@example.com'],
|
17
61
|
from: 'Joe User <joeuser@example.com>',
|
18
62
|
subject: 'Re: [ThisApp] That thing',
|
19
63
|
text: /Dear bob/
|
20
|
-
|
64
|
+
)
|
21
65
|
end
|
22
66
|
|
23
|
-
it '
|
24
|
-
|
67
|
+
it 'normalizes parameters where the recipient has been CCed' do
|
68
|
+
expect(normalized(cc_params)).to be_normalized_to(
|
69
|
+
cc: ['Some Identifier <some-identifier@example.com>'],
|
70
|
+
to: ['emily@example.com'],
|
71
|
+
from: 'Joe User <joeuser@example.com>',
|
72
|
+
subject: 'Re: [ThisApp] That thing',
|
73
|
+
text: /Dear bob/
|
74
|
+
)
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'changes attachments to an array of files' do
|
78
|
+
params = BASE_PARAMS.merge(attachments: { '0' => upload_1, '1' => upload_2 })
|
25
79
|
|
26
|
-
normalized_params =
|
27
|
-
expect(normalized_params[:attachments]).to
|
80
|
+
normalized_params = normalized(params)
|
81
|
+
expect(normalized_params[:attachments]).to include(upload_1, upload_2)
|
82
|
+
expect(normalized_params[:attachments]).not_to include('0')
|
83
|
+
expect(normalized_params[:attachments]).not_to include('1')
|
28
84
|
end
|
29
85
|
|
30
86
|
it 'has no attachments' do
|
31
|
-
|
87
|
+
expect(normalized[:attachments]).to be_empty
|
88
|
+
end
|
32
89
|
|
33
|
-
|
34
|
-
expect(
|
90
|
+
it 'wraps to in an array' do
|
91
|
+
expect(normalized[:to]).to eq([BASE_PARAMS[:headers][:to]])
|
35
92
|
end
|
36
93
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
headers: { Subject: 'Re: [ThisApp] That thing', Cc: 'emily@example.com' },
|
41
|
-
plain: <<-EOS.strip_heredoc.strip
|
42
|
-
Dear bob
|
94
|
+
it 'wraps cc in an array' do
|
95
|
+
expect(normalized[:cc]).to eq([BASE_PARAMS[:headers][:cc]])
|
96
|
+
end
|
43
97
|
|
44
|
-
|
98
|
+
it 'returns the date' do
|
99
|
+
expect(normalized[:date]).to eq(BASE_PARAMS[:headers][:date].to_datetime)
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'returns an array even if cc is empty' do
|
103
|
+
expect(normalized(nocc_params)[:cc]).to eq([])
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'detects which format of params is in use' do
|
107
|
+
expect(Griddler::Cloudmailin::Adapter.new(BASE_PARAMS).legacy?).to be_falsey
|
108
|
+
expect(Griddler::Cloudmailin::Adapter.new(BASE_PARAMS_LEGACY).legacy?).to be_truthy
|
109
|
+
end
|
110
|
+
|
111
|
+
def normalized(params = BASE_PARAMS)
|
112
|
+
Griddler::Cloudmailin::Adapter.normalize_params(params)
|
113
|
+
end
|
114
|
+
|
115
|
+
def bcc_params
|
116
|
+
BASE_PARAMS.merge(
|
117
|
+
envelope: BASE_PARAMS[:envelope].merge(to: 'sandra@example.com')
|
118
|
+
)
|
119
|
+
end
|
120
|
+
|
121
|
+
def nocc_params
|
122
|
+
BASE_PARAMS.merge(
|
123
|
+
headers: BASE_PARAMS[:headers].except(:cc)
|
124
|
+
)
|
125
|
+
end
|
45
126
|
|
46
|
-
|
47
|
-
|
48
|
-
|
127
|
+
def cc_params
|
128
|
+
BASE_PARAMS.merge(
|
129
|
+
headers: BASE_PARAMS[:headers].merge(
|
130
|
+
cc: 'Some Identifier <some-identifier@example.com>',
|
131
|
+
to: 'emily@example.com'
|
132
|
+
)
|
133
|
+
)
|
49
134
|
end
|
135
|
+
|
136
|
+
BASE_PARAMS = {
|
137
|
+
envelope: {
|
138
|
+
to: 'some-identifier@example.com',
|
139
|
+
from: 'joeuser@example.com'
|
140
|
+
},
|
141
|
+
headers: {
|
142
|
+
subject: 'Re: [ThisApp] That thing',
|
143
|
+
from: 'Joe User <joeuser@example.com>',
|
144
|
+
to: 'Some Identifier <some-identifier@example.com>',
|
145
|
+
cc: 'emily@example.com',
|
146
|
+
date: 'Fri, 30 Sep 2016 10:30:15 +0200'
|
147
|
+
},
|
148
|
+
plain: "Dear bob\n\nReply ABOVE THIS LINE\n\nhey sup"
|
149
|
+
}.freeze
|
150
|
+
|
151
|
+
BASE_PARAMS_LEGACY = {
|
152
|
+
envelope: {
|
153
|
+
to: 'some-identifier@example.com',
|
154
|
+
from: 'joeuser@example.com'
|
155
|
+
},
|
156
|
+
headers: {
|
157
|
+
Subject: 'Re: [ThisApp] That thing',
|
158
|
+
From: 'Joe User <joeuser@example.com>',
|
159
|
+
To: 'Some Identifier <some-identifier@example.com>',
|
160
|
+
Cc: 'emily@example.com',
|
161
|
+
Date: 'Fri, 30 Sep 2016 10:30:15 +0200'
|
162
|
+
},
|
163
|
+
plain: "Dear bob\n\nReply ABOVE THIS LINE\n\nhey sup"
|
164
|
+
}.freeze
|
50
165
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,79 +1,40 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: griddler-cloudmailin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Dominic Sayers & Caleb Thompson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: bundler
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.6'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.6'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rake
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rspec
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
13
|
- !ruby/object:Gem::Dependency
|
56
14
|
name: griddler
|
57
15
|
requirement: !ruby/object:Gem::Requirement
|
58
16
|
requirements:
|
59
|
-
- -
|
17
|
+
- - ! '>='
|
60
18
|
- !ruby/object:Gem::Version
|
61
19
|
version: '0'
|
62
20
|
type: :runtime
|
63
21
|
prerelease: false
|
64
22
|
version_requirements: !ruby/object:Gem::Requirement
|
65
23
|
requirements:
|
66
|
-
- -
|
24
|
+
- - ! '>='
|
67
25
|
- !ruby/object:Gem::Version
|
68
26
|
version: '0'
|
69
|
-
description: Griddler
|
27
|
+
description: Griddler Plugin for cloudmailin email parsing service
|
70
28
|
email:
|
71
|
-
-
|
29
|
+
- dominic@sayers.cc
|
72
30
|
executables: []
|
73
31
|
extensions: []
|
74
32
|
extra_rdoc_files: []
|
75
33
|
files:
|
76
|
-
-
|
34
|
+
- .gitignore
|
35
|
+
- .hound.yml
|
36
|
+
- .rubocop.yml
|
37
|
+
- .travis.yml
|
77
38
|
- Gemfile
|
78
39
|
- LICENSE.txt
|
79
40
|
- README.md
|
@@ -84,7 +45,7 @@ files:
|
|
84
45
|
- lib/griddler/cloudmailin/version.rb
|
85
46
|
- spec/griddler/cloudmailin/adapter_spec.rb
|
86
47
|
- spec/spec_helper.rb
|
87
|
-
homepage:
|
48
|
+
homepage: https://github.com/thoughtbot/griddler-cloudmailin
|
88
49
|
licenses:
|
89
50
|
- MIT
|
90
51
|
metadata: {}
|
@@ -94,20 +55,20 @@ require_paths:
|
|
94
55
|
- lib
|
95
56
|
required_ruby_version: !ruby/object:Gem::Requirement
|
96
57
|
requirements:
|
97
|
-
- -
|
58
|
+
- - ! '>='
|
98
59
|
- !ruby/object:Gem::Version
|
99
60
|
version: '0'
|
100
61
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
62
|
requirements:
|
102
|
-
- -
|
63
|
+
- - ! '>='
|
103
64
|
- !ruby/object:Gem::Version
|
104
65
|
version: '0'
|
105
66
|
requirements: []
|
106
67
|
rubyforge_project:
|
107
|
-
rubygems_version: 2.
|
68
|
+
rubygems_version: 2.6.11
|
108
69
|
signing_key:
|
109
70
|
specification_version: 4
|
110
|
-
summary: Griddler
|
71
|
+
summary: Griddler Plugin for cloudmailin
|
111
72
|
test_files:
|
112
73
|
- spec/griddler/cloudmailin/adapter_spec.rb
|
113
74
|
- spec/spec_helper.rb
|