mailcatcher-api 0.0.1 → 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 +5 -5
- data/lib/mailcatcher/api.rb +2 -12
- data/lib/mailcatcher/api/client.rb +43 -0
- data/lib/mailcatcher/api/{configuration.rb → config.rb} +1 -1
- data/lib/mailcatcher/api/mailbox.rb +10 -37
- data/lib/mailcatcher/api/mailbox/message.rb +33 -0
- data/lib/mailcatcher/api/mailbox/message_collection.rb +43 -0
- data/lib/mailcatcher/api/version.rb +1 -1
- data/lib/tasks/console.rake +6 -2
- data/lib/tasks/spec.rake +9 -3
- metadata +25 -69
- data/lib/mailcatcher/api/error.rb +0 -8
- data/lib/mailcatcher/api/message.rb +0 -32
- data/lib/mailcatcher/api/middleware/network_exceptions.rb +0 -17
- data/lib/tasks/spec_all.rake +0 -3
- data/lib/tasks/spec_integration.rake +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 04d45440217381836f6a4ef5fdf4e03664644d5f07481dd556be856188dec811
|
4
|
+
data.tar.gz: face6fcf0cd00b1f96e6abe0f6ad3430453cd7900eec131fd62d2733dd8ad12b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: abd1e6ecbeb9deb1b03b22f65c58aa16daf5a6181e9fbd691e88b4fee5b2f54829f8960dfff4ab3063a2ab59cfcd806117ece54dbce5d76c3eedd4b74f3ad355
|
7
|
+
data.tar.gz: 6de63e51576b3c77df466db2e0568bdaaea70ce44b8d51ef8e59eb800a3c2bc07698ac61e2f100ab8b8bcd06fcb6b4494ebd565f0c5ba3f92b39ea36b2511fb5
|
data/lib/mailcatcher/api.rb
CHANGED
@@ -1,11 +1,5 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
require 'multi_json'
|
3
|
-
|
4
1
|
require 'mailcatcher/api/version'
|
5
|
-
require 'mailcatcher/api/
|
6
|
-
require 'mailcatcher/api/error'
|
7
|
-
require 'mailcatcher/api/middleware/network_exceptions'
|
8
|
-
require 'mailcatcher/api/message'
|
2
|
+
require 'mailcatcher/api/config'
|
9
3
|
require 'mailcatcher/api/mailbox'
|
10
4
|
|
11
5
|
module MailCatcher
|
@@ -15,11 +9,7 @@ module MailCatcher
|
|
15
9
|
end
|
16
10
|
|
17
11
|
def self.config
|
18
|
-
@
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.reset_config
|
22
|
-
@configuration = Configuration.new
|
12
|
+
@config ||= Config.new
|
23
13
|
end
|
24
14
|
|
25
15
|
def self.configure
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'uri'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module MailCatcher
|
6
|
+
module API
|
7
|
+
module Client
|
8
|
+
MESSAGE_ENDPOINT = '/messages/%{message_id}.json'.freeze
|
9
|
+
MESSAGE_INDEX_ENDPOINT = '/messages'.freeze
|
10
|
+
|
11
|
+
def self.fetch_message_index
|
12
|
+
request(:get, MESSAGE_INDEX_ENDPOINT)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.fetch_message(id)
|
16
|
+
request(:get, format(MESSAGE_ENDPOINT, message_id: id))
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.delete_all
|
20
|
+
request(:delete, MESSAGE_INDEX_ENDPOINT)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.delete_message(id)
|
24
|
+
request(:delete, format(MESSAGE_ENDPOINT, message_id: id))
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.request(method, path)
|
28
|
+
request = case method
|
29
|
+
when :get; Net::HTTP::Get.new(path)
|
30
|
+
when :delete; Net::HTTP::Delete.new(path)
|
31
|
+
else raise NotImplementedError, "Don't know how to request #{method} method"
|
32
|
+
end
|
33
|
+
response = http.request(request)
|
34
|
+
JSON.load(response.body)
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.http
|
38
|
+
uri = URI(MailCatcher::API.config.server)
|
39
|
+
Net::HTTP.new(uri.host, uri.port)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -1,48 +1,21 @@
|
|
1
|
+
require 'mailcatcher/api/client'
|
2
|
+
require 'mailcatcher/api/mailbox/message_collection'
|
3
|
+
|
1
4
|
module MailCatcher
|
2
5
|
module API
|
3
6
|
class Mailbox
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
@server = MailCatcher::API.config.server
|
8
|
-
|
9
|
-
@connection = Faraday.new(url: @server) do |faraday|
|
10
|
-
faraday.request :network_exception
|
11
|
-
faraday.adapter :net_http
|
12
|
-
end
|
13
|
-
|
14
|
-
@messages_index = nil
|
15
|
-
@messages = nil
|
7
|
+
def messages(reload: false)
|
8
|
+
@messages = nil if reload == true
|
9
|
+
@messages ||= MessageCollection.new
|
16
10
|
end
|
17
11
|
|
18
|
-
def
|
19
|
-
|
20
|
-
load_messages unless @messages.nil?
|
12
|
+
def clear!
|
13
|
+
MailCatcher::API::Client.delete_all
|
21
14
|
end
|
22
15
|
|
16
|
+
# Deprecated
|
23
17
|
def count
|
24
|
-
|
25
|
-
end
|
26
|
-
|
27
|
-
def messages
|
28
|
-
@messages ||= load_messages
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
def load_messages_index
|
34
|
-
@messages_index = MultiJson.load(@connection.get('/messages').body)
|
35
|
-
end
|
36
|
-
|
37
|
-
def messages_index
|
38
|
-
@messages_index ||= load_messages_index
|
39
|
-
end
|
40
|
-
|
41
|
-
def load_messages
|
42
|
-
@messages = messages_index.map do |msg|
|
43
|
-
response = @connection.get("/messages/#{ msg['id'] }.json")
|
44
|
-
API::Message.new(MultiJson.load(response.body)['source'])
|
45
|
-
end
|
18
|
+
messages.count
|
46
19
|
end
|
47
20
|
end
|
48
21
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
require 'uri'
|
3
|
+
require 'mail'
|
4
|
+
|
5
|
+
module MailCatcher
|
6
|
+
module API
|
7
|
+
class Mailbox
|
8
|
+
class Message
|
9
|
+
extend Forwardable
|
10
|
+
|
11
|
+
def_delegators :@mail, :message_id, :date, :from, :to, :subject, :body, :decode_body,
|
12
|
+
:mime_type, :charset, :content_type
|
13
|
+
|
14
|
+
attr_reader :id, :raw
|
15
|
+
|
16
|
+
def initialize(msg)
|
17
|
+
@id = msg['id'].to_i
|
18
|
+
@raw = msg['source']
|
19
|
+
|
20
|
+
@mail = Mail.new(@raw)
|
21
|
+
end
|
22
|
+
|
23
|
+
def links
|
24
|
+
@links ||= URI.extract(decode_body).select { |s| s.start_with?('http') || s.start_with?('https') }
|
25
|
+
end
|
26
|
+
|
27
|
+
def delete!
|
28
|
+
MailCatcher::API::Client.delete_message(id)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'mailcatcher/api/client'
|
2
|
+
require 'mailcatcher/api/mailbox/message'
|
3
|
+
|
4
|
+
module MailCatcher
|
5
|
+
module API
|
6
|
+
class Mailbox
|
7
|
+
class MessageCollection
|
8
|
+
include Enumerable
|
9
|
+
|
10
|
+
def each
|
11
|
+
collection.each do |msg|
|
12
|
+
yield(msg)
|
13
|
+
end
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def collection
|
20
|
+
@collection ||= load_collection
|
21
|
+
end
|
22
|
+
|
23
|
+
def load_collection
|
24
|
+
collection_index.map do |msg|
|
25
|
+
Mailbox::Message.new(client.fetch_message(msg['id']))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def collection_index
|
30
|
+
@collection_index ||= load_collection_index.sort { |a, b| b['id'] <=> a['id'] }
|
31
|
+
end
|
32
|
+
|
33
|
+
def load_collection_index
|
34
|
+
client.fetch_message_index
|
35
|
+
end
|
36
|
+
|
37
|
+
def client
|
38
|
+
MailCatcher::API::Client
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/tasks/console.rake
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
-
desc 'Start the IRB console (
|
1
|
+
desc 'Start the IRB console (aliased to "c")'
|
2
2
|
task :console do
|
3
|
-
|
3
|
+
require 'irb'
|
4
|
+
require 'irb/completion'
|
5
|
+
require 'mailcatcher/api'
|
6
|
+
ARGV.clear
|
7
|
+
IRB.start
|
4
8
|
end
|
5
9
|
task c: :console
|
data/lib/tasks/spec.rake
CHANGED
@@ -1,4 +1,10 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
begin
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
|
4
|
+
RSpec::Core::RakeTask.new(:spec)
|
5
|
+
|
6
|
+
task :default => :spec
|
7
|
+
rescue LoadError
|
8
|
+
# no rspec available
|
9
|
+
puts 'It seems like RSpec is not available, probably you need to run `bundle install`'
|
3
10
|
end
|
4
|
-
task default: :spec
|
metadata
CHANGED
@@ -1,127 +1,85 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mailcatcher-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrii Vakarev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: multi_json
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.10'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.10'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: faraday
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0.9'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0.9'
|
41
13
|
- !ruby/object:Gem::Dependency
|
42
14
|
name: mail
|
43
15
|
requirement: !ruby/object:Gem::Requirement
|
44
16
|
requirements:
|
45
|
-
- - "
|
17
|
+
- - ">="
|
46
18
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
19
|
+
version: '0'
|
48
20
|
type: :runtime
|
49
21
|
prerelease: false
|
50
22
|
version_requirements: !ruby/object:Gem::Requirement
|
51
23
|
requirements:
|
52
|
-
- - "
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '2.6'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: minitest
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '5.4'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
24
|
+
- - ">="
|
67
25
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
26
|
+
version: '0'
|
69
27
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
28
|
+
name: rake
|
71
29
|
requirement: !ruby/object:Gem::Requirement
|
72
30
|
requirements:
|
73
31
|
- - "~>"
|
74
32
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
33
|
+
version: '12.3'
|
76
34
|
type: :development
|
77
35
|
prerelease: false
|
78
36
|
version_requirements: !ruby/object:Gem::Requirement
|
79
37
|
requirements:
|
80
38
|
- - "~>"
|
81
39
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
40
|
+
version: '12.3'
|
83
41
|
- !ruby/object:Gem::Dependency
|
84
|
-
name: rspec
|
42
|
+
name: rspec
|
85
43
|
requirement: !ruby/object:Gem::Requirement
|
86
44
|
requirements:
|
87
45
|
- - "~>"
|
88
46
|
- !ruby/object:Gem::Version
|
89
|
-
version: '3.
|
47
|
+
version: '3.7'
|
90
48
|
type: :development
|
91
49
|
prerelease: false
|
92
50
|
version_requirements: !ruby/object:Gem::Requirement
|
93
51
|
requirements:
|
94
52
|
- - "~>"
|
95
53
|
- !ruby/object:Gem::Version
|
96
|
-
version: '3.
|
54
|
+
version: '3.7'
|
97
55
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
56
|
+
name: factory_bot
|
99
57
|
requirement: !ruby/object:Gem::Requirement
|
100
58
|
requirements:
|
101
59
|
- - "~>"
|
102
60
|
- !ruby/object:Gem::Version
|
103
|
-
version: '4.
|
61
|
+
version: '4.8'
|
104
62
|
type: :development
|
105
63
|
prerelease: false
|
106
64
|
version_requirements: !ruby/object:Gem::Requirement
|
107
65
|
requirements:
|
108
66
|
- - "~>"
|
109
67
|
- !ruby/object:Gem::Version
|
110
|
-
version: '4.
|
68
|
+
version: '4.8'
|
111
69
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
70
|
+
name: simplecov
|
113
71
|
requirement: !ruby/object:Gem::Requirement
|
114
72
|
requirements:
|
115
|
-
- - "
|
73
|
+
- - ">="
|
116
74
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
75
|
+
version: '0'
|
118
76
|
type: :development
|
119
77
|
prerelease: false
|
120
78
|
version_requirements: !ruby/object:Gem::Requirement
|
121
79
|
requirements:
|
122
|
-
- - "
|
80
|
+
- - ">="
|
123
81
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
82
|
+
version: '0'
|
125
83
|
description: MailCatcher REST API SDK
|
126
84
|
email:
|
127
85
|
- avakarev@gmail.com
|
@@ -131,16 +89,14 @@ extra_rdoc_files: []
|
|
131
89
|
files:
|
132
90
|
- lib/mailcatcher.rb
|
133
91
|
- lib/mailcatcher/api.rb
|
134
|
-
- lib/mailcatcher/api/
|
135
|
-
- lib/mailcatcher/api/
|
92
|
+
- lib/mailcatcher/api/client.rb
|
93
|
+
- lib/mailcatcher/api/config.rb
|
136
94
|
- lib/mailcatcher/api/mailbox.rb
|
137
|
-
- lib/mailcatcher/api/message.rb
|
138
|
-
- lib/mailcatcher/api/
|
95
|
+
- lib/mailcatcher/api/mailbox/message.rb
|
96
|
+
- lib/mailcatcher/api/mailbox/message_collection.rb
|
139
97
|
- lib/mailcatcher/api/version.rb
|
140
98
|
- lib/tasks/console.rake
|
141
99
|
- lib/tasks/spec.rake
|
142
|
-
- lib/tasks/spec_all.rake
|
143
|
-
- lib/tasks/spec_integration.rake
|
144
100
|
homepage: https://github.com/avakarev/mailcatcher-api
|
145
101
|
licenses:
|
146
102
|
- MIT
|
@@ -161,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
117
|
version: 1.3.5
|
162
118
|
requirements: []
|
163
119
|
rubyforge_project:
|
164
|
-
rubygems_version: 2.
|
120
|
+
rubygems_version: 2.7.3
|
165
121
|
signing_key:
|
166
122
|
specification_version: 4
|
167
123
|
summary: MailCatcher REST API SDK
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'uri'
|
2
|
-
require 'mail'
|
3
|
-
|
4
|
-
module MailCatcher
|
5
|
-
module API
|
6
|
-
class Message
|
7
|
-
attr_reader :raw
|
8
|
-
attr_reader :message_id, :date
|
9
|
-
attr_reader :from, :to, :subject, :body
|
10
|
-
attr_reader :mime_type, :charset, :content_type
|
11
|
-
|
12
|
-
def initialize(raw_message)
|
13
|
-
mail = Mail.new(raw_message)
|
14
|
-
|
15
|
-
@raw = raw_message
|
16
|
-
@message_id = mail.message_id
|
17
|
-
@date = mail.date
|
18
|
-
@from = mail.from
|
19
|
-
@to = mail.to
|
20
|
-
@subject = mail.subject
|
21
|
-
@body = mail.body.raw_source
|
22
|
-
@mime_type = mail.mime_type
|
23
|
-
@charset = mail.charset
|
24
|
-
@content_type = mail.content_type
|
25
|
-
end
|
26
|
-
|
27
|
-
def links
|
28
|
-
@links ||= URI.extract(@body).select { |s| s.start_with? 'http' }
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module MailCatcher
|
2
|
-
module API
|
3
|
-
module Middleware
|
4
|
-
class NetworkExceptions < ::Faraday::Middleware
|
5
|
-
def call(env)
|
6
|
-
@app.call(env)
|
7
|
-
rescue ::Faraday::Error::TimeoutError
|
8
|
-
raise Error::Timeout, $!
|
9
|
-
rescue
|
10
|
-
raise Error::Connection, $!
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
Faraday::Request.register_middleware network_exception: MailCatcher::API::Middleware::NetworkExceptions
|
data/lib/tasks/spec_all.rake
DELETED