postageapp 1.0.19 → 1.0.20

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ .DS_Store
2
+ coverage
3
+ rdoc
4
+ pkg
5
+ test/tmp
6
+ test/log
7
+ Gemfile.lock
data/.travis.yml CHANGED
@@ -1,3 +1,4 @@
1
+ language: ruby
1
2
  rvm:
2
3
  - 1.8.7
3
4
  - 1.9.2
@@ -9,14 +10,14 @@ gemfile:
9
10
  - test/gemfiles/Gemfile.rails-3.0.x
10
11
  - test/gemfiles/Gemfile.rails-3.1.x
11
12
  - test/gemfiles/Gemfile.rails-3.2.x
12
- - test/gemfiles/Gemfile.rails.4.0.x
13
+ - test/gemfiles/Gemfile.rails-4.0.x
13
14
  matrix:
14
15
  exclude:
15
16
  - rvm: 2.0.0
16
17
  gemfile: test/gemfiles/Gemfile.rails-2.3.x
17
18
  - rvm: 1.8.7
18
- gemfile: test/gemfiles/Gemfile.rails.4.0.x
19
+ gemfile: test/gemfiles/Gemfile.rails-4.0.x
19
20
  - rvm: ree
20
- gemfile: test/gemfiles/Gemfile.rails.4.0.x
21
- allow_failures:
22
- - gemfile: test/gemfiles/Gemfile.rails.4.0.x
21
+ gemfile: test/gemfiles/Gemfile.rails-4.0.x
22
+ - rvm: 1.9.2
23
+ gemfile: test/gemfiles/Gemfile.rails-4.0.x
data/Gemfile CHANGED
@@ -1,12 +1,8 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
- gem 'json'
4
-
5
- group :development do
6
- gem 'jeweler'
7
- end
3
+ gemspec
8
4
 
9
5
  group :test do
10
6
  gem 'rails'
11
7
  gem 'mocha'
12
- end
8
+ end
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011 Oleg Khabarov, The Working Group, Inc
1
+ Copyright (c) 2011-13 Oleg Khabarov, The Working Group, Inc
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -3,12 +3,12 @@
3
3
  This is the gem used to integrate Ruby apps with PostageApp service.
4
4
  Personalized, mass email sending can be offloaded to PostageApp via JSON based API.
5
5
 
6
- ### [API Documentation](http://help.postageapp.com/kb/api/api-overview) • [PostageApp Knowledge Base](http://help.postageapp.com/kb) • [PostageApp Help Portal](http://help.postageapp.com)
6
+ ### [API Documentation](http://help.postageapp.com/kb/api/api-overview) • [Knowledge Base](http://help.postageapp.com/kb) • [Help Portal](http://help.postageapp.com)
7
7
 
8
8
  Installation
9
9
  ------------
10
10
 
11
- ### Rails 3.x
11
+ ### Rails 3 / 4
12
12
  Add postageapp gem to your Gemfile:
13
13
 
14
14
  gem 'postageapp'
@@ -18,7 +18,7 @@ Then from the Rails project's root run:
18
18
  bundle install
19
19
  script/rails generate postageapp --api-key PROJECT_API_KEY
20
20
 
21
- ### Rails 2.x
21
+ ### Rails 2
22
22
  In config/environment.rb add the following:
23
23
 
24
24
  config.gem 'postageapp'
@@ -106,7 +106,7 @@ Please note that `deliver` method will return `PostageApp::Response` object. Thi
106
106
  >> response.ok?
107
107
  => true
108
108
 
109
- ### Rails 3.x
109
+ ### Rails 3 / 4
110
110
 
111
111
  Here's an example of a mailer in Rails 3 environment:
112
112
 
@@ -158,7 +158,7 @@ class Notifier < PostageApp::Mailer
158
158
  end
159
159
  ```
160
160
 
161
- ### Rails 2.x
161
+ ### Rails 2
162
162
 
163
163
  Here's an example of a mailer you'd set in in a Rails 2 environment:
164
164
 
data/Rakefile CHANGED
@@ -1,34 +1,8 @@
1
- require 'rubygems'
2
-
3
1
  require 'bundler'
4
- begin
5
- Bundler.setup(:default, :development)
6
- rescue Bundler::BundlerError => e
7
- $stderr.puts e.message
8
- $stderr.puts "Run `bundle install` to install missing gems"
9
- exit e.status_code
10
- end
11
-
12
- require 'rake'
2
+ require 'rake/testtask'
13
3
 
14
- require 'jeweler'
15
- Jeweler::Tasks.new do |gem|
16
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = 'postageapp'
18
- gem.summary = 'Easier way to send email from web apps'
19
- gem.description = 'Gem that interfaces with PostageApp.com service to send emails from web apps'
20
- gem.email = 'oleg@twg.ca'
21
- gem.homepage = 'http://github.com/postageapp/postageapp-ruby'
22
- gem.authors = ['Oleg Khabarov, The Working Group Inc']
23
- gem.license = 'MIT'
24
- # Include your dependencies below. Runtime dependencies are required when using your gem,
25
- # and development dependencies are only needed for development (ie running rake tasks, tests, etc)
26
- # gem.add_runtime_dependency 'jabber4r', '> 0.1'
27
- # gem.add_development_dependency 'rspec', '> 1.2.3'
28
- end
29
- Jeweler::RubygemsDotOrgTasks.new
4
+ Bundler.require
30
5
 
31
- require 'rake/testtask'
32
6
  Rake::TestTask.new(:test) do |test|
33
7
  test.libs << 'lib' << 'test'
34
8
  test.pattern = 'test/**/*_test.rb'
@@ -4,7 +4,9 @@ require 'action_mailer/version'
4
4
  # Loading PostageApp::Mailer class depending on what action_mailer is
5
5
  # currently installed on the system. Assuming we're dealing only with
6
6
  # ones that come with Rails 2 and 3
7
- if ActionMailer::VERSION::MAJOR >= 3
7
+ if ActionMailer::VERSION::MAJOR == 4
8
+ require File.expand_path('../mailer/mailer_4', __FILE__)
9
+ elsif ActionMailer::VERSION::MAJOR == 3
8
10
  require File.expand_path('../mailer/mailer_3', __FILE__)
9
11
  else
10
12
  require File.expand_path('../mailer/mailer_2', __FILE__)
@@ -13,7 +15,7 @@ end
13
15
  # General helper methods for Request object to act more like TMail::Mail
14
16
  # of Mail for testing
15
17
  class PostageApp::Request
16
-
18
+
17
19
  # Getter and setter for headers. You can specify headers in the following
18
20
  # formats:
19
21
  # headers['Custom-Header'] = 'Custom Value'
@@ -28,23 +30,23 @@ class PostageApp::Request
28
30
  end
29
31
  self.arguments['headers']
30
32
  end
31
-
33
+
32
34
  def to
33
35
  out = self.arguments_to_send.dig('arguments', 'recipients')
34
36
  out.is_a?(Hash) ? out : [out].flatten
35
37
  end
36
-
38
+
37
39
  def from
38
40
  [self.arguments_to_send.dig('arguments', 'headers', 'from')].flatten
39
41
  end
40
-
42
+
41
43
  def subject
42
44
  self.arguments_to_send.dig('arguments', 'headers', 'subject')
43
45
  end
44
-
46
+
45
47
  def body
46
48
  out = self.arguments_to_send.dig('arguments', 'content')
47
49
  out.is_a?(Hash) ? out.values.join("\n\n") : out.to_s
48
50
  end
49
-
50
- end
51
+
52
+ end
@@ -0,0 +1,174 @@
1
+ # Postage::Mailer allows you to use/re-use existing mailers set up using
2
+ # ActionMailer. The only catch is to change inheritance from ActionMailer::Base
3
+ # to PostageApp::Mailer. Also don't forget to require 'postageapp/mailer'
4
+ #
5
+ # Here's an example of a valid PostageApp::Mailer class
6
+ #
7
+ # require 'postageapp/mailer'
8
+ #
9
+ # class Notifier < PostageApp::Mailer
10
+ # def signup_notification(recipient)
11
+ # mail(
12
+ # :to => recipient.email,
13
+ # :from => 'sender@test.test',
14
+ # :subject => 'Test Message'
15
+ # )
16
+ # end
17
+ # end
18
+ #
19
+ # Postage::Mailer introduces a few mailer methods specific to Postage:
20
+ #
21
+ # * postageapp_template - template name that is defined in your PostageApp project
22
+ # * postageapp_variables - extra variables you want to send along with the message
23
+ #
24
+ # Sending email
25
+ #
26
+ # request = Notifier.signup_notification(user) # creates PostageApp::Request object
27
+ # response = request.deliver # attempts to deliver the message and creates a PostageApp::Response
28
+ #
29
+ class PostageApp::Mailer < ActionMailer::Base
30
+
31
+ # Wrapper for creating attachments
32
+ # Attachments sent to PostageApp are in the following format:
33
+ # 'filename.ext' => {
34
+ # 'content_type' => 'content/type',
35
+ # 'content' => 'base64_encoded_content'
36
+ # }
37
+ class Attachments < Hash
38
+
39
+ def initialize(message)
40
+ @_message = message
41
+ message.arguments['attachments'] ||= { }
42
+ end
43
+
44
+ def []=(filename, attachment)
45
+ default_content_type = MIME::Types.type_for(filename).first.content_type rescue ''
46
+ if attachment.is_a?(Hash)
47
+ content_type = attachment[:content_type] || default_content_type
48
+ content = Base64.encode64(attachment[:body])
49
+ else
50
+ content_type = default_content_type
51
+ content = Base64.encode64(attachment)
52
+ end
53
+ @_message.arguments['attachments'][filename] = {
54
+ 'content_type' => content_type,
55
+ 'content' => content
56
+ }
57
+ end
58
+ end
59
+
60
+ # Instead of initializing Mail object, we prepare PostageApp::Request
61
+ def initialize(method_name = nil, *args)
62
+ super()
63
+ @_message = PostageApp::Request.new(:send_message)
64
+ process(method_name, *args) if method_name
65
+ end
66
+
67
+ # Possible to define custom uid. Should be sufficiently unique
68
+ def postageapp_uid(value = nil)
69
+ value ? @_message.uid = value : @_message.uid
70
+ end
71
+
72
+ def postageapp_api_key(value = nil)
73
+ value ? @_message.api_key = value : @_message.api_key
74
+ end
75
+
76
+ # In API call we can specify PostageApp template that will be used
77
+ # to generate content of the message
78
+ def postageapp_template(value = nil)
79
+ value ? @_message.arguments['template'] = value : @_message.arguments['template']
80
+ end
81
+
82
+ # Hash of variables that will be used to inject into the content
83
+ def postageapp_variables(value = nil)
84
+ value ? @_message.arguments['variables'] = value : @_message.arguments['variables']
85
+ end
86
+
87
+ def attachments
88
+ @_attachments ||= Attachments.new(@_message)
89
+ end
90
+
91
+ # Override for headers assignment
92
+ def headers(args=nil)
93
+ @_message.headers(args)
94
+ end
95
+
96
+ # Overriding method that prepares Mail object. This time we'll be
97
+ # contructing PostageApp::Request payload.
98
+ def mail(headers = {}, &block)
99
+ # Guard flag to prevent both the old and the new API from firing
100
+ # Should be removed when old API is removed
101
+ @_mail_was_called = true
102
+ m = @_message
103
+
104
+ # At the beginning, do not consider class default for parts order neither content_type
105
+ content_type = headers[:content_type]
106
+
107
+ # Call all the procs (if any)
108
+ class_default = self.class.default
109
+ default_values = class_default.merge(self.class.default) do |k,v|
110
+ v.respond_to?(:call) ? v.bind(self).call : v
111
+ end
112
+
113
+ # Handle defaults
114
+ headers = headers.reverse_merge(default_values)
115
+ headers[:subject] ||= default_i18n_subject
116
+
117
+ # Apply charset at the beginning so all fields are properly quoted
118
+ charset = headers[:charset]
119
+
120
+ # Set configure delivery behavior
121
+ wrap_delivery_behavior!(headers.delete(:delivery_method),headers.delete(:delivery_method_options))
122
+
123
+ # Assigning recipients
124
+ m.arguments['recipients'] = headers.delete(:to)
125
+
126
+ # Assign all headers except parts_order, content_type and body
127
+ assignable = headers.except(:parts_order, :content_type, :body, :template_name, :template_path)
128
+ m.headers.merge!(assignable)
129
+
130
+ # Render the templates and blocks
131
+ responses = collect_responses(headers, &block)
132
+ create_parts_from_responses(m, responses)
133
+
134
+ m
135
+ end
136
+
137
+ protected
138
+ def create_parts_from_responses(m, responses) #:nodoc:
139
+ map = {
140
+ 'html' => 'text/html',
141
+ 'text' => 'text/plain'
142
+ }
143
+ content = m.arguments['content'] ||= {}
144
+ responses.each do |part|
145
+ content_type = map[part[:content_type]] || part[:content_type]
146
+ content[content_type] = part[:body]
147
+ end
148
+ end
149
+
150
+ end
151
+
152
+ # A set of methods that are useful when request needs to behave as Mail
153
+ class PostageApp::Request
154
+
155
+ attr_accessor :delivery_handler,
156
+ :perform_deliveries,
157
+ :raise_delivery_errors
158
+
159
+ # Either doing an actual send, or passing it along to Mail::TestMailer
160
+ # Probably not the best way as we're skipping way too many intermediate methods
161
+ def deliver
162
+ if @delivery_method == Mail::TestMailer
163
+ @delivery_method.deliveries << self
164
+ else
165
+ self.send
166
+ end
167
+ end
168
+
169
+ # Not 100% on this, but I need to assign this so I can properly handle deliver method
170
+ def delivery_method(method = nil, settings = {})
171
+ @delivery_method = method
172
+ end
173
+
174
+ end
@@ -1,7 +1,3 @@
1
1
  module PostageApp
2
- VERSION = begin
3
- IO.read(File.join(File.dirname(__FILE__), '/../../VERSION')).chomp
4
- rescue
5
- 'UNKNOWN'
6
- end
2
+ VERSION = "1.0.20"
7
3
  end
data/postageapp.gemspec CHANGED
@@ -1,101 +1,20 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
5
2
 
6
- Gem::Specification.new do |s|
7
- s.name = "postageapp"
8
- s.version = "1.0.19"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Oleg Khabarov, The Working Group Inc"]
12
- s.date = "2013-03-19"
13
- s.description = "Gem that interfaces with PostageApp.com service to send emails from web apps"
14
- s.email = "oleg@twg.ca"
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.md"
18
- ]
19
- s.files = [
20
- ".travis.yml",
21
- "Gemfile",
22
- "LICENSE",
23
- "README.md",
24
- "Rakefile",
25
- "VERSION",
26
- "generators/postageapp/postageapp_generator.rb",
27
- "generators/postageapp/templates/initializer.rb",
28
- "generators/postageapp/templates/postageapp_tasks.rake",
29
- "lib/generators/postageapp/postageapp_generator.rb",
30
- "lib/postageapp.rb",
31
- "lib/postageapp/configuration.rb",
32
- "lib/postageapp/failed_request.rb",
33
- "lib/postageapp/logger.rb",
34
- "lib/postageapp/mailer.rb",
35
- "lib/postageapp/mailer/mailer_2.rb",
36
- "lib/postageapp/mailer/mailer_3.rb",
37
- "lib/postageapp/rails/rails.rb",
38
- "lib/postageapp/rails/railtie.rb",
39
- "lib/postageapp/request.rb",
40
- "lib/postageapp/response.rb",
41
- "lib/postageapp/utils.rb",
42
- "lib/postageapp/version.rb",
43
- "postageapp.gemspec",
44
- "rails/init.rb",
45
- "test/configuration_test.rb",
46
- "test/failed_request_test.rb",
47
- "test/gemfiles/Gemfile.rails-2.3.x",
48
- "test/gemfiles/Gemfile.rails-3.0.x",
49
- "test/gemfiles/Gemfile.rails-3.1.x",
50
- "test/gemfiles/Gemfile.rails-3.2.x",
51
- "test/gemfiles/Gemfile.rails-4.0.x",
52
- "test/helper.rb",
53
- "test/live_test.rb",
54
- "test/mailer/action_mailer_2/notifier.rb",
55
- "test/mailer/action_mailer_2/notifier/with_body_and_attachment.erb",
56
- "test/mailer/action_mailer_2/notifier/with_custom_postage_variables.text.html.erb",
57
- "test/mailer/action_mailer_2/notifier/with_custom_postage_variables.text.plain.erb",
58
- "test/mailer/action_mailer_2/notifier/with_html_and_text_views.text.html.erb",
59
- "test/mailer/action_mailer_2/notifier/with_html_and_text_views.text.plain.erb",
60
- "test/mailer/action_mailer_2/notifier/with_simple_view.erb",
61
- "test/mailer/action_mailer_2/notifier/with_text_only_view.text.plain.erb",
62
- "test/mailer/action_mailer_3/layouts/notifier.html.erb",
63
- "test/mailer/action_mailer_3/notifier.rb",
64
- "test/mailer/action_mailer_3/notifier/with_custom_postage_variables.html.erb",
65
- "test/mailer/action_mailer_3/notifier/with_custom_postage_variables.text.erb",
66
- "test/mailer/action_mailer_3/notifier/with_html_and_text_views.html.erb",
67
- "test/mailer/action_mailer_3/notifier/with_html_and_text_views.text.erb",
68
- "test/mailer/action_mailer_3/notifier/with_old_api.html.erb",
69
- "test/mailer/action_mailer_3/notifier/with_old_api.text.erb",
70
- "test/mailer/action_mailer_3/notifier/with_simple_view.erb",
71
- "test/mailer/action_mailer_3/notifier/with_text_only_view.text.erb",
72
- "test/mailer_2_test.rb",
73
- "test/mailer_3_test.rb",
74
- "test/mailer_helper_methods_test.rb",
75
- "test/postageapp_test.rb",
76
- "test/rails_initialization_test.rb",
77
- "test/request_test.rb",
78
- "test/response_test.rb"
79
- ]
80
- s.homepage = "http://github.com/postageapp/postageapp-ruby"
81
- s.licenses = ["MIT"]
82
- s.require_paths = ["lib"]
83
- s.rubygems_version = "1.8.23"
84
- s.summary = "Easier way to send email from web apps"
85
-
86
- if s.respond_to? :specification_version then
87
- s.specification_version = 3
88
-
89
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
90
- s.add_runtime_dependency(%q<json>, [">= 0"])
91
- s.add_development_dependency(%q<jeweler>, [">= 0"])
92
- else
93
- s.add_dependency(%q<json>, [">= 0"])
94
- s.add_dependency(%q<jeweler>, [">= 0"])
95
- end
96
- else
97
- s.add_dependency(%q<json>, [">= 0"])
98
- s.add_dependency(%q<jeweler>, [">= 0"])
99
- end
100
- end
3
+ $:.unshift File.expand_path('../lib', __FILE__)
4
+ require 'postageapp/version'
101
5
 
6
+ Gem::Specification.new do |s|
7
+ s.name = "postageapp"
8
+ s.version = PostageApp::VERSION
9
+ s.authors = ["Oleg Khabarov", "The Working Group Inc"]
10
+ s.email = ["oleg@khabarov.ca"]
11
+ s.homepage = "http://github.com/twg/api_docs"
12
+ s.summary = "Easier way to send email from web apps"
13
+ s.description = "Gem that interfaces with PostageApp.com service to send emails from web apps"
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.platform = Gem::Platform::RUBY
17
+ s.require_paths = ['lib']
18
+
19
+ s.add_dependency 'json'
20
+ end
@@ -2,10 +2,6 @@ source 'http://rubygems.org'
2
2
 
3
3
  gem 'json'
4
4
 
5
- group :development do
6
- gem 'jeweler'
7
- end
8
-
9
5
  group :test do
10
6
  gem 'rails', '~> 2.3.0'
11
7
  gem 'mocha'
@@ -2,10 +2,6 @@ source 'http://rubygems.org'
2
2
 
3
3
  gem 'json'
4
4
 
5
- group :development do
6
- gem 'jeweler'
7
- end
8
-
9
5
  group :test do
10
6
  gem 'rails', '~> 3.0.0'
11
7
  gem 'mocha'
@@ -2,10 +2,6 @@ source 'http://rubygems.org'
2
2
 
3
3
  gem 'json'
4
4
 
5
- group :development do
6
- gem 'jeweler'
7
- end
8
-
9
5
  group :test do
10
6
  gem 'rails', '~> 3.1.0'
11
7
  gem 'mocha'
@@ -2,10 +2,6 @@ source 'http://rubygems.org'
2
2
 
3
3
  gem 'json'
4
4
 
5
- group :development do
6
- gem 'jeweler'
7
- end
8
-
9
5
  group :test do
10
6
  gem 'rails', '~> 3.2.0'
11
7
  gem 'mocha'
@@ -2,11 +2,7 @@ source 'http://rubygems.org'
2
2
 
3
3
  gem 'json'
4
4
 
5
- group :development do
6
- gem 'jeweler'
7
- end
8
-
9
5
  group :test do
10
- gem 'rails', '~> 4.0.0.beta1'
6
+ gem 'rails', '~> 4.0.0.rc2'
11
7
  gem 'mocha'
12
8
  end
data/test/helper.rb CHANGED
@@ -8,8 +8,7 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
8
8
  require 'postageapp'
9
9
  require 'postageapp/mailer'
10
10
 
11
- begin require 'redgreen' unless ENV['TM_FILEPATH']; rescue LoadError; end
12
- require 'mocha'
11
+ require 'mocha/setup'
13
12
 
14
13
  class Test::Unit::TestCase
15
14
 
@@ -2,69 +2,69 @@ require File.expand_path('../helper', __FILE__)
2
2
 
3
3
  # tests for ActionMailer bundled with Rails 3
4
4
  class Mailer3Test < Test::Unit::TestCase
5
-
6
- if ActionMailer::VERSION::MAJOR >= 3
7
-
5
+
6
+ if ActionMailer::VERSION::MAJOR == 3
7
+
8
8
  require File.expand_path('../mailer/action_mailer_3/notifier', __FILE__)
9
9
  puts "\e[0m\e[32mRunning #{File.basename(__FILE__)} for action_mailer #{ActionMailer::VERSION::STRING}\e[0m"
10
-
10
+
11
11
  def test_create_with_no_content
12
12
  mail = Notifier.with_no_content
13
13
  assert_equal ({}), mail.arguments['content']
14
14
  end
15
-
15
+
16
16
  def test_create_with_simple_view
17
17
  mail = Notifier.with_simple_view
18
18
  assert_equal 'with layout simple view content', mail.arguments['content']['text/html']
19
19
  end
20
-
20
+
21
21
  def test_create_with_text_only_view
22
22
  mail = Notifier.with_text_only_view
23
23
  assert_equal 'text content', mail.arguments['content']['text/plain']
24
24
  end
25
-
25
+
26
26
  def test_create_with_html_and_text_views
27
27
  mail = Notifier.with_html_and_text_views
28
28
  assert_equal 'text content', mail.arguments['content']['text/plain']
29
29
  assert_equal 'with layout html content', mail.arguments['content']['text/html']
30
30
  end
31
-
31
+
32
32
  def test_deliver_with_html_and_text_views
33
33
  mock_successful_send
34
-
34
+
35
35
  assert response = Notifier.with_html_and_text_views.deliver
36
36
  assert response.is_a?(PostageApp::Response)
37
37
  assert response.ok?
38
38
  end
39
-
39
+
40
40
  def test_create_with_body_and_attachment_as_file
41
41
  mail = Notifier.with_body_and_attachment_as_file
42
42
  assert_equal 'manual body text', mail.arguments['content']['text/html']
43
43
  assert_equal 'text/plain', mail.arguments['attachments']['sample_file.txt']['content_type']
44
44
  assert_equal "RmlsZSBjb250ZW50\n", mail.arguments['attachments']['sample_file.txt']['content']
45
45
  end
46
-
46
+
47
47
  def test_create_with_body_and_attachment_as_hash
48
48
  mail = Notifier.with_body_and_attachment_as_hash
49
49
  assert_equal 'manual body text', mail.arguments['content']['text/html']
50
50
  assert_equal 'text/rich', mail.arguments['attachments']['sample_file.txt']['content_type']
51
51
  assert_equal "RmlsZSBjb250ZW50\n", mail.arguments['attachments']['sample_file.txt']['content']
52
52
  end
53
-
53
+
54
54
  def test_create_with_custom_postage_variables
55
55
  mail = Notifier.with_custom_postage_variables
56
56
  args = mail.arguments_to_send
57
-
57
+
58
58
  assert_equal 'custom_uid', args['uid']
59
59
  assert_equal 'custom_api_key', args['api_key']
60
-
60
+
61
61
  args = args['arguments']
62
-
62
+
63
63
  assert_equal ({
64
64
  'test1@test.test' => { 'name' => 'Test 1'},
65
65
  'test2@test.test' => { 'name' => 'Test 2'}
66
66
  }), args['recipients']
67
-
67
+
68
68
  assert_equal 'test-template', args['template']
69
69
  assert_equal ({ 'variable' => 'value' }), args['variables']
70
70
  assert_equal 'CustomValue1', args['headers']['CustomHeader1']
@@ -72,23 +72,23 @@ class Mailer3Test < Test::Unit::TestCase
72
72
  assert_equal 'text content', args['content']['text/plain']
73
73
  assert_equal 'with layout html content', args['content']['text/html']
74
74
  end
75
-
75
+
76
76
  def test_create_with_recipient_override
77
77
  PostageApp.configuration.recipient_override = 'oleg@test.test'
78
78
  assert mail = Notifier.with_html_and_text_views
79
79
  assert_equal 'test@test.test', mail.arguments['recipients']
80
80
  assert_equal 'oleg@test.test', mail.arguments_to_send['arguments']['recipient_override']
81
81
  end
82
-
82
+
83
83
  def test_deliver_for_test_mailer
84
84
  mail = Notifier.with_simple_view
85
85
  mail.delivery_method(Mail::TestMailer)
86
86
  mail.deliver
87
87
  assert_equal [mail], ActionMailer::Base.deliveries
88
88
  end
89
-
89
+
90
90
  else
91
91
  puts "\e[0m\e[31mSkipping #{File.basename(__FILE__)}\e[0m"
92
92
  def test_nothing ; end
93
93
  end
94
- end
94
+ end
@@ -0,0 +1,89 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ # tests for ActionMailer bundled with Rails 3
4
+ class Mailer4Test < Test::Unit::TestCase
5
+
6
+ if ActionMailer::VERSION::MAJOR == 4
7
+
8
+ require File.expand_path('../mailer/action_mailer_3/notifier', __FILE__)
9
+ puts "\e[0m\e[32mRunning #{File.basename(__FILE__)} for action_mailer #{ActionMailer::VERSION::STRING}\e[0m"
10
+
11
+ def test_create_with_simple_view
12
+ mail = Notifier.with_simple_view
13
+ assert_equal 'with layout simple view content', mail.arguments['content']['text/html']
14
+ end
15
+
16
+ def test_create_with_text_only_view
17
+ mail = Notifier.with_text_only_view
18
+ assert_equal 'text content', mail.arguments['content']['text/plain']
19
+ end
20
+
21
+ def test_create_with_html_and_text_views
22
+ mail = Notifier.with_html_and_text_views
23
+ assert_equal 'text content', mail.arguments['content']['text/plain']
24
+ assert_equal 'with layout html content', mail.arguments['content']['text/html']
25
+ end
26
+
27
+ def test_deliver_with_html_and_text_views
28
+ mock_successful_send
29
+
30
+ assert response = Notifier.with_html_and_text_views.deliver
31
+ assert response.is_a?(PostageApp::Response)
32
+ assert response.ok?
33
+ end
34
+
35
+ def test_create_with_body_and_attachment_as_file
36
+ mail = Notifier.with_body_and_attachment_as_file
37
+ assert_equal 'manual body text', mail.arguments['content']['text/html']
38
+ assert_equal 'text/plain', mail.arguments['attachments']['sample_file.txt']['content_type']
39
+ assert_equal "RmlsZSBjb250ZW50\n", mail.arguments['attachments']['sample_file.txt']['content']
40
+ end
41
+
42
+ def test_create_with_body_and_attachment_as_hash
43
+ mail = Notifier.with_body_and_attachment_as_hash
44
+ assert_equal 'manual body text', mail.arguments['content']['text/html']
45
+ assert_equal 'text/rich', mail.arguments['attachments']['sample_file.txt']['content_type']
46
+ assert_equal "RmlsZSBjb250ZW50\n", mail.arguments['attachments']['sample_file.txt']['content']
47
+ end
48
+
49
+ def test_create_with_custom_postage_variables
50
+ mail = Notifier.with_custom_postage_variables
51
+ args = mail.arguments_to_send
52
+
53
+ assert_equal 'custom_uid', args['uid']
54
+ assert_equal 'custom_api_key', args['api_key']
55
+
56
+ args = args['arguments']
57
+
58
+ assert_equal ({
59
+ 'test1@test.test' => { 'name' => 'Test 1'},
60
+ 'test2@test.test' => { 'name' => 'Test 2'}
61
+ }), args['recipients']
62
+
63
+ assert_equal 'test-template', args['template']
64
+ assert_equal ({ 'variable' => 'value' }), args['variables']
65
+ assert_equal 'CustomValue1', args['headers']['CustomHeader1']
66
+ assert_equal 'CustomValue2', args['headers']['CustomHeader2']
67
+ assert_equal 'text content', args['content']['text/plain']
68
+ assert_equal 'with layout html content', args['content']['text/html']
69
+ end
70
+
71
+ def test_create_with_recipient_override
72
+ PostageApp.configuration.recipient_override = 'oleg@test.test'
73
+ assert mail = Notifier.with_html_and_text_views
74
+ assert_equal 'test@test.test', mail.arguments['recipients']
75
+ assert_equal 'oleg@test.test', mail.arguments_to_send['arguments']['recipient_override']
76
+ end
77
+
78
+ def test_deliver_for_test_mailer
79
+ mail = Notifier.with_simple_view
80
+ mail.delivery_method(Mail::TestMailer)
81
+ mail.deliver
82
+ assert_equal [mail], ActionMailer::Base.deliveries
83
+ end
84
+
85
+ else
86
+ puts "\e[0m\e[31mSkipping #{File.basename(__FILE__)}\e[0m"
87
+ def test_nothing ; end
88
+ end
89
+ end
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: postageapp
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.19
4
+ version: 1.0.20
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
- - Oleg Khabarov, The Working Group Inc
8
+ - Oleg Khabarov
9
+ - The Working Group Inc
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2013-03-19 00:00:00.000000000 Z
13
+ date: 2013-06-19 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: json
@@ -27,37 +28,20 @@ dependencies:
27
28
  - - ! '>='
28
29
  - !ruby/object:Gem::Version
29
30
  version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: jeweler
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
31
  description: Gem that interfaces with PostageApp.com service to send emails from web
47
32
  apps
48
- email: oleg@twg.ca
33
+ email:
34
+ - oleg@khabarov.ca
49
35
  executables: []
50
36
  extensions: []
51
- extra_rdoc_files:
52
- - LICENSE
53
- - README.md
37
+ extra_rdoc_files: []
54
38
  files:
39
+ - .gitignore
55
40
  - .travis.yml
56
41
  - Gemfile
57
42
  - LICENSE
58
43
  - README.md
59
44
  - Rakefile
60
- - VERSION
61
45
  - generators/postageapp/postageapp_generator.rb
62
46
  - generators/postageapp/templates/initializer.rb
63
47
  - generators/postageapp/templates/postageapp_tasks.rake
@@ -69,6 +53,7 @@ files:
69
53
  - lib/postageapp/mailer.rb
70
54
  - lib/postageapp/mailer/mailer_2.rb
71
55
  - lib/postageapp/mailer/mailer_3.rb
56
+ - lib/postageapp/mailer/mailer_4.rb
72
57
  - lib/postageapp/rails/rails.rb
73
58
  - lib/postageapp/rails/railtie.rb
74
59
  - lib/postageapp/request.rb
@@ -106,14 +91,14 @@ files:
106
91
  - test/mailer/action_mailer_3/notifier/with_text_only_view.text.erb
107
92
  - test/mailer_2_test.rb
108
93
  - test/mailer_3_test.rb
94
+ - test/mailer_4_test.rb
109
95
  - test/mailer_helper_methods_test.rb
110
96
  - test/postageapp_test.rb
111
97
  - test/rails_initialization_test.rb
112
98
  - test/request_test.rb
113
99
  - test/response_test.rb
114
- homepage: http://github.com/postageapp/postageapp-ruby
115
- licenses:
116
- - MIT
100
+ homepage: http://github.com/twg/api_docs
101
+ licenses: []
117
102
  post_install_message:
118
103
  rdoc_options: []
119
104
  require_paths:
@@ -124,9 +109,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
124
109
  - - ! '>='
125
110
  - !ruby/object:Gem::Version
126
111
  version: '0'
127
- segments:
128
- - 0
129
- hash: -4418215173582441535
130
112
  required_rubygems_version: !ruby/object:Gem::Requirement
131
113
  none: false
132
114
  requirements:
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 1.0.19