rambling-trie 0.5.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec CHANGED
@@ -1 +1 @@
1
- -c
1
+ -c -f d
data/Guardfile CHANGED
@@ -5,16 +5,5 @@ guard 'rspec', all_on_start: true, all_after_pass: false do
5
5
  watch(%r{^spec/.+_spec\.rb$})
6
6
  watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
7
  watch('spec/spec_helper.rb') { "spec" }
8
-
9
- # Rails example
10
- watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
11
- watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
12
- watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
13
- watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
14
- watch('config/routes.rb') { "spec/routing" }
15
- watch('app/controllers/application_controller.rb') { "spec/controllers" }
16
-
17
- # Capybara request specs
18
- watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
19
8
  end
20
9
 
data/Rakefile CHANGED
@@ -1,6 +1,4 @@
1
- require 'bundler'
2
- Bundler::GemHelper.install_tasks
3
-
1
+ require 'bundler/gem_tasks'
4
2
  require 'rspec/core/rake_task'
5
3
  require 'rambling-trie'
6
4
  require 'rambling/trie/tasks/performance'
@@ -31,7 +31,7 @@ module Rambling
31
31
  protected
32
32
 
33
33
  def branch_when_uncompressed?(chars)
34
- chars.empty? or fulfills_uncompressed_condition?(:branch_when_uncompressed?, chars)
34
+ chars.empty? || fulfills_uncompressed_condition?(:branch_when_uncompressed?, chars)
35
35
  end
36
36
 
37
37
  def branch_when_compressed?(chars)
@@ -58,11 +58,11 @@ module Rambling
58
58
  end
59
59
 
60
60
  def word_when_uncompressed?(chars)
61
- (chars.empty? and terminal?) or fulfills_uncompressed_condition?(:word_when_uncompressed?, chars)
61
+ (chars.empty? && terminal?) || fulfills_uncompressed_condition?(:word_when_uncompressed?, chars)
62
62
  end
63
63
 
64
64
  def word_when_compressed?(chars)
65
- return true if chars.empty? and terminal?
65
+ return true if chars.empty? && terminal?
66
66
 
67
67
  first_letter = ''
68
68
  while not chars.empty?
@@ -5,13 +5,13 @@ module Rambling
5
5
  # Flag for compressed tries.
6
6
  # @return [Boolean] `true` for compressed tries, `false` otherwise.
7
7
  def compressed?
8
- parent and parent.compressed?
8
+ parent && parent.compressed?
9
9
  end
10
10
 
11
11
  # Compress the current node using redundant node elimination.
12
12
  # @return [Root, Node] the compressed node.
13
13
  def compress_tree!
14
- if children.size == 1 and not terminal? and letter
14
+ if children.size == 1 && !terminal? && letter
15
15
  merge_with! children.values.first
16
16
  compress_tree!
17
17
  end
@@ -24,23 +24,20 @@ module Rambling
24
24
  private
25
25
 
26
26
  def merge_with!(child)
27
- new_letter = (letter.to_s << child.letter.to_s).to_sym
27
+ delete_old_key_on_parent!
28
+ redefine_self! child
28
29
 
29
- rehash_on_parent! letter, new_letter
30
- redefine_self! new_letter, child
31
-
32
- children.values.each { |node| node.parent = self }
30
+ children.each { |_, node| node.parent = self }
33
31
  end
34
32
 
35
- def rehash_on_parent!(old_letter, new_letter)
33
+ def delete_old_key_on_parent!
36
34
  return if parent.nil?
37
35
 
38
- parent.delete old_letter
39
- parent[new_letter] = self
36
+ parent.delete letter
40
37
  end
41
38
 
42
- def redefine_self!(new_letter, merged_node)
43
- self.letter = new_letter
39
+ def redefine_self!(merged_node)
40
+ self.letter = letter.to_s << merged_node.letter.to_s
44
41
  self.children = merged_node.children
45
42
  self.terminal = merged_node.terminal?
46
43
  end
@@ -4,7 +4,7 @@ module Rambling
4
4
  module Inspector
5
5
  # @return [String] a string representation of the current node.
6
6
  def inspect
7
- "#<#{self.class.name} letter: #{letter.inspect or 'nil'}, children: #{children.keys}>"
7
+ "#<#{self.class.name} letter: #{letter.inspect || 'nil'}, children: #{children.keys}>"
8
8
  end
9
9
  end
10
10
  end
@@ -27,9 +27,8 @@ module Rambling
27
27
  self.parent = parent
28
28
  self.children = {}
29
29
 
30
- unless word.nil? or word.empty?
31
- letter = word.slice! 0
32
- self.letter = letter.to_sym if letter
30
+ unless word.nil? || word.empty?
31
+ self.letter = word.slice! 0
33
32
  self.terminal = word.empty?
34
33
  self << word
35
34
  end
@@ -45,17 +44,27 @@ module Rambling
45
44
  # @return [String] the string representation of the current node.
46
45
  # @raise [InvalidOperation] if node is not terminal or is root.
47
46
  def as_word
48
- raise InvalidOperation, 'Cannot represent branch as a word' unless letter.nil? or terminal?
49
- letter_string
47
+ raise InvalidOperation, 'Cannot represent branch as a word' if letter && !terminal?
48
+ to_s
49
+ end
50
+
51
+ # String representation of the current node.
52
+ # @return [String] the string representation of the current node.
53
+ def to_s
54
+ parent.to_s << letter.to_s
50
55
  end
51
56
 
52
57
  protected
53
58
 
54
- attr_writer :letter, :children
59
+ attr_writer :children
55
60
  attr_accessor :terminal
56
61
 
57
- def letter_string
58
- (parent ? parent.letter_string : '') << letter.to_s
62
+ def letter=(letter)
63
+ return unless letter
64
+
65
+ letter = letter.to_sym
66
+ @letter = letter
67
+ parent[letter] = self if parent
59
68
  end
60
69
  end
61
70
  end
@@ -13,7 +13,7 @@ module Rambling
13
13
  # Compresses the existing tree using redundant node elimination. Flags the trie as compressed.
14
14
  # @return [Root] self
15
15
  def compress!
16
- self.compressed = (compressed? or !!compress_tree!)
16
+ self.compressed = (compressed? || !!compress_tree!)
17
17
  self
18
18
  end
19
19
 
@@ -1,6 +1,6 @@
1
1
  module Rambling
2
2
  module Trie
3
3
  # Current version of the rambling-trie.
4
- VERSION = '0.5.1'
4
+ VERSION = '0.5.2'
5
5
  end
6
6
  end
@@ -3,11 +3,11 @@ $:.push File.expand_path('../lib', __FILE__)
3
3
  require 'rambling/trie/version'
4
4
 
5
5
  Gem::Specification.new do |gem|
6
- gem.authors = ['Rambling Labs']
7
- gem.email = ['development@ramblinglabs.com']
6
+ gem.authors = ['Edgar Gonzalez', 'Lilibeth De La Cruz']
7
+ gem.email = ['edggonzalezg@gmail.com', 'lilibethdlc@gmail.com']
8
8
  gem.description = 'The Rambling Trie is a custom implementation of the Trie data structure with Ruby, which includes compression abilities and is designed to be very fast to traverse.'
9
9
  gem.summary = 'A custom implementation of the trie data structure.'
10
- gem.homepage = 'http://github.com/ramblinglabs/rambling-trie'
10
+ gem.homepage = 'http://github.com/gonzedge/rambling-trie'
11
11
  gem.date = Time.now.strftime '%Y-%m-%d'
12
12
 
13
13
  gem.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename f }
data/reports/performance CHANGED
@@ -271,3 +271,31 @@ help - true 6.340000 0.010000 6.350000 ( 6.348615)
271
271
  beautiful - true 7.920000 0.000000 7.920000 ( 7.920980)
272
272
  impressionism - true 10.940000 0.020000 10.960000 ( 10.953487)
273
273
  anthropological - true 10.620000 0.000000 10.620000 ( 10.623297)
274
+
275
+ Report for rambling-trie version 0.5.1
276
+ ==> Uncompressed
277
+ `word?`:
278
+ hi - true 1.420000 0.000000 1.420000 ( 1.415907)
279
+ help - true 2.010000 0.010000 2.020000 ( 2.017104)
280
+ beautiful - true 3.450000 0.000000 3.450000 ( 3.442239)
281
+ impressionism - true 4.210000 0.000000 4.210000 ( 4.213081)
282
+ anthropological - true 4.680000 0.000000 4.680000 ( 4.681236)
283
+ `branch?`:
284
+ hi - true 1.420000 0.000000 1.420000 ( 1.421655)
285
+ help - true 2.200000 0.000000 2.200000 ( 2.203647)
286
+ beautiful - true 3.360000 0.000000 3.360000 ( 3.356781)
287
+ impressionism - true 4.170000 0.000000 4.170000 ( 4.170568)
288
+ anthropological - true 4.590000 0.000000 4.590000 ( 4.590748)
289
+ ==> Compressed
290
+ `word?`:
291
+ hi - true 1.280000 0.000000 1.280000 ( 1.283929)
292
+ help - true 1.960000 0.000000 1.960000 ( 1.961445)
293
+ beautiful - true 3.110000 0.010000 3.120000 ( 3.106836)
294
+ impressionism - true 3.970000 0.000000 3.970000 ( 3.972552)
295
+ anthropological - true 4.380000 0.000000 4.380000 ( 4.379821)
296
+ `branch?`:
297
+ hi - true 3.170000 0.000000 3.170000 ( 3.175628)
298
+ help - true 6.140000 0.000000 6.140000 ( 6.136943)
299
+ beautiful - true 7.960000 0.000000 7.960000 ( 7.966746)
300
+ impressionism - true 10.820000 0.010000 10.830000 ( 10.820741)
301
+ anthropological - true 10.600000 0.000000 10.600000 ( 10.600866)
data/spec/spec_helper.rb CHANGED
@@ -3,9 +3,15 @@ SimpleCov.start do
3
3
  add_filter '/spec/'
4
4
  end
5
5
 
6
+ require 'rspec'
6
7
  require 'rambling-trie'
7
8
  ::SPEC_ROOT = File.dirname(__FILE__)
8
9
 
9
10
  RSpec.configure do |config|
10
11
  config.order = :random
12
+ config.treat_symbols_as_metadata_keys_with_true_values = true
13
+
14
+ config.expect_with :rspec do |c|
15
+ c.syntax = :expect
16
+ end
11
17
  end
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rambling-trie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
- - Rambling Labs
8
+ - Edgar Gonzalez
9
+ - Lilibeth De La Cruz
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2012-12-25 00:00:00.000000000 Z
13
+ date: 2013-01-24 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: rspec
@@ -95,7 +96,8 @@ description: The Rambling Trie is a custom implementation of the Trie data struc
95
96
  with Ruby, which includes compression abilities and is designed to be very fast
96
97
  to traverse.
97
98
  email:
98
- - development@ramblinglabs.com
99
+ - edggonzalezg@gmail.com
100
+ - lilibethdlc@gmail.com
99
101
  executables: []
100
102
  extensions: []
101
103
  extra_rdoc_files: []
@@ -136,7 +138,7 @@ files:
136
138
  - spec/lib/rambling/trie/root_spec.rb
137
139
  - spec/lib/rambling/trie_spec.rb
138
140
  - spec/spec_helper.rb
139
- homepage: http://github.com/ramblinglabs/rambling-trie
141
+ homepage: http://github.com/gonzedge/rambling-trie
140
142
  licenses: []
141
143
  post_install_message:
142
144
  rdoc_options: []
@@ -150,7 +152,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
150
152
  version: '0'
151
153
  segments:
152
154
  - 0
153
- hash: -2285345975138821646
155
+ hash: 4017458515202388954
154
156
  required_rubygems_version: !ruby/object:Gem::Requirement
155
157
  none: false
156
158
  requirements:
@@ -159,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
159
161
  version: '0'
160
162
  segments:
161
163
  - 0
162
- hash: -2285345975138821646
164
+ hash: 4017458515202388954
163
165
  requirements: []
164
166
  rubyforge_project:
165
167
  rubygems_version: 1.8.24