mailcatcher-api 0.0.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8b6a40842d2e537e5844010417fdf6bdeadd5f0d
4
- data.tar.gz: 5e388f3c72cd485699afdae7994501c1aae1c07b
2
+ SHA256:
3
+ metadata.gz: 04d45440217381836f6a4ef5fdf4e03664644d5f07481dd556be856188dec811
4
+ data.tar.gz: face6fcf0cd00b1f96e6abe0f6ad3430453cd7900eec131fd62d2733dd8ad12b
5
5
  SHA512:
6
- metadata.gz: 801956af0ca0d441515cc11673beb0c78c0b1e1a12937db8b249bd42fcf4b75703fdef6813c23537e87a5ad381bd83da0edb6e2467432dce7fc27e4639e90da6
7
- data.tar.gz: faee53254a0a48b377c09177f47a14ba8c4d9b1b2add88ca6297cc4438853cb90e0da4e0419ac24b7f661a465e70d01e6a41a689ad7eff9db35862d7380adffd
6
+ metadata.gz: abd1e6ecbeb9deb1b03b22f65c58aa16daf5a6181e9fbd691e88b4fee5b2f54829f8960dfff4ab3063a2ab59cfcd806117ece54dbce5d76c3eedd4b74f3ad355
7
+ data.tar.gz: 6de63e51576b3c77df466db2e0568bdaaea70ce44b8d51ef8e59eb800a3c2bc07698ac61e2f100ab8b8bcd06fcb6b4494ebd565f0c5ba3f92b39ea36b2511fb5
@@ -1,11 +1,5 @@
1
- require 'faraday'
2
- require 'multi_json'
3
-
4
1
  require 'mailcatcher/api/version'
5
- require 'mailcatcher/api/configuration'
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
- @configuration ||= Configuration.new
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,6 +1,6 @@
1
1
  module MailCatcher
2
2
  module API
3
- class Configuration
3
+ class Config
4
4
  attr_accessor :server
5
5
 
6
6
  def initialize
@@ -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
- attr_reader :server
5
-
6
- def initialize
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 refresh
19
- load_messages_index
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
- messages_index.count
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
@@ -1,5 +1,5 @@
1
1
  module MailCatcher
2
2
  module API
3
- VERSION = '0.0.1'
3
+ VERSION = '0.2.0'.freeze
4
4
  end
5
5
  end
@@ -1,5 +1,9 @@
1
- desc 'Start the IRB console (short-cut alias: "c")'
1
+ desc 'Start the IRB console (aliased to "c")'
2
2
  task :console do
3
- sh 'irb -I lib -rubygems -r mailcatcher/api'
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
@@ -1,4 +1,10 @@
1
- Rake::TestTask.new(:spec) do |t|
2
- t.test_files = FileList[ ENV['SPEC_FILES'] ].exclude( ENV['INTEGRATION_FILES'] )
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.1
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: 2014-07-15 00:00:00.000000000 Z
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: '2.6'
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: '5.4'
26
+ version: '0'
69
27
  - !ruby/object:Gem::Dependency
70
- name: minitest-reporters
28
+ name: rake
71
29
  requirement: !ruby/object:Gem::Requirement
72
30
  requirements:
73
31
  - - "~>"
74
32
  - !ruby/object:Gem::Version
75
- version: '1.0'
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: '1.0'
40
+ version: '12.3'
83
41
  - !ruby/object:Gem::Dependency
84
- name: rspec-expectations
42
+ name: rspec
85
43
  requirement: !ruby/object:Gem::Requirement
86
44
  requirements:
87
45
  - - "~>"
88
46
  - !ruby/object:Gem::Version
89
- version: '3.0'
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.0'
54
+ version: '3.7'
97
55
  - !ruby/object:Gem::Dependency
98
- name: factory_girl
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.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.4'
68
+ version: '4.8'
111
69
  - !ruby/object:Gem::Dependency
112
- name: webmock
70
+ name: simplecov
113
71
  requirement: !ruby/object:Gem::Requirement
114
72
  requirements:
115
- - - "~>"
73
+ - - ">="
116
74
  - !ruby/object:Gem::Version
117
- version: '1.18'
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: '1.18'
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/configuration.rb
135
- - lib/mailcatcher/api/error.rb
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/middleware/network_exceptions.rb
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.2.2
120
+ rubygems_version: 2.7.3
165
121
  signing_key:
166
122
  specification_version: 4
167
123
  summary: MailCatcher REST API SDK
@@ -1,8 +0,0 @@
1
- module MailCatcher
2
- module API
3
- module Error
4
- class Connection < StandardError; end
5
- class Timeout < Connection; end
6
- end
7
- end
8
- end
@@ -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
@@ -1,3 +0,0 @@
1
- Rake::TestTask.new('spec:all') do |t|
2
- t.test_files = FileList[ ENV['SPEC_FILES'] ]
3
- end
@@ -1,3 +0,0 @@
1
- Rake::TestTask.new('spec:integration') do |t|
2
- t.test_files = FileList[ ENV['INTEGRATION_FILES'] ]
3
- end