kelredd-useful 0.1.25 → 0.2.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.
Files changed (61) hide show
  1. data/README.rdoc +3 -2
  2. data/Rakefile +6 -7
  3. data/lib/useful/active_record_helpers/mysql_migration_helpers.rb +64 -65
  4. data/lib/useful/active_record_helpers.rb +1 -1
  5. data/lib/useful/cap_tasks/app_role_migrations.rb +41 -0
  6. data/lib/useful/cap_tasks/disable_migrate.rb +15 -0
  7. data/lib/useful/cap_tasks/git_query_revision_remote.rb +31 -0
  8. data/lib/useful/cap_tasks/passenger_deploy.rb +44 -0
  9. data/lib/useful/cap_tasks/rack_cache.rb +17 -0
  10. data/lib/useful/cap_tasks.rb +1 -3
  11. data/lib/useful/erb_helpers/common.rb +86 -0
  12. data/lib/useful/erb_helpers/forms.rb +118 -0
  13. data/lib/useful/erb_helpers/links.rb +156 -0
  14. data/lib/useful/erb_helpers/proper.rb +109 -0
  15. data/lib/useful/erb_helpers/tags.rb +64 -0
  16. data/lib/useful/erb_helpers.rb +3 -0
  17. data/lib/useful/rails_helpers/environment_tests.rb +59 -0
  18. data/lib/useful/rails_helpers/erb.rb +3 -0
  19. data/lib/useful/rails_helpers.rb +3 -0
  20. data/lib/useful/ruby_extensions/array.rb +33 -34
  21. data/lib/useful/ruby_extensions/date.rb +11 -11
  22. data/lib/useful/ruby_extensions/false_class.rb +16 -13
  23. data/lib/useful/ruby_extensions/fixnum.rb +50 -19
  24. data/lib/useful/ruby_extensions/hash.rb +157 -91
  25. data/lib/useful/ruby_extensions/nil_class.rb +26 -0
  26. data/lib/useful/ruby_extensions/numeric.rb +239 -229
  27. data/lib/useful/ruby_extensions/object.rb +126 -11
  28. data/lib/useful/ruby_extensions/string.rb +259 -33
  29. data/lib/useful/ruby_extensions/true_class.rb +16 -13
  30. data/lib/useful/ruby_extensions.rb +1 -1
  31. data/lib/useful/ruby_extensions_with_activesupport.rb +2 -0
  32. data/lib/useful/shoulda_macros/test_unit.rb +58 -0
  33. data/lib/useful/version.rb +2 -2
  34. data/lib/useful.rb +1 -1
  35. metadata +19 -38
  36. data/lib/useful/cap_tasks/cache.rb +0 -5
  37. data/lib/useful/cap_tasks/gemsconfig.rb +0 -14
  38. data/lib/useful/rails_extensions/environment_tests.rb +0 -60
  39. data/lib/useful/rails_extensions.rb +0 -3
  40. data/lib/useful/ruby_extensions_from_rails/date.rb +0 -244
  41. data/lib/useful/ruby_extensions_from_rails/duration.rb +0 -99
  42. data/lib/useful/ruby_extensions_from_rails/fixnum.rb +0 -32
  43. data/lib/useful/ruby_extensions_from_rails/hash.rb +0 -50
  44. data/lib/useful/ruby_extensions_from_rails/numeric.rb +0 -60
  45. data/lib/useful/ruby_extensions_from_rails/object.rb +0 -79
  46. data/lib/useful/ruby_extensions_from_rails/string.rb +0 -174
  47. data/lib/useful/ruby_extensions_from_rails/time.rb +0 -320
  48. data/lib/useful/ruby_extensions_from_rails.rb +0 -3
  49. data/lib/useful/sinatra_helpers/environment_tests.rb +0 -19
  50. data/lib/useful/sinatra_helpers/erb/error_pages.rb +0 -25
  51. data/lib/useful/sinatra_helpers/erb/forms.rb +0 -131
  52. data/lib/useful/sinatra_helpers/erb/helpers.rb +0 -45
  53. data/lib/useful/sinatra_helpers/erb/links.rb +0 -79
  54. data/lib/useful/sinatra_helpers/erb/partials.rb +0 -41
  55. data/lib/useful/sinatra_helpers/erb/tags.rb +0 -56
  56. data/lib/useful/sinatra_helpers/erb.rb +0 -3
  57. data/lib/useful/sinatra_helpers/mailer/base.rb +0 -89
  58. data/lib/useful/sinatra_helpers/mailer/exceptions.rb +0 -17
  59. data/lib/useful/sinatra_helpers/mailer/tls.rb +0 -73
  60. data/lib/useful/sinatra_helpers/mailer.rb +0 -3
  61. data/lib/useful/sinatra_helpers.rb +0 -3
@@ -1,45 +0,0 @@
1
- module Useful
2
- module SinatraHelpers
3
- module Erb
4
- module Helpers
5
-
6
- def sinatra_erb_helper_safe_id(id)
7
- id.gsub(/\W/,'')
8
- end
9
-
10
- def sinatra_erb_helper_capture(*args, &block)
11
- sinatra_erb_helper_with_output_buffer { block.call(*args) }
12
- end
13
-
14
- def sinatra_erb_helper_with_output_buffer(buf = '') #:nodoc:
15
- @_out_buf, old_buffer = buf, @_out_buf
16
- yield
17
- @_out_buf
18
- ensure
19
- @_out_buf = old_buffer
20
- end
21
-
22
- def sinatra_erb_helper_hash_to_html_attrs(a_hash)
23
- a_hash.collect{|key, val| "#{key}=\"#{val}\""}.join(' ')
24
- end
25
-
26
- def sinatra_erb_helper_disabled_option
27
- 'disabled'
28
- end
29
-
30
- def sinatra_erb_helper_checked_option
31
- 'checked'
32
- end
33
-
34
- def sinatra_erb_helper_multiple_option
35
- 'multiple'
36
- end
37
-
38
- def sinatra_erb_helper_multipart_option
39
- 'multipart/form-data'
40
- end
41
-
42
- end
43
- end
44
- end
45
- end
@@ -1,79 +0,0 @@
1
- require 'sinatra/base'
2
- require File.join(File.dirname(__FILE__), 'tags.rb')
3
-
4
- module Sinatra
5
- module SinatraHelpers
6
- module Erb
7
- module Links
8
-
9
- # helper to emulate action view's 'link_to'
10
- # EX : link_to "google", "http://google.com"
11
- # => <a href="http://google.com">google</a>
12
- def link_to(content,href,options={})
13
- options.update :href => href
14
- tag(:a, options) { content }
15
- end
16
-
17
- def open_link_to(content, href, options={})
18
- options[:onclick] = "javascript: window.open('#{href}'); return false;"
19
- link_to(content, href, options)
20
- end
21
-
22
- def mail_link_to(email, options={})
23
- link_to options[:label] || email, "mailto: #{email}"
24
- end
25
-
26
- def link_to_function(content, function, opts={})
27
- opts ||= {}
28
- opts[:href] ||= 'javascript: void(0);'
29
- opts[:onclick] = "javascript: #{function}; return false;"
30
- link_to content, opts[:href], opts
31
- end
32
-
33
- # helper to emulate 'image_tag'
34
- # EX : image_tag 'logo.jpg'
35
- # => <img src="images/logo.jpg" />
36
- def image_tag(src,options={})
37
- options[:src] = ['/'].include?(src[0..0]) ? src : "/images/#{src}"
38
- tag(:img, options)
39
- end
40
-
41
- # helper to emulate 'stylesheet_link_tag'
42
- # EX : stylesheet_link_tag 'default'
43
- # => <link rel="stylesheet" href="/stylesheets/default.css" type="text/css" media="all" title="no title" charset="utf-8">
44
- def stylesheet_link_tag(srcs,options={})
45
- options[:media] ||= "screen"
46
- options[:type] ||= "text/css"
47
- options[:rel] ||= "stylesheet"
48
- srcs.to_a.collect do |src|
49
- options[:href] = "/stylesheets/#{src}.css#{"?#{Time.now.to_i}" if Sinatra::Application.environment.to_s == 'development'}"
50
- tag(:link, options)
51
- end.join("\n")
52
- end
53
-
54
- # helper to emulate 'javascript_include_tag'
55
- # EX : javascript_include_tag 'app'
56
- # => <script src="/js/app.js" type="text/javascript" />
57
- # EX : javascript_include_tag ['app', 'jquery']
58
- # => <script src="/js/app.js" type="text/javascript" />
59
- # => <script src="/js/jquery.js" type="text/javascript" />
60
- def javascript_include_tag(srcs,options={})
61
- options[:type] ||= "text/javascript"
62
- srcs.to_a.collect do |src|
63
- options[:src] = "/javascripts/#{src}.js#{"?#{Time.now.to_i}" if Sinatra::Application.environment.to_s == 'development'}"
64
- tag(:script, options) { '' }
65
- end.join("\n")
66
- end
67
-
68
- # helper to emulate 'javascript_tag'
69
- def javascript_tag(options={})
70
- options[:type] ||= "text/javascript"
71
- tag(:script, options) { yield }
72
- end
73
-
74
- end
75
- end
76
- end
77
-
78
- Sinatra::Application.helpers Sinatra::SinatraHelpers::Erb::Links
79
- end
@@ -1,41 +0,0 @@
1
- require 'sinatra/base'
2
-
3
- module Useful
4
- module SinatraHelpers
5
- module Erb
6
- module Partials
7
-
8
- # helper to emulate rails 'render :partial' helper, using erb
9
- # => taken from the sinatra book, http://sinatra-book.gittr.com/#implemention_of_rails_style_partials
10
- # Render the page once:
11
- # Usage: partial :foo
12
- #
13
- # foo will be rendered once for each element in the array, passing in a local variable named "foo"
14
- # Usage: partial :foo, :collection => @my_foos
15
- def partial(template, options={})
16
- options.merge!(:layout => false)
17
- path = template.to_s.split(File::SEPARATOR)
18
- object = path[-1].to_sym
19
- path[-1] = "_#{path[-1]}"
20
- template = File.join(path).to_sym
21
- raise 'partial collection specified but is nil' if options.has_key?(:collection) && options[:collection].nil?
22
- if collection = options.delete(:collection)
23
- counter = 0
24
- collection.inject([]) do |buffer, member|
25
- counter += 1
26
- buffer << erb(template, options.merge(:locals => {object => member, "#{object}_counter".to_sym => counter}))
27
- end.join("\n")
28
- else
29
- if member = options.delete(:object)
30
- options.merge!(:locals => {object => member})
31
- end
32
- erb(template, options)
33
- end
34
- end
35
-
36
- end
37
- end
38
- end
39
- end
40
-
41
- Sinatra::Application.helpers Useful::SinatraHelpers::Erb::Partials
@@ -1,56 +0,0 @@
1
- require 'sinatra/base'
2
- require File.join(File.dirname(__FILE__), 'helpers.rb')
3
-
4
- module Useful
5
- module SinatraHelpers
6
- module Erb
7
- module Tags
8
-
9
- include Useful::SinatraHelpers::Erb::Helpers
10
-
11
- def input_tag(type, name, value, options={}, &block)
12
- options[:tag] ||= :input
13
- options[:type] = type unless type.nil?
14
- unless name.nil?
15
- options[:name] = name
16
- options[:id] ||= sinatra_erb_helper_safe_id(name)
17
- end
18
- options[:value] = value unless value.nil?
19
- tag(options.delete(:tag), options, &block)
20
- end
21
-
22
- def clear_tag(options={})
23
- options[:tag] ||= :div
24
- options[:style] ||= ''
25
- options[:style] = "clear: both;#{options[:style]}"
26
- tag(options.delete(:tag), options) { '' }
27
- end
28
-
29
- # helpers to escape tag text content
30
- include Rack::Utils
31
- alias_method :h, :escape_html
32
-
33
- # escape tag text content and format for text like display
34
- def h_text(text, opts={})
35
- h(text.to_s).
36
- gsub(/\r\n?/, "\n"). # \r\n and \r -> \n
37
- split("\n").collect do |line|
38
- line.nil? ? '': line.sub(/(\s+)?\S*/) {|lead| lead.gsub(/\s/,'&nbsp;')}
39
- end.join("\n"). # change any leading white spaces on a line to '&nbsp;'
40
- gsub(/\n/,'\1<br />') # newlines -> br added
41
- end
42
-
43
- # emulator for 'tag'
44
- # EX : tag :h1, "shizam", :title => "shizam"
45
- # => <h1 title="shizam">shizam</h1>
46
- def tag(name, options={})
47
- "<#{name.to_s} #{sinatra_erb_helper_hash_to_html_attrs(options)} #{block_given? ? ">#{yield}</#{name}" : "/"}>"
48
- end
49
-
50
- end
51
- end
52
- end
53
- end
54
-
55
- Sinatra::Application.helpers Useful::SinatraHelpers::Erb::Tags
56
-
@@ -1,3 +0,0 @@
1
- Dir[File.join(File.dirname(__FILE__), "erb" ,"*.rb")].each do |file|
2
- require file
3
- end
@@ -1,89 +0,0 @@
1
- require 'openssl'
2
- require 'net/smtp'
3
- require 'tmail'
4
- require 'sinatra/base'
5
- require File.join([File.dirname(__FILE__), 'exceptions'])
6
- require File.join([File.dirname(__FILE__), 'tls'])
7
-
8
- module Useful
9
- module SinatraHelpers
10
- module Mailer
11
-
12
- class Base
13
-
14
- CONFIGS = [:server, :domain, :port, :reply_to, :username, :password, :authentication, :content_type, :charset]
15
- CONFIGS.each do |config|
16
- attr_reader config
17
- end
18
- attr_accessor :logger
19
-
20
- def initialize(configs={})
21
- CONFIGS.each do |config|
22
- instance_variable_set("@#{config}", configs[config])
23
- end
24
- @authentication ||= :login
25
- @reply_to ||= @username
26
- @content_type ||= 'text/plain'
27
- @charset ||= 'UTF-8'
28
- @logger = block_given? ? yield : nil
29
- end
30
-
31
- def send(settings={})
32
- check_configs
33
- [:to, :subject].each do |setting|
34
- raise Useful::SinatraHelpers::Mailer::SendError, "cannot send, #{setting} not specified." unless settings[setting]
35
- end
36
- mail = generate_mail(settings)
37
- mail.body = yield(mail) if block_given?
38
- mail.body ||= ''
39
- Sinatra::Application.environment.to_s == 'production' ? send_mail(mail) : log_mail(mail)
40
- log(:info, "Sent '#{mail.subject}' to #{mail.to.join(',')}")
41
- mail
42
- end
43
-
44
- protected
45
-
46
- def check_configs
47
- CONFIGS.each do |config|
48
- raise Useful::SinatraHelpers::Mailer::ConfigError, "#{config} not configured." unless instance_variable_get("@#{config}")
49
- end
50
- end
51
-
52
- def generate_mail(settings)
53
- mail = TMail::Mail.new
54
- mail.to = Array.new([settings[:to]])
55
- mail.from = @reply_to
56
- mail.reply_to = @reply_to
57
- mail.subject = settings[:subject]
58
- mail.date = Time.now
59
- mail.set_content_type @content_type
60
- mail.charset = @charset
61
- mail
62
- end
63
-
64
- def send_mail(mail)
65
- raise Useful::SinatraHelpers::Mailer::SendError, "cannot send, bad (or empty) mail object given." unless mail
66
- Net::SMTP.start(@server, @port, @domain, @username, @password, @authentication) do |server|
67
- mail.to.each {|recipient| server.send_message(mail.to_s, mail.from, recipient) }
68
- end
69
- end
70
-
71
- def log_mail(mail)
72
- log(:debug, mail.to_s)
73
- end
74
-
75
- def log(level, msg)
76
- if(msg)
77
- if @logger && @logger.respond_to?(level)
78
- @logger.send(level.to_s, msg)
79
- else
80
- puts "** [#{level.to_s.upcase}]: [Mailer] #{msg}"
81
- end
82
- end
83
- end
84
-
85
- end
86
-
87
- end
88
- end
89
- end
@@ -1,17 +0,0 @@
1
- module Useful
2
- module SinatraHelpers
3
- module Mailer
4
-
5
- class MailerError < StandardError
6
- end
7
-
8
- class ConfigError < MailerError
9
- end
10
-
11
- class SendError < MailerError
12
- end
13
-
14
- end
15
- end
16
- end
17
-
@@ -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,3 +0,0 @@
1
- Dir[File.join(File.dirname(__FILE__), "mailer" ,"*.rb")].each do |file|
2
- require file
3
- end
@@ -1,3 +0,0 @@
1
- Dir[File.join(File.dirname(__FILE__), "sinatra_helpers" ,"*.rb")].each do |file|
2
- require file
3
- end