2.6.0 (in development) compare
- Allow
Nodes::Node
s to hold arbitrary values (#85) by @gonzedge- Add
value
attribute toNodes::Node
- Add optional, nilable
value
argument toContainer#add
,Nodes::Node#add
- Store given
value
in terminal node viaNodes::Raw#add
andNodes::Raw#add_to_children_tree
, when present - Update
Compressor#merge
andCompressor#compress_children_and_copy
to storevalue
fromNodes::Raw
in the terminalNodes::Compressed
, when present - Add optional
values
array argument toContainer#concat
corresponding 1:1 towords
, that passes each word and value to#add
when present - Add
value
toInspectable#inspect
output, when present
- Add
- Types for
Nodes::Node
s arbitrary value (part of #85) by @gonzedge- Add generic type
TValue
toNodes::Node
type signature- Extract
_Nilable
interface to own top-level file - Make
value
attribute inNodes::Node
use the newTValue
generic type - Allow
TValue
to benil
by default with?
- Require
TValue
to implement_Inspect
built-in(!) interface, forInspectable
module - Change all types that depend on
Nodes::Node
also have the generic typeTValue < _Inspect
including static methods - Add optional
TValue
argument toContainer#add
,Nodes::Node#add
, andNodes::Raw#add_to_children_tree
- Add optional
Array[TValue?]
argument toContainer#concat
- Add new
|| raise
s because the inline type conversion to non-nil doesn't work anymore forsteep
check 🤷🏻♂️
- Extract
- Make compatible with
rbs
v3.7.0
andsteep
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
UnannotatedEmptyCollection
s - Raise
InvalidOperation
s whencompress(child)
return nil value which is not supposed to be possible
- Change
- Add generic type
- Add type signature information to
README
(#86) by @gonzedge- Add
asdf
as an option to manage ruby versions - Use
./<path>
for links within repo
- Add
2.5.1 compare
-
Use
Array#shift
instead ofArray#slice!
for slight performance improvement (#69) by @gonzedgeFor performance improvements in all operations on a compressed
Rambling::Trie
. Now ≈3% faster. -
Use
String#chars
+Array#map
instead ofString#each_char
+Array#<<
(#70) by @gonzedgeFor performance improvements in
Rambling::Trie#create
. Now ≈7% faster. -
Use
Array#slice(i, slice_size)
insteadArray#slice(i..j)
forContainer#words_within
(#71) by @gonzedgeFor performance improvements in
Container#words_within
lookups, particularly for compressed tries. Now ≈7% faster. -
As part of Reek addition (#67)
- Assign
child.parent
toself
in all ofchildren_tree
duringNodes::Compressed#initialize
- Simplify
Compressor#merge
- Rename
Compressor#compress{,_only}_child_and_merge
- Assign
-
Add rbs types and corresponding lint check (#57) by @gonzedge
First:
- Add
rbs
gem and allrbs
types insig/
directory - Add
steep
gem for easier rbs type checking, with basic configuration only checkinglib
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 fornil?
check on generic type forProviderCollection#contains?
- Expand
ProviderCollection#resolve
tokey?
check to prevent rbs/steep from complaining aboutCannot have body method
- Add
children_match_prefix
partial_word_chars?
word_chars?
closest_node
private abstract methods toNodes::Node
, so that bothNodes::Raw
andNodes::Compressed
have it without duplication - Make
yardoc
matchrbs
types
Finally:
- Rename
char_symbols
toreversed_char_symbols
for clarity - Rename
Nodes::Raw#add
's paramchars
toreversed_chars
for clarity - Add
lint-rbs-steep
action - Rename
lint
=>lint-rubocop
- Bump lint and coverage ruby versions to
3.3.6
- Add
-
Ensure
rbs
type signatures are included with the gem on release (#77) by @gonzedge
-
Add Reek + CodeClimate plugin + GitHub action (#67) by @gonzedge
Code smells addressed:
- Use
return unless variable
instead ofreturn if variable.nil?
where appropriate, since nil check is a type check - Extract
size
variable forchars.length - 1
inContainer#words_within_root
- Extract
entry_name
forentry.name
inSerializers::Zip
- Use longer variable names within blocks
char
inContainer#words_within_root
extension
,provider
inProviderCollection#reset
- Remove
p
inProviderCollection#contains?
- Use
-
Add
yard
lint and useredcarpet
for proper Markdown rendering (#73) by @gonzedge -
Add Dockerfile for consistent isolated benchmark runs (#80) by @gonzedge
- Add top-level
Dockerfile
with all relevant files, includingsig/
andspec/
to run any commands - Add minimal
Dockerfile.benchmark
with only what is required to run a benchmark (minimalGemfile
and minimalRakefile
) and with the ability to run on a specificrambling-trie
version, even from the git repo(!) - Require
pathname
explicitly intasks/helpers/path.rb
so that the benchmark can actually run with the minimal config
- Add top-level
-
Disable garbage collection in benchmarks and add script to rapidly run benchmarks (#81) by @gonzedge
- Add a benchmarking script leveraging the new
Dockerfile.benchmark
added in #80 - Ensure all benchmarks are run with garbage collection stopped via
so that it doesn't interfere with benchmark calculations.
::GC.start # <= trigger garbage collection ::GC.disable # disable before executing benchmark yield ::GC.enable # enable after executing benchmark
- Add a benchmarking script leveraging the new
-
Add GC-free benchmark reports for versions back to
v2.1.1
(#82) by @gonzedgeUse:
- ruby
3.3.6
for rambling-trie2.5.0
,2.4.0
,2.3.1
,2.3.0
benchmarks - ruby
3.0.0
for rambling-trie2.2.1
,2.2.0
benchmarks - ruby
2.7.8
for rambling-trie2.1.1
benchmarks
- ruby
-
Disable garbage collection during ips benchmarks (#83) by @gonzedge
2.5.0 compare
- 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 mirrorArray#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
and3.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 to3.1.0
- Add new
rubocop
plugin cops (performance
,rake
,rspec
) - Apply new
rubocop
corrections
- Update all doc links to point to
- Update
ma{ster => in}
branch references (#58) by @gonzedge- Use
main
branch for.github/workflows
- Change
ma{ster => in}
branch inchangelog_uri
in gemspec - Change
ma{ster => in}
branch inREADME
,CONTRIBUTING
andCHANGELOG
- Upgrade
paambaati/codeclimate-action
tov5.0.0
- Use
- Upgrade
rubocop
rules and fix new rule offenses (#62) by @gonzedge- Fix newer offenses; remove deprecated rules
- Explicitly disable
RSpec/Rails
,Capybara
andFactorybot
rules - Enable new
Lint
,Style
andRspec
rules - Remove
add_development_dependency
andtest_files
fromGemfile
- Prefer
::File.write
over::File.open
- Remove
::
when unnecessary - Use constants instead of strings for
instance_double
s - Use
be_empty
instead ofmatch_array []
- Prefer
FileUtils.rm_f path
instead ofFile.delete if path File.exist?
- Prefer
contain_exactly
overmatch_array
- Remove now-invalid cops from rubocop (#65) by @gonzedge
2.4.0 compare
- 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 non-reserved words for file format and method name so that we are not accidentally shadowing important
built-ins (
- Use
@return [self]
inNode#terminal!
rubydoc (#42) by @gonzedge- Also fix typos in
CHANGELOG.md
andCONTRIBUTING.md
- Also fix typos in
-
Handle code inspections in
lib/
- use%w
andhttps
in gemspec (#45) by @gonzedge- And add explicit RubyMine
noinspection
comments for things that RuboCop already takes care of.
- And add explicit RubyMine
-
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
- Rename
-
Use
RSpec::Config
'sfilter_run_when_matching
instead of deprecatedrun_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
- Explicitly assert any new
-
Update
CallTreeProfiler
to use newRubyProf::Profiler
format (#46) by @gonzedgePlus:
- More accurate
pop
/shift
/slice!
reporting - Only require
benchmark/ips
when necessary - One-liner blocks
- More accurate
-
Add version specs to ensure
README/CHANGELOG
update before release (#47) by @gonzedge -
Exclude
spec/
fromsimplecov
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
- And exclude
markdownlint
(#50)- Max line length is 120 (
MD013
) - Ordered list style is
ordered
(MD029
) - Add titles to
CHANGELOG.md
andCONTRIBUTING.md
- Apply lint rules
- Fix corresponding tests
- Max line length is 120 (
rubocop
(#53)- Allow up to 5 params to be optional (same as max total params)
- Change max line length to 120.
flog
(#52)
2.3.1 compare
- 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
- Add test in
- Ensure
#each
/#each_word
returnEnumerator
/self
(#37) by @gonzedge- … depending on whether a block is given or not.
- Improve API documentation (#38) by @gonzedge
- Add
Readers::Reader
andSerializer::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
- Add explicit changelog and docs urls to
.gemspec
(#39) by @gonzedge- Update
CHANGELOG.md
with latest changes
- Update
- 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/
andtasks/
- Explicitly disable
Style/ExplicitBlockArgument
due to resulting performance hits - Add missing
super
s - Yoda-style conditionals
- Bump target ruby required version to current min supported (
2.7.0
)
- Explicitly disable
- Issues found in
spec/
- Use
instance_double
instead ofdouble
- Split tests into single-assertion specs when parameterization is possible; disable otherwise
- Use
let!
instead of instance variables - Remove duplicate test groups
- Use
when
at the start ofcontext
block descriptions - Use
described_class
,subject
in specs where possible - Single-line
before
where possible
- Use
- Other
- Explicitly add
rubocop-performance
,rubocop-rake
,rubocop-rspec
plugins - Remove unused
Rails
rules - Remove unused/deprecated
RSpec
/Layout
/Style
/Lint
rules
- Explicitly add
- Issues found in
- 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
- Change
- Use GitHub Actions for main branch and PR checks (#30, #31, #32)
by @gonzedge
- Run
build
action withlint
forrubocop
,spec
forrspec
,coverage
forcoveralls
- Run
codeql
action - Run
dependency-review
action only on pull requests
- Run
- 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
.
- Plus reformat badges at top of
- 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
- 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
- Add block to
Coveralls.wear!
to preventSimpleCove.start
being called twice by @KitaitiMakoto - Use new
coveralls_reborn
to support new ruby by @agate
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 memory 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.
- By excluding unnecessary
- 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 @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
.
- 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
- 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
- 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
- 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