maily 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -39,14 +39,14 @@ This installator makes some tasks for you:
39
39
  * Adds an initializer (into `config/initializers/maily.rb`) to customize some settings
40
40
  * Adds a file (into `lib/maily_hooks.rb`) to define hooks
41
41
 
42
- ## Initializer
42
+ ## Initialization and configuration
43
43
  You should configure Maily via this initializer. You can set these options per environment:
44
44
 
45
45
  ```ruby
46
46
  Maily.enabled = ENV['MAILY_ENABLED']
47
47
  ```
48
48
 
49
- This is a sample of file with the full list of options:
49
+ This is a sample of the file with the full list of options:
50
50
 
51
51
  ```ruby
52
52
  # config/initializers/maily.rb
@@ -64,10 +64,16 @@ Maily.setup do |config|
64
64
  # config.available_locales = [:en, :es, :pt, :fr]
65
65
 
66
66
  # Define parent controller. Allow to run engine under a custom controller
67
- # config.base_controller = 'AdminController'
67
+ # config.base_controller = '::AdminController'
68
68
  end
69
69
  ```
70
70
 
71
+ ### Templates edition (`allow_edition` option)
72
+ This feature was designed for `development` environment. Since it's just a file edition and running `production` mode, code is not reloaded between requests, Rails doesn't take in account this change (without restarting the server). Also, allow arbitrary ruby code evaluation is potentially dangerous, that's not a good idea for `production`.
73
+
74
+ So, templates edition is not allowed running `production` mode.
75
+
76
+
71
77
  ## Hooks
72
78
  Most of emails need to populate data to consume it and do intersting things. Hooks are used to define this data with a little DSL. Example:
73
79
 
@@ -95,10 +101,35 @@ Maily.hooks_for('YourMailerClass') do |mailer|
95
101
  end
96
102
  ```
97
103
 
104
+ ## Customize Authorization
105
+ By default `Maily` runs under `ActionController::Base`, but you are able to customize that parent controller (`Maily.base_controller` option) in order to achieve (using `before_action`) a kind of access control. For example, set a different base controller:
106
+
107
+ ```ruby
108
+ Maily.setup do |config|
109
+ ...
110
+ config.base_controller = '::AdminController'
111
+ ...
112
+ end
113
+ ```
114
+
115
+ And write your own authorization rules in the defined `base_controller`:
116
+
117
+ ```ruby
118
+ class AdminController < ActionController::Base
119
+ before_action :maily_authorized?
120
+
121
+ private
122
+
123
+ def maily_authorized?
124
+ (current_user && current_user.admin?) || raise('You don't have access to this section!')
125
+ end
126
+ end
127
+ ```
128
+
98
129
  ## Notes
99
130
  Rails 4.1 introduced a built-in mechanism to preview the application emails. It is in fact a port of [basecamp/mail_view](https://github.com/basecamp/mail_view) gem to the core.
100
131
 
101
- Alternatively, there are some other plugins to get a similar functionality with different approaches. For example, [ryanb/letter_opener](https://github.com/ryanb/letter_opener) or [MailCatcher](https://github.com/sj26/mailcatcher).
132
+ Alternatively, there are some other plugins to get a similar functionality with different approaches and options. For example, [ryanb/letter_opener](https://github.com/ryanb/letter_opener), [MailCatcher](https://github.com/sj26/mailcatcher) or [Rails Email Preview](https://github.com/glebm/rails_email_preview).
102
133
 
103
134
  ## License
104
135
  Copyright (c) 2013-2014 Marc Anguera. Maily is released under the [MIT](MIT-LICENSE) License.
@@ -1,6 +1,5 @@
1
1
  module Maily
2
2
  class ApplicationController < Maily.base_controller.constantize
3
-
4
3
  before_filter :maily_enabled?
5
4
 
6
5
  layout 'maily/application'
@@ -1,16 +1,16 @@
1
1
  Maily.setup do |config|
2
- # On/off engine. True by default
2
+ # On/off engine
3
3
  # config.enabled = Rails.env.production? ? false : true
4
4
 
5
- # Allow views edition. True by default
5
+ # Allow templates edition
6
6
  # config.allow_edition = Rails.env.production? ? false : true
7
7
 
8
- # Allow deliveries. True by default
8
+ # Allow deliveries
9
9
  # config.allow_delivery = Rails.env.production? ? false : true
10
10
 
11
11
  # I18n.available_locales by default
12
12
  # config.available_locales = [:en, :es, :pt, :fr]
13
13
 
14
- # 'ActionController::Base' by default
15
- # config.base_controller = 'FooController'
14
+ # Run maily under different controller. 'ActionController::Base' by default
15
+ # config.base_controller = 'AdminController'
16
16
  end
data/lib/maily.rb CHANGED
@@ -5,19 +5,18 @@ require 'maily/email'
5
5
 
6
6
  module Maily
7
7
  class << self
8
-
9
8
  attr_accessor :enabled, :allow_edition, :allow_delivery, :available_locales, :base_controller
10
9
 
11
10
  def init!
12
- self.enabled = true
13
- self.allow_edition = true
14
- self.allow_delivery = true
11
+ self.enabled = Rails.env.production? ? false : true
12
+ self.allow_edition = Rails.env.production? ? false : true
13
+ self.allow_delivery = Rails.env.production? ? false : true
15
14
  self.available_locales = I18n.available_locales
16
15
  self.base_controller = 'ActionController::Base'
17
16
  end
18
17
 
19
18
  def load_emails_and_hooks
20
- # Load emails
19
+ # Load emails from file system
21
20
  Dir[Rails.root + 'app/mailers/*.rb'].each do |mailer|
22
21
  klass = File.basename(mailer, '.rb')
23
22
  methods = klass.camelize.constantize.send(:instance_methods, false)
@@ -41,8 +40,10 @@ module Maily
41
40
 
42
41
  def allowed_action?(action)
43
42
  case action.to_sym
44
- when :edit, :update
43
+ when :edit,
45
44
  allow_edition
45
+ when :update
46
+ allow_edition && !Rails.env.production?
46
47
  when :deliver
47
48
  allow_delivery
48
49
  end
data/lib/maily/email.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  module Maily
2
2
  class Email
3
-
4
3
  attr_accessor :name, :mailer, :arguments, :template_path
5
4
 
6
5
  def initialize(name, mailer)
data/lib/maily/mailer.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  module Maily
2
2
  class Mailer
3
-
4
3
  cattr_accessor :collection
5
4
  attr_accessor :name, :emails
6
5
 
data/lib/maily/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Maily
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.3"
3
3
  end
data/maily.gemspec CHANGED
@@ -10,8 +10,8 @@ Gem::Specification.new do |s|
10
10
  s.authors = ["markets"]
11
11
  s.email = ["srmarc.ai@gmail.com"]
12
12
  s.homepage = "https://github.com/markets/maily"
13
- s.summary = "Rails Engine to preview emails in a browser."
14
- s.description = "Rails Engine to preview emails in a browser."
13
+ s.summary = "Rails Engine to preview emails in the browser."
14
+ s.description = "Rails Engine to preview, follow up, test and edit the emails of your applications in the browser"
15
15
  s.license = "MIT"
16
16
 
17
17
  s.files = `git ls-files`.split($/)
data/spec/dummy/README.md CHANGED
@@ -1,3 +1,9 @@
1
1
  # Dummy App
2
2
 
3
- Dummy application for testing Maily
3
+ Dummy application for testing Maily.
4
+
5
+ Run test suite:
6
+
7
+ ```
8
+ bundle exec rake
9
+ ```
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maily
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-04-09 00:00:00.000000000 Z
12
+ date: 2014-06-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -43,7 +43,8 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
- description: Rails Engine to preview emails in a browser.
46
+ description: Rails Engine to preview, follow up, test and edit the emails of your
47
+ applications in the browser
47
48
  email:
48
49
  - srmarc.ai@gmail.com
49
50
  executables: []
@@ -150,7 +151,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
150
151
  version: '0'
151
152
  segments:
152
153
  - 0
153
- hash: -4181981977769088006
154
+ hash: 1797094736581911098
154
155
  required_rubygems_version: !ruby/object:Gem::Requirement
155
156
  none: false
156
157
  requirements:
@@ -159,13 +160,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
159
160
  version: '0'
160
161
  segments:
161
162
  - 0
162
- hash: -4181981977769088006
163
+ hash: 1797094736581911098
163
164
  requirements: []
164
165
  rubyforge_project:
165
166
  rubygems_version: 1.8.23
166
167
  signing_key:
167
168
  specification_version: 3
168
- summary: Rails Engine to preview emails in a browser.
169
+ summary: Rails Engine to preview emails in the browser.
169
170
  test_files:
170
171
  - spec/dummy/README.md
171
172
  - spec/dummy/Rakefile