dohutil 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2007-2012 Makani Mason, Kem Mason
1
+ Copyright (c) 2007 Makani Mason, Kem Mason
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -0,0 +1,10 @@
1
+ require 'doh/root'
2
+ require 'doh/core_ext/kernel'
3
+
4
+ module Doh
5
+
6
+ def self.require_dohapp_config
7
+ require_optional(File::join(Doh::root, 'config/dohapp'))
8
+ end
9
+
10
+ end
@@ -0,0 +1,4 @@
1
+ require 'doh/app/common'
2
+
3
+ Doh::find_root_from_pwd
4
+ Doh::require_dohapp_config
@@ -0,0 +1,12 @@
1
+ module Doh
2
+
3
+ def self.array_to_hash(ary)
4
+ retval = {}
5
+ ary.each do |elem|
6
+ key, value = yield(elem)
7
+ retval[key] = value
8
+ end
9
+ retval
10
+ end
11
+
12
+ end
@@ -0,0 +1,10 @@
1
+ module Doh
2
+
3
+ def self.class_basename(klass)
4
+ full_name = klass.to_s
5
+ retval = full_name.rpartition('::').last
6
+ retval = full_name if retval.empty?
7
+ retval
8
+ end
9
+
10
+ end
@@ -0,0 +1,34 @@
1
+ require 'bigdecimal'
2
+
3
+ class Integer
4
+ def to_d
5
+ to_s.to_d
6
+ end
7
+ end
8
+
9
+ class BigDecimal
10
+ alias :_original_to_s :to_s
11
+ def to_s(format = 'F')
12
+ _original_to_s(format)
13
+ end
14
+
15
+ undef inspect
16
+ def inspect
17
+ to_s
18
+ end
19
+
20
+ def to_d
21
+ self
22
+ end
23
+
24
+ def to_dig(digits_after_decimal = 2)
25
+ raise ArgumentError.new("digits_after_decimal must be > 0") unless digits_after_decimal > 0
26
+ return '0.' + ('0' * digits_after_decimal) if nan? || infinite?
27
+
28
+ retval = truncate(digits_after_decimal).to_s
29
+ digits_needed = retval.index('.') + digits_after_decimal + 1 - retval.size
30
+ retval += ('0' * digits_needed) if digits_needed > 0
31
+
32
+ retval
33
+ end
34
+ end
@@ -0,0 +1,12 @@
1
+ class Class
2
+ def force_deep_copy(*syms)
3
+ return if syms.empty?
4
+ code = "def initialize_copy(orig); "
5
+ code << "super(orig)\n "
6
+ syms.each do |elem|
7
+ code << "@#{elem} = @#{elem}.nil? ? nil : @#{elem}.dup\n "
8
+ end
9
+ code << "end\n"
10
+ class_eval(code)
11
+ end
12
+ end
@@ -0,0 +1,109 @@
1
+ require 'date'
2
+ require 'time'
3
+
4
+ class Date
5
+ def self.days_in_month(year, month)
6
+ civil(year, month, -1).mday
7
+ end
8
+
9
+ def self.smart_parse(datestr)
10
+ if datestr =~ /\A(\d\d)\/(\d\d)\/(\d\d)\z/
11
+ month = $1.to_i
12
+ mday = $2.to_i
13
+ year = $3.to_i
14
+ result = Date.new(year, month, mday)
15
+ else
16
+ result = Date.parse(datestr)
17
+ end
18
+
19
+ if result.year < 50
20
+ result = Date.new(result.year + 2000, result.month, result.day)
21
+ elsif result.year < 100
22
+ result = Date.new(result.year + 1900, result.month, result.day)
23
+ end
24
+ result
25
+ end
26
+
27
+ undef inspect
28
+ def inspect
29
+ strftime('%F')
30
+ end
31
+
32
+ def weekday?
33
+ (wday > 0) && (wday < 6)
34
+ end
35
+
36
+ def date_only
37
+ self
38
+ end
39
+
40
+ def self.short_weekday_to_num(weekday)
41
+ @@short_days_of_week ||= Time::RFC2822_DAY_NAME.collect {|day| day.downcase}
42
+ @@short_days_of_week.index(weekday.downcase)
43
+ end
44
+
45
+ def years_since(date)
46
+ years_diff = year - date.year
47
+ if month < date.month || (month == date.month && day < date.day)
48
+ years_diff -= 1
49
+ end
50
+ years_diff
51
+ end
52
+
53
+ def make_datetime(hour = 0, min = 0, sec = 0)
54
+ DateTime.new(year, month, mday, hour, min, sec)
55
+ end
56
+
57
+ def add_months(months, new_day = nil)
58
+ total_month = month + months
59
+ new_month = total_month % 12
60
+ new_month = 12 if new_month == 0
61
+ new_year = year + ((total_month - 1) / 12)
62
+ calc_day = [mday, Date.days_in_month(new_year, new_month)].min
63
+ Date.new(new_year, new_month, new_day || calc_day)
64
+ end
65
+
66
+ def add_years(years)
67
+ new_year = year + years
68
+ calc_day = [mday, Date.days_in_month(new_year, month)].min
69
+ Date.new(new_year, month, calc_day)
70
+ end
71
+ end
72
+
73
+ class DateTime
74
+ DOHRUBY_SECONDS_IN_DAY = (24 * 60 * 60).freeze
75
+
76
+ def self.seconds_to_days(seconds)
77
+ seconds.to_f / DOHRUBY_SECONDS_IN_DAY.to_f
78
+ end
79
+
80
+ def self.zow
81
+ obj = now
82
+ new(obj.year, obj.month, obj.mday, obj.hour, obj.min, obj.sec)
83
+ end
84
+
85
+ def inspect
86
+ strftime('%F %X')
87
+ end
88
+
89
+ def date_only
90
+ Date.new(year, month, mday)
91
+ end
92
+
93
+ def add_seconds(seconds)
94
+ self + Rational(seconds, DOHRUBY_SECONDS_IN_DAY)
95
+ end
96
+
97
+ def sub_seconds(seconds)
98
+ add_seconds(-seconds)
99
+ end
100
+
101
+ # subtract another DateTime object, return difference in seconds
102
+ def sub_dt(other)
103
+ ((self - other) * DOHRUBY_SECONDS_IN_DAY).to_i
104
+ end
105
+
106
+ def make_datetime
107
+ self
108
+ end
109
+ end
@@ -0,0 +1,7 @@
1
+ class Dir
2
+ def self.directories(path, include_dots = false)
3
+ entries(path).find_all do |entry|
4
+ File.directory?(File.join(path, entry)) && (include_dots || entry[0,1] != '.')
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,21 @@
1
+ class Hash
2
+ def to_h
3
+ self
4
+ end
5
+
6
+ def setnew(key, value)
7
+ store(key, value) unless key?(key)
8
+ end
9
+
10
+ def merge_with_remove(hash)
11
+ self.dup.merge_with_remove!(hash)
12
+ end
13
+
14
+ #merges the given hash with the current
15
+ #then removes any elements from the merged hash that have
16
+ #a value of nil in the hash argument
17
+ def merge_with_remove!(hash)
18
+ self.merge!(hash).reject! {|elem, value| hash.key?(elem) && hash[elem].nil?}
19
+ self
20
+ end
21
+ end
@@ -0,0 +1,8 @@
1
+ module Kernel
2
+
3
+ def require_optional(string)
4
+ require(string)
5
+ rescue LoadError => ignore
6
+ end
7
+
8
+ end
@@ -0,0 +1,41 @@
1
+ class String
2
+ def firstn(limit)
3
+ return nil if limit < 0
4
+ return '' if limit == 0
5
+ slice(Range.new(0, limit -1))
6
+ end
7
+
8
+ def lastn(limit)
9
+ return nil if limit < 0
10
+ return '' if limit == 0
11
+ slice(Range.new(-limit, -1)) || self
12
+ end
13
+
14
+ def mid(first, count = nil)
15
+ slice(first, count || (size - first))
16
+ end
17
+
18
+ def after(substr)
19
+ loc = index(substr)
20
+ return nil if loc.nil?
21
+ mid(loc + substr.size)
22
+ end
23
+
24
+ def rafter(substr)
25
+ loc = rindex(substr)
26
+ return nil if loc.nil?
27
+ mid(loc + substr.size)
28
+ end
29
+
30
+ def before(substr)
31
+ loc = index(substr)
32
+ return nil if loc.nil?
33
+ firstn(loc)
34
+ end
35
+
36
+ def rbefore(substr)
37
+ loc = rindex(substr)
38
+ return nil if loc.nil?
39
+ firstn(loc)
40
+ end
41
+ end
@@ -0,0 +1,43 @@
1
+ require 'doh/core_ext/date'
2
+
3
+ module Doh
4
+
5
+ @@current_date_objs = []
6
+
7
+ def self.current_date(dflt = Date.today)
8
+ return dflt if @@current_date_objs.empty?
9
+ @@current_date_objs.last.date_only
10
+ end
11
+
12
+ def self.current_datetime(dflt = DateTime.zow)
13
+ return dflt if @@current_date_objs.empty?
14
+ cdo = @@current_date_objs.last
15
+ return cdo if cdo.respond_to?(:hour)
16
+ DateTime.new(cdo.year, cdo.month, cdo.day, dflt.hour, dflt.min, dflt.sec, dflt.zone)
17
+ end
18
+
19
+ def self.push_current_date(date_obj)
20
+ @@current_date_objs.push(date_obj)
21
+ end
22
+
23
+ def self.pop_current_date
24
+ @@current_date_objs.pop
25
+ end
26
+
27
+ def self.clear_current_date
28
+ @@current_date_objs.clear
29
+ end
30
+
31
+ def self.date_as(date_obj, &block)
32
+ push_current_date(date_obj)
33
+ begin
34
+ retval = block.call
35
+ rescue
36
+ raise
37
+ ensure
38
+ pop_current_date
39
+ end
40
+ retval
41
+ end
42
+
43
+ end
@@ -0,0 +1,108 @@
1
+ require 'net/http'
2
+ require 'net/https'
3
+ require 'uri'
4
+
5
+ module Doh
6
+
7
+ class HttpHelper
8
+ attr_reader :headers
9
+
10
+ def initialize(url)
11
+ @url = url
12
+ @headers = {}
13
+ init_sender
14
+ end
15
+
16
+ def post(data, get_body_only = true)
17
+ dohlog.debug("posting to url #@url data: #{data.inspect}")
18
+ response = if data.is_a?(Hash)
19
+ post_hash(data)
20
+ else
21
+ post_string(data)
22
+ end
23
+ check_for_errors(response)
24
+ return response.body.to_s if get_body_only
25
+ response
26
+ end
27
+
28
+ def get(get_body_only = true, allow_redirect = false, num_redirects = 0)
29
+ getstr = @parsed_url.path
30
+ getstr += '?' + @parsed_url.query unless @parsed_url.query.to_s.empty?
31
+ request = Net::HTTP::Get.new(getstr)
32
+ request.initialize_http_header(@headers)
33
+ response = @sender.start { |http| http.request(request) }
34
+ if response.is_a?(Net::HTTPRedirection) && allow_redirect
35
+ raise "too many redirects" if num_redirects > 20
36
+ @url = response['location']
37
+ init_sender
38
+ return get(get_body_only, true, num_redirects + 1)
39
+ end
40
+ return response.body.to_s if get_body_only
41
+ response
42
+ end
43
+
44
+ def xml
45
+ @headers['Content-Type'] = 'text/xml'
46
+ self
47
+ end
48
+
49
+ def soap_action(action)
50
+ @headers['SOAPAction'] = action
51
+ self
52
+ end
53
+
54
+ def nossl
55
+ @sender.use_ssl = false
56
+ @nossl = true
57
+ self
58
+ end
59
+
60
+ def timeout(seconds)
61
+ @sender.read_timeout = seconds
62
+ self
63
+ end
64
+
65
+ def hdr(name, value)
66
+ @headers[name] = value
67
+ self
68
+ end
69
+
70
+ #shortcut method
71
+ def self.load(url, use_ssl = true, encode_url = false)
72
+ url = URI.escape(url) if encode_url
73
+ helper = HttpHelper.new(url)
74
+ helper.nossl if !use_ssl
75
+ helper.get
76
+ end
77
+ private
78
+ def init_sender
79
+ @parsed_url = URI.parse(@url)
80
+ @sender = Net::HTTP.new(@parsed_url.host, @parsed_url.port)
81
+ @sender.use_ssl = true unless @nossl || (['127.0.0.1', 'localhost'].include?(@parsed_url.host) && @parsed_url.port != 443)
82
+ @sender.verify_mode = OpenSSL::SSL::VERIFY_NONE
83
+ end
84
+
85
+ def post_hash(data)
86
+ request = Net::HTTP::Post.new(@parsed_url.path)
87
+ request.set_form_data(data)
88
+ request.initialize_http_header(@headers)
89
+ @sender.start { |http| http.request(request) }
90
+ end
91
+
92
+ def post_string(data)
93
+ @sender.post(@parsed_url.path, data, @headers)
94
+ end
95
+
96
+ def check_for_errors(response)
97
+ # TODO: do something useful here
98
+ # case response
99
+ # when Net::HTTPSuccess
100
+ # puts "success"
101
+ # puts response.body.to_s
102
+ # else
103
+ # puts response.error!
104
+ # end
105
+ end
106
+ end
107
+
108
+ end
data/lib/doh/log/stub.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  class Object
2
- unless respond_to?(:dohlog)
2
+ unless method_defined?(:dohlog)
3
3
  class DohlogStubInterface
4
4
  def self.debug(msg); end
5
5
  def self.info(msg); end
6
- def self.alert(msg); end
6
+ def self.warn(msg); end
7
7
  def self.error(msg, exception = nil); end
8
8
  def self.fatal(msg, exception = nil); end
9
9
  end
data/lib/doh/root.rb CHANGED
@@ -7,7 +7,6 @@ module Doh
7
7
 
8
8
  def self.root=(directory)
9
9
  @root = directory
10
- # having a root lib/ directory in your gem or application tree is a common standard now
11
10
  libdir = File.join(@root, 'lib')
12
11
  $LOAD_PATH.push(libdir) if libdir
13
12
  end
@@ -0,0 +1,86 @@
1
+ require 'doh/core_ext/bigdecimal'
2
+
3
+ class Object
4
+ def to_display
5
+ to_s
6
+ end
7
+ end
8
+
9
+ class DateTime
10
+ def to_display
11
+ strftime('%m/%d/%Y %I:%M%P')
12
+ end
13
+ end
14
+
15
+ class Date
16
+ def to_display
17
+ strftime('%m/%d/%Y')
18
+ end
19
+ end
20
+
21
+ class TrueClass
22
+ def to_display
23
+ 'yes'
24
+ end
25
+ end
26
+
27
+ class FalseClass
28
+ def to_display
29
+ 'no'
30
+ end
31
+ end
32
+
33
+ class BigDecimal
34
+ def to_display
35
+ '$' + to_dig(2)
36
+ end
37
+ end
38
+
39
+ class PhoneDisplayString < String
40
+ def to_display
41
+ Doh::display_phone(self)
42
+ end
43
+
44
+ def to_s
45
+ self
46
+ end
47
+ end
48
+
49
+ class PostalDisplayString < String
50
+ def to_display
51
+ Doh::display_postal(self)
52
+ end
53
+
54
+ def to_s
55
+ self
56
+ end
57
+ end
58
+
59
+ class SsnDisplayString < String
60
+ def to_display
61
+ Doh::display_ssn(self)
62
+ end
63
+
64
+ def to_s
65
+ self
66
+ end
67
+ end
68
+
69
+ module Doh
70
+
71
+ def self.display_phone(str)
72
+ return str unless str.size == 10
73
+ str[0..2] + '-' + str[3..5] + '-' + str[6..9]
74
+ end
75
+
76
+ def self.display_postal(str)
77
+ return str unless str.size == 9
78
+ return str[0..4] + '-' + str[5..8]
79
+ end
80
+
81
+ def self.display_ssn(str)
82
+ return str unless str.size == 9
83
+ str[0..2] + '-' + str[3..4] + '-' + str[5..8]
84
+ end
85
+
86
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dohutil
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-01-28 00:00:00.000000000Z
13
+ date: 2012-02-09 00:00:00.000000000Z
14
14
  dependencies: []
15
15
  description: Tiny utilities, packaged together so they don't each have their own gem.
16
16
  email:
@@ -20,12 +20,26 @@ extensions: []
20
20
  extra_rdoc_files:
21
21
  - MIT-LICENSE
22
22
  files:
23
+ - lib/doh/app/common.rb
24
+ - lib/doh/app/pwd.rb
25
+ - lib/doh/array_to_hash.rb
26
+ - lib/doh/class_basename.rb
23
27
  - lib/doh/config.rb
28
+ - lib/doh/core_ext/bigdecimal.rb
29
+ - lib/doh/core_ext/class/force_deep_copy.rb
30
+ - lib/doh/core_ext/date.rb
31
+ - lib/doh/core_ext/dir.rb
32
+ - lib/doh/core_ext/hash.rb
33
+ - lib/doh/core_ext/kernel.rb
34
+ - lib/doh/core_ext/string.rb
35
+ - lib/doh/current_date.rb
24
36
  - lib/doh/env.rb
25
37
  - lib/doh/findup.rb
38
+ - lib/doh/http_helper.rb
26
39
  - lib/doh/log/stub.rb
27
40
  - lib/doh/options.rb
28
41
  - lib/doh/root.rb
42
+ - lib/doh/to_display.rb
29
43
  - MIT-LICENSE
30
44
  homepage: https://github.com/atpsoft/dohutil
31
45
  licenses:
@@ -48,7 +62,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
48
62
  version: '0'
49
63
  requirements: []
50
64
  rubyforge_project:
51
- rubygems_version: 1.8.10
65
+ rubygems_version: 1.8.15
52
66
  signing_key:
53
67
  specification_version: 3
54
68
  summary: assorted tiny utilities