hanami-utils 0.9.2 → 1.0.0.beta1
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 +4 -4
- data/CHANGELOG.md +20 -3
- data/lib/hanami/interactor.rb +4 -10
- data/lib/hanami/logger.rb +34 -5
- data/lib/hanami/utils.rb +35 -1
- data/lib/hanami/utils/basic_object.rb +2 -2
- data/lib/hanami/utils/hash.rb +26 -3
- data/lib/hanami/utils/version.rb +1 -1
- metadata +4 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 2ea1ca32894baa365b51feaeddc616f6fa55cc82
         | 
| 4 | 
            +
              data.tar.gz: abb789173257a8b131d66a0aa6d1d2e161e1f549
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 212099661a2b3be79ca7c2218d5fda126331db1fe6b2625164dac6e2dbf0f1d9bd4f869e31d7c1fc227f96a926815408954abf160a8df852ebbb490ed70fb101
         | 
| 7 | 
            +
              data.tar.gz: c21fbd4cfafd99203ae7b796a91d130ba72d382a18a0f57146c7d86fa375b30944f55060d701020b51c4c6af11dd50155ea40bb26397bfabe2ea42bc3c2cc2f0
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,14 +1,31 @@ | |
| 1 1 | 
             
            # Hanami::Utils
         | 
| 2 2 | 
             
            Ruby core extentions and class utilities for Hanami
         | 
| 3 3 |  | 
| 4 | 
            +
            ## v1.0.0.beta1 - 2017-02-14
         | 
| 5 | 
            +
            ### Added
         | 
| 6 | 
            +
            - [Luca Guidi] Official support for Ruby: MRI 2.4
         | 
| 7 | 
            +
            - [alexd16] Introduced `Utils::Hash#deep_symbolize!` for deep symbolization
         | 
| 8 | 
            +
            - [Luca Guidi] Introduced `Hanami::Utils.reload!` as a mechanism to force code reloading in development
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            ### Fixed
         | 
| 11 | 
            +
            - [alexd16 & Alfonso Uceda & Luca Guidi] Don't deeply symbolize `Hanami::Interactor::Result` payload
         | 
| 12 | 
            +
            – [Alfonso Uceda] `Hanami::Interactor::Result`: Don't transform objects that respond to `#to_hash` (like entities)
         | 
| 13 | 
            +
            - [Bhanu Prakash] Use `Utils::Json.generate` instead of the deprecated `.dump` for `Hanami::Logger` JSON formatter
         | 
| 14 | 
            +
            - [Luca Guidi] `Hanami::Logger`: when a `Hash` message is passed, don't nest it under `:message` key, but unwrap at the top level
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            ### Changed
         | 
| 17 | 
            +
            - [alexd16] `Utils::Hash#symbolize!` no longer symbolizes deep structures
         | 
| 18 | 
            +
            - [Luca Guidi & Alfonso Uceda] Improve readability for default logger formatter
         | 
| 19 | 
            +
            - [Luca Guidi] Use ISO-8601 time format for JSON logger formatter
         | 
| 20 | 
            +
             | 
| 4 21 | 
             
            ## v0.9.2 - 2016-12-19
         | 
| 5 | 
            -
             | 
| 22 | 
            +
            ### Added
         | 
| 6 23 | 
             
            - [Grachev Mikhail] Introduced `Hanami::Interactor::Result#failure?`
         | 
| 7 24 |  | 
| 8 | 
            -
             | 
| 25 | 
            +
            ### Fixed
         | 
| 9 26 | 
             
            - [Paweł Świątkowski] `Utils::Inflector.pluralize` Pluralize -en to -ens instead of -ina 
         | 
| 10 27 |  | 
| 11 | 
            -
             | 
| 28 | 
            +
            ### Changed
         | 
| 12 29 | 
             
            - [Grachev Mikhail] Deprecate `Hanami::Interactor::Result#failing?` in favor of `#failure?`
         | 
| 13 30 |  | 
| 14 31 | 
             
            ## v0.9.1 - 2016-11-18
         | 
    
        data/lib/hanami/interactor.rb
    CHANGED
    
    | @@ -37,7 +37,7 @@ module Hanami | |
| 37 37 | 
             
                  # @since 0.3.5
         | 
| 38 38 | 
             
                  # @api private
         | 
| 39 39 | 
             
                  def initialize(payload = {})
         | 
| 40 | 
            -
                    @payload =  | 
| 40 | 
            +
                    @payload = payload
         | 
| 41 41 | 
             
                    @errors  = []
         | 
| 42 42 | 
             
                    @success = true
         | 
| 43 43 | 
             
                  end
         | 
| @@ -125,7 +125,7 @@ module Hanami | |
| 125 125 | 
             
                  # @since 0.3.5
         | 
| 126 126 | 
             
                  # @api private
         | 
| 127 127 | 
             
                  def prepare!(payload)
         | 
| 128 | 
            -
                    @payload.merge!( | 
| 128 | 
            +
                    @payload.merge!(payload)
         | 
| 129 129 | 
             
                    self
         | 
| 130 130 | 
             
                  end
         | 
| 131 131 |  | 
| @@ -144,12 +144,6 @@ module Hanami | |
| 144 144 | 
             
                    METHODS[method_name] || @payload.key?(method_name)
         | 
| 145 145 | 
             
                  end
         | 
| 146 146 |  | 
| 147 | 
            -
                  # @since 0.3.5
         | 
| 148 | 
            -
                  # @api private
         | 
| 149 | 
            -
                  def _payload(payload)
         | 
| 150 | 
            -
                    Utils::Hash.new(payload).symbolize!
         | 
| 151 | 
            -
                  end
         | 
| 152 | 
            -
             | 
| 153 147 | 
             
                  # @since 0.3.5
         | 
| 154 148 | 
             
                  # @api private
         | 
| 155 149 | 
             
                  def __inspect
         | 
| @@ -492,7 +486,7 @@ module Hanami | |
| 492 486 | 
             
                    include Utils::ClassAttribute
         | 
| 493 487 |  | 
| 494 488 | 
             
                    class_attribute :exposures
         | 
| 495 | 
            -
                    self.exposures =  | 
| 489 | 
            +
                    self.exposures = {}
         | 
| 496 490 | 
             
                  end
         | 
| 497 491 | 
             
                end
         | 
| 498 492 |  | 
| @@ -527,7 +521,7 @@ module Hanami | |
| 527 521 | 
             
                #   result.params # => NoMethodError
         | 
| 528 522 | 
             
                def expose(*instance_variable_names)
         | 
| 529 523 | 
             
                  instance_variable_names.each do |name|
         | 
| 530 | 
            -
                    exposures[name] = "@#{name}"
         | 
| 524 | 
            +
                    exposures[name.to_sym] = "@#{name}"
         | 
| 531 525 | 
             
                  end
         | 
| 532 526 | 
             
                end
         | 
| 533 527 | 
             
              end
         | 
    
        data/lib/hanami/logger.rb
    CHANGED
    
    | @@ -108,6 +108,10 @@ module Hanami | |
| 108 108 | 
             
                  # @api private
         | 
| 109 109 | 
             
                  NEW_LINE = $/
         | 
| 110 110 |  | 
| 111 | 
            +
                  # @since 1.0.0.beta1
         | 
| 112 | 
            +
                  # @api private
         | 
| 113 | 
            +
                  RESERVED_KEYS = [:app, :severity, :time].freeze
         | 
| 114 | 
            +
             | 
| 111 115 | 
             
                  include Utils::ClassAttribute
         | 
| 112 116 |  | 
| 113 117 | 
             
                  class_attribute :subclasses
         | 
| @@ -137,15 +141,19 @@ module Hanami | |
| 137 141 | 
             
                  # @api private
         | 
| 138 142 | 
             
                  attr_writer :application_name
         | 
| 139 143 |  | 
| 144 | 
            +
                  # @since 1.0.0.beta1
         | 
| 145 | 
            +
                  # @api private
         | 
| 146 | 
            +
                  attr_reader :application_name
         | 
| 147 | 
            +
             | 
| 140 148 | 
             
                  # @since 0.5.0
         | 
| 141 149 | 
             
                  # @api private
         | 
| 142 150 | 
             
                  #
         | 
| 143 151 | 
             
                  # @see http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc/Logger/Formatter.html#method-i-call
         | 
| 144 152 | 
             
                  def call(severity, time, _progname, msg)
         | 
| 145 153 | 
             
                    _format({
         | 
| 146 | 
            -
                      app:       | 
| 154 | 
            +
                      app:      application_name,
         | 
| 147 155 | 
             
                      severity: severity,
         | 
| 148 | 
            -
                      time:     time | 
| 156 | 
            +
                      time:     time
         | 
| 149 157 | 
             
                    }.merge(
         | 
| 150 158 | 
             
                      _message_hash(msg)
         | 
| 151 159 | 
             
                    ))
         | 
| @@ -173,7 +181,27 @@ module Hanami | |
| 173 181 | 
             
                  # @since 0.8.0
         | 
| 174 182 | 
             
                  # @api private
         | 
| 175 183 | 
             
                  def _format(hash)
         | 
| 176 | 
            -
                     | 
| 184 | 
            +
                    result = RESERVED_KEYS.map { |k| "[#{hash[k]}]" }.join(SEPARATOR)
         | 
| 185 | 
            +
                    return _format_error(result, hash) if hash.key?(:error)
         | 
| 186 | 
            +
             | 
| 187 | 
            +
                    values = hash.each_with_object([]) do |(k, v), memo|
         | 
| 188 | 
            +
                      memo << v unless RESERVED_KEYS.include?(k)
         | 
| 189 | 
            +
                    end
         | 
| 190 | 
            +
             | 
| 191 | 
            +
                    result << " #{values.join(SEPARATOR)}#{NEW_LINE}"
         | 
| 192 | 
            +
                    result
         | 
| 193 | 
            +
                  end
         | 
| 194 | 
            +
             | 
| 195 | 
            +
                  def _format_error(result, hash)
         | 
| 196 | 
            +
                    result << " #{hash[:error]}:" if hash.key?(:error)
         | 
| 197 | 
            +
                    result << " #{hash[:message]}#{NEW_LINE}"
         | 
| 198 | 
            +
                    if hash.key?(:backtrace)
         | 
| 199 | 
            +
                      hash[:backtrace].each do |line|
         | 
| 200 | 
            +
                        result << "from #{line}#{NEW_LINE}"
         | 
| 201 | 
            +
                      end
         | 
| 202 | 
            +
                    end
         | 
| 203 | 
            +
             | 
| 204 | 
            +
                    result
         | 
| 177 205 | 
             
                  end
         | 
| 178 206 | 
             
                end
         | 
| 179 207 |  | 
| @@ -192,7 +220,8 @@ module Hanami | |
| 192 220 | 
             
                  # @since 0.8.0
         | 
| 193 221 | 
             
                  # @api private
         | 
| 194 222 | 
             
                  def _format(hash)
         | 
| 195 | 
            -
                     | 
| 223 | 
            +
                    hash[:time] = hash[:time].utc.iso8601
         | 
| 224 | 
            +
                    Hanami::Utils::Json.generate(hash) + NEW_LINE
         | 
| 196 225 | 
             
                  end
         | 
| 197 226 | 
             
                end
         | 
| 198 227 |  | 
| @@ -201,7 +230,7 @@ module Hanami | |
| 201 230 | 
             
                #
         | 
| 202 231 | 
             
                # @since 0.5.0
         | 
| 203 232 | 
             
                # @api private
         | 
| 204 | 
            -
                DEFAULT_APPLICATION_NAME = ' | 
| 233 | 
            +
                DEFAULT_APPLICATION_NAME = 'hanami'.freeze
         | 
| 205 234 |  | 
| 206 235 | 
             
                # @since 0.8.0
         | 
| 207 236 | 
             
                # @api private
         | 
    
        data/lib/hanami/utils.rb
    CHANGED
    
    | @@ -49,11 +49,45 @@ module Hanami | |
| 49 49 | 
             
                #
         | 
| 50 50 | 
             
                # @since 0.9.0
         | 
| 51 51 | 
             
                def self.require!(directory)
         | 
| 52 | 
            +
                  for_each_file_in(directory) { |file| require_relative(file) }
         | 
| 53 | 
            +
                end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                # Recursively reload Ruby files under the given directory.
         | 
| 56 | 
            +
                #
         | 
| 57 | 
            +
                # If the directory is relative, it implies it's the path from current directory.
         | 
| 58 | 
            +
                # If the directory is absolute, it uses as it is.
         | 
| 59 | 
            +
                #
         | 
| 60 | 
            +
                # It respects file separator of the current operating system.
         | 
| 61 | 
            +
                # A pattern like <tt>"path/to/files"</tt> will work both on *NIX and Windows machines.
         | 
| 62 | 
            +
                #
         | 
| 63 | 
            +
                # @param directory [String, Pathname] the directory
         | 
| 64 | 
            +
                #
         | 
| 65 | 
            +
                # @since 1.0.0.beta1
         | 
| 66 | 
            +
                # @api private
         | 
| 67 | 
            +
                def self.reload!(directory)
         | 
| 68 | 
            +
                  for_each_file_in(directory) { |file| load(file) }
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                # Recursively scans through the given directory and yields the given block
         | 
| 72 | 
            +
                # for each Ruby source file.
         | 
| 73 | 
            +
                #
         | 
| 74 | 
            +
                # If the directory is relative, it implies it's the path from current directory.
         | 
| 75 | 
            +
                # If the directory is absolute, it uses as it is.
         | 
| 76 | 
            +
                #
         | 
| 77 | 
            +
                # It respects file separator of the current operating system.
         | 
| 78 | 
            +
                # A pattern like <tt>"path/to/files"</tt> will work both on *NIX and Windows machines.
         | 
| 79 | 
            +
                #
         | 
| 80 | 
            +
                # @param directory [String, Pathname] the directory
         | 
| 81 | 
            +
                # @param blk [Proc] the block to yield
         | 
| 82 | 
            +
                #
         | 
| 83 | 
            +
                # @since 1.0.0.beta1
         | 
| 84 | 
            +
                # @api private
         | 
| 85 | 
            +
                def self.for_each_file_in(directory, &blk)
         | 
| 52 86 | 
             
                  directory = directory.to_s.gsub(%r{(\/|\\)}, File::SEPARATOR)
         | 
| 53 87 | 
             
                  directory = Pathname.new(Dir.pwd).join(directory).to_s
         | 
| 54 88 | 
             
                  directory = File.join(directory, '**', '*.rb') unless directory =~ /(\*\*)/
         | 
| 55 89 |  | 
| 56 | 
            -
                  FileList[directory].each | 
| 90 | 
            +
                  FileList[directory].each(&blk)
         | 
| 57 91 | 
             
                end
         | 
| 58 92 | 
             
              end
         | 
| 59 93 | 
             
            end
         | 
| @@ -35,9 +35,9 @@ module Hanami | |
| 35 35 | 
             
                    __id__
         | 
| 36 36 | 
             
                  end
         | 
| 37 37 |  | 
| 38 | 
            -
                  # Interface for  | 
| 38 | 
            +
                  # Interface for pp
         | 
| 39 39 | 
             
                  #
         | 
| 40 | 
            -
                  # @return [String] the pretty | 
| 40 | 
            +
                  # @return [String] the pretty-printable inspection of the object
         | 
| 41 41 | 
             
                  #
         | 
| 42 42 | 
             
                  # @since 0.9.0
         | 
| 43 43 | 
             
                  #
         | 
    
        data/lib/hanami/utils/hash.rb
    CHANGED
    
    | @@ -48,7 +48,7 @@ module Hanami | |
| 48 48 | 
             
                    @hash.default_proc = blk
         | 
| 49 49 | 
             
                  end
         | 
| 50 50 |  | 
| 51 | 
            -
                  # Convert in-place all the keys to Symbol instances | 
| 51 | 
            +
                  # Convert in-place all the keys to Symbol instances.
         | 
| 52 52 | 
             
                  #
         | 
| 53 53 | 
             
                  # @return [Hash] self
         | 
| 54 54 | 
             
                  #
         | 
| @@ -61,11 +61,34 @@ module Hanami | |
| 61 61 | 
             
                  #   hash.symbolize!
         | 
| 62 62 | 
             
                  #
         | 
| 63 63 | 
             
                  #   hash.keys    # => [:a, :b]
         | 
| 64 | 
            -
                  #   hash.inspect # => {:a=>23, :b=>{ | 
| 64 | 
            +
                  #   hash.inspect # => { :a => 23, :b => { 'c' => ["x", "y", "z"] } }
         | 
| 65 65 | 
             
                  def symbolize!
         | 
| 66 66 | 
             
                    keys.each do |k|
         | 
| 67 67 | 
             
                      v = delete(k)
         | 
| 68 | 
            -
                       | 
| 68 | 
            +
                      self[k.to_sym] = v
         | 
| 69 | 
            +
                    end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                    self
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                  # Convert in-place all the keys to Symbol instances, nested hashes are converted too.
         | 
| 75 | 
            +
                  #
         | 
| 76 | 
            +
                  # @return [Hash] self
         | 
| 77 | 
            +
                  #
         | 
| 78 | 
            +
                  # @since 1.0.0.beta1
         | 
| 79 | 
            +
                  #
         | 
| 80 | 
            +
                  # @example
         | 
| 81 | 
            +
                  #   require 'hanami/utils/hash'
         | 
| 82 | 
            +
                  #
         | 
| 83 | 
            +
                  #   hash = Hanami::Utils::Hash.new 'a' => 23, 'b' => { 'c' => ['x','y','z'] }
         | 
| 84 | 
            +
                  #   hash.deep_symbolize!
         | 
| 85 | 
            +
                  #
         | 
| 86 | 
            +
                  #   hash.keys    # => [:a, :b]
         | 
| 87 | 
            +
                  #   hash.inspect # => {:a=>23, :b=>{:c=>["x", "y", "z"]}}
         | 
| 88 | 
            +
                  def deep_symbolize!
         | 
| 89 | 
            +
                    keys.each do |k|
         | 
| 90 | 
            +
                      v = delete(k)
         | 
| 91 | 
            +
                      v = self.class.new(v).deep_symbolize! if v.respond_to?(:to_hash)
         | 
| 69 92 |  | 
| 70 93 | 
             
                      self[k.to_sym] = v
         | 
| 71 94 | 
             
                    end
         | 
    
        data/lib/hanami/utils/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: hanami-utils
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 1.0.0.beta1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Luca Guidi
         | 
| @@ -10,7 +10,7 @@ authors: | |
| 10 10 | 
             
            autorequire: 
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date:  | 
| 13 | 
            +
            date: 2017-02-14 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: bundler
         | 
| @@ -91,9 +91,9 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 91 91 | 
             
                  version: 2.3.0
         | 
| 92 92 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 93 93 | 
             
              requirements:
         | 
| 94 | 
            -
              - - " | 
| 94 | 
            +
              - - ">"
         | 
| 95 95 | 
             
                - !ruby/object:Gem::Version
         | 
| 96 | 
            -
                  version:  | 
| 96 | 
            +
                  version: 1.3.1
         | 
| 97 97 | 
             
            requirements: []
         | 
| 98 98 | 
             
            rubyforge_project: 
         | 
| 99 99 | 
             
            rubygems_version: 2.6.8
         |