Changelog
View SourceUnreleased changes
4.2.0
- Add changelog to docs and hex info. Thanks @epinault!
- Add
Moar.Term.blank?/2andMoar.Term.present?/2which can override what values are considered blank & present.
4.1.0
Moar.String.quote/2surrounds the given string with quotation marks.
4.0.0
- Test with Elixir 1.19 and Erlang 28.1; drop support for Elixir 1.16 and Erlang 25.
- Update deps.
3.2.0
- Added
Moar.Map.deep_from_struct/1which is likeMap.from_structbut goes deep. Thanks HT!
3.1.0
- Added
Moar.IOwhich contains functions to more easily format strings with colors and other ANSI codes.
3.0.0
Moar.URI.valid?will now returntruewhen given amailto:URI, as long as its path is not blank.- Breaking changes: in previous versions,
Moar.URI.valid?would returnfalsewhen given amailto:URI. To ensure that a URI is a valid web URI, useMoar.URI.web_url?
2.7.0
- Add
:to_stringshortcut forassert_eqwhich converts both terms to strings before comparing.
2.6.0
- Add
Moar.DateTime.at/2for creating aDateTimethat is today, at a certain time, optionally shifted by a duration. - Add
Moar.Sugar.then_if/3for piping into a function only if a condition is truthy.
2.5.0
- Add
Moar.Sugar.reply/2to pipe a socket or genserver state into a reply message.
2.4.2
- Updated sponsorship info.
2.4.1
- Fix spec of
Moar.String.pluralize.
2.4.0
Moar.String.pluralizecan now optionally include the number along with the pluaralized text.
2.3.0
- When either or both of the last two arguments to
Moar.Term.when_present/3are functions, they are called with the given term as an argument.
2.2.0
2.1.0
Moar.List.fillexpands (or shrinks) a list to a given size by repeating its elements.
2.0.1
- Require at least Elixir 1.16.
2.0.0
- Test with Elixir 1.18; drop support for Elixir 1.15.
1.65.0
Moar.String.joinjoins multiple items, as a shortcut toEnum.map_join([item1, item2, ...], "-", &to_string/1)
1.64.0
Moar.String.underscore/1is soft-deprecated in favor ofto_case(s, :snake_case).- Add
Moar.String.to_case(s, :kebab_case)
1.63.1
Moar.Term.blank?/1handles non-UTF binaries.
1.63.0
- Add
Moar.Sugar.cont,Moar.Sugar.cont!,Moar.Sugar.halt,Moar.Sugar.halt!, andMoar.Sugar.noreply!
1.62.0
- Add
Moar.Enum.compact_blank/1which removes values considered blank byMoar.Term.blank?/1.
1.61.2
Moar.Map.deep_atomize_keys/1handles struct values without raising.
1.61.1
Moar.Map.deep_stringify_keys/1skips stringifying structs.
1.61.0
1.60.0
- Add
Moar.String.lorem/1which generates a "lorem ipsum" string of the given length.
1.59.2
Moar.UUID.valid?/1requires the first segment to be 8 hexadecimal characters.
1.59.1
Moar.UUID.valid?/1now fails if the input is too long
1.59.0
1.58.0
- require Elixir 1.15 or greater
1.57.0
- test against the latest version of Erlang and Elixir
1.56.2
- more doc fixes
1.56.1
- doc updates
1.56.0
- add
Moar.Code.fetch_docs_as_markdownto fetch a module's or function's docs as markdown.
1.55.0
- add
Moar.Random.fuzz/2which increases or decreases a number by a random percent.
1.54.0
- add
Moar.UUID.regex/0which returns a regex that matches valid UUIDs - add
Moar.UUID.valid?/1which returns true if the given string is a valid UUID
1.53.0
- add
Moar.File.checksum/1which returns a sha256 checksum of a file. - add
Moar.File.stream!which delegates toFile.stream!in a way that's compatible with older Elixir versions.
1.52.1
- fix typespecs for
Moar.Assertions.assert_eq/3
1.52.0
assert_eqnow raises when an invalid option is provided.- Add
:applyand:mapoptions toassert_eq/3to run one or more functions onleftorright(:apply) or run one or more functions on each value inleftorright(:map). - The following
assert_eqtransformations are now supported::downcase,:sort,:squish,:trim - The following
assert_eqare soft-deprecated:ignore_order: <boolean>,ignore_whitespace: :leading_and_trailing,whitespace: :squish,whitespace: :trim. Moar.Opts.get/3andMoar.Opts.take/2accept keyword lists with a mix of "valueless" keys and regular keys, like[:a, b: 2], where the default value for a "valueless" key istrue.- Add
Moar.Opts.pop/3which pops an opt out of an opts enum. - Add
Moar.Opts.delete/2andMoar.Opts.delete/3which deletes values from opts. - Add
Moar.Opts.replace/3which replaces values in opts.
1.51.0
- Add
Moar.Term.when_presentwhich returns one value when the term is present, and another value when missing
1.50.0
- Deprecated
is_map_or_keywordin favor ofmap_or_keyword?. - Deprecated
is_map_or_nonempty_keywordin favor ofmap_or_nonempty_keyword?.
1.49.0
- Add
Moar.List.unwrap!which returns the argument if it's not a list, or returns the only item in the list, or raises if the list has 0 or more than 1 item. - Add
Moar.Random.floatwhich returns a random float. - Add
Moar.String.remove_marked_whitespacewhich -remove_marked_whitespaceremoves whitespacing following a special\vmarker. - Add
Moar.URI.formatwithscheme_host_port,scheme_host_port_path, andsimple_stringformats. - Deprecate
Moar.URI.to_simple_stringin favor ofMoar.URI.format(uri, :simple_string).
1.48.0
- Add
Moar.Enum.test_idswhich is just likeMoar.Enum.tidsbut with a slightly different name.
1.47.0
- Add
Moar.Enum.lists_to_mapswhich converts a list of lists to a list of maps using the provided list of keys.
1.46.0
Moar.Enum.tidsaccepts a:sortedoption
1.45.1
Moar.Version.compare/2truncates1.2.3.4to1.2.3.
1.45.0
Moar.String.count_leading_spaces/1returns the number of leading spaces in a string.Moar.String.unindent/1un-indents a multiline string by the smallest indentation sizeMoar.String.unindent/2un-indents a multiline string by the given amount
1.44.0
Moar.List.to_sentencetakes a mapper function, which defaults toKernel.to_string/1.
1.43.0
- Add
Moar.List.to_sentenceconverts a list into a string, with items separated by commas, and an "and" before the last item.
1.42.0
1.41.0
- Created
Moar.Listand addedto_keywordwhich converts a list to a keyword list, allowing a default value.
1.40.0
assert_containsreturns consistently-ordered map keys when using OTP 26.0 or greater.
1.39.0
- Add
Moar.String.compareandMoar.String.compare?which can transform strings before comparing.
1.38.0
- Fix
Moar.DateTime.recent?to return false when the given datetime is in the future. - Add
Moar.DateTime.within?which returnstrueif the given datetime is within the given duration.
1.37.0
- Add
Moar.Enum.find_indices!which raises when a member of the expected elements is not found in the given enumerable.
1.36.0
- Add
Moar.Regexwithnamed_capture/3andnamed_captures/3functions. - Add
Moar.Versionwithcompare/2andnormalize/1functions.
1.35.0
- Add
Moar.Map.compact/1.
1.34.0
1.33.0
- Add
Moar.Enum.index_by/2andMoar.Map.index_by/2which return a new map indexed by a function or key. Inspired by code in: http://johnelmlabs.com/posts/anti-patterns-in-liveview/ - Add
Moar.Map.put_new!/3which is likeMap.put_new/3but raises if the key already exists.
1.32.0
- Add
Moar.Assertions.assert_contains/2 - Soft-deprecate
Moar.Assertions.assert_eq'signore_whitespace: :leading_and_trailingoption in favor ofwhitespace: :squishandwhitespace: :trim
1.31.0
- Add
Moar.URI
1.30.0
- Fixed a bug in
Moar.Map.deep_merge/3, which would incorrectly convert empty lists to maps when they were map or keyword list values. - Add
Moar.Enum.is_map_or_nonempty_keyword/1which is likeMoar.Enum.is_map_or_keyword/1but returns false if given an empty list.
1.29.0
- Add
Moar.Enum.find_indices/3which returns the indices of elements in an enum.
1.28.0
- Add
Moar.Atom.ensure_existing_atoms/1to check for a list of previously defined atoms. - Add
Moar.Atom.existing_atom?/1to check if a string has previously been defined as an atom. - Add
Moar.Enum.into!/2which is likeEnum.into/2but acceptsnilas its first argument. Moar.Map.merge/2now acceptsnilvalues.- Add
Moar.Map.validate_keys!/2which raises if the given map has keys that are not in the given list.
1.27.0
- Add
Moar.Map.deep_take/2to take from nested maps.
1.26.0
- Add
Moar.Enum.take_at/2which returns a list of elements at the given indices.
1.25.0
- Add
Moar.Atom.to_existing_atom/1which acts likeString.to_existing_atombut can take an atom (or string) as an argument.
1.24.1
- Bug fix:
Moar.Map.deep_merge/3used to try to convert any enumerable into a map before merging, but this caused problems when a value was some other kind of enumerable that wasn't meant to be a nested map-like structure. Now, it only automatically converts keyword lists to maps. - Add
Moar.Enum.is_map_or_keyword(which unforuntately cannot be used as a guard).
1.24.0
Moar.Map.deep_merge/3accepts a function to resolve merge conflicts.
1.23.0
- Add
between?/2andrecent?/2toMoar.DateTime
1.22.0
assert_thatandrefute_thatreturn the result of the action- Add
:onlyand:exceptto documentation forassert_eq.
1.21.0
1.20.0
1.19.3
- Add link to related library "siiibo/assert_match"
1.19.2
Moar.String.to_integer/1will return the argument without complaint when it is already an integer.
1.19.1
- Add
:cryptoto declared extra applications. - Clarify documentation for
Moar.String.append_unless_blank/2.
1.19.0
1.18.1
- Fix
Moar.Assertions.refute_thatto work with checks that do not implementString.Chars.
1.18.0
- Add
Moar.Tuple.reduce/1.
1.17.0
- Add
ignore_whitespace: :leading_and_trailingoption toMoar.Assertions.assert_eq.
1.16.0
1.15.0
- Add
Moar.DateTime.subtract/2andMoar.NaiveDateTime.subtract/2. - Add
Moar.DateTime.utc_now/1andMoar.NaiveDateTime.utc_now/1which allow adding and subtracting from "now". - Add
Moar.Duration.from_now/1and a:from_nowtransformer toMoar.Duration.format/4.
1.14.0
- Add
Moar.Assertions.assert_that/2without the:fromassertion. - Add
Moar.String.to_case/2.
1.13.1
- Doc updates
1.13.0
- Add
Moar.String.pluralize/3to pluralize strings.
1.12.0
- Add
Moar.Duration.humanize/1which can turn{120, :second}into{2, :minute}, andMoar.Duration.shift/2which is likeMoar.Duration.convert/2but returns a duration tuple. - Add
Moar.Duration.ago/1which returns the duration between a given datetime and now. - Add
Moar.Duration.between/2which returns the duration between two datetimes. - Add
Moar.Duration.approx/1which shifts a duration to a simpler approximate value. Moar.Durationsupports more time units::approx_month(30 days), andapprox_year(12 approx_months).- Add
Moar.Duration.format/2which formats a duration in either long ("3 seconds") or short ("3s") format, with optional transformers and suffix.
1.11.0
Moar.Assertions.refute_that/2macro.- Add exports to formatter.
1.10.0
Moar.Map.atomize_key/3converts dashes in keys to underscores before atomizing. Because the other "atomize" functions in this module use this function, they have the same behavior.Moar.String.slug/2retains any leading or trailing joiners (soslug("_foo-bar", "_")now returns"_foo_bar"instead of"foo_bar").
1.9.0
1.8.0
- Add
atomize_keytoMoar.Map, which atomizes a map key and raises if atomizing a key would conflict with an exsiting atom key.atomize_keysanddeep_atomize_keysnow use this function so they can also raise in the same situation. - Add "!" versions of some functions in
Moar.Mapthat raise when a key is not found. - Add an overview of the library to the readme.
1.7.0
- Add
assert_recenttoMoar.Assertions
1.6.0
1.5.0
- Add
Moar.Opts
1.4.0
1.3.0
Moar.DateTime.addcan add aMoar.Durationto aDateTimeMoar.Retry.rescue_for!/2can take aMoar.Duration- Add
Moar.Retry.retry_forandMoar.Retry.retry_until
1.2.0
Moar.Retry.rescue_for!/2and.rescue_until!/2
1.1.0
1.0.0
- Update documentation
- Minor formatting fixes
- Remove "Moar.Term.or_default/2" since it is the same as
Moar.Term.presence/2.
0.1.0
- Initial release