Skip to content

Latest commit

 

History

History
1274 lines (978 loc) · 57 KB

CHANGELOG.md

File metadata and controls

1274 lines (978 loc) · 57 KB

CHANGELOG

2.6.0 (in development) compare

Enhancements

Major

  • Allow Nodes::Nodes to hold arbitrary values (#85) by @gonzedge
    • Add value attribute to Nodes::Node
    • Add optional, nilable value argument to Container#add, Nodes::Node#add
    • Store given value in terminal node via Nodes::Raw#add and Nodes::Raw#add_to_children_tree, when present
    • Update Compressor#merge and Compressor#compress_children_and_copy to store value from Nodes::Raw in the terminal Nodes::Compressed, when present
    • Add optional values array argument to Container#concat corresponding 1:1 to words, that passes each word and value to #add when present
    • Add value to Inspectable#inspect output, when present

Minor

  • Types for Nodes::Nodes arbitrary value (part of #85) by @gonzedge
    • Add generic type TValue to Nodes::Node type signature
      • Extract _Nilable interface to own top-level file
      • Make value attribute in Nodes::Node use the new TValue generic type
      • Allow TValue to be nil by default with ?
      • Require TValue to implement _Inspect built-in(!) interface, for Inspectable module
      • Change all types that depend on Nodes::Node also have the generic type TValue < _Inspect including static methods
      • Add optional TValue argument to Container#add, Nodes::Node#add, and Nodes::Raw#add_to_children_tree
      • Add optional Array[TValue?] argument to Container#concat
      • Add new || raises because the inline type conversion to non-nil doesn't work anymore for steep check 🤷🏻‍♂️
    • Make compatible with rbs v3.7.0 and steep v1.9.0
      • Change ProviderCollection#[] to return TProvider?
      • Change Nodes::Node#[] to return Nodes::Node[TValue]?
      • Change Container#[] to return Nodes::Node[TValue]?
      • Add type annotations for UnannotatedEmptyCollections
      • Raise InvalidOperations when compress(child) return nil value which is not supposed to be possible
  • Add type signature information to README (#86) by @gonzedge
    • Add asdf as an option to manage ruby versions
    • Use ./<path> for links within repo

2.5.1 compare

Enhancements

Major

  • Use Array#shift instead of Array#slice! for slight performance improvement (#69) by @gonzedge

    For performance improvements in all operations on a compressed Rambling::Trie. Now ≈3% faster.

  • Use String#chars + Array#map instead of String#each_char + Array#<< (#70) by @gonzedge

    For performance improvements in Rambling::Trie#create. Now ≈7% faster.

  • Use Array#slice(i, slice_size) instead Array#slice(i..j) for Container#words_within (#71) by @gonzedge

    For performance improvements in Container#words_within lookups, particularly for compressed tries. Now ≈7% faster.

  • As part of Reek addition (#67)

    • Assign child.parent to self in all of children_tree during Nodes::Compressed#initialize
    • Simplify Compressor#merge
    • Rename Compressor#compress{,_only}_child_and_merge
  • Add rbs types and corresponding lint check (#57) by @gonzedge

    First:

    • Add rbs gem and all rbs types in sig/ directory
    • Add steep gem for easier rbs type checking, with basic configuration only checking lib for now
    • Add rubyzip types as they are not defined

    Then:

    • Add || raise for places where we expect to always have a value, but that rbs/steep are not smart enough to autodetect
    • Add EMPTY_ENUMERATOR to be returned when there is no iteration to perform
    • Add _Nilable interface to allow for nil? check on generic type for ProviderCollection#contains?
    • Expand ProviderCollection#resolve to key? check to prevent rbs/steep from complaining about Cannot have body method
    • Add children_match_prefix partial_word_chars? word_chars? closest_node private abstract methods to Nodes::Node, so that both Nodes::Raw and Nodes::Compressed have it without duplication
    • Make yardoc match rbs types

    Finally:

    • Rename char_symbols to reversed_char_symbols for clarity
    • Rename Nodes::Raw#add's param chars to reversed_chars for clarity
    • Add lint-rbs-steep action
    • Rename lint => lint-rubocop
    • Bump lint and coverage ruby versions to 3.3.6
  • Ensure rbs type signatures are included with the gem on release (#77) by @gonzedge

Minor

  • Add CodeClimate Semgrep plugin (#68) by @gonzedge

  • Add Reek + CodeClimate plugin + GitHub action (#67) by @gonzedge

    Code smells addressed:

    • Use return unless variable instead of return if variable.nil? where appropriate, since nil check is a type check
    • Extract size variable for chars.length - 1 in Container#words_within_root
    • Extract entry_name for entry.name in Serializers::Zip
    • Use longer variable names within blocks
      • char in Container#words_within_root
      • extension, provider in ProviderCollection#reset
      • Remove p in ProviderCollection#contains?
  • Use rake tasks for all lint actions (#72) by @gonzedge

  • Add yard lint and use redcarpet for proper Markdown rendering (#73) by @gonzedge

  • Add new guards: reek, rubocop, yard (#74) by @gonzedge

  • Add git pre-push hook suggestion (#75) by @gonzedge

  • Add markdownlint GitHub action (#78) by @gonzedge

  • Add markdownlint to pre-push script (#79) by @gonzedge

  • Add Dockerfile for consistent isolated benchmark runs (#80) by @gonzedge

    • Add top-level Dockerfile with all relevant files, including sig/ and spec/ to run any commands
    • Add minimal Dockerfile.benchmark with only what is required to run a benchmark (minimal Gemfile and minimal Rakefile) and with the ability to run on a specific rambling-trie version, even from the git repo(!)
    • Require pathname explicitly in tasks/helpers/path.rb so that the benchmark can actually run with the minimal config
  • Disable garbage collection in benchmarks and add script to rapidly run benchmarks (#81) by @gonzedge

    1. Add a benchmarking script leveraging the new Dockerfile.benchmark added in #80
    2. Ensure all benchmarks are run with garbage collection stopped via
      ::GC.start # <= trigger garbage collection
      ::GC.disable # disable before executing benchmark
      yield
      ::GC.enable # enable after executing benchmark
      so that it doesn't interfere with benchmark calculations.
  • Add GC-free benchmark reports for versions back to v2.1.1 (#82) by @gonzedge

    Use:

    • ruby 3.3.6 for rambling-trie 2.5.0, 2.4.0, 2.3.1, 2.3.0 benchmarks
    • ruby 3.0.0 for rambling-trie 2.2.1, 2.2.0 benchmarks
    • ruby 2.7.8 for rambling-trie 2.1.1 benchmarks
  • Disable garbage collection during ips benchmarks (#83) by @gonzedge

2.5.0 compare

Enhancements

Major

  • Add explicit support for Ruby 3.3.x (#56) by @gonzedge
  • Fix missing params for enumerator for Readers::PlainText (#59) by @gonzedge
  • Add Container#push to mirror Array#push interface (#60) by @gonzedge
  • Ensure only non-root nodes are marked as terminal (#63) by @gonzedge
  • Ensure self is returned during call to Nodes::Raw#add (#64) by @gonzedge
  • Remove support for 2.7.x and 3.0.x (EOL'd) (#66) by @gonzedge
    • Update all doc links to point to 3.3.0 docs
    • Update min supported version to 3.1.0
    • Update rubocop target version to 3.1.0
    • Add new rubocop plugin cops (performance, rake, rspec)
    • Apply new rubocop corrections

Minor

  • Update ma{ster => in} branch references (#58) by @gonzedge
    • Use main branch for .github/workflows
    • Change ma{ster => in} branch in changelog_uri in gemspec
    • Change ma{ster => in} branch in README, CONTRIBUTING and CHANGELOG
    • Upgrade paambaati/codeclimate-action to v5.0.0
  • Upgrade rubocop rules and fix new rule offenses (#62) by @gonzedge
    • Fix newer offenses; remove deprecated rules
    • Explicitly disable RSpec/Rails, Capybara and Factorybot rules
    • Enable new Lint, Style and Rspec rules
    • Remove add_development_dependency and test_files from Gemfile
    • Prefer ::File.write over ::File.open
    • Remove :: when unnecessary
    • Use constants instead of strings for instance_doubles
    • Use be_empty instead of match_array []
    • Prefer FileUtils.rm_f path instead of File.delete if path File.exist?
    • Prefer contain_exactly over match_array
  • Remove now-invalid cops from rubocop (#65) by @gonzedge

2.4.0 compare

Enhancements

Major

  • As part of RSpec::Config changes (#43) by @gonzedge
    • Use non-reserved words for file format and method name so that we are not accidentally shadowing important built-ins (:format => :file_format, :method => :method_name)
  • Use @return [self] in Node#terminal! rubydoc (#42) by @gonzedge
    • Also fix typos in CHANGELOG.md and CONTRIBUTING.md

Minor

  • Handle code inspections in lib/ - use %w and https in gemspec (#45) by @gonzedge

    • And add explicit RubyMine noinspection comments for things that RuboCop already takes care of.
  • Handle code inspections in tasks/ (#44) by @gonzedge

    • Rename Helpers::{GC => GarbageCollection} (and corresponding files)
    • Use symbols for hash key?/has_key?/!![] ips benchmark comparison
  • Use RSpec::Config's filter_run_when_matching instead of deprecated run_all_when_everything_filtered (#43) by @gonzedge

    • Explicitly assert any new Node is not a #word? by default after initialization
    • Remove unnecessary parens from let definitions in specs
  • Update CallTreeProfiler to use new RubyProf::Profiler format (#46) by @gonzedge

    Plus:

    • More accurate pop/shift/slice! reporting
    • Only require benchmark/ips when necessary
    • One-liner blocks
  • Add version specs to ensure README/CHANGELOG update before release (#47) by @gonzedge

  • Exclude spec/ from simplecov coverage (#48) by @gonzedge

    ... by using the same filter as we use for Coveralls.wear!

  • CodeClimate plugins by @gonzedge

    • fixme (#49)
      • And exclude rubocop files
    • markdownlint (#50)
      • Max line length is 120 (MD013)
      • Ordered list style is ordered (MD029)
      • Add titles to CHANGELOG.md and CONTRIBUTING.md
      • Apply lint rules
      • Fix corresponding tests
    • rubocop (#53)
      • Allow up to 5 params to be optional (same as max total params)
      • Change max line length to 120.
    • flog (#52)
  • Add semgrep GitHub Action (#54) by @gonzedge

  • Update copyright years (#55) by @gonzedge

2.3.1 compare

Enhancements

Major

  • Fix Rambling::Trie.load docs in README by @gonzedge
  • Destructure args hash before passing to performance rake task by @gonzedge
  • Ensure all serializer #dump methods return the size of the file (#36) by @gonzedge
    • Add test in a serializer shared examples
    • Implement method for Rambling::Trie::Serializers::Zip
  • Ensure #each/#each_word return Enumerator/self (#37) by @gonzedge
    • … depending on whether a block is given or not.
  • Improve API documentation (#38) by @gonzedge
    • Add Readers::Reader and Serializer::Serializer base classes
    • Make all readers/serializers extend from their corresponding base classes
    • Better docs with Reader/Serializer and generics
    • Fix all code blocks from backtick to + and add some more
    • Add @return [void] where appropriate
    • Add @return [self] where appropriate
    • Fix Nodes::Node duplicate and broken references
    • Fix some typos and add some missing periods
  • Add explicit changelog and docs urls to .gemspec (#39) by @gonzedge
    • Update CHANGELOG.md with latest changes

Minor

  • Update copyright years by @gonzedge
  • Attempt to clear gem version badge being cached by GitHub (?) by @gonzedge
  • Migrate from TravisCI to SemaphoreCI by @gonzedge
  • Be more lax with file size tests (#26) by @gonzedge
  • Add missing compress! in container spec (#25) by @gonzedge
    • To actually test the non-matching tree shared example for compressed tries.
  • Upgrade RuboCop and apply new rules (#24) by @gonzedge
    • Issues found in lib/ and tasks/
      1. Explicitly disable Style/ExplicitBlockArgument due to resulting performance hits
      2. Add missing supers
      3. Yoda-style conditionals
      4. Bump target ruby required version to current min supported (2.7.0)
    • Issues found in spec/
      1. Use instance_double instead of double
      2. Split tests into single-assertion specs when parameterization is possible; disable otherwise
      3. Use let! instead of instance variables
      4. Remove duplicate test groups
      5. Use when at the start of context block descriptions
      6. Use described_class, subject in specs where possible
      7. Single-line before where possible
    • Other
      1. Explicitly add rubocop-performance, rubocop-rake, rubocop-rspec plugins
      2. Remove unused Rails rules
      3. Remove unused/deprecated RSpec/Layout/Style/Lint rules
  • More thorough serializer tests (#28) by @gonzedge
    • Realized that, except for one integration test, we were not testing compressed tries being serialized so added some more specific use cases. Also took the chance to expand the zip serializer spec to handle all formats.
  • Update badges, CI and test/coverage reporting (#29) by @gonzedge
    • Correctly configure main task to publish test report, now being picked up by Semaphore
    • On badges:
      • Change README.md to have one badge per line instead of all in one giant line
      • Add RubyGems downloads badge
      • Add CodeClimate issues badge
      • Update docs badge to point directly to rubydoc.info/gems/rambling-trie
      • Update license badge to one from shields.io
  • Use GitHub Actions for main branch and PR checks (#30, #31, #32) by @gonzedge
    • Run build action with lint for rubocop, spec for rspec, coverage for coveralls
    • Run codeql action
    • Run dependency-review action only on pull requests
  • Reduce semaphore config to latest ruby (#33) by @gonzedge
    • Now, we only care about top-level pass/fail for badge reporting. All other tests are run with GitHub Actions.
  • Rename GitHub Actions and steps for better badges (#34) by @gonzedge
    • Plus reformat badges at top of README.md.
  • Add CodeClimate coverage step to build GH action (#35) by @gonzedge
    • Do things differently for coveralls and code climate
    • Use correct shared example for words_within? on compressed tries

2.3.0 compare

Enhancements

Major

  • Don't use YAML.safe_load's legacy API by @KitaitiMakoto
  • Add explicit support for Ruby 3.1.x by @KitaitiMakoto
  • Add explicit support for Ruby 3.2.x by @agate
  • Make sure gem also supports all the sub version of 3.2 by @agate
    • Includes adding support for 2.7.{4,5,6,7}, 3.0.{2,3,4,5}, 3.1.{0,1,2,3} and 3.2.{0,1}
  • Update required_ruby_version bounds to >= 2.7, < 4 by @gonzedge
  • Drop support for Ruby 2.5.x and 2.6.x by @gonzedge
  • Add Ruby 2.7.8, 3.0.6, 3.1.4, 3.2.2 to supported versions by @gonzedge
  • Update documentation links to min required ruby version by @gonzedge

Minor

  • Add block to Coveralls.wear! to prevent SimpleCove.start being called twice by @KitaitiMakoto
  • Use new coveralls_reborn to support new ruby by @agate

2.2.1 compare

2.2.0 compare

2.1.1 compare

Enhancements

Major

  • Change slice! to shift by @shinjiikeda
  • Frozen string issue fix by @godsent
  • Drop Ruby 2.4.x; add 2.7 and updated 2.6.x/2.5.x support by @gonzedge

Minor

  • Be more flexible with file sizes for zip file test by @gonzedge
  • Upgrade development dependencies by @gonzedge
  • Specify ArgumentError exception for provider collection spec by @gonzedge

2.1.0 compare

Enhancements

Major

  • Add official support for Ruby 2.6 by @gonzedge
  • Add Ruby 2.5.{2,3,4,5} and 2.4{5,6} to supported versions by @gonzedge
  • Require Ruby 2.4.x or up in gemspec by @gonzedge
  • Remove official support for 2.3.x by @gonzedge

2.0.0 compare

Breaking Changes

  • Remove Container deprecated methods by @gonzedge

    • #as_word
    • #letter
    • #parent
    • #to_s
  • Require Ruby 2.3.x or up in gemspec by @gonzedge

  • Drop Ruby 2.2.x support in favor of squiggly heredoc (<<~) by @gonzedge

Enhancements

Major

Most of these help with the gem's overall performance.

  • Add Ruby 2.5.1, 2.4.4 and 2.3.7 to supported versions by @gonzedge
  • Move #partial_word? and #word? up to Node by @gonzedge
  • Use Yaml.safe_load in yaml serializer by @gonzedge
  • Use #each_key and #each_value where appropriate by @gonzedge
  • Extract #deprecation_warning method for Container by @gonzedge
  • Stop using #has_x? method configuration by @gonzedge

Minor

  • Remove unnecessary rake task file by @gonzedge
  • Extract serialization tasks into their own classes by @gonzedge
  • Regenerate serialized dictionaries every time by @gonzedge
  • Change compression strategy and tree structure for Compressed nodes by @gonzedge
  • Add ips dup vs clone vs slice benchmark by @gonzedge
  • Improve documentation of .dump, .load and all Serializers by @gonzedge
  • Exclude Serializers::Marshal from rubocop inspection by @gonzedge
  • Add ips alias_method vs alias benchmark by @gonzedge
  • Refactor rake tasks by @gonzedge
  • Add #not_change matcher to simplify ProviderCollection spec by @gonzedge
  • First big Rubocop sweep by @gonzedge
  • Add rubocop by @gonzedge

1.0.3 compare

Breaking Changes

  • Rename Compressable to more widely used Compressible by @gonzedge
  • Add letter to Node's constructor by @gonzedge

Enhancements

Major

Most of these help with the gem's overall performance.

  • Add #compress method to public API by @gonzedge
  • Add #concat method to public facing API by @gonzedge
  • Define ProviderCollection#format method instead of alias for #keys by @gonzedge
  • Remove unnecessary aliases and move necessary ones to private by @gonzedge
  • Add #has_letter? alias for #has_key? by @gonzedge
  • Add deprecation warnings for Container's methods by @gonzedge
  • Define delegate methods explicitly and remove dependency on Forwardable by @gonzedge
  • Reverse char array and use #pop instead of slice when adding a word by @gonzedge
  • Pull #scan up to Node by @gonzedge
  • Slightly reduce memory for Properties and ProviderCollection classes by @gonzedge
  • Use #children_tree instead of #children when possible by @gonzedge
  • Remove unnecessary assignment in #letter= by @gonzedge
  • Use #each_value instead of #values.#each in Enumerable#each by @gonzedge
  • Use #each_key instead of #keys.#each in CompressedNode#current_key by @gonzedge
  • Use File.foreach to read file on Readers::PlainText by @gonzedge
  • Preemptively convert the word added to array of symbols by @gonzedge
  • Pull gem require up to the Rakefile to avoid issues with .load method by @gonzedge
  • Add Ruby 2.5.0 support by @gonzedge

Minor

  • Better name for classes in ips attr_accessor vs method benchmark task by @gonzedge
  • Fix links in README by @gonzedge
  • Require profiling libraries only when they are strictly necessary by @gonzedge
  • Refactor trie integration tests by @gonzedge
  • Refactor serializer tests by @gonzedge
  • Extract shared examples for trie node implementations by @gonzedge
  • Add missing documentation in Configuration::Properties by @gonzedge
  • Update documentation to reflect actual side effects (or lack thereof) by @gonzedge
  • Rename a few tests to maintain consistent wording by @gonzedge
  • Add #add_word and #add_words helpers to avoid shotgun surgery in tests by @gonzedge
  • Use real node for Container#each test by @gonzedge
  • Add documentation for ProviderCollection's #keys and #[] by @gonzedge
  • Upgrade to coveralls 0.8.21 by @gonzedge
  • Add documentation for delegate methods and fix Node specs by @gonzedge
  • Fix wrong documentation links by @gonzedge
  • Add ips rake task namespace for benchmark-ips results by @gonzedge
  • Add Pry to development dependencies for debugging purposes by @gonzedge
  • Derive filename from task's name by @gonzedge
  • Complete overhaul of performance task directory structure by @gonzedge
  • Refactor Compressor and improve memory footprint and performance by @gonzedge
  • Move all Nodes into 'nodes/' directory by @gonzedge

1.0.2 compare

  • Drop Ruby 2.1.x support by @gonzedge
  • Add Ruby 2.4.{2,3}, 2.3.{5,6} 2.2.{8,9} to supported versions by @gonzedge
  • Add Ruby 2.3.4 and 2.2.7 to supported versions by @gonzedge

1.0.1 compare

  • Use Ruby's own Forwardable again by @gonzedge
  • Remove CodeClimate test reporter by @gonzedge
  • Add Ruby 2.4.1 to supported versions by @gonzedge

1.0.0 compare

Breaking Changes

  • Rename PlainTextReader to Readers::PlainText by @gonzedge
  • Rename Compression to Compressable by @gonzedge
  • Rename Inspect to Inspectable by @gonzedge

Enhancements

Major

  • Add Serializers to dump trie into/load trie from disk #10 by @gonzedge

    • Supported formats include Ruby's Marshal (.marshal) with Serializers::Marshal and YAML (.yaml or .yml) with Serializers::Yaml
    • The format to use is determined by the filepath extension and Marshal is used when a format isn't recognized.
    # Save `your_trie` into a file
    Rambling::Trie.dump your_trie, 'a filename'
    
    # Load a trie from a file into memory
    trie = Rambling::Trie.load 'a filename'
  • Add Serializers::Zip to handle zip files by @gonzedge

    Automatically detects .marshal and .yaml files, as well as any configured Serializer based on filepath extension

  • Add ability to configure rambling-trie #11 by @gonzedge

    Rambling::Trie.config do |config|
      config.compressor = MyCompressor.new
      config.root_builder = lambda { MyNode.new }
    
      config.readers.add :html, MyHtmlReader.new
      config.readers.default = config.readers[:html]
    
      config.serializers.add :json, MyJsonSerializer.new
      config.serializers.default = config.serializers[:yml]
    end
  • Add #words_within and #words_within? to get all words matched within a given string #9 by @gonzedge

    • #words_within returns all the matched words
    • #words_within? returns true as soon as it finds one matching word
  • Add #== to compare nodes by @gonzedge

    Contained in Rambling::Trie::Comparable module. Two nodes are equal to each other if they have the same letter, they are both either terminal or non-terminal and their children tree is the same

  • Add changelog by @gonzedge

  • Add contributing guide by @gonzedge

Minor

  • Extract modules for peripheral node functionality by @gonzedge

    • Move #to_s to Stringifyable module
    • Move #as_word to Stringifyable module by
    • Move #== to Comparable module
    • Rename Compression to Compressable
    • Rename Inspector to Inspectable
  • Add #terminal? value to inspect output by @gonzedge

  • Display value of #terminal instead of #terminal? when Node is inspected by @gonzedge

  • Freeze Rambling::Trie::VERSION by @gonzedge

  • Refactor performance instrumentation tasks by @gonzedge

    • Add Performance module
    • Add Performance::Reporter & Performance::Directory classes
    • Move task execution into individual classes
    • Unify all tasks into single entry point rake performance[type,method]
  • Change benchmark report format by @gonzedge

  • Correct supported versions by @gonzedge

  • Only create new Reader instance when filepath is given on initialization by @gonzedge

  • Update license year by @gonzedge

0.9.3 compare

Enhancements

Major

  • Add Ruby 2.4 to supported versions by @gonzedge
  • Drastically reduce size of gem by @gonzedge
    • By excluding unnecessary assets/ and reports/ when building the gem.
    • Size reduction: from ~472KB to ~21KB.
  • Make root node accessible via container by @gonzedge
    • So that anyone using rambling-trie can develop their custom algorithms
  • Expose root node's #to_a method through Container by @gonzedge
  • Add own Forwardable#delegate because of Ruby 2.4 performance degradation by @gonzedge
    • Was able to take Creation and Compression benchmarks (~8.8s and ~1.5s respectively) back down to the Ruby 2.3.3 levels by adding own definition of Forwardable#delegate.

Minor

  • Ensure unicode words are supported by @gonzedge
  • Add flamegraph reports to performance instrumentation tasks by @gonzedge
  • Move benchmark/profiling dependencies from gemspec to Gemfile by @gonzedge
  • Add missing docs by @gonzedge
  • Improvements on TravisCI setup by @gonzedge
  • Add CodeClimate test coverage integration by @gonzedge
  • Move rspec config from .rspec to spec_helper by @gonzedge

0.9.2 compare

Enhancements

Major

  • Fix "undefined method to_sym" on compressed trie's #partial_word? and #scan by @gonzedge

  • Expose all usable Node methods in Container through delegation by @gonzedge

    • Expose #as_word
    • Expose #children
    • Expose #children_tree
    • Expose #has_key?
    • Expose #parent
    • Expose #size
    • Expose #to_s

Minor

  • Unify #scan implementation between Raw and Compressed node by @gonzedge

0.9.1 compare

Enhancements

Major

Minor

  • Make trie integration test a bit faster by @gonzedge
  • Remove unnecessary #to_a calls from Container by @gonzedge
  • Extract #recursive_get to unify #partial_word? and #scan implementations by @gonzedge
  • Better #word? implementation for compressed node by @gonzedge
  • Rename new_letter => letter by @gonzedge
  • Further performance instrumentation improvements by @gonzedge
  • Split out benchmark reports per version by @gonzedge

0.9.0 compare

Breaking Changes

  • Rambling::Trie.create now returns a Container instead of a Root by @gonzedge

    • Container exposes these API entry points:
      • #partial_word? and its alias #match?
      • #word? and its alias #include?
      • #add and its alias #<<
      • yield the constructed Container on #initialize
    • Rambling::Trie::Node and its subclasses no longer expose:
      • #match?
      • #include?
      • #<<
      • yield on #initialize
  • Remove Branches module, all of its behavior is now contained in RawNode and CompressedNode by @gonzedge

  • Rename Compressor module to Compression (Compressor is now the class that transforms between a RawNode and a CompressedNode) by @gonzedge

Enhancements

Major

  • Separate uncompressed trie vs compressed trie logic into separate objects by @gonzedge

    • Create separate RawNode and CompressedNode classes
    • Add Compressor for #compress! implementation that maps from a RawNode to a CompressedNode
  • Add #terminal! to Node to force node to be terminal by @gonzedge

  • Move #root? into Node by @gonzedge

  • Improve memory footprint of compressed trie (CompressedNode) by @gonzedge

  • Small memory improvements to RawNode by @gonzedge

  • Improve Rambling::Trie::Enumerable performance, hence #scan performance by @gonzedge

  • Improve performance for #scan by @gonzedge

  • Additional performance improvements for raw and compressed nodes operations by @gonzedge

  • Improve trie creation performance by @gonzedge

  • Improve performance of trie initialization from file by @gonzedge

Minor

  • Delegate #inspect to #root node by @gonzedge

  • Rename first_letter to letter in RawNode by @gonzedge

  • Expand performance instrumentation by @gonzedge

    Include memory profiles, call tree profiles and benchmark measurements for #scan method

0.8.1 compare

Enhancements

Major

  • Fix NoMethodError missing branch from compressed root #8 by @gonzedge
  • Add Ruby 2.2.5, 2.2.6, 2.3.1, 2.3.2 and 2.3.3 to supported versions by @gonzedge

0.8.0 compare

Breaking Changes

  • Drop support for Ruby 1.9.x and 2.0.x by @gonzedge

Enhancements

Major

  • Add #scan method and its alias #words to find all words that match a given partial word #7 by @gonzedge

    • Return matching Node
    • Use Null Object pattern to return empty array with Rambling::Trie::MissingNode
  • Add Ruby 2.1.6, 2.1.7, 2.1.8, 2.2.1, 2.2.2, 2.2.3, 2.2.4, and 2.3.0 to supported versions by @gonzedge

Minor

0.7.0 compare

Breaking Changes

  • Remove deprecated #branch? method by @gonzedge
  • Drop support for Ruby 1.9.2 by @gonzedge
  • Remove Rails version specification (not relevant) by @gonzedge

Enhancements

Major

  • Add Ruby 2.1.0, 2.1.1, 2.1.2, 2.1.3, 2.1.4, 2.1.5 to supported versions by @gonzedge

  • Upgrade to RSpec 3 @gonzedge

    • Update gem dependencies and be more restrictive about gem dependency versions
    • Update other dev dependencies
    • Use RSpec's new syntax for message expectations
  • Add LICENSE to gemspec by @gonzedge

Minor

  • Update license by @gonzedge

  • Explicitly define #<< alias for #add by @gonzedge

    This avoids having to call .alias_method again for #add method overloads.

0.6.1 compare

Enhancements

Major

  • Performance improvements on uncompressed #word? and #partial_word? by @gonzedge

0.6.0 compare

Breaking Changes

  • Change return value of #children by @gonzedge

    Returns the array of child nodes instead of the Hash representing the tree of children

  • Rename #branch? method to #partial_word? by @gonzedge

  • Rename old #children method to #children_tree by @gonzedge

Enhancements

Major

Minor

  • Remove perftools.rb dependency by @gonzedge
  • Use Forwardable instead of own delegator by @gonzedge
  • Specify 'MIT License' in the license file by @gonzedge
  • Update license year by @gonzedge

0.5.2 compare

Enhancements

Major

Minor

  • Safer #letter= implementation by @gonzedge
  • Refactor #as_word to use #to_s by @gonzedge
  • Change spec format and remove rails matchers on guard by @lilibethdlc
  • Default rspec output to documentation and syntax to expect by @gonzedge
  • Require bundler/gem_tasks instead of calling install_tasks directly by @lilibethdlc

0.5.1 compare

Enhancements

Major

  • Extract file reading logic into own PlainTextReader object by @gonzedge

  • Replace instance variables with attr accessors/writers by @gonzedge

    Including #letter, #children, #terminal

Minor

0.5.0 compare

Breaking Changes

  • Remove deprecated Rambling::Trie.new entry point by @gonzedge

  • Remove deprecated methods by @gonzedge

    Includes #has_branch_for?, #is_word? and #add_branch_from

Enhancements

Major

  • Yield created trie on Rambling::Trie.create by @gonzedge
  • Add Inspector module for pretty printing by @lilibethdlc
  • Rename #has_branch? to #branch? by @gonzedge
  • Rename #add_branch to #add by @gonzedge
  • Use faster string concatenation with #<< instead of #+ by @lilibethdlc
  • Add missing InvalidOperation exception messages by @gonzedge

Minor

  • Configure specs to be run in random order by @gonzedge
  • Default word to nil on Node initialization by @gonzedge
  • Change required files list from array to %w{} by @gonzedge
  • Change expectation syntax from should to expect().to by @gonzedge
  • Upgrade development dependencies by @gonzedge

0.4.2 compare

Enhancements

Major

  • Fix variable mutation on Root#add_branch_for #6 by @gonzedge

    • Define #<< instead of alias for overriding purposes
  • Add Enumerable capabilities #5 by @gonzedge

  • Restructure file/directory tree again by @gonzedge

    Files now live under lib/rambling/trie instead of lib/rambling-trie

Minor

  • Fix param name for #create and #new by @gonzedge
  • Adding Travis CI configuration by @gonzedge

0.4.1 compare

Breaking Changes

  • Move ChildrenHashDeferer to Rambling::Trie module by @gonzedge

Enhancements

Major

  • Add missing deprecation warning for Rambling::Trie.new by @gonzedge
  • Add the #<< method to Node #4 by @gonzedge
  • Add #include? method to Root #3 by @gonzedge

Minor

  • Lower complexity of has_branch_for? implementation for compressed by @gonzedge
  • Minor performance improvements for compressed trie by @gonzedge
  • Use new #<< method in place of #add_branch_from by @gonzedge

0.4.0 compare

Enhancements

Major

  • Create new Rambling::Trie.create API entry point by @gonzedge
  • Change gem name and directory structure to match standard by @gonzedge

Minor

  • Update documentation for new entry point by @gonzedge
  • Chang some describes to context by @gonzedge
  • Add bundler rake tasks by @gonzedge
  • Update gemspec to match standard style by @gonzedge
  • Add perftools.rb to the mix (cpu profiling) by @gonzedge
  • Remove unused variable by @gonzedge

0.3.4 compare

Enhancements

Major

  • Fix issue with Rambling::Trie class definition by @gonzedge
  • Performance improvement on #has_branch_for? by @gonzedge

Minor

  • Add guard to Gemfile by @gonzedge
  • Add simplecov for code coverage by @gonzedge
  • Refactor rambling-trie requires by @gonzedge
  • Remove unnecessary internal #trie_node by @gonzedge
  • Refactor specs to "The RSpec Way" by @gonzedge
  • Add new benchmarking report info by @gonzedge
  • Update RubyDoc.info link and compression info by @gonzedge

0.3.3 compare

Enhancements

Major

  • Performance improvements for compressed and uncompressed tries by @gonzedge
  • Add API documentation link (rubydoc.info - yard) by @gonzedge
  • Add yard and redcarpet to development dependencies by @gonzedge
  • Add inline documentation for rambling-trie by @gonzedge

Minor

  • Minor refactoring by @gonzedge
  • Improve #has_branch_for? for compressed trie by @gonzedge
  • Update README info for has_branch_for? method by @gonzedge

0.3.2 compare

Enhancements

Major

  • Fix bug when adding terminal word that exists as non-terminal node #2 by @gonzedge
  • Fix #has_branch_for? for compressed trie #2 by @gonzedge
  • Fix #is_word? method for compressed trie #2 by @gonzedge

Minor

  • Refactor branch methods and improve performance a bit by @gonzedge
  • Add performance report file by @gonzedge
  • Add performance report file appending by @gonzedge

0.3.1 compare

Enhancements

Major

  • Include version on gemspec from version file by @gonzedge
  • Restrict #compress! to Root by @gonzedge
  • Move branches logic to own Branches module by @gonzedge

Minor

  • Add first rake tasks and version file by @gonzedge
  • Add performance report tasks by @gonzedge

0.3.0 compare

Enhancements

Major

  • Add LICENSE by @gonzedge
  • Handle empty string edge case by @gonzedge
  • Performance gain replacing block.call with Object.send by @gonzedge

Minor

  • Refactor Compressor by @gonzedge
  • Remove Gemfile.lock to avoid hard dependencies by @gonzedge

0.2.0 compare

Breaking Changes

  • Return self after compression by @gonzedge
  • Change #letter from string to symbol by @gonzedge
  • Use symbols instead of strings for letters and hash keys by @gonzedge

Enhancements

Major

  • Do not compress terminal nodes by @gonzedge

  • Add #parent attribute by @gonzedge

  • Add #terminal? by @gonzedge

  • Add #compress! by @gonzedge

  • Add #compressed? by @gonzedge

  • Read file line by line instead of loading it all into memory by @gonzedge

  • Add ChildrenHashDeferer and TrieCompressor modules by @gonzedge

    Results of refactoring compression and hash methods

  • Remove #word caching for memory gains by @gonzedge

Minor

  • Added #transfer_ownership method by @gonzedge

0.1.0 compare

Breaking Changes

  • Rename #has_branch_tree? to #has_branch_for? by @gonzedge

Enhancements

Major

Minor

  • Set minimum RSpec version to 2.0.0 by @gonzedge

0.0.2 compare

Breaking Changes

  • Make #get_parent_letter_string protected by @gonzedge

Enhancements

Major

0.0.1 compare

Enhancements

Major

Minor