kelredd-sinatra-helpers 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc ADDED
@@ -0,0 +1,44 @@
1
+ = SinatraHelpers
2
+
3
+ == Description
4
+
5
+ This is a ruby gem with a bunch of helpers to make Sinatra more useful.
6
+
7
+ === Environment Tests
8
+
9
+ === Erb Helpers
10
+
11
+ === Mailer
12
+
13
+ == Installation
14
+
15
+ sudo gem install kelredd-sinatra-helpers --source http://gemcutter.org
16
+
17
+ == Usage
18
+
19
+ require 'sinatra_helpers'
20
+
21
+ == License
22
+
23
+ Copyright (c) 2009 Kelly Redding
24
+
25
+ Permission is hereby granted, free of charge, to any person
26
+ obtaining a copy of this software and associated documentation
27
+ files (the "Software"), to deal in the Software without
28
+ restriction, including without limitation the rights to use,
29
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
30
+ copies of the Software, and to permit persons to whom the
31
+ Software is furnished to do so, subject to the following
32
+ conditions:
33
+
34
+ The above copyright notice and this permission notice shall be
35
+ included in all copies or substantial portions of the Software.
36
+
37
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
38
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
39
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
40
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
41
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
42
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
43
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
44
+ OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,64 @@
1
+ require 'rubygems'
2
+ require 'rake/gempackagetask'
3
+ require 'rake/testtask'
4
+
5
+ require 'lib/sinatra_helpers/version'
6
+
7
+ spec = Gem::Specification.new do |s|
8
+ s.name = 'kelredd-sinatra-helpers'
9
+ s.version = SinatraHelpers::Version.to_s
10
+ s.has_rdoc = true
11
+ s.extra_rdoc_files = %w(README.rdoc)
12
+ s.rdoc_options = %w(--main README.rdoc)
13
+ s.summary = "a ruby gem with a bunch of helpers to make Sinatra more useful"
14
+ s.author = 'Kelly Redding'
15
+ s.email = 'kelly@kelredd.com'
16
+ s.homepage = 'http://github.com/kelredd/sinatra-helpers'
17
+ s.files = %w(README.rdoc Rakefile) + Dir.glob("{lib}/**/*")
18
+ # s.executables = ['sinatra-helpers']
19
+
20
+ s.add_dependency('kelredd-useful', '>= 0.1.25')
21
+ s.add_dependency('tmail', '>= 1.2.3.0')
22
+ end
23
+
24
+ Rake::GemPackageTask.new(spec) do |pkg|
25
+ pkg.gem_spec = spec
26
+ end
27
+
28
+ Rake::TestTask.new do |t|
29
+ t.libs << 'test'
30
+ t.test_files = FileList["test/**/*_test.rb"]
31
+ t.verbose = true
32
+ end
33
+
34
+ begin
35
+ require 'rcov/rcovtask'
36
+
37
+ Rcov::RcovTask.new(:coverage) do |t|
38
+ t.libs = ['test']
39
+ t.test_files = FileList["test/**/*_test.rb"]
40
+ t.verbose = true
41
+ t.rcov_opts = ['--text-report', "-x #{Gem.path}", '-x /Library/Ruby', '-x /usr/lib/ruby']
42
+ end
43
+
44
+ task :default => :coverage
45
+
46
+ rescue LoadError
47
+ warn "\n**** Install rcov (sudo gem install relevance-rcov) to get coverage stats ****\n"
48
+ task :default => :test
49
+ end
50
+
51
+
52
+ desc 'Generate the gemspec to serve this gem'
53
+ task :gemspec do
54
+ file = File.dirname(__FILE__) + "/#{spec.name}.gemspec"
55
+ File.open(file, 'w') {|f| f << spec.to_ruby }
56
+ puts "Created gemspec: #{file}"
57
+ end
58
+
59
+ require 'cucumber'
60
+ require 'cucumber/rake/task'
61
+
62
+ Cucumber::Rake::Task.new(:features) do |t|
63
+ t.cucumber_opts = "test/features --format pretty"
64
+ end
@@ -0,0 +1,4 @@
1
+ module SinatraHelpers; end
2
+ require 'sinatra_helpers/environment_tests'
3
+ require 'sinatra_helpers/erb'
4
+ require 'sinatra_helpers/mailer'
@@ -0,0 +1,15 @@
1
+ require 'sinatra/base'
2
+
3
+ module SinatraHelpers::EnvironmentTests
4
+
5
+ def production?
6
+ Sinatra::Application.environment.to_s == 'production'
7
+ end
8
+ def development?
9
+ Sinatra::Application.environment.to_s == 'development'
10
+ end
11
+
12
+ end
13
+
14
+ Sinatra::Application.helpers SinatraHelpers::EnvironmentTests
15
+ Sinatra::Application.register SinatraHelpers::EnvironmentTests
@@ -0,0 +1,4 @@
1
+ module SinatraHelpers::Erb; end
2
+ Dir[File.join(File.dirname(__FILE__), "erb" ,"*.rb")].each do |file|
3
+ require "sinatra_helpers/erb/#{File.basename(file, ".rb")}"
4
+ end
@@ -0,0 +1,19 @@
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
@@ -0,0 +1,125 @@
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
@@ -0,0 +1,39 @@
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
@@ -0,0 +1,73 @@
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
@@ -0,0 +1,35 @@
1
+ require 'sinatra/base'
2
+
3
+ module SinatraHelpers::Erb::Partials
4
+
5
+ # helper to emulate rails 'render :partial' helper, using erb
6
+ # => taken from the sinatra book, http://sinatra-book.gittr.com/#implemention_of_rails_style_partials
7
+ # Render the page once:
8
+ # Usage: partial :foo
9
+ #
10
+ # foo will be rendered once for each element in the array, passing in a local variable named "foo"
11
+ # Usage: partial :foo, :collection => @my_foos
12
+ def partial(template, options={})
13
+ options.merge!(:layout => false)
14
+ path = template.to_s.split(File::SEPARATOR)
15
+ object = path[-1].to_sym
16
+ path[-1] = "_#{path[-1]}"
17
+ template = File.join(path).to_sym
18
+ raise 'partial collection specified but is nil' if options.has_key?(:collection) && options[:collection].nil?
19
+ if collection = options.delete(:collection)
20
+ counter = 0
21
+ collection.inject([]) do |buffer, member|
22
+ counter += 1
23
+ buffer << erb(template, options.merge(:locals => {object => member, "#{object}_counter".to_sym => counter}))
24
+ end.join("\n")
25
+ else
26
+ if member = options.delete(:object)
27
+ options.merge!(:locals => {object => member})
28
+ end
29
+ erb(template, options)
30
+ end
31
+ end
32
+
33
+ end
34
+
35
+ Sinatra::Application.helpers SinatraHelpers::Erb::Partials
@@ -0,0 +1,50 @@
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
+
@@ -0,0 +1,4 @@
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
@@ -0,0 +1,83 @@
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
@@ -0,0 +1,12 @@
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
@@ -0,0 +1,73 @@
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
@@ -0,0 +1,13 @@
1
+ module SinatraHelpers
2
+ module Version
3
+
4
+ MAJOR = 0
5
+ MINOR = 1
6
+ TINY = 0
7
+
8
+ def self.to_s # :nodoc:
9
+ [MAJOR, MINOR, TINY].join('.')
10
+ end
11
+
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kelredd-sinatra-helpers
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Kelly Redding
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-13 00:00:00 -05:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: kelredd-useful
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
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
34
+ version:
35
+ description:
36
+ email: kelly@kelredd.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - README.rdoc
43
+ files:
44
+ - README.rdoc
45
+ - Rakefile
46
+ - 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
+ - lib/sinatra_helpers/erb/partials.rb
52
+ - lib/sinatra_helpers/erb/tags.rb
53
+ - 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
+ - lib/sinatra_helpers/version.rb
59
+ - lib/sinatra_helpers.rb
60
+ has_rdoc: true
61
+ homepage: http://github.com/kelredd/sinatra-helpers
62
+ licenses: []
63
+
64
+ post_install_message:
65
+ rdoc_options:
66
+ - --main
67
+ - README.rdoc
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: "0"
75
+ version:
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: "0"
81
+ version:
82
+ requirements: []
83
+
84
+ rubyforge_project:
85
+ rubygems_version: 1.3.5
86
+ signing_key:
87
+ specification_version: 3
88
+ summary: a ruby gem with a bunch of helpers to make Sinatra more useful
89
+ test_files: []
90
+