kelredd-sinatra-helpers 0.1.0

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.
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
+