Permalink
Fetching contributors…
Cannot retrieve contributors at this time
830 lines (592 sloc) 32.1 KB

Changelog

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 memeory 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
  • Remov 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