word_zoo 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4b980d97658ef99270d8a6437d0d5667e8adaa73631ef967a0c8c0efae39fea9
4
- data.tar.gz: 752981d6044403098267c03bf7d27d7b6abd13d915969fec1daca3cea081f4ca
3
+ metadata.gz: e22906f1b1f5f3a9121307632b7857145577c0562a6149b62f141c82d39cb039
4
+ data.tar.gz: 6962d2b35d85effefa1e81cf1f86d6cca8f03851b8a067410bf1681d3e23710d
5
5
  SHA512:
6
- metadata.gz: 7dab2eeb0da21dd5d2c290f42aed3c8f7865d4b4f0f439e66291fa326b5d57282425657e63642bf8aaf45b66a675db691fdde8501e89fb67cef048204983e7a4
7
- data.tar.gz: ff577d0eb3a96ea0b0eb51b16ad68860fe6310bce046593493124b323b1a86adf9bb2fff9d20eaab22a7cf91b8b349d34d7cf3148f5883196d86cae52f0689a1
6
+ metadata.gz: 63986a14d6daedfc8ee2018c319bcd8c0785e7d3ca10453546ede0d4efc9726a8d2877e32d5b20ef0e5d1d08ae6d20a21818a7ffbc6ea50499cb529ddfc512ae
7
+ data.tar.gz: c4269c8c7f8063c1739105f090dd5ee32c69d1d12a1ce3c2f84367e6a904e37eabef2f87845f6fae8abde007e071f73e85d9a5e7a1c883cfec49a05b04e5db9d
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # WordZoo
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/word_zoo`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ This gem is about saving space and time. There is a near infinite amount of words in the english language, and many word lists can reac row counts in the millions.
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ Using dictionary trees with letter nodes, the largest a dictionary may get is 26 to the 26th power, which is large, but manageable. In this way words like 'cat', 'catepillar' and category may consolidate thier shared prefixes.
6
6
 
7
7
  ## Installation
8
8
 
@@ -32,22 +32,75 @@ Or install it yourself as:
32
32
  t.string :name
33
33
 
34
34
 
35
+ ## Instance methods:
35
36
 
37
+ # Input a word into a word tree
38
+ input_word(word)
39
+ eg:
40
+ > example_list.input_word("lao")
41
+ => true
42
+ > example_list.input_word("lao")
43
+ => true
36
44
 
37
- ## Development
45
+ # list all words
46
+ list_words
47
+ eg:
48
+ > example_list.list_words
49
+ => ["matt", "lao"]
50
+
51
+
52
+ # Remove a word from a tree
53
+ def remove_word(word)
54
+ eg:
55
+ > example_list.remove_word("matt")
56
+ => true
57
+ > example_list.list_words
58
+ => ["lao"]
59
+
60
+ # get a hash whether or not certain lengths are in the tree
61
+ word_lengths_data
62
+ eg:
63
+ > example_list.word_lengths_data
64
+ => {"4"=>1, "3"=>1, "6"=>1}
65
+
66
+ in this example the list_words method would return: ["matt", "matter", "lao"]: there are words of lengths 4, 3 and 6 present in the example dictionary tree.
67
+
68
+
69
+ # see if the input word exists in this list
70
+ is_word?(word)
71
+ eg:
72
+ > example_list.is_word?("matt")
73
+ => true
74
+ > example_list.is_word?("pee")
75
+ => false
76
+
77
+ # find a random word
78
+ > example_list.find_word
79
+ => "matt"
80
+
81
+ # view the tree as it exists as a tree object
82
+ eg:
83
+ > examplelist.tree
84
+ => {"m"=>{"is_word"=>false, "a"=>{"is_word"=>false, "t"=>{"is_word"=>false, "t"=>{"is_word"=>true}}}}, "l"=>{"is_word"=>false, "a"=>{"is_word"=>false, "o"=>{"is_word"=>true}}}}
38
85
 
39
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
40
86
 
41
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
87
+
88
+
89
+
90
+ ## Development
91
+
92
+ After pulling down the source code from github, use this in any local active record app.
93
+ ```ruby
94
+ gem 'word_zoo', '0.1.1', path: "../word_zoo"
95
+ ```
42
96
 
43
97
  ## Contributing
44
98
 
45
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/word_zoo. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/word_zoo/blob/master/CODE_OF_CONDUCT.md).
99
+ Bug reports and pull requests are welcome on GitHub at https://github.com/laomatt/word_zoo. This project is intended to be a safe, welcoming space for collaboration.
100
+
101
+ Please create PRs and tag the authors.
46
102
 
47
103
  ## License
48
104
 
49
105
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
50
106
 
51
- ## Code of Conduct
52
-
53
- Everyone interacting in the WordZoo project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/word_zoo/blob/master/CODE_OF_CONDUCT.md).
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module WordZoo
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
data/lib/word_zoo.rb CHANGED
@@ -65,8 +65,35 @@ module WordZoo
65
65
  end
66
66
 
67
67
  def remove_word(word)
68
- # travel the word tree to the last letter
69
- # make 'is_word' false on the last node
68
+ return if word.nil?
69
+ init_tree = self.tree
70
+ word_letters = word.downcase.split('')
71
+
72
+ find_letter_in_level = lambda do |word_letters_left, lvl_tree|
73
+ letter = word_letters_left.shift
74
+
75
+ if letter.nil?
76
+ lvl_tree['is_word'] = false
77
+ return lvl_tree
78
+ end
79
+
80
+ if !lvl_tree[letter]
81
+ lvl_tree[letter] = { 'is_word' => false }
82
+ end
83
+
84
+ lvl_tree[letter] = lvl_tree[letter].merge(find_letter_in_level.call(word_letters_left, lvl_tree[letter]))
85
+
86
+ lvl_tree
87
+ end
88
+
89
+ self.letters = find_letter_in_level.call(word_letters, init_tree).to_json
90
+
91
+ # update the lengths
92
+ lengths = self.word_lengths_data
93
+ lengths[word.length] = 1
94
+ self.word_lengths = lengths.to_json
95
+
96
+ self.save!
70
97
  end
71
98
 
72
99
  # get a hash of how many words of each length exists
metadata CHANGED
@@ -1,16 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: word_zoo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Lao
8
+ - Malika Kassen-Lao
8
9
  autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
12
  date: 2022-04-17 00:00:00.000000000 Z
12
13
  dependencies: []
13
- description:
14
+ description: To use this, please include WordZoo as a module in your model.
14
15
  email:
15
16
  - laomatt1@gmail.com
16
17
  executables: []