HelperClasses 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.
- checksums.yaml +7 -0
- data/LICENSE +3 -0
- data/README +78 -0
- data/lib/helperclasses.rb +3 -0
- data/lib/helperclasses/arraysym.rb +25 -0
- data/lib/helperclasses/dputs.rb +86 -0
- data/lib/helperclasses/hashaccessor.rb +41 -0
- data/test/test_arraysym.rb +5 -0
- data/test/test_dputs.rb +12 -0
- data/test/test_hashaccessor.rb +9 -0
- metadata +54 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: 5e9d72b8fe43505cae6d07152f6bf45f9d94cec5
         | 
| 4 | 
            +
              data.tar.gz: c8ec6b3f48a225602628f578122ac32f5bb7388a
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: cdd44f845254cadfc4771dce2c205fdca28139550e0d1bf6d2393cb67fd0f03f12a3cca089ce8ff3e5f5f117cd82a16f2614cd4288504d621f1ead249ec733a0
         | 
| 7 | 
            +
              data.tar.gz: 3404bd78e68baa95a8c991714c80a0f9326c50dd8624e40ea907e76fa5c79315a0a12368cb44321826cc3b0dac0d1060c092d35e16cc9f78e0e6928dcf83b84c
         | 
    
        data/LICENSE
    ADDED
    
    
    
        data/README
    ADDED
    
    | @@ -0,0 +1,78 @@ | |
| 1 | 
            +
            == HelperClasses
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Some simple classes to help in everyday tasks
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            === DPuts
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            Ever wanted to have detailed debug-output, but in the end even PRODUCING the
         | 
| 8 | 
            +
            string without printing it was too long? Here comes DPuts! It let's you define
         | 
| 9 | 
            +
            different debug-levels and the strings are only evaluated if they're about
         | 
| 10 | 
            +
            to be printed! Great for that 10MB-dump that you only want for debugging...
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            Usage:
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            ```
         | 
| 15 | 
            +
            include HelperClasses::DPuts
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            DEBUG_LVL = 5
         | 
| 18 | 
            +
            dputs(5){ "String with some #{huge_db.inspect}" }
         | 
| 19 | 
            +
            ```
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            This will evaluate and print the ```huge_db``` variable, while
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            ```
         | 
| 24 | 
            +
            include HelperClasses::DPuts
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            DEBUG_LVL = 4
         | 
| 27 | 
            +
            dputs(5){ "String with some #{huge_db.inspect}" }
         | 
| 28 | 
            +
            ```
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            will NOT evaluate it! The debug-levels are arbitrarily chosen like this:
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            0 - Errors
         | 
| 33 | 
            +
            1 - Info and warnings, important
         | 
| 34 | 
            +
            2 - Often used debug-messages - limit of production-use
         | 
| 35 | 
            +
            3 - More detailed debugging
         | 
| 36 | 
            +
            4
         | 
| 37 | 
            +
            5 - Dumping lots of raw data
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            === Arraysym
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            to_sym and to_sym! - calls .to_sym on all elements. Usage:
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            ```
         | 
| 44 | 
            +
            using HelperClasses::ArraySym
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            p [ "a", "b" ].to_sym
         | 
| 47 | 
            +
            ```
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            Produces "[ :a, :b ]"
         | 
| 50 | 
            +
             | 
| 51 | 
            +
            === HashAccessor
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            This should be standard ruby. Access all elements of an array by
         | 
| 54 | 
            +
            prepending a "_".
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            ==== Getting a value
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            ```
         | 
| 59 | 
            +
            using HelperClasses::HashAccessor
         | 
| 60 | 
            +
             | 
| 61 | 
            +
            p { :a => 2, "a" => 3 }._a
         | 
| 62 | 
            +
            ```
         | 
| 63 | 
            +
             | 
| 64 | 
            +
            Will print "2". So symbols have precedence over string-keys.
         | 
| 65 | 
            +
             | 
| 66 | 
            +
            ==== Setting a value
         | 
| 67 | 
            +
             | 
| 68 | 
            +
            ```
         | 
| 69 | 
            +
            using HelperClasses::HashAccessor
         | 
| 70 | 
            +
             | 
| 71 | 
            +
            a = { :a => 2, "a" => 3 }
         | 
| 72 | 
            +
            a._a = 4
         | 
| 73 | 
            +
            a._b = 5
         | 
| 74 | 
            +
             | 
| 75 | 
            +
            p a
         | 
| 76 | 
            +
            ```
         | 
| 77 | 
            +
             | 
| 78 | 
            +
            Will print ```{ :a => 4, "a" => 3, :b => "5" }```
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            module HelperClasses
         | 
| 3 | 
            +
              module ArraySym
         | 
| 4 | 
            +
                refine Array do
         | 
| 5 | 
            +
                  # Comptaibility for Ruby < 1.9
         | 
| 6 | 
            +
                  if ! Array.respond_to? :to_h
         | 
| 7 | 
            +
                    def to_h
         | 
| 8 | 
            +
                      Hash[ *self ]
         | 
| 9 | 
            +
                    end
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def to_sym
         | 
| 13 | 
            +
                    collect{|v| v.to_sym }
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def to_sym!
         | 
| 17 | 
            +
                    self.replace( to_sym() )
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
                
         | 
| 20 | 
            +
                  def to_s
         | 
| 21 | 
            +
                    "[#{join(",")}]"
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,86 @@ | |
| 1 | 
            +
            module HelperClasses
         | 
| 2 | 
            +
              require 'thread'
         | 
| 3 | 
            +
              require 'singleton'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              module DPuts
         | 
| 6 | 
            +
                extend self
         | 
| 7 | 
            +
                attr_accessor :mutex, :silent, :show_time, :terminal_width, :log_file
         | 
| 8 | 
            +
                
         | 
| 9 | 
            +
                @mutex = Mutex.new
         | 
| 10 | 
            +
                @silent = false
         | 
| 11 | 
            +
                @show_time = 60
         | 
| 12 | 
            +
                @terminal_width = 160
         | 
| 13 | 
            +
                @log_file = false
         | 
| 14 | 
            +
            	
         | 
| 15 | 
            +
                def dputs_out( n, s, call )
         | 
| 16 | 
            +
                  return if DPuts.silent
         | 
| 17 | 
            +
                  if precision = DPuts.show_time
         | 
| 18 | 
            +
                    $dputs_time ||= Time.now - 120
         | 
| 19 | 
            +
                    now = Time.now
         | 
| 20 | 
            +
                    show = false
         | 
| 21 | 
            +
                    case precision
         | 
| 22 | 
            +
                    when /sec/
         | 
| 23 | 
            +
                      show = now.to_i != $dputs_time.to_i
         | 
| 24 | 
            +
                    when /min/
         | 
| 25 | 
            +
                      show = ( now.to_i / 60 ).floor != ( $dputs_time.to_i / 60 ).floor
         | 
| 26 | 
            +
                    end
         | 
| 27 | 
            +
                    show and puts "\n   *** It is now: " + 
         | 
| 28 | 
            +
                      Time.now.strftime( "%Y-%m-%d %H:%M:%S" )
         | 
| 29 | 
            +
                    $dputs_time = now
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
                  DPuts.mutex.synchronize do
         | 
| 32 | 
            +
                    width = DPuts.terminal_width
         | 
| 33 | 
            +
                    width -= 30.0
         | 
| 34 | 
            +
                    file, func = call.split(" ")
         | 
| 35 | 
            +
                    file = file[/^.*\/([^.]*)/, 1]
         | 
| 36 | 
            +
                    who = ( ":" + n.to_s + ":" + file.to_s + 
         | 
| 37 | 
            +
                        func.to_s ).ljust(30, [ "X","x","*","-","."," "][n])
         | 
| 38 | 
            +
                    lines = []
         | 
| 39 | 
            +
                    pos = 0
         | 
| 40 | 
            +
                    while ( pos < s.length )
         | 
| 41 | 
            +
                      len = width
         | 
| 42 | 
            +
                      if s.length - pos > width
         | 
| 43 | 
            +
                        len = s.rindex( /[, .;=&>]/, pos + width )
         | 
| 44 | 
            +
                        len and len = len - pos + 1
         | 
| 45 | 
            +
                        if len < width / 2
         | 
| 46 | 
            +
                          len = width
         | 
| 47 | 
            +
                        end
         | 
| 48 | 
            +
                      end
         | 
| 49 | 
            +
                      lines.push s.slice( pos, len )
         | 
| 50 | 
            +
                      pos += len
         | 
| 51 | 
            +
                    end
         | 
| 52 | 
            +
                    puts who + " " + lines.shift.to_s
         | 
| 53 | 
            +
                    lines.each{|l|
         | 
| 54 | 
            +
                      puts " " * ( 32 ) + l
         | 
| 55 | 
            +
                    }
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
            	
         | 
| 59 | 
            +
                def dputs(n, &s)
         | 
| 60 | 
            +
                  if DEBUG_LVL >= n
         | 
| 61 | 
            +
                    s = yield s
         | 
| 62 | 
            +
                    dputs_out( n, s, caller(0)[1] )
         | 
| 63 | 
            +
                  end
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                def ddputs( n, &s )
         | 
| 67 | 
            +
                  s = yield s
         | 
| 68 | 
            +
                  dputs_out( -n, s, caller(0)[1] )
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
              
         | 
| 71 | 
            +
                def dp( s )
         | 
| 72 | 
            +
                  dputs_out( 0, s.class == String ? s : s.inspect, caller(0)[1] )
         | 
| 73 | 
            +
                  s
         | 
| 74 | 
            +
                end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                def log_msg( mod, msg )
         | 
| 77 | 
            +
                  dputs( 1 ){ "Info from #{mod}: #{msg}" }
         | 
| 78 | 
            +
                  return if not DPuts.log_file
         | 
| 79 | 
            +
                  File.open( DPuts.log_file, "a" ){ |f|
         | 
| 80 | 
            +
                    str = Time.now.strftime( "%a %y.%m.%d-%H:%M:%S #{mod}: #{msg}" )
         | 
| 81 | 
            +
                    f.puts str
         | 
| 82 | 
            +
                  }
         | 
| 83 | 
            +
                end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
              end
         | 
| 86 | 
            +
            end
         | 
| @@ -0,0 +1,41 @@ | |
| 1 | 
            +
            module HelperClasses
         | 
| 2 | 
            +
              module HashAccessor
         | 
| 3 | 
            +
                refine Hash do
         | 
| 4 | 
            +
                  # Converts all keys of a hash to syms recursively
         | 
| 5 | 
            +
                  def to_sym
         | 
| 6 | 
            +
                    ret = {}
         | 
| 7 | 
            +
                    each{|k,v|
         | 
| 8 | 
            +
                      ret[ k.to_sym ] = v.class == Hash ? v.to_sym : v
         | 
| 9 | 
            +
                    }
         | 
| 10 | 
            +
                    ret
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  def to_sym!
         | 
| 14 | 
            +
                    self.replace( to_sym() )
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
              
         | 
| 17 | 
            +
                  def method_missing( s, *args )
         | 
| 18 | 
            +
                    case s.to_s
         | 
| 19 | 
            +
                    when "to_ary"
         | 
| 20 | 
            +
                      super( s, args )
         | 
| 21 | 
            +
                    when /^_.*[^=]$/
         | 
| 22 | 
            +
                      key = s.to_s.sub(/^_{1,2}/, '').to_sym
         | 
| 23 | 
            +
                      self.has_key? key and return self[key]
         | 
| 24 | 
            +
                      self.has_key? key.to_s and return self[key.to_s]
         | 
| 25 | 
            +
                      if s.to_s =~ /^__/
         | 
| 26 | 
            +
                        return self[key] = {}
         | 
| 27 | 
            +
                      else
         | 
| 28 | 
            +
                        return nil
         | 
| 29 | 
            +
                      end
         | 
| 30 | 
            +
                    when /^_.*=$/
         | 
| 31 | 
            +
                      key = /^_{1,2}(.*)=$/.match(s.to_s)[1].to_sym
         | 
| 32 | 
            +
                      self.has_key? key and return self[key] = args[0]
         | 
| 33 | 
            +
                      self.has_key? key.to_s and return self[key.to_s] = args[0]
         | 
| 34 | 
            +
                      return self[key] = args[0]
         | 
| 35 | 
            +
                    else
         | 
| 36 | 
            +
                      super( s, args )
         | 
| 37 | 
            +
                    end
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
            end
         | 
    
        data/test/test_dputs.rb
    ADDED
    
    
    
        metadata
    ADDED
    
    | @@ -0,0 +1,54 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: HelperClasses
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.1.0
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - Linus Gasser
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2014-05-28 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies: []
         | 
| 13 | 
            +
            description: Array.to_sym, Hash-accessors and debug-outputs with lazy evaluation
         | 
| 14 | 
            +
            email: ineiti@linusetviviane.ch
         | 
| 15 | 
            +
            executables: []
         | 
| 16 | 
            +
            extensions: []
         | 
| 17 | 
            +
            extra_rdoc_files: []
         | 
| 18 | 
            +
            files:
         | 
| 19 | 
            +
            - "./LICENSE"
         | 
| 20 | 
            +
            - "./README"
         | 
| 21 | 
            +
            - "./lib/helperclasses.rb"
         | 
| 22 | 
            +
            - "./lib/helperclasses/arraysym.rb"
         | 
| 23 | 
            +
            - "./lib/helperclasses/dputs.rb"
         | 
| 24 | 
            +
            - "./lib/helperclasses/hashaccessor.rb"
         | 
| 25 | 
            +
            - "./test/test_arraysym.rb"
         | 
| 26 | 
            +
            - "./test/test_dputs.rb"
         | 
| 27 | 
            +
            - "./test/test_hashaccessor.rb"
         | 
| 28 | 
            +
            - LICENSE
         | 
| 29 | 
            +
            - README
         | 
| 30 | 
            +
            homepage: https://github.com/ineiti/HelperClasses
         | 
| 31 | 
            +
            licenses:
         | 
| 32 | 
            +
            - GPLv3
         | 
| 33 | 
            +
            metadata: {}
         | 
| 34 | 
            +
            post_install_message: 
         | 
| 35 | 
            +
            rdoc_options: []
         | 
| 36 | 
            +
            require_paths:
         | 
| 37 | 
            +
            - lib
         | 
| 38 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 39 | 
            +
              requirements:
         | 
| 40 | 
            +
              - - ">="
         | 
| 41 | 
            +
                - !ruby/object:Gem::Version
         | 
| 42 | 
            +
                  version: '0'
         | 
| 43 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
              requirements:
         | 
| 45 | 
            +
              - - ">="
         | 
| 46 | 
            +
                - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                  version: '0'
         | 
| 48 | 
            +
            requirements: []
         | 
| 49 | 
            +
            rubyforge_project: 
         | 
| 50 | 
            +
            rubygems_version: 2.2.0
         | 
| 51 | 
            +
            signing_key: 
         | 
| 52 | 
            +
            specification_version: 4
         | 
| 53 | 
            +
            summary: Helpers for Array, Hash and debug-output
         | 
| 54 | 
            +
            test_files: []
         |