kelredd-sinatra-helpers 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -6,9 +6,20 @@ This is a ruby gem with a bunch of helpers to make Sinatra more useful.
6
6
 
7
7
  === Environment Tests
8
8
 
9
+ Have environment tests like development? and production? available in your app code
10
+
9
11
  === Erb Helpers
10
12
 
11
- === Mailer
13
+ Helpful view template helpers for partial rendering and html generation. See
14
+ http://github.com/kelredd/useful/tree/master/lib/useful/erb_helpers/ for more info.
15
+
16
+ === Sprockets
17
+
18
+ Coming.
19
+
20
+ === ActiveRecord
21
+
22
+ Coming.
12
23
 
13
24
  == Installation
14
25
 
data/Rakefile CHANGED
@@ -17,8 +17,7 @@ spec = Gem::Specification.new do |s|
17
17
  s.files = %w(README.rdoc Rakefile) + Dir.glob("{lib}/**/*")
18
18
  # s.executables = ['sinatra-helpers']
19
19
 
20
- s.add_dependency('kelredd-useful', '>= 0.1.25')
21
- s.add_dependency('tmail', '>= 1.2.3.0')
20
+ s.add_dependency('kelredd-useful', '>= 0.2.0')
22
21
  end
23
22
 
24
23
  Rake::GemPackageTask.new(spec) do |pkg|
@@ -1,5 +1,7 @@
1
1
  require 'sinatra/base'
2
2
 
3
+ module SinatraHelpers; end
4
+
3
5
  module SinatraHelpers::EnvironmentTests
4
6
 
5
7
  def production?
@@ -1,13 +1,17 @@
1
+ require 'erb'
1
2
  require 'sinatra/base'
2
3
 
4
+ module SinatraHelpers; end
5
+ module SinatraHelpers::Erb; end
6
+
3
7
  module SinatraHelpers::Erb::Partials
4
8
 
5
- # helper to emulate rails 'render :partial' helper, using erb
9
+ # helper to emulate rails' 'render :partial' helper, using erb
6
10
  # => taken from the sinatra book, http://sinatra-book.gittr.com/#implemention_of_rails_style_partials
7
- # Render the page once:
11
+ # Render the partial once:
8
12
  # Usage: partial :foo
9
13
  #
10
- # foo will be rendered once for each element in the array, passing in a local variable named "foo"
14
+ # foo partial will be rendered once for each element in the array, passing in a local variable named "foo"
11
15
  # Usage: partial :foo, :collection => @my_foos
12
16
  def partial(template, options={})
13
17
  options.merge!(:layout => false)
@@ -17,14 +21,18 @@ module SinatraHelpers::Erb::Partials
17
21
  template = File.join(path).to_sym
18
22
  raise 'partial collection specified but is nil' if options.has_key?(:collection) && options[:collection].nil?
19
23
  if collection = options.delete(:collection)
24
+ options.delete(:object) # ignore any object passed in when using :collection
20
25
  counter = 0
21
26
  collection.inject([]) do |buffer, member|
22
27
  counter += 1
23
- buffer << erb(template, options.merge(:locals => {object => member, "#{object}_counter".to_sym => counter}))
28
+ options[:locals] ||= {}
29
+ options[:locals].merge!({object => member, "#{object}_counter".to_sym => counter})
30
+ buffer << erb(template, options)
24
31
  end.join("\n")
25
32
  else
26
33
  if member = options.delete(:object)
27
- options.merge!(:locals => {object => member})
34
+ options[:locals] ||= {}
35
+ options[:locals].merge!({object => member})
28
36
  end
29
37
  erb(template, options)
30
38
  end
@@ -33,3 +41,4 @@ module SinatraHelpers::Erb::Partials
33
41
  end
34
42
 
35
43
  Sinatra::Application.helpers SinatraHelpers::Erb::Partials
44
+
@@ -1,4 +1,9 @@
1
- module SinatraHelpers::Erb; end
2
1
  Dir[File.join(File.dirname(__FILE__), "erb" ,"*.rb")].each do |file|
3
2
  require "sinatra_helpers/erb/#{File.basename(file, ".rb")}"
4
3
  end
4
+
5
+ require "useful/erb_helpers"
6
+ Sinatra::Application.helpers Useful::ErbHelpers::Tags
7
+ Sinatra::Application.helpers Useful::ErbHelpers::Links
8
+ Sinatra::Application.helpers Useful::ErbHelpers::Forms
9
+ Sinatra::Application.helpers Useful::ErbHelpers::Proper
@@ -3,7 +3,7 @@ module SinatraHelpers
3
3
 
4
4
  MAJOR = 0
5
5
  MINOR = 1
6
- TINY = 0
6
+ TINY = 1
7
7
 
8
8
  def self.to_s # :nodoc:
9
9
  [MAJOR, MINOR, TINY].join('.')
@@ -1,4 +1,2 @@
1
- module SinatraHelpers; end
2
1
  require 'sinatra_helpers/environment_tests'
3
2
  require 'sinatra_helpers/erb'
4
- require 'sinatra_helpers/mailer'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kelredd-sinatra-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kelly Redding
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-13 00:00:00 -05:00
12
+ date: 2009-11-07 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,17 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.1.25
24
- version:
25
- - !ruby/object:Gem::Dependency
26
- name: tmail
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 1.2.3.0
23
+ version: 0.2.0
34
24
  version:
35
25
  description:
36
26
  email: kelly@kelredd.com
@@ -44,17 +34,8 @@ files:
44
34
  - README.rdoc
45
35
  - Rakefile
46
36
  - lib/sinatra_helpers/environment_tests.rb
47
- - lib/sinatra_helpers/erb/error_pages.rb
48
- - lib/sinatra_helpers/erb/forms.rb
49
- - lib/sinatra_helpers/erb/helpers.rb
50
- - lib/sinatra_helpers/erb/links.rb
51
37
  - lib/sinatra_helpers/erb/partials.rb
52
- - lib/sinatra_helpers/erb/tags.rb
53
38
  - lib/sinatra_helpers/erb.rb
54
- - lib/sinatra_helpers/mailer/base.rb
55
- - lib/sinatra_helpers/mailer/exceptions.rb
56
- - lib/sinatra_helpers/mailer/tls.rb
57
- - lib/sinatra_helpers/mailer.rb
58
39
  - lib/sinatra_helpers/version.rb
59
40
  - lib/sinatra_helpers.rb
60
41
  has_rdoc: true
@@ -1,19 +0,0 @@
1
- require 'sinatra/base'
2
-
3
- module SinatraHelpers::Erb::ErrorPages
4
-
5
- def self.registered(app)
6
- app.configure :production do
7
- app.not_found do
8
- erb :'404.html'
9
- end
10
- app.error do
11
- @err = request.env['sinatra_error']
12
- erb :'500.html'
13
- end
14
- end
15
- end
16
-
17
- end
18
-
19
- Sinatra::Application.register SinatraHelpers::Erb::ErrorPages
@@ -1,125 +0,0 @@
1
- require 'sinatra/base'
2
- require 'sinatra_helpers/erb/helpers')
3
- require 'sinatra_helpers/erb/tags')
4
-
5
- module SinatraHelpers::Erb::Forms
6
-
7
- include SinatraHelpers::Erb::Helpers
8
-
9
- def form_tag(url, options={}, &block)
10
- options[:method] = 'post' unless ['get','post','put','delete'].include?(options[:method])
11
- options.update :action => url
12
- if multipart = options.delete(:multipart)
13
- options[:enctype] = sinatra_erb_helper_multipart_option
14
- end
15
- if block_given?
16
- @_out_buf << tag(:form, options) { sinatra_erb_helper_capture(&block) }
17
- else
18
- tag(:form, options)
19
- end
20
- end
21
-
22
- def field_set_tag(legend=nil, options={}, &block)
23
- legend_html = legend.nil? ? '' : tag(:legend) { legend.to_s }
24
- if block_given?
25
- @_out_buf << tag(:fieldset, options) { legend_html + sinatra_erb_helper_capture(&block) }
26
- else
27
- tag(:fieldset, options) { legend_html }
28
- end
29
- end
30
-
31
- def label_tag(name, value=nil, options={})
32
- value ||= name.to_s.capitalize
33
- options.update :for => name.to_s
34
- tag(:label, options) { value }
35
- end
36
-
37
- def hidden_field_tag(name, value=nil, options={})
38
- input_tag('hidden', name, value, options)
39
- end
40
-
41
- def password_field_tag(name="password", value=nil, options={})
42
- options[:disabled] = sinatra_erb_helper_disabled_option if options[:disabled]
43
- input_tag('password', name, value, options)
44
- end
45
-
46
- def file_field_tag(name, options={})
47
- options[:disabled] = sinatra_erb_helper_disabled_option if options[:disabled]
48
- input_tag('file', name, nil, options)
49
- end
50
-
51
- def check_box_tag(name, label=nil, value='1', checked=false, options={})
52
- tag_name = options.delete(:tag) || :div
53
- if options.has_key?(:class)
54
- options[:class] += ' checkbox'
55
- else
56
- options[:class] = 'checkbox'
57
- end
58
- options[:id] ||= sinatra_erb_helper_safe_id(rand(1000).to_s)
59
- options[:disabled] = sinatra_erb_helper_disabled_option if options[:disabled]
60
- options[:checked] = sinatra_erb_helper_checked_option if checked
61
- input_str = input_tag('checkbox', name, value, options)
62
- if label.nil?
63
- input_str
64
- else
65
- tag(tag_name, :class => 'checkbox') { input_str + label_tag(options[:id], label) }
66
- end
67
- end
68
-
69
- def radio_button_tag(name, value, label=nil, checked=false, options={})
70
- tag_name = options.delete(:tag) || :span
71
- if options.has_key?(:class)
72
- options[:class] += ' radiobutton'
73
- else
74
- options[:class] = 'radiobutton'
75
- end
76
- label ||= value.to_s.capitalize
77
- options[:id] ||= sinatra_erb_helper_safe_id(rand(1000).to_s)
78
- options[:disabled] = sinatra_erb_helper_disabled_option if options[:disabled]
79
- options[:checked] = sinatra_erb_helper_checked_option if checked
80
- input_str = input_tag('radio', name, value, options)
81
- if label.nil?
82
- input_str
83
- else
84
- label_tag(options[:id], input_str + tag(tag_name) { label }, :class => options.delete(:class))
85
- end
86
- end
87
-
88
- def select_tag(name, options={}, &block)
89
- options[:disabled] = sinatra_erb_helper_disabled_option if options[:disabled]
90
- html_name = (options[:multiple] == true && !name.to_s[(name.to_s.length-2)..-1] == "[]") ? "#{name}[]" : name
91
- options[:multiple] = sinatra_erb_helper_multiple_option if options[:multiple] == true
92
- options[:tag] = 'select'
93
- if block_given?
94
- @_out_buf << input_tag(:select, html_name, nil, options) { sinatra_erb_helper_capture(&block) }
95
- else
96
- input_tag(:select, html_name, nil, options)
97
- end
98
- end
99
-
100
- def text_area_tag(name, content=nil, options={})
101
- options[:disabled] = sinatra_erb_helper_disabled_option if options[:disabled]
102
- options[:tag] = 'textarea'
103
- input_tag(nil, name, nil, options) { content || '' }
104
- end
105
-
106
- def text_field_tag(name, value=nil, options={})
107
- options[:disabled] = sinatra_erb_helper_disabled_option if options[:disabled]
108
- input_tag('text', name, value, options)
109
- end
110
-
111
- def submit_tag(value="Save", options={})
112
- options[:disabled] = sinatra_erb_helper_disabled_option if options[:disabled]
113
- input_tag('submit', 'commit', value, options)
114
- end
115
-
116
- def image_submit_tag(source, options={})
117
- options[:disabled] = sinatra_erb_helper_disabled_option if options[:disabled]
118
- options[:src] = source
119
- options[:alt] ||= 'Save'
120
- input_tag('image', nil, nil, options)
121
- end
122
-
123
- end
124
-
125
- Sinatra::Application.helpers SinatraHelpers::Erb::Forms
@@ -1,39 +0,0 @@
1
- module SinatraHelpers::Erb::Helpers
2
-
3
- def sinatra_erb_helper_safe_id(id)
4
- id.gsub(/\W/,'')
5
- end
6
-
7
- def sinatra_erb_helper_capture(*args, &block)
8
- sinatra_erb_helper_with_output_buffer { block.call(*args) }
9
- end
10
-
11
- def sinatra_erb_helper_with_output_buffer(buf = '') #:nodoc:
12
- @_out_buf, old_buffer = buf, @_out_buf
13
- yield
14
- @_out_buf
15
- ensure
16
- @_out_buf = old_buffer
17
- end
18
-
19
- def sinatra_erb_helper_hash_to_html_attrs(a_hash)
20
- a_hash.collect{|key, val| "#{key}=\"#{val}\""}.join(' ')
21
- end
22
-
23
- def sinatra_erb_helper_disabled_option
24
- 'disabled'
25
- end
26
-
27
- def sinatra_erb_helper_checked_option
28
- 'checked'
29
- end
30
-
31
- def sinatra_erb_helper_multiple_option
32
- 'multiple'
33
- end
34
-
35
- def sinatra_erb_helper_multipart_option
36
- 'multipart/form-data'
37
- end
38
-
39
- end
@@ -1,73 +0,0 @@
1
- require 'sinatra/base'
2
- require 'sinatra_helpers/erb/tags')
3
-
4
- module SinatraHelpers::Erb::Links
5
-
6
- # helper to emulate action view's 'link_to'
7
- # EX : link_to "google", "http://google.com"
8
- # => <a href="http://google.com">google</a>
9
- def link_to(content,href,options={})
10
- options.update :href => href
11
- tag(:a, options) { content }
12
- end
13
-
14
- def open_link_to(content, href, options={})
15
- options[:onclick] = "javascript: window.open('#{href}'); return false;"
16
- link_to(content, href, options)
17
- end
18
-
19
- def mail_link_to(email, options={})
20
- link_to options[:label] || email, "mailto: #{email}"
21
- end
22
-
23
- def link_to_function(content, function, opts={})
24
- opts ||= {}
25
- opts[:href] ||= 'javascript: void(0);'
26
- opts[:onclick] = "javascript: #{function}; return false;"
27
- link_to content, opts[:href], opts
28
- end
29
-
30
- # helper to emulate 'image_tag'
31
- # EX : image_tag 'logo.jpg'
32
- # => <img src="images/logo.jpg" />
33
- def image_tag(src,options={})
34
- options[:src] = ['/'].include?(src[0..0]) ? src : "/images/#{src}"
35
- tag(:img, options)
36
- end
37
-
38
- # helper to emulate 'stylesheet_link_tag'
39
- # EX : stylesheet_link_tag 'default'
40
- # => <link rel="stylesheet" href="/stylesheets/default.css" type="text/css" media="all" title="no title" charset="utf-8">
41
- def stylesheet_link_tag(srcs,options={})
42
- options[:media] ||= "screen"
43
- options[:type] ||= "text/css"
44
- options[:rel] ||= "stylesheet"
45
- srcs.to_a.collect do |src|
46
- options[:href] = "/stylesheets/#{src}.css#{"?#{Time.now.to_i}" if Sinatra::Application.environment.to_s == 'development'}"
47
- tag(:link, options)
48
- end.join("\n")
49
- end
50
-
51
- # helper to emulate 'javascript_include_tag'
52
- # EX : javascript_include_tag 'app'
53
- # => <script src="/js/app.js" type="text/javascript" />
54
- # EX : javascript_include_tag ['app', 'jquery']
55
- # => <script src="/js/app.js" type="text/javascript" />
56
- # => <script src="/js/jquery.js" type="text/javascript" />
57
- def javascript_include_tag(srcs,options={})
58
- options[:type] ||= "text/javascript"
59
- srcs.to_a.collect do |src|
60
- options[:src] = "/javascripts/#{src}.js#{"?#{Time.now.to_i}" if Sinatra::Application.environment.to_s == 'development'}"
61
- tag(:script, options) { '' }
62
- end.join("\n")
63
- end
64
-
65
- # helper to emulate 'javascript_tag'
66
- def javascript_tag(options={})
67
- options[:type] ||= "text/javascript"
68
- tag(:script, options) { yield }
69
- end
70
-
71
- end
72
-
73
- Sinatra::Application.helpers SinatraHelpers::Erb::Links
@@ -1,50 +0,0 @@
1
- require 'sinatra/base'
2
- require 'sinatra_helpers/erb/helpers.rb')
3
-
4
- module SinatraHelpers::Erb::Tags
5
-
6
- include SinatraHelpers::Erb::Helpers
7
-
8
- def input_tag(type, name, value, options={}, &block)
9
- options[:tag] ||= :input
10
- options[:type] = type unless type.nil?
11
- unless name.nil?
12
- options[:name] = name
13
- options[:id] ||= sinatra_erb_helper_safe_id(name)
14
- end
15
- options[:value] = value unless value.nil?
16
- tag(options.delete(:tag), options, &block)
17
- end
18
-
19
- def clear_tag(options={})
20
- options[:tag] ||= :div
21
- options[:style] ||= ''
22
- options[:style] = "clear: both;#{options[:style]}"
23
- tag(options.delete(:tag), options) { '' }
24
- end
25
-
26
- # helpers to escape tag text content
27
- include Rack::Utils
28
- alias_method :h, :escape_html
29
-
30
- # escape tag text content and format for text like display
31
- def h_text(text, opts={})
32
- h(text.to_s).
33
- gsub(/\r\n?/, "\n"). # \r\n and \r -> \n
34
- split("\n").collect do |line|
35
- line.nil? ? '': line.sub(/(\s+)?\S*/) {|lead| lead.gsub(/\s/,'&nbsp;')}
36
- end.join("\n"). # change any leading white spaces on a line to '&nbsp;'
37
- gsub(/\n/,'\1<br />') # newlines -> br added
38
- end
39
-
40
- # emulator for 'tag'
41
- # EX : tag :h1, "shizam", :title => "shizam"
42
- # => <h1 title="shizam">shizam</h1>
43
- def tag(name, options={})
44
- "<#{name.to_s} #{sinatra_erb_helper_hash_to_html_attrs(options)} #{block_given? ? ">#{yield}</#{name}" : "/"}>"
45
- end
46
-
47
- end
48
-
49
- Sinatra::Application.helpers SinatraHelpers::Erb::Tags
50
-
@@ -1,83 +0,0 @@
1
- require 'openssl'
2
- require 'net/smtp'
3
- require 'tmail'
4
- require 'sinatra/base'
5
- require 'sinatra_helpers/mailer/exceptions'
6
- require 'sinatra_helpers/mailer/tls'
7
-
8
- module SinatraHelpers::Mailer
9
- class Base
10
-
11
- CONFIGS = [:server, :domain, :port, :reply_to, :username, :password, :authentication, :content_type, :charset]
12
- CONFIGS.each do |config|
13
- attr_reader config
14
- end
15
- attr_accessor :logger
16
-
17
- def initialize(configs={})
18
- CONFIGS.each do |config|
19
- instance_variable_set("@#{config}", configs[config])
20
- end
21
- @authentication ||= :login
22
- @reply_to ||= @username
23
- @content_type ||= 'text/plain'
24
- @charset ||= 'UTF-8'
25
- @logger = block_given? ? yield : nil
26
- end
27
-
28
- def send(settings={})
29
- check_configs
30
- [:to, :subject].each do |setting|
31
- raise SinatraHelpers::Mailer::SendError, "cannot send, #{setting} not specified." unless settings[setting]
32
- end
33
- mail = generate_mail(settings)
34
- mail.body = yield(mail) if block_given?
35
- mail.body ||= ''
36
- Sinatra::Application.environment.to_s == 'production' ? send_mail(mail) : log_mail(mail)
37
- log(:info, "Sent '#{mail.subject}' to #{mail.to.join(',')}")
38
- mail
39
- end
40
-
41
- protected
42
-
43
- def check_configs
44
- CONFIGS.each do |config|
45
- raise SinatraHelpers::Mailer::ConfigError, "#{config} not configured." unless instance_variable_get("@#{config}")
46
- end
47
- end
48
-
49
- def generate_mail(settings)
50
- mail = TMail::Mail.new
51
- mail.to = Array.new([settings[:to]])
52
- mail.from = @reply_to
53
- mail.reply_to = @reply_to
54
- mail.subject = settings[:subject]
55
- mail.date = Time.now
56
- mail.set_content_type @content_type
57
- mail.charset = @charset
58
- mail
59
- end
60
-
61
- def send_mail(mail)
62
- raise SinatraHelpers::Mailer::SendError, "cannot send, bad (or empty) mail object given." unless mail
63
- Net::SMTP.start(@server, @port, @domain, @username, @password, @authentication) do |server|
64
- mail.to.each {|recipient| server.send_message(mail.to_s, mail.from, recipient) }
65
- end
66
- end
67
-
68
- def log_mail(mail)
69
- log(:debug, mail.to_s)
70
- end
71
-
72
- def log(level, msg)
73
- if(msg)
74
- if @logger && @logger.respond_to?(level)
75
- @logger.send(level.to_s, msg)
76
- else
77
- puts "** [#{level.to_s.upcase}]: [Mailer] #{msg}"
78
- end
79
- end
80
- end
81
-
82
- end
83
- end
@@ -1,12 +0,0 @@
1
- module SinatraHelpers::Mailer
2
-
3
- class MailerError < StandardError
4
- end
5
-
6
- class ConfigError < MailerError
7
- end
8
-
9
- class SendError < MailerError
10
- end
11
-
12
- end
@@ -1,73 +0,0 @@
1
- # Note: This is a complete rip of http://github.com/ambethia/smtp-tls/tree/master
2
- # => I chose to copy the source in here instead of add yet another gem depencency
3
- # => I take no credit for this work, check out link for more info.
4
-
5
- require 'net/smtp'
6
-
7
- Net::SMTP.class_eval do
8
- private
9
- def do_start(helodomain, user, secret, authtype)
10
- raise IOError, 'SMTP session already started' if @started
11
-
12
- if RUBY_VERSION > "1.8.6"
13
- check_auth_args user, secret if user or secret
14
- else
15
- check_auth_args user, secret, authtype if user or secret
16
- end
17
-
18
- sock = timeout(@open_timeout) { TCPSocket.open(@address, @port) }
19
- @socket = Net::InternetMessageIO.new(sock)
20
- @socket.read_timeout = 60 #@read_timeout
21
-
22
- check_response(critical { recv_response() })
23
- do_helo(helodomain)
24
-
25
- if starttls
26
- raise 'openssl library not installed' unless defined?(OpenSSL)
27
- ssl = OpenSSL::SSL::SSLSocket.new(sock)
28
- ssl.sync_close = true
29
- ssl.connect
30
- @socket = Net::InternetMessageIO.new(ssl)
31
- @socket.read_timeout = 60 #@read_timeout
32
- do_helo(helodomain)
33
- end
34
-
35
- authenticate user, secret, authtype if user
36
- @started = true
37
- ensure
38
- unless @started
39
- # authentication failed, cancel connection.
40
- @socket.close if not @started and @socket and not @socket.closed?
41
- @socket = nil
42
- end
43
- end
44
-
45
- def do_helo(helodomain)
46
- begin
47
- if @esmtp
48
- ehlo helodomain
49
- else
50
- helo helodomain
51
- end
52
- rescue Net::ProtocolError
53
- if @esmtp
54
- @esmtp = false
55
- @error_occured = false
56
- retry
57
- end
58
- raise
59
- end
60
- end
61
-
62
- def starttls
63
- getok('STARTTLS') rescue return false
64
- return true
65
- end
66
-
67
- def quit
68
- begin
69
- getok('QUIT')
70
- rescue EOFError
71
- end
72
- end
73
- end
@@ -1,4 +0,0 @@
1
- module SinatraHelpers::Mailer; end
2
- Dir[File.join(File.dirname(__FILE__), "mailer" ,"*.rb")].each do |file|
3
- require "sinatra_helpers/mailer/#{File.basename(file, ".rb")}"
4
- end