sendcloud_rails 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 229e73f45b6a94c8d33b530a81ad4fc8e3d2b727
4
+ data.tar.gz: c01dbf8ac1ef017d2a6698ad928dca817e559753
5
+ SHA512:
6
+ metadata.gz: 652afa1e97135a4df8b741ba897a933ff46c5399eaf9db318788e59a925899d77c83d15d93a058c32779e895ef3cfe3b38e706a62c3742788aab327089b31ecd
7
+ data.tar.gz: 3a28db447fc8de6665faacd4e225bcc37db00bb98c830a65d658109583373eff6860b39d575232b9d145049c01fbb261404b5c3878bd8be3b162f9b0dff0f19c
@@ -0,0 +1,20 @@
1
+ Copyright 2016 Towon Zhou
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
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,3 @@
1
+ = SendcloudRails
2
+
3
+ This project rocks and uses MIT-LICENSE.
@@ -0,0 +1,23 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Rails'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ Bundler::GemHelper.install_tasks
18
+
19
+ require 'rspec/core/rake_task'
20
+
21
+ RSpec::Core::RakeTask.new(:spec)
22
+
23
+ task default: :spec
@@ -0,0 +1,19 @@
1
+ require 'rest_client'
2
+
3
+ module Sendcloud
4
+ class Client
5
+ attr_reader :api_url
6
+
7
+ def initialize(api_url)
8
+ @api_url = api_url
9
+ end
10
+
11
+ def send_message(options)
12
+ RestClient.post sendcloud_url, options
13
+ end
14
+
15
+ def sendcloud_url
16
+ @api_url
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,100 @@
1
+ module Sendcloud
2
+ class Deliverer
3
+
4
+ attr_accessor :settings
5
+
6
+ def initialize(settings)
7
+ self.settings = settings
8
+ end
9
+
10
+ def api_user
11
+ self.settings[:api_user]
12
+ end
13
+
14
+ def api_key
15
+ self.settings[:api_key]
16
+ end
17
+
18
+ def api_url
19
+ self.settings[:api_url]
20
+ end
21
+
22
+ def deliver!(rails_message)
23
+ response = sendcloud_client.send_message build_sendcloud_message_for(rails_message)
24
+ if response.code == 200
25
+ sendcloud_message_id = JSON.parse(response.to_str)["id"]
26
+ rails_message.message_id = sendcloud_message_id
27
+ end
28
+ response
29
+ end
30
+
31
+ private
32
+
33
+ def build_sendcloud_message_for(rails_message)
34
+ sendcloud_message = build_basic_sendcloud_message_for rails_message
35
+ transform_sendcloud_attributes_from_rails rails_message, sendcloud_message
36
+ remove_empty_values sendcloud_message
37
+
38
+ sendcloud_message
39
+ end
40
+
41
+ def build_basic_sendcloud_message_for(rails_message)
42
+ sendcloud_message = {
43
+ apiUser: api_user,
44
+ apiKey: api_key,
45
+ from: rails_message[:from].formatted.join(";"),
46
+ to: rails_message[:to].formatted.join(";"),
47
+ subject: rails_message.subject,
48
+ html: extract_html(rails_message),
49
+ text: extract_text(rails_message)
50
+ }
51
+
52
+ [:cc, :bcc].each do |key|
53
+ sendcloud_message[key] = rails_message[key].formatted if rails_message[key]
54
+ end
55
+
56
+ return sendcloud_message
57
+ end
58
+
59
+ def transform_sendcloud_attributes_from_rails(rails_message, sendcloud_message)
60
+ transform_reply_to rails_message, sendcloud_message if rails_message.reply_to
61
+ transform_custom_headers rails_message, sendcloud_message
62
+ end
63
+
64
+ def transform_reply_to(rails_message, sendcloud_message)
65
+ sendcloud_message['h:Reply-To'] = rails_message[:reply_to].formatted.first
66
+ end
67
+
68
+ def extract_html(rails_message)
69
+ if rails_message.html_part
70
+ rails_message.html_part.body.decoded
71
+ else
72
+ rails_message.content_type =~ /text\/html/ ? rails_message.body.decoded : nil
73
+ end
74
+ end
75
+
76
+ def extract_text(rails_message)
77
+ if rails_message.multipart?
78
+ rails_message.text_part ? rails_message.text_part.body.decoded : nil
79
+ else
80
+ rails_message.content_type =~ /text\/plain/ ? rails_message.body.decoded : nil
81
+ end
82
+ end
83
+
84
+ def transform_custom_headers(rails_message, sendcloud_message)
85
+ rails_message.sendcloud_headers.try(:each) do |name, value|
86
+ sendcloud_message["h:#{name}"] = value
87
+ end
88
+ end
89
+
90
+ def remove_empty_values(sendcloud_message)
91
+ sendcloud_message.delete_if { |key, value| value.nil? }
92
+ end
93
+
94
+ def sendcloud_client
95
+ @sendcloud_client ||= Client.new(api_url)
96
+ end
97
+ end
98
+ end
99
+
100
+ ActionMailer::Base.add_delivery_method :sendcloud, Sendcloud::Deliverer
@@ -0,0 +1,8 @@
1
+ module Mail
2
+ class Message
3
+ attr_accessor :sendcloud_variables
4
+ attr_accessor :sendcloud_options
5
+ attr_accessor :sendcloud_recipient_variables
6
+ attr_accessor :sendcloud_headers
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ module Sendcloud
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,8 @@
1
+ require 'action_mailer'
2
+ require 'json'
3
+
4
+
5
+ Dir[File.dirname(__FILE__) + '/sendcloud/*.rb'].each {|file| require file }
6
+
7
+ module Sendcloud
8
+ end
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sendcloud_rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Towon Zhou
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-07-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: actionmailer
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.2.13
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 3.2.13
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.7.7
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.7.7
41
+ - !ruby/object:Gem::Dependency
42
+ name: rest-client
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.6.7
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.6.7
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 2.14.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 2.14.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 3.2.13
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 3.2.13
83
+ description: An adapter for using Sendcloud with Rails and Action Mailer
84
+ email:
85
+ - towonzhou@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - MIT-LICENSE
91
+ - README.rdoc
92
+ - Rakefile
93
+ - lib/sendcloud/client.rb
94
+ - lib/sendcloud/deliverer.rb
95
+ - lib/sendcloud/mail_ext.rb
96
+ - lib/sendcloud/version.rb
97
+ - lib/sendcloud_rails.rb
98
+ homepage: ''
99
+ licenses:
100
+ - MIT
101
+ metadata: {}
102
+ post_install_message:
103
+ rdoc_options: []
104
+ require_paths:
105
+ - lib
106
+ required_ruby_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ required_rubygems_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ requirements: []
117
+ rubyforge_project:
118
+ rubygems_version: 2.4.6
119
+ signing_key:
120
+ specification_version: 4
121
+ summary: Rails Action Mailer adapter for Sendcloud
122
+ test_files: []
123
+ has_rdoc: