Ruby core extensions and class utilities for Hanami
- Drop support for Ruby 3.0
- [Tim Riley] Remove
Hanami::Utils::Escape
(which was not public as of 2.0.0) (#410)
- [hi-tech-jazz]
Hanami::Utils::Blank.blank?
to check if the current object is non-nil
- [Luca Guidi] Official support for Ruby 3.2
- [Tim Riley] Make
Hanami::Utils::Callbacks::Chain
andHanami::Utils::Callbacks::Callback
comparable via#==
based on their contents, rather than their object identity
- [Benjamin Klotz] Ensure
Hanami::Utils::String.underscore
to replace"."
(dot character) into underscore
- [Luca Guidi] Removed
Hanami::Logger
in favor ofDry::Logger
- [Luca Guidi] Removed
Hanami::Utils::BasicObject
(moved todry-core
asDry::Core::BasicObject
) - [Luca Guidi] Removed
Hanami::Interactor
- [Luca Guidi] Official support for Ruby: MRI 3.0 and 3.1
- [Rob Jacoby] Allow
Hanami::Logger#initialize
to acceptFile::NULL
asstream:
argument
- [Luca Guidi] Drop support for Ruby: MRI 2.6 and 2.7.
No changes.
- [Luca Guidi] Drop support for Ruby: MRI 2.5.
- [Luca Guidi] Transform
Utils::String
from class to module
- [Gustavo Caso] Introduce
Hanami::Middleware
namespace - [Luca Guidi] Introduce
Callbacks::Chain#dup
- [Luca Guidi] Drop support for Ruby: MRI 2.3, and 2.4.
- [Luca Guidi] Remove
Utils::Duplicable
- [Luca Guidi] Remove
Utils::Inflector
- [Luca Guidi] Remove
Utils::String.singularize
, and.pluralize
- [Luca Guidi] Remove
Utils::String#singularize
, and#pluralize
- [Luca Guidi] Remove instance level interface for
Utils::Hash
- [Luca Guidi] Transform
Utils::Hash
from class to module - [Luca Guidi] Remove
Utils.reload!
- [Gustavo Caso] Remove
Utils::File.rewrite
- [Vladimir Suvorov] Remove
Utils::Class.load_from_pattern!
- [Hiếu Nguyễn] Ensure
Hanami::Interactor#initialize
to accept keyword arguments while working with Ruby 3
- [Luca Guidi] Official support for Ruby: MRI 3.0
- [Khai Le] Allow
Hanami::Logger
to filter sensitive data for an array of hashes
- [Hiếu Nguyễn] Ensure
Hanami::Logger
to not mutateHash
input when filtering sensitive data
- [Luca Guidi] Official support for Ruby: MRI 2.7
- [ippachi]
Utils::Files.append
: don't check breakline if file is empty
- [Ivan Kabluchkov] Ensure
Hanami::Logger
filters to not crash when logger stream is a closed tempfile - [Luca Guidi] Ensure
Utils::Files.append
to append contents properly when existing file doesn't end with a newline
- [Luca Guidi] Let
Utils::BasicObject
to lookup constants at the top-level namespace
- [Mauro Morales] Ensure
Utils::Inflector.pluralize
and.singularize
to work with words that contain an underscore (_
)
- [Vladislav Yashin & Luca Guidi] Added
Utils::BasicObject#instance_of?
,#is_a?
, and#kind_of
- [Luca Guidi] Official support for Ruby: MRI 2.6
- [Luca Guidi] Support
bundler
2.0+
- [Alfonso Uceda] Fix
Hash
serialization forUtils::Logger
- [Jeff Dickey] Add missing
pathname
require inlib/hanami/utils.rb
- [Luca Guidi] Official support for JRuby 9.2.0.0
- [graywolf] Add
Utils::Files.inject_line_before_last
and.inject_line_after_last
- [graywolf] Don't show
Fixnum
Ruby warning for 2.4+ - [Luca Guidi] Fix pluralization of
"fee"
- [Luca Guidi & Marion Schleifer] Deprecate
Utils::String
as Ruby type. Please useUtils::String
class methods instead ofUtils::String.new("")
. - [Luca Guidi & Marion Schleifer] Deprecate
Utils::Hash
as Ruby type. Please useUtils::Hash
class methods instead ofUtils::Hash.new({})
. - [Luca Guidi & Marion Schleifer] Deprecate
Utils::String.pluralize
and.singularize
. - [Semyon Pupkov] Deprecate
Utils::Class.load_from_pattern!
- [Luca Guidi] Use different colors for each
Hanami::Logger
level
- [Oana Sipos & Sean Collins & Luca Guidi] Colored logging
- [Luca Guidi] Make
Hanami::Logger
to properly log hash messages
- [Luca Guidi] Official support for Ruby: MRI 2.5
- [Sean Collins & Luca Guidi] Make
Utils::Files.write
idempotent: ensure to truncate the file before to write - [Sean Collins & Luca Guidi] Don't erase file contents when invoking
Utils::Files.touch
- [Sean Collins & Luca Guidi] Deprecate
Utils::Files.rewrite
in favor of.write
- [Luca Guidi] Introduce
Utils::Hash.deep_stringify
to recursively stringify a hash
- [Yuta Tokitake] Ensure
Interactor#call
to accept non-keyword arguments
- [Luca Guidi] Introduce
Utils::Hash.deep_serialize
to recursively serialize input into::Hash
- [Alfonso Uceda] Auto create directory for
Hanami::Logger
- [Marion Duprey] Allow
Hanami::Interactor#call
to accept arguments.#initialize
should be used for Dependency Injection, while#call
should be used for input - [Marion Schleifer] Introduce
Utils::Hash.stringify
- [Marion Schleifer] Introduce
Utils::String.titleize
,.capitalize
,.classify
,.underscore
,.dasherize
,.demodulize
,.namespace
,.pluralize
,.singularize
, and.rsub
- [Luca Guidi] Introduce
Utils::Files
: a set of utils for file manipulations - [Luca Guidi] Introduce
Utils::String.transform
a pipelined transformations for strings - [Marion Duprey & Gabriel Gizotti] Filter sensitive informations for
Hanami::Logger
- [Luca Guidi] Make
Hanami::Utils::BasicObject
to be fully compatible with Ruby'spp
and to be inspected by Pry. - [Thiago Kenji Okada] Fix pluralization/singularization for
"release" => "releases"
- [Malina Sulca] Fix pluralization/singularization for
"exercise" => "exercises"
- [Xavier Barbosa] Fix pluralization/singularization for
"area" => "areas"
- [Anton Davydov] Fix pluralization/singularization for
"phrase" => "phrases"
- [Luca Guidi] Introduced
Utils::Hash.symbolize
and.deep_symbolize
- [Luca Guidi] Introduced
Utils::Hash.deep_dup
- [choallin] Ensure
Utils::String#classify
to return output identical to the input for already classified strings. - [Marion Duprey & Jonas Amundsen] Ensure
Utils::Hash#initialize
to accept frozenHash
as argument.
- [Luca Guidi] Allow
Hanami::Logger#initialize
to accept arguments to be compliant with Ruby'sLogger
- [Luca Guidi] Use
$stdout
instead ofSTDOUT
as default stream forHanami::Logger
- [Luca Guidi] Removed
Utils::Attributes
- [Luca Guidi] Removed deprecated
Hanami::Interactor::Result#failing?
- [Luca Guidi] Removed deprecated
Utils::Json.load
and.dump
- [Anton Davydov] Made
Utils::Blank
private API
- [Luca Guidi] Official support for Ruby: MRI 2.4
- [alexd16] Introduced
Utils::Hash#deep_symbolize!
for deep symbolization - [Luca Guidi] Introduced
Hanami::Utils.reload!
as a mechanism to force code reloading in development
- [alexd16 & Alfonso Uceda & Luca Guidi] Don't deeply symbolize
Hanami::Interactor::Result
payload - [Alfonso Uceda]
Hanami::Interactor::Result
: Don't transform objects that respond to#to_hash
(like entities) - [Bhanu Prakash] Use
Utils::Json.generate
instead of the deprecated.dump
forHanami::Logger
JSON formatter - [Luca Guidi]
Hanami::Logger
: when aHash
message is passed, don't nest it under:message
key, but unwrap at the top level
- [alexd16]
Utils::Hash#symbolize!
no longer symbolizes deep structures - [Luca Guidi & Alfonso Uceda] Improve readability for default logger formatter
- [Luca Guidi] Use ISO-8601 time format for JSON logger formatter
- [Grachev Mikhail] Introduced
Hanami::Interactor::Result#failure?
- [Paweł Świątkowski]
Utils::Inflector.pluralize
Pluralize -en to -ens instead of -ina
- [Grachev Mikhail] Deprecate
Hanami::Interactor::Result#failing?
in favor of#failure?
- [Luca Guidi] Introduced
Utils::Json.parse
and.generate
- [Luca Guidi] Ensure
Utils::Json
parsing to not eval untrusted input
- [Luca Guidi] Deprecated
Utils::Json.load
in favor of.parse
- [Luca Guidi] Deprecated
Utils::Json.dump
in favor of.generate
– [Luca Guidi] Introduced Utils.require!
to recursively require Ruby files with an order that is consistent across platforms
– [Luca Guidi] Introduced Utils::FileList
as cross-platform ordered list of files, alternative to Dir.glob
- [Luca Guidi] Make
Utils::BasicObject
pretty printable - [Grachev Mikhail] Added
Interactor::Result#successful?
and#failing?
- [Pascal Betz] Ensure
Utils::Class.load!
to lookup constant only within the given namespace
- [Luca Guidi] Make
Utils::Hash
only compatible with objects that respond to#to_hash
- [Luca Guidi] Official support for Ruby: MRI 2.3+ and JRuby 9.1.5.0+
- [Andrey Morskov] Introduced
Hanami::Utils::Blank
- [Anton Davydov] Allow to specify a default log level for
Hanami::Logger
- [Anton Davydov] Introduced default and JSON formatters for
Hanami::Logger
- [Erol Fornoles] Allow deep indifferent access for
Hanami::Utils::Attributes
- [Anton Davydov] Introduced
Hanami::Utils::Json
which is a proxy forMultiJson
(frommulti_json
gem), or fallback toJSON
from Ruby standard library.
- [Hiếu Nguyễn] Ensure
Hanami::Utils::String#classify
to return already classified strings as they are. Eg."AwesomeProject"
should return"AwesomeProject"
, not"Awesomeproject"
. - [TheSmartnik] Fix English pluralization for words ending with
"rses"
- [Rogério Ramos] Fix English pluralization for words ending with
"ice"
- [Luca Guidi] Drop support for Ruby 2.0, 2.1 and Rubinius. Official support for JRuby 9.0.5.0+.
- [Yuuji Yaginuma]
Hanami::Utils::Escape
: fixed Ruby warning forString#chars
with a block, which is deprecated. UsingString#each_char
now. - [Sean Collins] Allow non string objects to be escaped by
Hanami::Utils::Escape
.
- [Luca Guidi] Renamed the project
- [Anton Davydov] Ensure
Lotus::Utils::String#classify
to work properly with dashes (eg."app-store" => "App::Store"
)
- [Luca Guidi] Official support for Ruby 2.3
- [Luca Guidi] Custom inflections
- [Luca Guidi] Introduced
Lotus::Utils::Duplicable
as a safe dup logic for Ruby types - [Luca Guidi] Added
Lotus::Utils::String#rsub
replace rightmost occurrence
- [Luca Guidi] Fix
Lotus::Utils::PathPrefix#join
and#relative_join
by rejecting arguments that are equal to the separator - [Karim Kiatlottiavi] Fix
Encoding::UndefinedConversionError
inLotus::Utils::Escape.encode
- [Luca Guidi] Deprecate Ruby 2.0 and 2.1
- [Luca Guidi] Removed
Lotus::Utils::Callbacks#add
in favor of#append
- [Luca Guidi] Removed pattern support for
Utils::Class.load!
(eg.Articles(Controller|::Controller)
)
- [Luca Guidi] Added
Lotus::Utils::String#capitalize
- [Trung Lê] Official support for JRuby 9k+
- [Thiago Felippe] Ensure
Lotus::Utils::PathPrefix#join
won't remote duplicate entries (eg/admin/dashboard/admin
)
- [Luca Guidi] Extracted
Lotus::Logger
fromhanamirb
- [Luca Guidi]
Lotus::Interactor::Result
contains only objects explicitly exposed viaLotus::Interactor.expose
.
- [François Beausoleil] Improved
Lotus::Utils::Kernel
messages forTypeError
.
- [Luca Guidi] Ensure
Lotus::Utils::Attributes#to_h
to return::Hash
- [Luca Guidi & Alfonso Uceda Pompa] Introduced
Lotus::Utils::Inflector
,Lotus::Utils::String#pluralize
and#singularize
- [Luca Guidi] Ensure
Lotus::Utils::Attributes#to_h
to safely return nested::Hash
instances for complex data structures. - [Luca Guidi] Let
Lotus::Interactor#error
to return a falsey value for control flow. (eg.check_permissions or error "You can't access"
)
- [Luca Guidi] Introduced
Lotus::Utils::Escape
. It implements OWASP/ESAPI suggestions for HTML, HTML attribute and URL escape utilities. - [Luca Guidi] Introduced
Lotus::Utils::String#dasherize
- [Luca Guidi] Introduced
Lotus::Utils::String#titleize
- [Luca Guidi] Introduced
Lotus::Interactor
- [Luca Guidi] Introduced
Lotus::Utils::BasicObject
- [Alfonso Uceda Pompa] Aliased
Lotus::Utils::Attributes#get
with#[]
- [Simone Carletti] Introduced
Lotus::Utils::Callbacks::Chain#prepend
and#append
- [Luca Guidi] Deprecated
Lotus::Utils::Callbacks::Chain#add
in favor of#append
- [Luca Guidi] Ensure to return the right offending object if a missing method is called with Utils::String and Hash (eg.
Utils::Hash.new(a: 1).all? {|_, v| v.foo }
blamev
instead ofHash
) - [Luca Guidi] Raise an error if try to coerce non numeric strings into Integer, Float & BigDecimal (eg.
Utils::Kernel.Integer("hello") # => raise TypeError
)
- [Luca Guidi] Official support for Ruby 2.2
- [Luca Guidi] Introduced
Utils::Attributes
- [Luca Guidi] Added
Utils::Hash#stringify!
- [Luca Guidi] Allow
Utils::Class.load!
to accept any object that implements#to_s
- [Trung Lê] Allow
Utils::Class.load!
to accept a class - [Luca Guidi] Introduced
Utils::Class.load_from_pattern!
- [Luca Guidi] Introduced
Utils.jruby?
andUtils.rubinius?
- [Luca Guidi] Introduced
Utils::Deprecation
- [Luca Guidi] Official support for Rubinius 2.3+
- [Luca Guidi] Official support for JRuby 1.7+ (with 2.0 mode)
- [Janko Marohnić] Implemented
Utils::PathPrefix
relativness and absolutness - [Luca Guidi] Made
Utils::PathPrefix
#join
and#relative_join
to return a new instance of that class - [Luca Guidi] Implemented
Utils::Hash#deep_dup
- [Luca Guidi] Made
Utils::PathPrefix#join
to accept multiple argument
- [Luca Guidi] Made
Utils::PathPrefix#join
remove trailing occurrences for@separator
from the output - [Luca Guidi] Made
Utils::PathPrefix#relative_join
to correctly replace all the instances of@separator
from the output
- [Luca Guidi] Deprecated
Utils::Class.load!
with a pattern likeArticles(Controller|::Controller)
, useUtils::Class.load_from_pattern!
instead
- [Celso Fernandes] Add BigDecimal coercion to Lotus::Utils::Kernel
- [Luca Guidi] Define
Boolean
constant, if missing - [Luca Guidi] Use composition over inheritance for
Lotus::Utils::PathPrefix
- [Luca Guidi] Use composition over inheritance for
Lotus::Utils::Hash
- [Luca Guidi] Use composition over inheritance for
Lotus::Utils::String
- [Luca Guidi] Improved error message for
Utils::Class.load!
- [Tom Kadwill] Improved error
NameError
message by passing in the whole constant name toUtils::Class.load!
- [Luca Guidi]
Utils::Hash#to_h
return instances of::Hash
in case of nested symbolized data structure - [Luca Guidi] Raise
TypeError
ifnil
is passed toPathPrefix#relative_join
- [Peter Suschlik] Define
Lotus::Utils::Hash#respond_to_missing?
- [Peter Suschlik] Define
Lotus::Utils::String#responds_to_missing?
- [Luca Guidi] Ensure
Utils::Hash#inspect
output to be the same of::Hash#inspect
- [Luca Guidi] Implemented
Lotus::Utils::Kernel.Symbol
- [Luca Guidi] Made
Kernel.Pathname
to raise an error whennil
is passed as argument - [Luca Guidi] Implemented
Lotus::Utils::LoadPaths#freeze
in order to prevent modification after the object has been frozen - [Luca Guidi] Implemented Lotus::Utils::LoadPaths#push, also aliased as #<<
- [Luca Guidi] Use composition over inheritance for
Lotus::Utils::LoadPaths
- [Luca Guidi] Introduced
Lotus::Utils::LoadPaths
- [Luca Guidi] Introduced
Lotus::Utils::String#namespace
, in order to return the top level Ruby namespace for the given string - [Luca Guidi] Implemented
Lotus::Utils::Kernel.Pathname
- [Luca Guidi] Implemented
Lotus::Utils::LoadPaths#initialize_copy
in order to safely#dup
and#clone
- [Luca Guidi] Implemented
Lotus::Utils::Callbacks::Chain#freeze
in order to prevent modification after the object has been frozen - [Luca Guidi] All the
Utils::Kernel
methods will raiseTypeError
in case of failed coercion. - [Luca Guidi] Made
Kernel.Time
to raise an error whennil
is passed as argument - [Luca Guidi] Made
Kernel.DateTime
to raise an error whennil
is passed as argument - [Luca Guidi] Made
Kernel.Date
to raise an error whennil
is passed as argument - [Luca Guidi] Made
Kernel.Boolean
to return false whennil
is passed as argument - [Luca Guidi] Made
Kernel.String
to return an empty string whennil
is passed as argument - [Luca Guidi] Made
Kernel.Float
to return0.0
whennil
is passed as argument - [Luca Guidi] Made
Kernel.Integer
to return0
whennil
is passed as argument - [Luca Guidi] Made
Kernel.Hash
to return an emptyHash
whennil
is passed as argument - [Luca Guidi] Made
Kernel.Set
to return an emptySet
whennil
is passed as argument - [Luca Guidi] Made
Kernel.Array
to return an emptyArray
whennil
is passed as argument - [Luca Guidi] Use composition over inheritance for
Lotus::Utils::Callbacks::Chain
- [Luca Guidi] Implemented
Lotus::Utils::Kernel.Time
- [Luca Guidi] Implemented
Lotus::Utils::Kernel.DateTime
- [Luca Guidi] Implemented
Lotus::Utils::Kernel.Date
- [Luca Guidi] Implemented
Lotus::Utils::Kernel.Float
- [Luca Guidi] Implemented
Lotus::Utils::Kernel.Boolean
- [Luca Guidi] Implemented
Lotus::Utils::Kernel.Hash
- [Luca Guidi] Implemented
Lotus::Utils::Kernel.Set
- [Luca Guidi] Implemented
Lotus::Utils::Kernel.String
- [Luca Guidi] Implemented
Lotus::Utils::Kernel.Integer
- [Luca Guidi] Implemented
Lotus::Utils::Kernel.Array
- [Christopher Keele] Add missing stdlib
Set
require toUtils::ClassAttribute
- [Luca Guidi] Introduced
Lotus::Utils::String#demodulize
- [Luca Guidi] Introduced
Lotus::Utils::IO.silence_warnings
- [Luca Guidi] Introduced class loading mechanism from a string:
Utils::Class.load!
- [Luca Guidi] Introduced callbacks support for classes
- [Luca Guidi] Introduced inheritable class level attributes
- [Luca Guidi] Introduced
Utils::Hash
- [Luca Guidi] Introduced
Utils::String
- [Luca Guidi] Introduced
Utils::PathPrefix
- [Luca Guidi] Official support for MRI 2.0+