gemmyrb 0.0.5 → 0.0.6

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
  SHA1:
3
- metadata.gz: '0597ccc5d58c800b09db4032d7f3b4c9417a200c'
4
- data.tar.gz: d8cf7ba24fd1e4b423d2a8bdc2accd984b441d21
3
+ metadata.gz: f80e87943a486ead9bdcd3ede570b7cb164a0b46
4
+ data.tar.gz: b5cb77bda55be569a5769c382abf3eae6ab61b92
5
5
  SHA512:
6
- metadata.gz: 61bd6b8d5e1ecb3735cf5da9b664aa0de07006402d386c86492c8b1ff763119895fce69758fcb04fc86cdd6b10a9e47ec805eb797ff420f21554cebf92966930
7
- data.tar.gz: 0ce7ac19a0e282bd31f2644d032d5f334c89192af8a8f0f2765137066d1fb60f90f2de371e02fd1795bca328c69993c3b2b7e3639cb90d4fa7b4950c273993bc
6
+ metadata.gz: 53374471f968c7fbcd89050b98775b48bb3d1d0e9beca86920427605b5c826542939d4fecb2ede9f5201fa94ae4660c57fb96a65a38eda096f798a72eb3ad07f
7
+ data.tar.gz: f1f5c63c5e7169bef3313dd590de806740755e21320a9385dd03b506734a818e1c2dcd8b881b912839a097992176e827a3cc0fa7d30f1f0e1cc4adb701dec395
data/README.md CHANGED
@@ -26,4 +26,4 @@ documents:
26
26
 
27
27
  Specifically, look at the constants defined on Gemmy::Patches. There is one
28
28
  module for each of the core classes being patched. Each individual method
29
- is also contained in its own module (for the sake of, well, modularity)
29
+ is also contained in its own module (for the sake of, well, modularity).
data/lib/gemmy.rb CHANGED
@@ -1,9 +1,13 @@
1
+ require 'awesome_print'
1
2
  require 'thor'
2
3
  require 'colored'
3
4
  require 'active_support/all'
4
5
  require 'pry'
5
6
  require 'colored'
6
7
  require 'corefines'
8
+ require 'sentence_interpreter'
9
+ require 'engtagger'
10
+ require 'odyssey'
7
11
 
8
12
  # Container class for all the functionality.
9
13
  #
@@ -28,24 +32,28 @@ class Gemmy
28
32
  parts = string.split("/")
29
33
  raise ArgumentError unless parts.length == 3
30
34
  core_class, context, method_name = parts
31
- context_classname = if context.eql?("i")
32
- "InstanceMethods"
33
- elsif context.eql?("c")
34
- "ClassMethods"
35
- else
36
- raise ArgumentError
37
- end
35
+ context_classname = context.eql?("i") ? "InstanceMethods" : "ClassMethods"
38
36
  Gemmy::Patches.const_get("#{core_class.capitalize}Patch")
39
37
  .const_get(context_classname)
40
38
  .const_get method_name.camelcase
41
39
  end
42
40
 
43
- # There are two main usages:
44
- # - namespaced (using refinements and explicit include/extend calls)
45
- # - global
46
- #
47
- # This is the method handling the global case
48
- #
41
+ def self.patches(*args)
42
+ Gemmy::Patches.class_refinements *args
43
+ end
44
+
45
+ # Get a constant,
46
+ # lookup on Gemmy::Constants
47
+ # it gsubs '/' to '::'
48
+ # and if the given constant names are lowercase,
49
+ # then it camelcases them.
50
+ def self.const(const_name_abbrev)
51
+ const_name = const_name_abbrev.split("/").map do |x|
52
+ x.chars.all? { |char| char.in? 'a'.upto('z') } ? x.camelcase : x
53
+ end.join("::")
54
+ Gemmy::Constants.const_get const_name
55
+ end
56
+
49
57
  def self.load_globally
50
58
  core_patches = Patches.core_patches.map do |core_klass_name, patch_klass|
51
59
  core_klass = core_klass_name.to_s.constantize
@@ -72,10 +80,10 @@ class Gemmy
72
80
  end
73
81
  end
74
82
 
75
- # Load files in order of their "/" count
76
- # to preserve constant hierarchies
77
- #
78
83
  Gem.find_files("gemmy/**/*.rb").sort_by do |x|
79
84
  x.split("/").length
80
85
  end.each &method(:require)
81
86
 
87
+ # Alias for less typing
88
+ class Gmy < Gemmy
89
+ end
@@ -0,0 +1,33 @@
1
+ Gemmy::Coffee = <<-COFFEE
2
+
3
+ #!/usr/bin/env coffee
4
+ puts = console.log
5
+
6
+ # Gemmy.init reads from argv and starts command
7
+ Gemmy =
8
+ validCommands: (key) ->
9
+ {
10
+ 'pos': this.partOfSpeech
11
+ }[key]
12
+
13
+ init: ->
14
+ [cmd, args...] = process.argv.slice -2
15
+ component = this.validCommands(cmd)
16
+ unless component
17
+ throw('missing or invalid argv command')
18
+ component.run(args...).then component.callback
19
+
20
+ # Part of speech detector
21
+ pos = Gemmy.partOfSpeech = {}
22
+ pos.run = (sentence) ->
23
+ WordPos = require 'wordpos'
24
+ wordpos = new WordPos(profile: true)
25
+ new Promise (resolve, reject) ->
26
+ wordpos.getPOS sentence, resolve
27
+ pos.callback = (result) ->
28
+ puts JSON.stringify result
29
+
30
+ Gemmy.init()
31
+
32
+ COFFEE
33
+
@@ -0,0 +1,49 @@
1
+ class Gemmy::Components::Cache < Hash
2
+
3
+ using Gemmy.patch("hash/i/persisted")
4
+ using Gemmy.patch("hash/i/bury")
5
+ using Gemmy.patch("object/i/home")
6
+
7
+ CachePath = ENV["GEMMY_CACHE_PATH"] || "#{home}/gemmy/caches"
8
+
9
+ unless Dir.exists?(CachePath)
10
+ `mkdir -p #{CachePath}`
11
+ end
12
+
13
+ def initialize(db_name)
14
+ @db = {}.persisted "#{CachePath}/#{db_name}.yaml"
15
+ @memory = @db.get(:data)
16
+ end
17
+
18
+ def get_or_set(*keys, &blk)
19
+ result = get(*keys)
20
+ if result.blank?
21
+ result = blk.call
22
+ set(*keys, result)
23
+ end
24
+ result
25
+ end
26
+
27
+ def keys
28
+ @db.data.keys
29
+ end
30
+
31
+ def get(*keys, source: :db)
32
+ if source == :memory
33
+ @memory.dig *keys
34
+ elsif source == :db
35
+ @db.dig *keys
36
+ else
37
+ raise ArgumentError
38
+ end
39
+ end
40
+
41
+ def set(*keys, val)
42
+ @db.set(*keys, val)
43
+ end
44
+
45
+ def clear
46
+ # forwards it to PersistedHash
47
+ @db.clear
48
+ end
49
+ end
@@ -0,0 +1,179 @@
1
+ module Gemmy::Components::Nlp
2
+
3
+ Gemmy::Patches.class_refinements.each { |r| using r }
4
+
5
+
6
+ def parse_sentence sentence
7
+ setup_lexicons
8
+ log_sentence sentence
9
+ begin
10
+ SentenceInterpreter.interpret sentence
11
+ rescue NounBeforeVerbError
12
+ []
13
+ end
14
+ end
15
+
16
+ def setup_lexicons
17
+ return if @lexicon_set_up
18
+ Object.send :remove_const, "VerbLexicon"
19
+ Object.send :remove_const, "NounLexicon"
20
+ Object.send(:const_set,"VerbLexicon", Gemmy::Components::Cache.new(
21
+ "verb_lexicon"
22
+ ))
23
+ Object.send(:const_set,"NounLexicon", Gemmy::Components::Cache.new(
24
+ "noun_lexicon"
25
+ ))
26
+ @lexicon_set_up = true
27
+ end
28
+
29
+ # Uses the Ruby EngTagger tool to find parts of speech
30
+ # of a sentence
31
+ #
32
+ # Returns a hash with :verbs and :nouns keys (vals are arrays)
33
+ #
34
+ def tag_sentence sentence
35
+ @tagger ||= EngTagger.new
36
+ res = @tagger.add_tags(sentence).ergo do |tagged|
37
+ nouns = @tagger.get_nouns(tagged)&.keys || []
38
+ verbs = @tagger.get_verbs(tagged)&.keys || []
39
+ [nouns, verbs]
40
+ end
41
+ end
42
+
43
+ # Adds words in sentence to application database
44
+ # The part of speech is identified by the DB Name
45
+ # Each entry is a word => proc mapping.
46
+ #
47
+ # Noun procs are passed all vn_phrases for the sentence
48
+ # (these are constructed by parse_sentence)
49
+ #
50
+ # The Verb procs are passed the evaluated results of the Noun procs
51
+ # in its Verb-Noun phrase (as sequential arguments)
52
+ #
53
+ # For example, if the phrase is "live well and flourish"
54
+ # Then (assuming the
55
+ #
56
+ # Although EngTagger extracts POS for the words in a sentence,
57
+ # these classifications are context-dependent.
58
+ #
59
+ # For this reason, words are also looked up using WordPos.
60
+ # Only umambiguous words are added to the grammar.
61
+ #
62
+ def log_sentence sentence
63
+ sentence_cache.get_or_set(sentence) do
64
+ engtagger_lookup(sentence).map do |word, pos|
65
+ finalize_pos(word, pos)
66
+ end
67
+ end
68
+ end
69
+
70
+ # Compare WordPos and Engtagger results and save to proc if found
71
+ # only prioritize Engtagger if WordPos is missing
72
+ def finalize_pos word, pos
73
+ final_pos = word_pos_cache.get_or_set(word) do
74
+ doublecheck = wordpos_lookup(word)
75
+ if ['noun', 'verb'].none? &doublecheck.m(:include?)
76
+ finalize_engtagger_pos(pos)
77
+ else
78
+ finalize_wordpos_pos(pos)
79
+ end
80
+ end
81
+ save_proc(final_pos, word)
82
+ { word: word, pos: [final_pos] }
83
+ end
84
+
85
+ def finalize_engtagger_pos(pos)
86
+ # If the WordPos definition isn't found, then there's no ambiguity
87
+ if pos.include?("noun")
88
+ "noun"
89
+ elsif pos.include?("verb")
90
+ "verb"
91
+ else
92
+ "unknown"
93
+ end
94
+ end
95
+
96
+ def finalize_wordpos_pos(pos)
97
+ # WordPos returns ambiguous results.
98
+ # Only unambiguous words are selected.
99
+ # I.e. a noun|verb isn't saved.
100
+ # It must be solely noun or verb.
101
+ if pos.include?("noun") && !pos.include?("verb")
102
+ "noun"
103
+ elsif pos.include?("verb") && !pos.include?("noun")
104
+ "verb"
105
+ else
106
+ "unknown"
107
+ end
108
+ end
109
+
110
+ def save_proc(final_pos, word)
111
+ if final_pos.include?("noun")
112
+ save_noun_proc(word)
113
+ elsif final_pos.include?("verb")
114
+ save_verb_proc word
115
+ end
116
+ end
117
+
118
+ def save_noun_proc word
119
+ NounLexicon.set word.to_sym, default_noun_proc_string(word)
120
+ end
121
+
122
+ def save_verb_proc word
123
+ VerbLexicon.set word.to_sym, default_verb_proc_string(word)
124
+ end
125
+
126
+ def default_noun_proc_string(word)
127
+ <<-Ruby.strip_heredoc
128
+ ->(vn_phrases){ "#{word}" }
129
+ Ruby
130
+ end
131
+
132
+ def default_verb_proc_string(word)
133
+ <<-Ruby.strip_heredoc
134
+ ->(*nouns){ "#{word} \#{nouns.join " "}" }
135
+ Ruby
136
+ end
137
+
138
+ # This uses EngTagger to analyze a sentence
139
+ # The results will not be ambiguous; in this method's results,
140
+ # a given word with either be 'verb', 'noun', or 'unknown'.
141
+ def engtagger_lookup sentence
142
+ nouns, verbs = tag_sentence(sentence)
143
+ sentence.words.graph do |word|
144
+ pos = case word
145
+ when ->(w){ verbs.include? w }
146
+ "verb"
147
+ when ->(w){ nouns.include? w }
148
+ "noun"
149
+ else
150
+ "unknown"
151
+ end
152
+ [word, [pos]]
153
+ end
154
+ end
155
+
156
+ # Engtagger evaluates POS in the context of a sentence
157
+ # So from that perspective, only entire sentences can be cached
158
+ def sentence_cache
159
+ @sentence_cache ||= Gemmy::Components::Cache.new "sentence_pos"
160
+ end
161
+
162
+ # This cache reduces the call rate of the WordPos shell util
163
+ # by caching the POS for individual words.
164
+ def word_pos_cache
165
+ @pos_cache ||= Gemmy::Components::Cache.new("word_pos")
166
+ end
167
+
168
+ def wordpos_lookup(word)
169
+ default_result = ['unknown']
170
+ result = []
171
+ word = word.strip.gsub(/[^a-zA-z]/, '')
172
+ return default_result if word.empty?
173
+ pos_response = JSON.parse `coffee -e "#{Gemmy::Coffee}" pos #{word}`
174
+ result << "verb" unless pos_response["verbs"].empty?
175
+ result << "noun" unless pos_response["nouns"].empty?
176
+ result.empty? ? default_result : result
177
+ end
178
+
179
+ end
@@ -0,0 +1,7 @@
1
+ module Gemmy::Components::WordSpeaker
2
+ Gemmy.patches.each { |x| using x }
3
+ def speak_sentence(sentence)
4
+ byebug
5
+ false
6
+ end
7
+ end
@@ -0,0 +1,14 @@
1
+ module Gemmy::Constants
2
+ HUNDRED =
3
+ 10 ** 2
4
+ THOUSAND =
5
+ 10 ** 3
6
+ MILLION =
7
+ 10 ** 6
8
+ BILLION =
9
+ 10 ** 9
10
+ TRILLION =
11
+ 10 ** 12
12
+ QUADRILLION =
13
+ 10 ** 15
14
+ end
@@ -28,6 +28,57 @@ module Gemmy::Patches::ArrayPatch
28
28
 
29
29
  module InstanceMethods
30
30
 
31
+ module Reject
32
+ # make it an alias for reject(&:blank?) if no block given
33
+ def reject(&blk)
34
+ blk ? super : reject(&:blank?)
35
+ end
36
+ end
37
+
38
+ module Cut
39
+ # another alias for compact
40
+ def cut
41
+ compact
42
+ end
43
+ end
44
+
45
+
46
+ module MethodMissing
47
+ # Tries to forward methods to enumerator
48
+ def method_missing(fn, &blk)
49
+ enum = to_enum
50
+ if enum.respond_to?(fn)
51
+ blk ? enum.send(fn, &blk) : enum.send(fn)
52
+ else
53
+ super
54
+ end
55
+ end
56
+ end
57
+
58
+ module RunCommands
59
+ # Part of the Nlp API
60
+ # Example:
61
+ # include Gemmy::Components::Nlp
62
+ # parse_sentence("A sentence").run_commands
63
+ #
64
+ # Under the hood, parse_sentence is creating procs in the db
65
+ # These are evaluated here
66
+ #
67
+ def run_commands
68
+ _eval_noun = Gemmy.patch("string/i/eval_noun")
69
+ .method(:_eval_noun)
70
+ return self.flat_map do |cmds|
71
+ cmds&.map do |cmd|
72
+ eval(VerbLexicon.get cmd[:verb].to_sym).call(*(
73
+ cmd[:nouns]&.map do |noun|
74
+ _eval_noun.call(noun, self)
75
+ end
76
+ ).to_a.compact)
77
+ end
78
+ end.compact
79
+ end
80
+ end
81
+
31
82
  module Exclude
32
83
  # facets
33
84
  # the opposite of include
@@ -197,6 +248,8 @@ module Gemmy::Patches::ArrayPatch
197
248
  alias rangify arrange
198
249
  end
199
250
 
251
+
252
+
200
253
  module AnyNot
201
254
  # checks if any of the results of an array do not respond truthily
202
255
  # to a block
@@ -2,6 +2,34 @@ module Gemmy::Patches::EnumeratorPatch
2
2
  module ClassMethods
3
3
  end
4
4
  module InstanceMethods
5
+
6
+ # Facets
7
+ # Similar to map by (array => hash)
8
+ # but values are not wrapped in arrays
9
+ # iteration return val is [key, val]
10
+ module Graph
11
+ def graph(&yld)
12
+ if yld
13
+ h = {}
14
+ each do |*kv|
15
+ r = yld[*kv]
16
+ case r
17
+ when Hash
18
+ nk, nv = *r.to_a[0]
19
+ when Range
20
+ nk, nv = r.first, r.last
21
+ else
22
+ nk, nv = *r
23
+ end
24
+ h[nk] = nv
25
+ end
26
+ h
27
+ else
28
+ Enumerator.new(self,:graph)
29
+ end
30
+ end
31
+ end
32
+
5
33
  module MapBy
6
34
  using CF::Enumerable::MapBy
7
35
  # maps to hash
@@ -19,5 +47,16 @@ module Gemmy::Patches::EnumeratorPatch
19
47
  clone.map_to klass
20
48
  end
21
49
  end
50
+
51
+ module Frequencies
52
+ # taken from powerpack
53
+ # maps each element in the enum to it's num occurrances
54
+ def frequencies
55
+ each_with_object(Hash.new(0)) { |e, a| a[e] += 1 }
56
+ end
57
+ end
58
+
59
+
60
+
22
61
  end
23
62
  end
@@ -205,10 +205,9 @@ module Gemmy::Patches::HashPatch
205
205
  #
206
206
  module Bury
207
207
  def bury *args
208
- Gemmy::Patches::HashPatch::InstanceMethods::Bury._bury(self, *args)
208
+ Gemmy.patch("hash/i/bury")._bury self, *args
209
209
  end
210
210
  # The bury method, taking the input hash as a parameter
211
- # Used by the Hash#bury instance method
212
211
  def self._bury(caller_hash, *args)
213
212
  if args.count < 2
214
213
  raise ArgumentError.new("2 or more arguments required")
@@ -266,17 +265,22 @@ module Gemmy::Patches::HashPatch
266
265
  module Persisted
267
266
  def persisted(path)
268
267
  require 'yaml/store'
269
- autovivified = Gemmy::Patches::HashPatch::InstanceMethods::Autovivified.method(:_autovivified)
268
+ autovivified = Gemmy.patch("hash/i/autovivified")\
269
+ .method(:_autovivified)
270
270
  autovivified.call(self).tap do |hash|
271
271
  hash.instance_exec do
272
- @db = YAML::Store.new path
273
- @db.transaction do
274
- @db[:data] = autovivified.call({})
272
+ @store = YAML::Store.new path
273
+ @store.transaction do
274
+ @store[:data] ||= autovivified.call({})
275
+ @store[:data].each { |k,v| self[k] = v.deep_dup }
275
276
  end
276
277
  end
277
278
  hash.extend Gemmy::Patches::HashPatch::PersistedHash
278
279
  end
279
280
  end
281
+ def db
282
+ @store
283
+ end
280
284
  end
281
285
 
282
286
  end # end instance methods
@@ -284,17 +288,25 @@ module Gemmy::Patches::HashPatch
284
288
  # Helper methods for the persistence patch
285
289
  #
286
290
  module PersistedHash
287
- def get(*keys, disk: false)
288
- disk ? @db.transaction { @db[:data].dig(*keys) } : dig(*keys)
291
+ def get(*keys, disk: true)
292
+ disk ? @store.transaction { @store[:data].dig(*keys) } : dig(*keys)
289
293
  end
290
294
  def set(*keys, val)
291
295
  bury = Gemmy::Patches::HashPatch::InstanceMethods::Bury.method(:_bury)
292
296
  bury.call(self, *keys, val)
293
- @db.transaction do
294
- bury.call(@db[:data], *(keys + [val]))
297
+ @store.transaction do
298
+ bury.call(@store[:data], *(keys + [val]))
295
299
  end
296
300
  val
297
301
  end
302
+ def data
303
+ @store.transaction { @store[:data] }
304
+ end
305
+ def clear
306
+ autovivified = Gemmy.patch("hash/i/autovivified")\
307
+ .method(:_autovivified)
308
+ @store.transaction { @store[:data] = autovivified.call({}) }
309
+ end
298
310
  end
299
311
 
300
312
  end
@@ -27,6 +27,43 @@ module Gemmy::Patches::IntegerPatch
27
27
 
28
28
  module InstanceMethods
29
29
 
30
+ module Hundred
31
+ # from powerpack
32
+ def hundred
33
+ self * Gemmy.const("HUNDRED")
34
+ end
35
+ end
36
+ module Thousand
37
+ # from powerpack
38
+ def thousand
39
+ self * Gemmy.const("THOUSAND")
40
+ end
41
+ end
42
+ module Million
43
+ # from powerpack
44
+ def million
45
+ self * Gemmy.const("MILLION")
46
+ end
47
+ end
48
+ module Billion
49
+ # from powerpack
50
+ def billion
51
+ self * Gemmy.const("BILLION")
52
+ end
53
+ end
54
+ module Trillion
55
+ # from powerpack
56
+ def trillion
57
+ self * Gemmy.const("TRILLION")
58
+ end
59
+ end
60
+ module Quadrillion
61
+ # from powerpack
62
+ def quadrillion
63
+ self * Gemmy.const("QUADRILLION")
64
+ end
65
+ end
66
+
30
67
  module Factorial
31
68
  # facets
32
69
  def factorial
@@ -14,7 +14,48 @@ module Gemmy::Patches::ObjectPatch
14
14
 
15
15
  module InstanceMethods
16
16
 
17
- module Iteself
17
+ module Home
18
+ # the $HOME dir, aka ~
19
+ def home
20
+ `echo $HOME`.chomp
21
+ end
22
+ end
23
+
24
+ module ObjectState
25
+ # class StateExample
26
+ # attr_reader :a, :b
27
+ # def initialize(a,b)
28
+ # @a, @b = a, b
29
+ # end
30
+ # end
31
+
32
+ # obj = StateExample.new(1,2)
33
+ # obj.a #=> 1
34
+ # obj.b #=> 2
35
+
36
+ # obj.object_state #=> {:a=>1, :b=>2}
37
+
38
+ # obj.object_state(:a=>3, :b=>4)
39
+ # obj.a #=> 3
40
+ # obj.b #=> 4
41
+ def object_state(data=nil)
42
+ if data
43
+ instance_variables.each do |iv|
44
+ name = iv.to_s.sub(/^[@]/, '').to_sym
45
+ instance_variable_set(iv, data[name])
46
+ end
47
+ else
48
+ data = {}
49
+ instance_variables.each do |iv|
50
+ name = iv.to_s.sub(/^[@]/, '').to_sym
51
+ data[name] = instance_variable_get(iv)
52
+ end
53
+ data
54
+ end
55
+ end
56
+ end
57
+
58
+ module Itself
18
59
  # facets
19
60
  def itself
20
61
  def itself
@@ -7,6 +7,53 @@ module Gemmy::Patches::StringPatch
7
7
 
8
8
  module InstanceMethods
9
9
 
10
+ module NlpSanitize
11
+ def nlp_sanitize
12
+ Gemmy.patch("string/i/alpha")
13
+ ._alpha(self)
14
+ .downcase
15
+ .strip
16
+ .chomp
17
+ end
18
+ end
19
+
20
+ module Alpha
21
+ def self._alpha(string, bang: false, strip_whitespace: false)
22
+ fn = bang ? :gsub! : :gsub
23
+ regex = /[^a-zA-Z#{'\s' unless strip_whitespace}]/
24
+ string.send fn, regex, ''
25
+ end
26
+ def alpha!(opts={})
27
+ Gemmy.patch("string/i/alpha")._alpha(
28
+ self,
29
+ opts.merge(bang: true)
30
+ )
31
+ end
32
+ # Gsub non-alphabetical characters
33
+ def alpha(opts={})
34
+ Gemmy.patch("string/i/alpha")._alpha(
35
+ self,
36
+ opts
37
+ )
38
+ end
39
+ end
40
+
41
+ module TempfilePath
42
+ # Creates a tempfile containing a string and returns its path
43
+ def tempfile_path
44
+ Tempfile.new.tap { |t| t.write(self); t.close }.path
45
+ end
46
+ end
47
+
48
+ module EvalNoun
49
+ def eval_noun(commands=[])
50
+ Gemmy.patches("string/i/eval_noun")._eval_noun self, commands
51
+ end
52
+ def self._eval_noun(noun, commands=[])
53
+ eval(NounLexicon.get(noun.to_sym)).call(commands)
54
+ end
55
+ end
56
+
10
57
  module Words
11
58
  # facets
12
59
  def words
data/lib/gemmy/tests.rb CHANGED
@@ -10,6 +10,7 @@ module Gemmy::Tests
10
10
 
11
11
  def self.run_test_class(klass)
12
12
  klass.run
13
+ # Unless a test raises an error, it's been run
13
14
  puts "#{klass} passed".green
14
15
  end
15
16
 
data/lib/gemmy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Gemmy
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gemmyrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - max pleaner
@@ -100,6 +100,76 @@ dependencies:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
102
  version: 1.9.0
103
+ - !ruby/object:Gem::Dependency
104
+ name: sentence_interpreter
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: 0.0.7
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: 0.0.7
117
+ - !ruby/object:Gem::Dependency
118
+ name: awesome_print
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: 1.7.0
124
+ type: :runtime
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: 1.7.0
131
+ - !ruby/object:Gem::Dependency
132
+ name: engtagger
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: 0.2.1
138
+ type: :runtime
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: 0.2.1
145
+ - !ruby/object:Gem::Dependency
146
+ name: minitest
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: 5.10.1
152
+ type: :runtime
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: 5.10.1
159
+ - !ruby/object:Gem::Dependency
160
+ name: odyssey
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: 0.2.0
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: 0.2.0
103
173
  description: ''
104
174
  email: maxpleaner@gmail.com
105
175
  executables:
@@ -111,8 +181,13 @@ files:
111
181
  - bin/gemmy
112
182
  - lib/gemmy.rb
113
183
  - lib/gemmy/cli.rb
184
+ - lib/gemmy/coffee.rb
114
185
  - lib/gemmy/components.rb
186
+ - lib/gemmy/components/cache.rb
115
187
  - lib/gemmy/components/dynamic_steps.rb
188
+ - lib/gemmy/components/nlp.rb
189
+ - lib/gemmy/components/word_speaker.rb
190
+ - lib/gemmy/constants.rb
116
191
  - lib/gemmy/patches.rb
117
192
  - lib/gemmy/patches/array_patch.rb
118
193
  - lib/gemmy/patches/class_patch.rb