hanami-utils 1.3.7 → 2.0.0.alpha1
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 +14 -29
- data/README.md +5 -13
- data/hanami-utils.gemspec +3 -4
- data/lib/hanami/interactor.rb +29 -53
- data/lib/hanami/logger.rb +12 -12
- data/lib/hanami/logger/colorizer.rb +10 -10
- data/lib/hanami/logger/filter.rb +10 -89
- data/lib/hanami/logger/formatter.rb +7 -7
- data/lib/hanami/middleware.rb +11 -0
- data/lib/hanami/utils.rb +3 -19
- data/lib/hanami/utils/basic_object.rb +3 -63
- data/lib/hanami/utils/blank.rb +6 -8
- data/lib/hanami/utils/callbacks.rb +20 -5
- data/lib/hanami/utils/class.rb +3 -52
- data/lib/hanami/utils/class_attribute.rb +22 -13
- data/lib/hanami/utils/class_attribute/attributes.rb +45 -0
- data/lib/hanami/utils/escape.rb +170 -172
- data/lib/hanami/utils/file_list.rb +1 -1
- data/lib/hanami/utils/files.rb +2 -31
- data/lib/hanami/utils/hash.rb +12 -341
- data/lib/hanami/utils/json.rb +1 -1
- data/lib/hanami/utils/kernel.rb +12 -11
- data/lib/hanami/utils/load_paths.rb +3 -3
- data/lib/hanami/utils/query_string.rb +1 -1
- data/lib/hanami/utils/shell_color.rb +9 -9
- data/lib/hanami/utils/string.rb +38 -102
- data/lib/hanami/utils/version.rb +1 -1
- metadata +15 -29
- data/lib/hanami/utils/duplicable.rb +0 -82
- data/lib/hanami/utils/inflector.rb +0 -493
| @@ -50,7 +50,7 @@ module Hanami | |
| 50 50 | 
             
                    @paths = original.instance_variable_get(:@paths).dup
         | 
| 51 51 | 
             
                  end
         | 
| 52 52 |  | 
| 53 | 
            -
                  # Iterates  | 
| 53 | 
            +
                  # Iterates thru the collection and yields the given block.
         | 
| 54 54 | 
             
                  # It skips duplications and raises an error in case one of the paths
         | 
| 55 55 | 
             
                  # doesn't exist.
         | 
| 56 56 | 
             
                  #
         | 
| @@ -117,7 +117,7 @@ module Hanami | |
| 117 117 | 
             
                    self
         | 
| 118 118 | 
             
                  end
         | 
| 119 119 |  | 
| 120 | 
            -
                   | 
| 120 | 
            +
                  alias << push
         | 
| 121 121 |  | 
| 122 122 | 
             
                  # It freezes the object by preventing further modifications.
         | 
| 123 123 | 
             
                  #
         | 
| @@ -158,7 +158,7 @@ module Hanami | |
| 158 158 |  | 
| 159 159 | 
             
                  private
         | 
| 160 160 |  | 
| 161 | 
            -
                  #  | 
| 161 | 
            +
                  # Allow subclasses to define their own policy to discover the realpath
         | 
| 162 162 | 
             
                  # of the given path.
         | 
| 163 163 | 
             
                  #
         | 
| 164 164 | 
             
                  # @since 0.2.0
         | 
| @@ -18,22 +18,22 @@ module Hanami | |
| 18 18 | 
             
                    end
         | 
| 19 19 | 
             
                  end
         | 
| 20 20 |  | 
| 21 | 
            -
                  #  | 
| 21 | 
            +
                  # Escape codes for terminals to output strings in colors
         | 
| 22 22 | 
             
                  #
         | 
| 23 23 | 
             
                  # @since 1.2.0
         | 
| 24 24 | 
             
                  # @api private
         | 
| 25 25 | 
             
                  COLORS = ::Hash[
         | 
| 26 | 
            -
                    black: | 
| 27 | 
            -
                    red: | 
| 28 | 
            -
                    green: | 
| 29 | 
            -
                    yellow: | 
| 30 | 
            -
                    blue: | 
| 26 | 
            +
                    black:   30,
         | 
| 27 | 
            +
                    red:     31,
         | 
| 28 | 
            +
                    green:   32,
         | 
| 29 | 
            +
                    yellow:  33,
         | 
| 30 | 
            +
                    blue:    34,
         | 
| 31 31 | 
             
                    magenta: 35,
         | 
| 32 | 
            -
                    cyan: | 
| 33 | 
            -
                    gray: | 
| 32 | 
            +
                    cyan:    36,
         | 
| 33 | 
            +
                    gray:    37,
         | 
| 34 34 | 
             
                  ].freeze
         | 
| 35 35 |  | 
| 36 | 
            -
                  #  | 
| 36 | 
            +
                  # Colorize output
         | 
| 37 37 | 
             
                  # 8 colors available: black, red, green, yellow, blue, magenta, cyan, and gray
         | 
| 38 38 | 
             
                  #
         | 
| 39 39 | 
             
                  # @param input [#to_s] the string to colorize
         | 
    
        data/lib/hanami/utils/string.rb
    CHANGED
    
    | @@ -1,6 +1,5 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require "hanami/utils/inflector"
         | 
| 4 3 | 
             
            require "transproc"
         | 
| 5 4 | 
             
            require "concurrent/map"
         | 
| 6 5 |  | 
| @@ -9,7 +8,7 @@ module Hanami | |
| 9 8 | 
             
                # String on steroids
         | 
| 10 9 | 
             
                #
         | 
| 11 10 | 
             
                # @since 0.1.0
         | 
| 12 | 
            -
                class String
         | 
| 11 | 
            +
                class String # rubocop:disable Metrics/ClassLength
         | 
| 13 12 | 
             
                  # Empty string for #classify
         | 
| 14 13 | 
             
                  #
         | 
| 15 14 | 
             
                  # @since 0.6.0
         | 
| @@ -74,17 +73,16 @@ module Hanami | |
| 74 73 | 
             
                  #
         | 
| 75 74 | 
             
                  # @since 0.3.4
         | 
| 76 75 | 
             
                  # @api private
         | 
| 77 | 
            -
                  CLASSIFY_WORD_SEPARATOR = /#{CLASSIFY_SEPARATOR}|#{NAMESPACE_SEPARATOR}|#{UNDERSCORE_SEPARATOR}|#{DASHERIZE_SEPARATOR}/.freeze | 
| 76 | 
            +
                  CLASSIFY_WORD_SEPARATOR = /#{CLASSIFY_SEPARATOR}|#{NAMESPACE_SEPARATOR}|#{UNDERSCORE_SEPARATOR}|#{DASHERIZE_SEPARATOR}/.freeze
         | 
| 78 77 |  | 
| 79 78 | 
             
                  @__transformations__ = Concurrent::Map.new
         | 
| 80 79 |  | 
| 81 80 | 
             
                  extend Transproc::Registry
         | 
| 82 81 | 
             
                  extend Transproc::Composer
         | 
| 83 82 |  | 
| 84 | 
            -
                  #  | 
| 83 | 
            +
                  # Apply the given transformation(s) to `input`
         | 
| 85 84 | 
             
                  #
         | 
| 86 | 
            -
                  # It performs a pipeline of transformations, by applying the given
         | 
| 87 | 
            -
                  # functions from `Hanami::Utils::String` and `::String`.
         | 
| 85 | 
            +
                  # It performs a pipeline of transformations, by applying the given functions from `Hanami::Utils::String` and `::String`.
         | 
| 88 86 | 
             
                  # The transformations are applied in the given order.
         | 
| 89 87 | 
             
                  #
         | 
| 90 88 | 
             
                  # It doesn't mutate the input, unless you use destructive methods from `::String`
         | 
| @@ -132,6 +130,8 @@ module Hanami | |
| 132 130 | 
             
                  #   Hanami::Utils::String.transform("Cherry", -> { "blossom" }))
         | 
| 133 131 | 
             
                  #     # => ArgumentError: wrong number of arguments (given 1, expected 0)
         | 
| 134 132 | 
             
                  #
         | 
| 133 | 
            +
                  # rubocop:disable Metrics/AbcSize
         | 
| 134 | 
            +
                  # rubocop:disable Metrics/MethodLength
         | 
| 135 135 | 
             
                  def self.transform(input, *transformations)
         | 
| 136 136 | 
             
                    fn = @__transformations__.fetch_or_store(transformations.hash) do
         | 
| 137 137 | 
             
                      compose do |fns|
         | 
| @@ -143,7 +143,7 @@ module Hanami | |
| 143 143 | 
             
                                 elsif input.respond_to?(transformation)
         | 
| 144 144 | 
             
                                   t(:bind, input, ->(i) { i.public_send(transformation, *args) })
         | 
| 145 145 | 
             
                                 else
         | 
| 146 | 
            -
                                   raise NoMethodError.new(%(undefined method `#{transformation.inspect}' for #{input.inspect}:#{input.class})) | 
| 146 | 
            +
                                   raise NoMethodError.new(%(undefined method `#{transformation.inspect}' for #{input.inspect}:#{input.class}))
         | 
| 147 147 | 
             
                                 end
         | 
| 148 148 | 
             
                        end
         | 
| 149 149 | 
             
                      end
         | 
| @@ -151,6 +151,8 @@ module Hanami | |
| 151 151 |  | 
| 152 152 | 
             
                    fn.call(input)
         | 
| 153 153 | 
             
                  end
         | 
| 154 | 
            +
                  # rubocop:enable Metrics/MethodLength
         | 
| 155 | 
            +
                  # rubocop:enable Metrics/AbcSize
         | 
| 154 156 |  | 
| 155 157 | 
             
                  # Extracted from `transproc` source code
         | 
| 156 158 | 
             
                  #
         | 
| @@ -163,7 +165,7 @@ module Hanami | |
| 163 165 | 
             
                    binding.instance_exec(value, &fun)
         | 
| 164 166 | 
             
                  end
         | 
| 165 167 |  | 
| 166 | 
            -
                  #  | 
| 168 | 
            +
                  # Return a titleized version of the string
         | 
| 167 169 | 
             
                  #
         | 
| 168 170 | 
             
                  # @param input [::String] the input
         | 
| 169 171 | 
             
                  #
         | 
| @@ -180,7 +182,7 @@ module Hanami | |
| 180 182 | 
             
                    underscore(string).split(CLASSIFY_SEPARATOR).map(&:capitalize).join(TITLEIZE_SEPARATOR)
         | 
| 181 183 | 
             
                  end
         | 
| 182 184 |  | 
| 183 | 
            -
                  #  | 
| 185 | 
            +
                  # Return a capitalized version of the string
         | 
| 184 186 | 
             
                  #
         | 
| 185 187 | 
             
                  # @param input [::String] the input
         | 
| 186 188 | 
             
                  #
         | 
| @@ -207,7 +209,7 @@ module Hanami | |
| 207 209 | 
             
                    tail.unshift(head.capitalize).join(CAPITALIZE_SEPARATOR)
         | 
| 208 210 | 
             
                  end
         | 
| 209 211 |  | 
| 210 | 
            -
                  #  | 
| 212 | 
            +
                  # Return a CamelCase version of the string
         | 
| 211 213 | 
             
                  #
         | 
| 212 214 | 
             
                  # @param input [::String] the input
         | 
| 213 215 | 
             
                  #
         | 
| @@ -231,7 +233,7 @@ module Hanami | |
| 231 233 | 
             
                    words.zip(delimiters).join
         | 
| 232 234 | 
             
                  end
         | 
| 233 235 |  | 
| 234 | 
            -
                  #  | 
| 236 | 
            +
                  # Return a downcased and underscore separated version of the string
         | 
| 235 237 | 
             
                  #
         | 
| 236 238 | 
             
                  # Revised version of `ActiveSupport::Inflector.underscore` implementation
         | 
| 237 239 | 
             
                  # @see https://github.com/rails/rails/blob/feaa6e2048fe86bcf07e967d6e47b865e42e055b/activesupport/lib/active_support/inflector/methods.rb#L90
         | 
| @@ -256,7 +258,7 @@ module Hanami | |
| 256 258 | 
             
                    string.downcase
         | 
| 257 259 | 
             
                  end
         | 
| 258 260 |  | 
| 259 | 
            -
                  #  | 
| 261 | 
            +
                  # Return a downcased and dash separated version of the string
         | 
| 260 262 | 
             
                  #
         | 
| 261 263 | 
             
                  # @param input [::String] the input
         | 
| 262 264 | 
             
                  #
         | 
| @@ -277,7 +279,7 @@ module Hanami | |
| 277 279 | 
             
                    underscore(string).split(CLASSIFY_SEPARATOR).join(DASHERIZE_SEPARATOR)
         | 
| 278 280 | 
             
                  end
         | 
| 279 281 |  | 
| 280 | 
            -
                  #  | 
| 282 | 
            +
                  # Return the string without the Ruby namespace of the class
         | 
| 281 283 | 
             
                  #
         | 
| 282 284 | 
             
                  # @param input [::String] the input
         | 
| 283 285 | 
             
                  #
         | 
| @@ -295,7 +297,7 @@ module Hanami | |
| 295 297 | 
             
                    ::String.new(input.to_s).split(NAMESPACE_SEPARATOR).last
         | 
| 296 298 | 
             
                  end
         | 
| 297 299 |  | 
| 298 | 
            -
                  #  | 
| 300 | 
            +
                  # Return the top level namespace name
         | 
| 299 301 | 
             
                  #
         | 
| 300 302 | 
             
                  # @param input [::String] the input
         | 
| 301 303 | 
             
                  #
         | 
| @@ -313,47 +315,7 @@ module Hanami | |
| 313 315 | 
             
                    ::String.new(input.to_s).split(NAMESPACE_SEPARATOR).first
         | 
| 314 316 | 
             
                  end
         | 
| 315 317 |  | 
| 316 | 
            -
                  #  | 
| 317 | 
            -
                  #
         | 
| 318 | 
            -
                  # @param input [::String] the input
         | 
| 319 | 
            -
                  #
         | 
| 320 | 
            -
                  # @return [::String] the pluralized string.
         | 
| 321 | 
            -
                  #
         | 
| 322 | 
            -
                  # @since 1.1.0
         | 
| 323 | 
            -
                  #
         | 
| 324 | 
            -
                  # @see Hanami::Utils::Inflector
         | 
| 325 | 
            -
                  # @deprecated
         | 
| 326 | 
            -
                  #
         | 
| 327 | 
            -
                  # @example
         | 
| 328 | 
            -
                  #   require 'hanami/utils/string'
         | 
| 329 | 
            -
                  #
         | 
| 330 | 
            -
                  #   Hanami::Utils::String.pluralize('book') # => 'books'
         | 
| 331 | 
            -
                  def self.pluralize(input)
         | 
| 332 | 
            -
                    string = ::String.new(input.to_s)
         | 
| 333 | 
            -
                    Inflector.pluralize(string)
         | 
| 334 | 
            -
                  end
         | 
| 335 | 
            -
             | 
| 336 | 
            -
                  # Returns a singularized version of self.
         | 
| 337 | 
            -
                  #
         | 
| 338 | 
            -
                  # @param input [::String] the input
         | 
| 339 | 
            -
                  #
         | 
| 340 | 
            -
                  # @return [::String] the singularized string.
         | 
| 341 | 
            -
                  #
         | 
| 342 | 
            -
                  # @since 1.1.0
         | 
| 343 | 
            -
                  # @deprecated
         | 
| 344 | 
            -
                  #
         | 
| 345 | 
            -
                  # @see Hanami::Utils::Inflector
         | 
| 346 | 
            -
                  #
         | 
| 347 | 
            -
                  # @example
         | 
| 348 | 
            -
                  #   require 'hanami/utils/string'
         | 
| 349 | 
            -
                  #
         | 
| 350 | 
            -
                  #   Hanami::Utils::String.singularize('books') # => 'book'
         | 
| 351 | 
            -
                  def self.singularize(input)
         | 
| 352 | 
            -
                    string = ::String.new(input.to_s)
         | 
| 353 | 
            -
                    Inflector.singularize(string)
         | 
| 354 | 
            -
                  end
         | 
| 355 | 
            -
             | 
| 356 | 
            -
                  # Replaces the rightmost match of `pattern` with `replacement`
         | 
| 318 | 
            +
                  # Replace the rightmost match of `pattern` with `replacement`
         | 
| 357 319 | 
             
                  #
         | 
| 358 320 | 
             
                  # If the pattern cannot be matched, it returns the original string.
         | 
| 359 321 | 
             
                  #
         | 
| @@ -374,7 +336,7 @@ module Hanami | |
| 374 336 | 
             
                  #     # => 'authors/books#index'
         | 
| 375 337 | 
             
                  def self.rsub(input, pattern, replacement)
         | 
| 376 338 | 
             
                    string = ::String.new(input.to_s)
         | 
| 377 | 
            -
                    if i = string.rindex(pattern)
         | 
| 339 | 
            +
                    if i = string.rindex(pattern) # rubocop:disable Lint/AssignmentInCondition
         | 
| 378 340 | 
             
                      s = string.dup
         | 
| 379 341 | 
             
                      s[i] = replacement
         | 
| 380 342 | 
             
                      s
         | 
| @@ -395,7 +357,7 @@ module Hanami | |
| 395 357 | 
             
                    @string = string.to_s
         | 
| 396 358 | 
             
                  end
         | 
| 397 359 |  | 
| 398 | 
            -
                  #  | 
| 360 | 
            +
                  # Return a titleized version of the string
         | 
| 399 361 | 
             
                  #
         | 
| 400 362 | 
             
                  # @return [Hanami::Utils::String] the transformed string
         | 
| 401 363 | 
             
                  #
         | 
| @@ -411,7 +373,7 @@ module Hanami | |
| 411 373 | 
             
                    self.class.new underscore.split(CLASSIFY_SEPARATOR).map(&:capitalize).join(TITLEIZE_SEPARATOR)
         | 
| 412 374 | 
             
                  end
         | 
| 413 375 |  | 
| 414 | 
            -
                  #  | 
| 376 | 
            +
                  # Return a capitalized version of the string
         | 
| 415 377 | 
             
                  #
         | 
| 416 378 | 
             
                  # @return [Hanami::Utils::String] the transformed string
         | 
| 417 379 | 
             
                  #
         | 
| @@ -443,7 +405,7 @@ module Hanami | |
| 443 405 | 
             
                    )
         | 
| 444 406 | 
             
                  end
         | 
| 445 407 |  | 
| 446 | 
            -
                  #  | 
| 408 | 
            +
                  # Return a CamelCase version of the string
         | 
| 447 409 | 
             
                  #
         | 
| 448 410 | 
             
                  # @return [Hanami::Utils::String] the transformed string
         | 
| 449 411 | 
             
                  #
         | 
| @@ -466,7 +428,7 @@ module Hanami | |
| 466 428 | 
             
                    self.class.new words.zip(delimiters).join
         | 
| 467 429 | 
             
                  end
         | 
| 468 430 |  | 
| 469 | 
            -
                  #  | 
| 431 | 
            +
                  # Return a downcased and underscore separated version of the string
         | 
| 470 432 | 
             
                  #
         | 
| 471 433 | 
             
                  # Revised version of `ActiveSupport::Inflector.underscore` implementation
         | 
| 472 434 | 
             
                  # @see https://github.com/rails/rails/blob/feaa6e2048fe86bcf07e967d6e47b865e42e055b/activesupport/lib/active_support/inflector/methods.rb#L90
         | 
| @@ -490,7 +452,7 @@ module Hanami | |
| 490 452 | 
             
                    self.class.new new_string
         | 
| 491 453 | 
             
                  end
         | 
| 492 454 |  | 
| 493 | 
            -
                  #  | 
| 455 | 
            +
                  # Return a downcased and dash separated version of the string
         | 
| 494 456 | 
             
                  #
         | 
| 495 457 | 
             
                  # @return [Hanami::Utils::String] the transformed string
         | 
| 496 458 | 
             
                  #
         | 
| @@ -512,7 +474,7 @@ module Hanami | |
| 512 474 | 
             
                    self.class.new underscore.split(CLASSIFY_SEPARATOR).join(DASHERIZE_SEPARATOR)
         | 
| 513 475 | 
             
                  end
         | 
| 514 476 |  | 
| 515 | 
            -
                  #  | 
| 477 | 
            +
                  # Return the string without the Ruby namespace of the class
         | 
| 516 478 | 
             
                  #
         | 
| 517 479 | 
             
                  # @return [Hanami::Utils::String] the transformed string
         | 
| 518 480 | 
             
                  #
         | 
| @@ -531,7 +493,7 @@ module Hanami | |
| 531 493 | 
             
                    self.class.new split(NAMESPACE_SEPARATOR).last
         | 
| 532 494 | 
             
                  end
         | 
| 533 495 |  | 
| 534 | 
            -
                  #  | 
| 496 | 
            +
                  # Return the top level namespace name
         | 
| 535 497 | 
             
                  #
         | 
| 536 498 | 
             
                  # @return [Hanami::Utils::String] the transformed string
         | 
| 537 499 | 
             
                  #
         | 
| @@ -572,8 +534,9 @@ module Hanami | |
| 572 534 | 
             
                  #     'Hanami::Utils'
         | 
| 573 535 | 
             
                  #     'Hanami::App'
         | 
| 574 536 | 
             
                  #
         | 
| 537 | 
            +
                  # rubocop:disable Metrics/MethodLength
         | 
| 575 538 | 
             
                  def tokenize
         | 
| 576 | 
            -
                    if match = TOKENIZE_REGEXP.match(@string)
         | 
| 539 | 
            +
                    if match = TOKENIZE_REGEXP.match(@string) # rubocop:disable Lint/AssignmentInCondition
         | 
| 577 540 | 
             
                      pre  = match.pre_match
         | 
| 578 541 | 
             
                      post = match.post_match
         | 
| 579 542 | 
             
                      tokens = match[1].split(TOKENIZE_SEPARATOR)
         | 
| @@ -586,32 +549,7 @@ module Hanami | |
| 586 549 |  | 
| 587 550 | 
             
                    nil
         | 
| 588 551 | 
             
                  end
         | 
| 589 | 
            -
             | 
| 590 | 
            -
                  # Returns a pluralized version of self.
         | 
| 591 | 
            -
                  #
         | 
| 592 | 
            -
                  # @return [Hanami::Utils::String] the pluralized string.
         | 
| 593 | 
            -
                  #
         | 
| 594 | 
            -
                  # @api private
         | 
| 595 | 
            -
                  # @since 0.4.1
         | 
| 596 | 
            -
                  # @deprecated
         | 
| 597 | 
            -
                  #
         | 
| 598 | 
            -
                  # @see Hanami::Utils::Inflector
         | 
| 599 | 
            -
                  def pluralize
         | 
| 600 | 
            -
                    self.class.new Inflector.pluralize(self)
         | 
| 601 | 
            -
                  end
         | 
| 602 | 
            -
             | 
| 603 | 
            -
                  # Returns a singularized version of self.
         | 
| 604 | 
            -
                  #
         | 
| 605 | 
            -
                  # @return [Hanami::Utils::String] the singularized string.
         | 
| 606 | 
            -
                  #
         | 
| 607 | 
            -
                  # @api private
         | 
| 608 | 
            -
                  # @since 0.4.1
         | 
| 609 | 
            -
                  # @deprecated
         | 
| 610 | 
            -
                  #
         | 
| 611 | 
            -
                  # @see Hanami::Utils::Inflector
         | 
| 612 | 
            -
                  def singularize
         | 
| 613 | 
            -
                    self.class.new Inflector.singularize(self)
         | 
| 614 | 
            -
                  end
         | 
| 552 | 
            +
                  # rubocop:enable Metrics/MethodLength
         | 
| 615 553 |  | 
| 616 554 | 
             
                  # Returns the hash of the internal string
         | 
| 617 555 | 
             
                  #
         | 
| @@ -633,7 +571,7 @@ module Hanami | |
| 633 571 | 
             
                    @string
         | 
| 634 572 | 
             
                  end
         | 
| 635 573 |  | 
| 636 | 
            -
                   | 
| 574 | 
            +
                  alias to_str to_s
         | 
| 637 575 |  | 
| 638 576 | 
             
                  # Equality
         | 
| 639 577 | 
             
                  #
         | 
| @@ -645,9 +583,9 @@ module Hanami | |
| 645 583 | 
             
                    to_s == other
         | 
| 646 584 | 
             
                  end
         | 
| 647 585 |  | 
| 648 | 
            -
                   | 
| 586 | 
            +
                  alias eql? ==
         | 
| 649 587 |  | 
| 650 | 
            -
                  #  | 
| 588 | 
            +
                  # Split the string with the given pattern
         | 
| 651 589 | 
             
                  #
         | 
| 652 590 | 
             
                  # @return [Array<::String>]
         | 
| 653 591 | 
             
                  #
         | 
| @@ -659,7 +597,7 @@ module Hanami | |
| 659 597 | 
             
                    @string.split(pattern, limit)
         | 
| 660 598 | 
             
                  end
         | 
| 661 599 |  | 
| 662 | 
            -
                  #  | 
| 600 | 
            +
                  # Replace the given pattern with the given replacement
         | 
| 663 601 | 
             
                  #
         | 
| 664 602 | 
             
                  # @return [::String]
         | 
| 665 603 | 
             
                  #
         | 
| @@ -675,7 +613,7 @@ module Hanami | |
| 675 613 | 
             
                    end
         | 
| 676 614 | 
             
                  end
         | 
| 677 615 |  | 
| 678 | 
            -
                  #  | 
| 616 | 
            +
                  # Iterate through the string, matching the pattern.
         | 
| 679 617 | 
             
                  # Either return all those patterns, or pass them to the block.
         | 
| 680 618 | 
             
                  #
         | 
| 681 619 | 
             
                  # @return [Array<::String>]
         | 
| @@ -688,7 +626,7 @@ module Hanami | |
| 688 626 | 
             
                    @string.scan(pattern, &blk)
         | 
| 689 627 | 
             
                  end
         | 
| 690 628 |  | 
| 691 | 
            -
                  #  | 
| 629 | 
            +
                  # Replace the rightmost match of `pattern` with `replacement`
         | 
| 692 630 | 
             
                  #
         | 
| 693 631 | 
             
                  # If the pattern cannot be matched, it returns the original string.
         | 
| 694 632 | 
             
                  #
         | 
| @@ -714,7 +652,7 @@ module Hanami | |
| 714 652 | 
             
                  #   puts result
         | 
| 715 653 | 
             
                  #     # => #<Hanami::Utils::String:0x007fdb41232ed0 @string="authors/books#index">
         | 
| 716 654 | 
             
                  def rsub(pattern, replacement)
         | 
| 717 | 
            -
                    if i = rindex(pattern)
         | 
| 655 | 
            +
                    if i = rindex(pattern) # rubocop:disable Lint/AssignmentInCondition
         | 
| 718 656 | 
             
                      s    = @string.dup
         | 
| 719 657 | 
             
                      s[i] = replacement
         | 
| 720 658 | 
             
                      self.class.new s
         | 
| @@ -723,23 +661,21 @@ module Hanami | |
| 723 661 | 
             
                    end
         | 
| 724 662 | 
             
                  end
         | 
| 725 663 |  | 
| 726 | 
            -
                  #  | 
| 664 | 
            +
                  # Override Ruby's method_missing in order to provide ::String interface
         | 
| 727 665 | 
             
                  #
         | 
| 728 666 | 
             
                  # @api private
         | 
| 729 667 | 
             
                  # @since 0.3.0
         | 
| 730 668 | 
             
                  #
         | 
| 731 669 | 
             
                  # @raise [NoMethodError] If doesn't respond to the given method
         | 
| 732 670 | 
             
                  def method_missing(method_name, *args, &blk)
         | 
| 733 | 
            -
                    unless respond_to?(method_name)
         | 
| 734 | 
            -
                      raise NoMethodError.new(%(undefined method `#{method_name}' for "#{@string}":#{self.class}))
         | 
| 735 | 
            -
                    end
         | 
| 671 | 
            +
                    raise NoMethodError.new(%(undefined method `#{method_name}' for "#{@string}":#{self.class})) unless respond_to?(method_name)
         | 
| 736 672 |  | 
| 737 673 | 
             
                    s = @string.__send__(method_name, *args, &blk)
         | 
| 738 674 | 
             
                    s = self.class.new(s) if s.is_a?(::String)
         | 
| 739 675 | 
             
                    s
         | 
| 740 676 | 
             
                  end
         | 
| 741 677 |  | 
| 742 | 
            -
                  #  | 
| 678 | 
            +
                  # Override Ruby's respond_to_missing? in order to support ::String interface
         | 
| 743 679 | 
             
                  #
         | 
| 744 680 | 
             
                  # @api private
         | 
| 745 681 | 
             
                  # @since 0.3.0
         | 
    
        data/lib/hanami/utils/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: hanami-utils
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version:  | 
| 4 | 
            +
              version: 2.0.0.alpha1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Luca Guidi
         | 
| 8 | 
            -
            autorequire:
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2019-01-30 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: transproc
         | 
| @@ -64,42 +64,28 @@ dependencies: | |
| 64 64 | 
             
                requirements:
         | 
| 65 65 | 
             
                - - "~>"
         | 
| 66 66 | 
             
                  - !ruby/object:Gem::Version
         | 
| 67 | 
            -
                    version: ' | 
| 67 | 
            +
                    version: '12'
         | 
| 68 68 | 
             
              type: :development
         | 
| 69 69 | 
             
              prerelease: false
         | 
| 70 70 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 71 71 | 
             
                requirements:
         | 
| 72 72 | 
             
                - - "~>"
         | 
| 73 73 | 
             
                  - !ruby/object:Gem::Version
         | 
| 74 | 
            -
                    version: ' | 
| 74 | 
            +
                    version: '12'
         | 
| 75 75 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 76 76 | 
             
              name: rspec
         | 
| 77 77 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 78 78 | 
             
                requirements:
         | 
| 79 79 | 
             
                - - "~>"
         | 
| 80 80 | 
             
                  - !ruby/object:Gem::Version
         | 
| 81 | 
            -
                    version: '3. | 
| 81 | 
            +
                    version: '3.7'
         | 
| 82 82 | 
             
              type: :development
         | 
| 83 83 | 
             
              prerelease: false
         | 
| 84 84 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 85 85 | 
             
                requirements:
         | 
| 86 86 | 
             
                - - "~>"
         | 
| 87 87 | 
             
                  - !ruby/object:Gem::Version
         | 
| 88 | 
            -
                    version: '3. | 
| 89 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 90 | 
            -
              name: rubocop
         | 
| 91 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 92 | 
            -
                requirements:
         | 
| 93 | 
            -
                - - '='
         | 
| 94 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 95 | 
            -
                    version: '0.81'
         | 
| 96 | 
            -
              type: :development
         | 
| 97 | 
            -
              prerelease: false
         | 
| 98 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 99 | 
            -
                requirements:
         | 
| 100 | 
            -
                - - '='
         | 
| 101 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 102 | 
            -
                    version: '0.81'
         | 
| 88 | 
            +
                    version: '3.7'
         | 
| 103 89 | 
             
            description: Hanami utilities
         | 
| 104 90 | 
             
            email:
         | 
| 105 91 | 
             
            - me@lucaguidi.com
         | 
| @@ -117,19 +103,19 @@ files: | |
| 117 103 | 
             
            - lib/hanami/logger/colorizer.rb
         | 
| 118 104 | 
             
            - lib/hanami/logger/filter.rb
         | 
| 119 105 | 
             
            - lib/hanami/logger/formatter.rb
         | 
| 106 | 
            +
            - lib/hanami/middleware.rb
         | 
| 120 107 | 
             
            - lib/hanami/utils.rb
         | 
| 121 108 | 
             
            - lib/hanami/utils/basic_object.rb
         | 
| 122 109 | 
             
            - lib/hanami/utils/blank.rb
         | 
| 123 110 | 
             
            - lib/hanami/utils/callbacks.rb
         | 
| 124 111 | 
             
            - lib/hanami/utils/class.rb
         | 
| 125 112 | 
             
            - lib/hanami/utils/class_attribute.rb
         | 
| 113 | 
            +
            - lib/hanami/utils/class_attribute/attributes.rb
         | 
| 126 114 | 
             
            - lib/hanami/utils/deprecation.rb
         | 
| 127 | 
            -
            - lib/hanami/utils/duplicable.rb
         | 
| 128 115 | 
             
            - lib/hanami/utils/escape.rb
         | 
| 129 116 | 
             
            - lib/hanami/utils/file_list.rb
         | 
| 130 117 | 
             
            - lib/hanami/utils/files.rb
         | 
| 131 118 | 
             
            - lib/hanami/utils/hash.rb
         | 
| 132 | 
            -
            - lib/hanami/utils/inflector.rb
         | 
| 133 119 | 
             
            - lib/hanami/utils/io.rb
         | 
| 134 120 | 
             
            - lib/hanami/utils/json.rb
         | 
| 135 121 | 
             
            - lib/hanami/utils/kernel.rb
         | 
| @@ -143,7 +129,7 @@ homepage: http://hanamirb.org | |
| 143 129 | 
             
            licenses:
         | 
| 144 130 | 
             
            - MIT
         | 
| 145 131 | 
             
            metadata: {}
         | 
| 146 | 
            -
            post_install_message:
         | 
| 132 | 
            +
            post_install_message: 
         | 
| 147 133 | 
             
            rdoc_options: []
         | 
| 148 134 | 
             
            require_paths:
         | 
| 149 135 | 
             
            - lib
         | 
| @@ -151,15 +137,15 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 151 137 | 
             
              requirements:
         | 
| 152 138 | 
             
              - - ">="
         | 
| 153 139 | 
             
                - !ruby/object:Gem::Version
         | 
| 154 | 
            -
                  version: 2. | 
| 140 | 
            +
                  version: 2.5.0
         | 
| 155 141 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 156 142 | 
             
              requirements:
         | 
| 157 | 
            -
              - - " | 
| 143 | 
            +
              - - ">"
         | 
| 158 144 | 
             
                - !ruby/object:Gem::Version
         | 
| 159 | 
            -
                  version:  | 
| 145 | 
            +
                  version: 1.3.1
         | 
| 160 146 | 
             
            requirements: []
         | 
| 161 | 
            -
            rubygems_version: 3.2 | 
| 162 | 
            -
            signing_key:
         | 
| 147 | 
            +
            rubygems_version: 3.0.2
         | 
| 148 | 
            +
            signing_key: 
         | 
| 163 149 | 
             
            specification_version: 4
         | 
| 164 150 | 
             
            summary: Ruby core extentions and Hanami utilities
         | 
| 165 151 | 
             
            test_files: []
         |