expresspigeon-ruby 0.0.5 → 0.0.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0cd91f0bd8a97f75aa9cf79b576c06d2d4e4bb4b
4
- data.tar.gz: 902c3f5e47fff7b0d002f315f772b39dab593df8
3
+ metadata.gz: fe5c068844c9be4409e579ec341e7adb9e793330
4
+ data.tar.gz: 25738ba898a979110728640539677250bd15ce80
5
5
  SHA512:
6
- metadata.gz: 1c1c35b39df3bfc3b5c32e53dae6363593e307cf64c424dbf1d801998c731ea90b6750f3720637c1a4a6a55b7fd256e6d7b969f027a72e0322a7dab14140f928
7
- data.tar.gz: 2b040eecc69ae9791be736b7f2cbf17cd75b97e796b052f765bc5ef4dfa8a641d6e8f95ddf6c018bcb2bc18cb415dfcd841eec46b8c08fa46369d9d9c4aa113e
6
+ metadata.gz: 9cce412e917134f9f04acb97e2a109992cdf767c65265df219892b23f73c0d19e6c5be77349c7d6ca9534c53853c3ebd7f0b1c7c3c38ab9b0fd5909e8d447f61
7
+ data.tar.gz: da1dc1d7d89ab9bc1dbcedb07c2cee5394bd3d756db5fbf5dc5b4863f9780e153d4ed5e01c4afa724f593e388cb3d06366e6dc66cb6b351a246b308e24bbcde5
data/.gitignore CHANGED
@@ -7,3 +7,7 @@ rspec.sh
7
7
  set_env
8
8
 
9
9
  *.txt
10
+
11
+ test/send.sh
12
+
13
+ expresspigeon-ruby-*.gem
data/Gemfile.lock CHANGED
@@ -1,19 +1,19 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- expresspigeon-ruby (0.0.3)
5
- rest-client (~> 1.8.0)
4
+ expresspigeon-ruby (0.0.6)
5
+ rest-client (~> 1.8)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
10
  diff-lcs (1.2.5)
11
- domain_name (0.5.24)
11
+ domain_name (0.5.20161021)
12
12
  unf (>= 0.0.5, < 1.0.0)
13
- http-cookie (1.0.2)
13
+ http-cookie (1.0.3)
14
14
  domain_name (~> 0.5)
15
- mime-types (1.25.1)
16
- netrc (0.7.9)
15
+ mime-types (2.99.3)
16
+ netrc (0.11.0)
17
17
  rest-client (1.8.0)
18
18
  http-cookie (>= 1.0.2, < 2.0)
19
19
  mime-types (>= 1.16, < 3.0)
@@ -28,7 +28,7 @@ GEM
28
28
  rspec-mocks (2.14.3)
29
29
  unf (0.1.4)
30
30
  unf_ext
31
- unf_ext (0.0.7.1)
31
+ unf_ext (0.0.7.2)
32
32
 
33
33
  PLATFORMS
34
34
  ruby
@@ -36,3 +36,6 @@ PLATFORMS
36
36
  DEPENDENCIES
37
37
  expresspigeon-ruby!
38
38
  rspec (~> 2.6)
39
+
40
+ BUNDLED WITH
41
+ 1.13.6
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Expresspigeon::Ruby
2
2
 
3
- TODO: Write a gem description
3
+ This is a Ruby library for convenince access to [ExpressPigeon API](https://expresspigeon.com/api).
4
4
 
5
5
  ## Installation
6
6
 
@@ -16,7 +16,7 @@ Or install it yourself as:
16
16
 
17
17
  $ gem install expresspigeon-ruby
18
18
 
19
- ## Usage
19
+ ## Sending a simple message
20
20
 
21
21
  Sending a transactional message is easy:
22
22
 
@@ -40,6 +40,26 @@ sleep 5
40
40
  puts MESSAGES.report message_response.id
41
41
  ```
42
42
 
43
+ ## Sending a message with attachments
44
+
45
+ ```ruby
46
+ MESSAGES = ExpressPigeon::API.messages.auth_key(ENV['AUTH_KEY'])
47
+
48
+ attachments = %W{attachments/attachment1.txt attachments/smile.pdf attachments/example.ics}
49
+
50
+ puts MESSAGES.send_message(
51
+ 123, # template_id
52
+ 'john@doe.com', #to
53
+ 'jane@doe.com', #reply_to
54
+ "Jane Doe", #from_name
55
+ "Want to get out for a dinner?", #subject
56
+ {first_name: 'Igor', eye_color: 'blue'}, #merge_fields
57
+ false, #view_online
58
+ true, #click_tracking
59
+ attachments #file paths to upload as attachments
60
+ )
61
+
62
+ ```
43
63
 
44
64
  ## Contributing
45
65
 
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
19
 
20
- gem.add_runtime_dependency 'rest-client', '~> 1.8.0'
21
-
20
+ gem.add_runtime_dependency 'rest-client', '~> 1.8'
22
21
  gem.add_development_dependency "rspec", "~> 2.6"
22
+ gem.licenses = ['MIT']
23
23
  end
@@ -8,7 +8,9 @@ require 'rest_client'
8
8
  module ExpressPigeon
9
9
 
10
10
  AUTH_KEY = ENV['EXPRESSPIGEON_AUTH_KEY']
11
- ROOT = 'https://api.expresspigeon.com/'
11
+
12
+ # EXPRESSPIGEON_ROOT env var is used to point to testenv
13
+ ROOT = ENV.has_key?('EXPRESSPIGEON_ROOT') ? ENV['EXPRESSPIGEON_ROOT'] : 'https://api.expresspigeon.com/'
12
14
  USE_SSL = true
13
15
 
14
16
  module API
@@ -7,19 +7,37 @@ module ExpressPigeon
7
7
  @endpoint = 'messages'
8
8
  end
9
9
 
10
- def send_message(template_id, to, reply_to, from_name, subject, merge_fields = nil, view_online = false, click_tracking = true)
11
- post @endpoint, params = {template_id: template_id, :to => to, reply_to: reply_to, :from => from_name, :subject => subject,
12
- :merge_fields => merge_fields, :view_online => view_online, :click_tracking => click_tracking}
10
+ # Sends a transactional message using ExpressPigeon Rest API
11
+ #
12
+ # * +template_id+ - ID of a template to use for sending
13
+ # * +to+ - destination email address
14
+ # * +reply_to+ - return email address
15
+ # * +from_name+ - name of sender
16
+ # * +subject+ - subject of email
17
+ # * +merge fields+ - hash with dynamic values to merge into a template
18
+ # * +view_online+ - generate "view online" link in the template
19
+ # * +click_tracking+ - enable/disable click tracking (and URL rewriting)
20
+ # * +attachments+ - array of file paths to attach to email. Size limit: 1k per attachment, maximum 3 attachments.
21
+ def send_message(template_id, to, reply_to, from_name, subject, merge_fields = nil, view_online = false, click_tracking = true, attachments = nil)
22
+ if attachments
23
+ upload(template_id, to, reply_to, from_name, subject, merge_fields, view_online, click_tracking, attachments)
24
+ else
25
+ post @endpoint, params = {template_id: template_id, :to => to, reply_to: reply_to, :from => from_name, :subject => subject,
26
+ :merge_fields => merge_fields, :view_online => view_online, :click_tracking => click_tracking}
27
+ end
13
28
  end
14
29
 
30
+ # Retrieve report for a single message.
31
+ #
32
+ # * +message_id+ - ID of a message sent previously
15
33
  def report(message_id)
16
34
  get "#{@endpoint}/#{message_id}"
17
35
  end
18
36
 
37
+ # Report for a group of messages in a given time period.
19
38
  #
20
- #
21
- # start_date is instance of Time
22
- # end_date is instance of Time
39
+ # * +start_date+ is instance of Time
40
+ # * +end_date+ is instance of Time
23
41
  def reports(from_id, start_date = nil, end_date = nil)
24
42
  params = []
25
43
 
@@ -45,9 +63,70 @@ module ExpressPigeon
45
63
  query << params.join('&')
46
64
  end
47
65
 
48
- puts "calling: #{query}"
49
66
  get query
67
+ end
68
+
69
+
70
+ # Sends a transactional message with attachments using ExpressPigeon Rest API.
71
+ # This method is not used directly, instead use +send_message()+
72
+ #
73
+ # * +template_id+ - ID of a template to use for sending
74
+ # * +to+ - destination email address
75
+ # * +reply_to+ - return email address
76
+ # * +from_name+ - name of sender
77
+ # * +subject+ - subject of email
78
+ # * +merge fields+ - hash with dynamic values to merge into a template
79
+ # * +view_online+ - generate "view online" link in the template
80
+ # * +click_tracking+ - enable/disable click tracking (and URL rewriting)
81
+ # * +attachments+ - array of file paths to attach to email. Size limit: 1k per attachment, maximum 3 attachments.
82
+ def upload(template_id, to, reply_to, from_name, subject, merge_fields, view_online, click_tracking, attachments)
83
+
84
+ path = "#{@root ? @root : ROOT}/#{@endpoint}"
85
+
86
+ puts "sending to #{path}"
87
+
88
+ begin
89
+ payload = prepare_payload(template_id, to, reply_to, from_name, subject, merge_fields, view_online, click_tracking, attachments)
90
+ request = RestClient::Request.new(
91
+ :method => :post,
92
+ :headers => {:'X-auth-key' => get_auth_key},
93
+ :url => path,
94
+ :payload => payload)
95
+ resp = request.execute
96
+ res = resp.body
97
+ rescue RestClient::ExceptionWithResponse => err
98
+ res = err.response
99
+ end
100
+
101
+ parsed = JSON.parse(res)
102
+ if parsed.kind_of? Hash
103
+ MetaResponse.new parsed
104
+ else
105
+ parsed
106
+ end
107
+ end
108
+
109
+
110
+ def prepare_payload(template_id, to, reply_to, from, subject, merge_fields, view_online, click_tracking, attachments)
111
+ payload = { multipart: true }
112
+ payload[:template_id] = template_id
113
+ payload[:to] = to
114
+ payload[:reply_to] = reply_to
115
+ payload[:subject] = subject
116
+ payload[:from] = from
117
+ payload[:merge_fields] = merge_fields
118
+ payload[:view_online] = view_online
119
+ payload[:click_tracking] = click_tracking
50
120
 
121
+ attachments.each { |attachment|
122
+ if File.file?(attachment)
123
+ file = File.basename(attachment)
124
+ payload[file] = File.new attachment
125
+ else
126
+ raise "File #{attachment} does not exist"
127
+ end
128
+ }
129
+ payload
51
130
  end
52
131
  end
53
132
  end
@@ -15,6 +15,10 @@ module ExpressPigeon
15
15
  @delegate[m.to_s]
16
16
  end
17
17
 
18
+ def respond_to?(m)
19
+ @delegate.key?(m.to_s)
20
+ end
21
+
18
22
  def to_s
19
23
  @delegate.to_s
20
24
  end
@@ -1,5 +1,5 @@
1
1
  module Expresspigeon
2
2
  module API
3
- VERSION = "0.0.5"
3
+ VERSION = "0.0.6"
4
4
  end
5
5
  end
@@ -124,4 +124,30 @@ describe 'transactional messages integration test' do
124
124
  # return report[0]
125
125
 
126
126
 
127
+ it 'should from payload hash' do
128
+
129
+ payload = PIGEON.messages.prepare_payload(123, #template_id
130
+ 'john@doe.com',
131
+ 'jane@doe.com',
132
+ 'Jane Doe',
133
+ 'Hello, Dolly!',
134
+ {eye_color: 'blue', body_shape:'pear'},
135
+ false, true,
136
+ %w(spec/resources/attachment1.txt spec/resources/attachment2.txt))
137
+
138
+ payload[:multipart].should eq true
139
+ payload[:template_id].should eq 123
140
+ payload[:to].should eq 'john@doe.com'
141
+ payload[:reply_to].should eq 'jane@doe.com'
142
+ payload[:from].should eq 'Jane Doe'
143
+ payload[:subject].should eq 'Hello, Dolly!'
144
+ payload[:template_id].should eq 123
145
+ payload[:merge_fields][:eye_color].should eq 'blue'
146
+ payload[:merge_fields][:body_shape].should eq 'pear'
147
+ payload[:view_online].should eq false
148
+ payload[:click_tracking].should eq true
149
+ payload['attachment1.txt'].class.should eq File
150
+ File.basename(payload['attachment1.txt']).should eq 'attachment1.txt'
151
+ File.basename(payload['attachment2.txt']).should eq 'attachment2.txt'
152
+ end
127
153
  end
data/test/README ADDED
@@ -0,0 +1,5 @@
1
+ This directory contains Ruby scripts for manual testing some features.
2
+
3
+ In order to point to test envv, and set the auth_key, need to source the file called set_env
4
+
5
+
@@ -0,0 +1,32 @@
1
+ BEGIN:VCALENDAR
2
+ VERSION:2.0
3
+ CALSCALE:GREGORIAN
4
+ BEGIN:VEVENT
5
+ SUMMARY:Access-A-Ride Pickup
6
+ DTSTART;TZID=America/New_York:20130802T103400
7
+ DTEND;TZID=America/New_York:20130802T110400
8
+ LOCATION:1000 Broadway Ave.\, Brooklyn
9
+ DESCRIPTION: Access-A-Ride trip to 900 Jay St.\, Brooklyn
10
+ STATUS:CONFIRMED
11
+ SEQUENCE:3
12
+ BEGIN:VALARM
13
+ TRIGGER:-PT10M
14
+ DESCRIPTION:Pickup Reminder
15
+ ACTION:DISPLAY
16
+ END:VALARM
17
+ END:VEVENT
18
+ BEGIN:VEVENT
19
+ SUMMARY:Access-A-Ride Pickup
20
+ DTSTART;TZID=America/New_York:20250802T200000
21
+ DTEND;TZID=America/New_York:20250802T203000
22
+ LOCATION:900 Jay St.\, Brooklyn
23
+ DESCRIPTION: Access-A-Ride trip to 1000 Broadway Ave.\, Brooklyn
24
+ STATUS:CONFIRMED
25
+ SEQUENCE:3
26
+ BEGIN:VALARM
27
+ TRIGGER:-PT10M
28
+ DESCRIPTION:Pickup Reminder
29
+ ACTION:DISPLAY
30
+ END:VALARM
31
+ END:VEVENT
32
+ END:VCALENDAR
Binary file
@@ -0,0 +1,18 @@
1
+
2
+ require_relative '../lib/expresspigeon-ruby.rb'
3
+
4
+ MESSAGES = ExpressPigeon::API.messages.auth_key(ENV['AUTH_KEY'])
5
+
6
+ attachments = %W{attachments/attachment1.txt attachments/smile.pdf attachments/example.ics}
7
+
8
+ puts MESSAGES.send_message(
9
+ 1527, # template_id
10
+ 'igor@expresspigeon.com', #to
11
+ 'igor@polevoy.org', #reply_to
12
+ "Igor Polevoy", #from_name
13
+ "Hi there! Two attachments and a calendar - Ruby", #subject
14
+ {first_name: 'Igor', eye_color: 'blue'}, #merge_fields
15
+ false, #view_online
16
+ true, #click_tracking
17
+ attachments #file paths to upload as attachments
18
+ )
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: expresspigeon-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - ipolevoy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-12 00:00:00.000000000 Z
11
+ date: 2016-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.8.0
19
+ version: '1.8'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.8.0
26
+ version: '1.8'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -70,8 +70,13 @@ files:
70
70
  - spec/pigeon_helper.rb
71
71
  - spec/resources/upload.csv
72
72
  - spec/templates_spec.rb
73
+ - test/README
74
+ - test/attachments/example.ics
75
+ - test/attachments/smile.pdf
76
+ - test/send_with_attachments.rb
73
77
  homepage: https://github.com/expresspigeon/expresspigeon-ruby
74
- licenses: []
78
+ licenses:
79
+ - MIT
75
80
  metadata: {}
76
81
  post_install_message:
77
82
  rdoc_options: []
@@ -101,4 +106,7 @@ test_files:
101
106
  - spec/pigeon_helper.rb
102
107
  - spec/resources/upload.csv
103
108
  - spec/templates_spec.rb
104
- has_rdoc:
109
+ - test/README
110
+ - test/attachments/example.ics
111
+ - test/attachments/smile.pdf
112
+ - test/send_with_attachments.rb