2.2.2 compare
2.2.1 compare
- Add support for Ruby 3.0.x by @as181920
2.2.0 compare
- Bump min version to 2.5 by @gonzedge
- Add Ruby 3 to required Ruby versions by @KitaitiMakoto
2.1.1 compare
- Change
slice!
toshift
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
- 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
- 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
-
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
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 toNode
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 forContainer
by @gonzedge - Stop using
#has_x?
method configuration by @gonzedge
- 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 allSerializers
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 simplifyProviderCollection
spec by @gonzedge - First big Rubocop sweep by @gonzedge
- Add rubocop by @gonzedge
1.0.3 compare
- Rename
Compressable
to more widely usedCompressible
by @gonzedge - Add letter to
Node
's constructor by @gonzedge
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 toNode
by @gonzedge - Slightly reduce memeory for
Properties
andProviderCollection
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
inEnumerable#each
by @gonzedge - Use
#each_key
instead of#keys
.#each
inCompressedNode#current_key
by @gonzedge - Use
File.foreach
to read file onReaders::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
- 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
Node
s 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
- Rename
PlainTextReader
toReaders::PlainText
by @gonzedge - Rename
Compression
toCompressable
by @gonzedge - Rename
Inspect
toInspectable
by @gonzedge
-
Add
Serializers
to dump trie into/load trie from disk #10 by @gonzedge- Supported formats include Ruby's
Marshal
(.marshal
) withSerializers::Marshal
andYAML
(.yaml
or.yml
) withSerializers::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'
- Supported formats include Ruby's
-
Add
Serializers::Zip
to handle zip files by @gonzedgeAutomatically detects
.marshal
and.yaml
files, as well as any configuredSerializer
based on filepath extension -
Add ability to configure
rambling-trie
#11 by @gonzedgeRambling::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?
returnstrue
as soon as it finds one matching word
-
Add
#==
to compare nodes by @gonzedgeContained 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
-
Extract modules for peripheral node functionality by @gonzedge
- Move
#to_s
toStringifyable
module - Move
#as_word
toStringifyable
module by - Move
#==
toComparable
module - Rename
Compression
toCompressable
- Rename
Inspector
toInspectable
- Move
-
Add
#terminal?
value to inspect output by @gonzedge -
Display value of
#terminal
instead of#terminal?
whenNode
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]
- Add
-
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
-
Add Ruby 2.4 to supported versions by @gonzedge
-
Drastically reduce size of gem by @gonzedge
By excluding unnecessary
assets/
andreports/
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 throughContainer
by @gonzedge -
Add own
Forwardable#delegate
because of Ruby 2.4 performance degradation by @gonzedgeWas 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
.
- 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
-
Fix "undefined method
to_sym
" on compressed trie's#partial_word?
and#scan
by @gonzedge -
Expose all usable
Node
methods inContainer
through delegation by @gonzedge- Expose
#as_word
- Expose
#children
- Expose
#children_tree
- Expose
#has_key?
- Expose
#parent
- Expose
#size
- Expose
#to_s
- Expose
- Unify
#scan
implementation betweenRaw
andCompressed
node by @gonzedge
0.9.1 compare
-
Performance improvements for all trie operations by @gonzedge
-
Reduce memory footprint without affecting performance for compressed node operations by @gonzedge
Including
#word?
,#partial_word?
and#closest_node
. See these commits for more info:
- Make trie integration test a bit faster by @gonzedge
- Remove unnecessary
#to_a
calls fromContainer
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
-
Rambling::Trie.create
now returns aContainer
instead of aRoot
by @gonzedgeContainer
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 inRawNode
andCompressedNode
by @gonzedge -
Rename
Compressor
module toCompression
(Compressor
is now the class that transforms between aRawNode
and aCompressedNode
) by @gonzedge
-
Separate uncompressed trie vs compressed trie logic into separate objects by @gonzedge
- Create separate
RawNode
andCompressedNode
classes - Add
Compressor
for#compress!
implementation that maps from aRawNode
to aCompressedNode
- Create separate
-
Add
#terminal!
toNode
to force node to be terminal by @gonzedge -
Move
#root?
intoNode
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
-
Delegate
#inspect
to#root
node by @gonzedge -
Rename
first_letter
toletter
inRawNode
by @gonzedge -
Expand performance instrumentation by @gonzedge
Include memory profiles, call tree profiles and benchmark measurements for
#scan
method
0.8.1 compare
- 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
- Drop support for Ruby 1.9.x and 2.0.x by @gonzedge
-
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
- Return matching
-
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
- Update license date by @gonzedge
0.7.0 compare
- Remove deprecated
#branch?
method by @gonzedge - Drop support for Ruby 1.9.2 by @gonzedge
- Remove Rails version specification (not relevant) by @gonzedge
-
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
-
Update license by @gonzedge
-
Explicitly define
#<<
alias for#add
by @gonzedgeThis avoids having to call
.alias_method
again for#add
method overloads.
0.6.1 compare
- Performance improvements on uncompressed
#word?
and#partial_word?
by @gonzedge
0.6.0 compare
-
Change return value of
#children
by @gonzedgeReturns 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
- 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
- Add
#to_s
method for node by @gonzedge
- 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 callinginstall_tasks
directly by @lilibethdlc
0.5.1 compare
-
Extract file reading logic into own
PlainTextReader
object by @gonzedge -
Replace instance variables with attr accessors/writers by @gonzedge
Including
#letter
,#children
,#terminal
- Add
#inspect
documentation by @gonzedge - Refactor
nil
check by @gonzedge - Update benchmark reports by @gonzedge
0.5.0 compare
-
Remove deprecated
Rambling::Trie.new
entry point by @gonzedge -
Remove deprecated methods by @gonzedge
Includes
#has_branch_for?
,#is_word?
and#add_branch_from
- 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
- Configure specs to be run in random order by @gonzedge
- Default
word
tonil
onNode
initialization by @gonzedge - Change required files list from array to
%w{}
by @gonzedge - Change expectation syntax from
should
toexpect().to
by @gonzedge - Upgrade development dependencies by @gonzedge
0.4.2 compare
-
Fix variable mutation on
Root#add_branch_for
#6 by @gonzedge- Define
#<<
instead of alias for overriding purposes
- Define
-
Restructure file/directory tree again by @gonzedge
Files now live under
lib/rambling/trie
instead oflib/rambling-trie
0.4.1 compare
- Move
ChildrenHashDeferer
toRambling::Trie
module by @gonzedge
- Add missing deprecation warning for
Rambling::Trie.new
by @gonzedge - Add the
#<<
method toNode
#4 by @gonzedge - Add
#include?
method toRoot
#3 by @gonzedge
- 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
- Create new
Rambling::Trie.create
API entry point by @gonzedge - Change gem name and directory structure to match standard by @gonzedge
- Update documentation for new entry point by @gonzedge
- Chang some
describe
s tocontext
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
- Fix issue with
Rambling::Trie
class definition by @gonzedge - Performance improvement on
#has_branch_for?
by @gonzedge
- 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
- 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 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
- 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
- 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
- Include version on gemspec from version file by @gonzedge
- Restrict
#compress!
toRoot
by @gonzedge - Move branches logic to own
Branches
module by @gonzedge
0.3.0 compare
- Add LICENSE by @gonzedge
- Handle empty string edge case by @gonzedge
- Performance gain replacing
block.call
withObject.send
by @gonzedge
0.2.0 compare
- 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
-
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
andTrieCompressor
modules by @gonzedgeResults of refactoring compression and hash methods
-
Remove
#word
caching for memory gains by @gonzedge
- Added
#transfer_ownership
method by @gonzedge
0.1.0 compare
- Rename
#has_branch_tree?
to#has_branch_for?
by @gonzedge
- Added project README by @gonzedge
- Set minimum RSpec version to 2.0.0 by @gonzedge
0.0.2 compare
- Make
#get_parent_letter_string
protected by @gonzedge
- Fix empty and nil letter edge case and tests by @gonzedge
- Add the word caching for terminal nodes by @gonzedge
- Add
#as_word
by @gonzedge - Add
InvalidTrieOperation
by @gonzedge
0.0.1 compare
- Add the
Rambling
module for namespacing by @gonzedge - Add
TrieNode
by @gonzedge - Add
#is_word?
method by @gonzedge - Add
#has_branch_tree?
by @lilibethdlc - Add methods
#[]
and#has_key?
to trie node by @gonzedge - Add gemspec info draft by @gonzedge
- Adding correct bundle install source by @lilibethdlc
- Revising add branch recursion by @lilibethdlc