megahal 0.4.0 → 0.5.0

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: af7cea408577bbc60da09d9ea222afc32fb0624c
4
- data.tar.gz: f27c277b75969c4a7bcd94fe6a0de4c56fa68988
3
+ metadata.gz: 3f74c0203aa8d641b0ec819c3c780fe7d653d0f0
4
+ data.tar.gz: a371544c8627a102e7f1d97747504a3b2193ee6b
5
5
  SHA512:
6
- metadata.gz: f62986be611257ee349cbc4f48d4e4e170ba94c0853240f592bfdcae63601b7826ac6764391c06085730885e1c415b2040fe0b6d78e7711c1d92be29f290c491
7
- data.tar.gz: c1ac5d103372d12a53c8e4d3d8173537fba9730241fc1f0b65cd8db3d99e8e04a083507c077b89e8a6a3b02017fc2c9f7f75d1f86433f0c567020d7e038808f8
6
+ metadata.gz: d28031463298e5710e1d7cf2a5c330421354e323ace1860159e605e07b8fe9967306de5e367b57fd41baf607317a6c22707ce1cc9510a819c51b660ba6efdcc5
7
+ data.tar.gz: 26d85479e320a9045627ef795dfd0a9268a0ed0a7a6ffa9eaf56ee51de7b1158bdaa094cc38da915ae75131571c3864240a26a4e6c342cf72818f11d13442a89
data/Gemfile CHANGED
@@ -2,7 +2,6 @@ source 'https://rubygems.org'
2
2
 
3
3
  gem 'sooth', '~> 1.0'
4
4
  gem 'highline', '~> 1.6'
5
- gem 'hodel_3000_compliant_logger', '~> 0.1'
6
5
  gem 'ruby-progressbar', '~> 1.7'
7
6
  gem 'rubyzip', '~> 1.1'
8
7
  gem 'cld', '~> 0.7'
data/Gemfile.lock CHANGED
@@ -29,7 +29,6 @@ GEM
29
29
  oauth2
30
30
  hashie (3.3.2)
31
31
  highline (1.6.21)
32
- hodel_3000_compliant_logger (0.1.1)
33
32
  jeweler (2.0.1)
34
33
  builder
35
34
  bundler (>= 1.0)
@@ -89,7 +88,6 @@ DEPENDENCIES
89
88
  byebug (~> 3.5)
90
89
  cld (~> 0.7)
91
90
  highline (~> 1.6)
92
- hodel_3000_compliant_logger (~> 0.1)
93
91
  jeweler (~> 2.0)
94
92
  rdoc (~> 4.1)
95
93
  rspec (~> 3.1)
data/README.md CHANGED
@@ -2,7 +2,6 @@
2
2
  [![Gem Version](https://badge.fury.io/rb/megahal.svg)](http://badge.fury.io/rb/megahal)
3
3
  [![Dependency Status](https://gemnasium.com/jasonhutchens/megahal.png)](https://gemnasium.com/jasonhutchens/megahal)
4
4
  [![Build Status](https://semaphoreapp.com/api/v1/projects/6889bf33-e547-4200-a4fb-66b339a83d82/307128/shields_badge.svg)](https://semaphoreapp.com/jasonhutchens/megahal)
5
- [![Code Climate](https://codeclimate.com/github/jasonhutchens/megahal.png)](https://codeclimate.com/github/jasonhutchens/megahal)
6
5
 
7
6
  MegaHAL
8
7
  =======
@@ -11,7 +10,7 @@ MegaHAL is a learning chatterbot.
11
10
 
12
11
  You can run it as a command-line application, or embed it in your own
13
12
  application and make calls to it via a simple
14
- [API](http://rubydoc.info/github/jasonhutchens/megahal/master/frames).
13
+ [API](http://www.rubydoc.info/gems/megahal/).
15
14
 
16
15
  It is built on top of [Sooth](https://github.com/jasonhutchens/sooth), a simple
17
16
  stochastic predictive model.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.5.0
data/bin/megahal CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  require 'megahal'
4
4
  require 'highline/import'
5
- require 'hodel_3000_compliant_logger'
6
5
  require 'ruby-progressbar'
6
+ require 'logger'
7
7
 
8
8
  say("<%= color('" + <<-EOS + "', BOLD) %>")
9
9
  +----------------------------------------------------------+
@@ -21,11 +21,12 @@ EOS
21
21
 
22
22
  class MegaLog
23
23
  def initialize
24
- @logger = Hodel3000CompliantLogger.new("megahal.log")
25
- @logger.info "MegaHAL Started"
24
+ @logger = Logger.new("megahal.log")
25
+ @logger.formatter = proc { |_, _, _, msg| msg + "\n" }
26
+ @logger.info "MegaHALv10\nStart at: [#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}]"
26
27
  end
27
28
  def exit
28
- @logger.info "MegaHAL Stopped"
29
+ @logger.info "Stop at: [#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}]"
29
30
  end
30
31
  def error(message)
31
32
  @logger.error "(#{message})"
@@ -116,12 +116,12 @@ class MegaHAL
116
116
  dictionary: @dictionary
117
117
  }.to_json)
118
118
  end
119
- bar.increment
119
+ bar.increment unless bar.nil?
120
120
  [:seed, :fore, :back, :case, :punc].each do |name|
121
121
  tmp = _get_tmp_filename(name)
122
122
  instance_variable_get("@#{name}").save(tmp)
123
123
  zipfile.add(name, tmp)
124
- bar.increment
124
+ bar.increment unless bar.nil?
125
125
  end
126
126
  end
127
127
  end
@@ -137,12 +137,12 @@ class MegaHAL
137
137
  raise "bad version" unless data['version'] == "MH10"
138
138
  @learning = data['learning']
139
139
  @dictionary = data['dictionary']
140
- bar.increment
140
+ bar.increment unless bar.nil?
141
141
  [:seed, :fore, :back, :case, :punc].each do |name|
142
142
  tmp = _get_tmp_filename(name)
143
143
  zipfile.find_entry(name.to_s).extract(tmp)
144
144
  instance_variable_get("@#{name}").load(tmp)
145
- bar.increment
145
+ bar.increment unless bar.nil?
146
146
  end
147
147
  end
148
148
  end
data/megahal.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: megahal 0.4.0 ruby lib
5
+ # stub: megahal 0.5.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "megahal"
9
- s.version = "0.4.0"
9
+ s.version = "0.5.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
@@ -42,7 +42,9 @@ Gem::Specification.new do |s|
42
42
  "lib/megahal/personalities/sherlock.rb",
43
43
  "lib/megahal/personalities/startrek.rb",
44
44
  "lib/megahal/personalities/starwars.rb",
45
- "megahal.gemspec"
45
+ "megahal.gemspec",
46
+ "spec/megahal_spec.rb",
47
+ "spec/spec_helper.rb"
46
48
  ]
47
49
  s.homepage = "http://github.com/jasonhutchens/megahal"
48
50
  s.licenses = ["UNLICENSE"]
@@ -56,7 +58,6 @@ Gem::Specification.new do |s|
56
58
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
57
59
  s.add_runtime_dependency(%q<sooth>, ["~> 1.0"])
58
60
  s.add_runtime_dependency(%q<highline>, ["~> 1.6"])
59
- s.add_runtime_dependency(%q<hodel_3000_compliant_logger>, ["~> 0.1"])
60
61
  s.add_runtime_dependency(%q<ruby-progressbar>, ["~> 1.7"])
61
62
  s.add_runtime_dependency(%q<rubyzip>, ["~> 1.1"])
62
63
  s.add_runtime_dependency(%q<cld>, ["~> 0.7"])
@@ -70,7 +71,6 @@ Gem::Specification.new do |s|
70
71
  else
71
72
  s.add_dependency(%q<sooth>, ["~> 1.0"])
72
73
  s.add_dependency(%q<highline>, ["~> 1.6"])
73
- s.add_dependency(%q<hodel_3000_compliant_logger>, ["~> 0.1"])
74
74
  s.add_dependency(%q<ruby-progressbar>, ["~> 1.7"])
75
75
  s.add_dependency(%q<rubyzip>, ["~> 1.1"])
76
76
  s.add_dependency(%q<cld>, ["~> 0.7"])
@@ -85,7 +85,6 @@ Gem::Specification.new do |s|
85
85
  else
86
86
  s.add_dependency(%q<sooth>, ["~> 1.0"])
87
87
  s.add_dependency(%q<highline>, ["~> 1.6"])
88
- s.add_dependency(%q<hodel_3000_compliant_logger>, ["~> 0.1"])
89
88
  s.add_dependency(%q<ruby-progressbar>, ["~> 1.7"])
90
89
  s.add_dependency(%q<rubyzip>, ["~> 1.1"])
91
90
  s.add_dependency(%q<cld>, ["~> 0.7"])
@@ -0,0 +1,90 @@
1
+ require 'tempfile'
2
+
3
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
4
+
5
+ describe MegaHAL do
6
+
7
+ let(:megahal) { MegaHAL.new }
8
+
9
+ describe "#list" do
10
+ it "returns an array of all personalities" do
11
+ end
12
+ end
13
+
14
+ describe "#inspect" do
15
+ it "doesn't return a massive string" do
16
+ expect(megahal.inspect.length).to be < 100
17
+ expect(megahal.inspect).to match(/MegaHAL/)
18
+ end
19
+ end
20
+
21
+ describe "#clear" do
22
+ it "clears all internal state" do
23
+ expect(megahal.instance_variables.length).to eq(7)
24
+ megahal.clear
25
+ megahal.reply("one two three four five")
26
+ expect(megahal.instance_variable_get(:@dictionary).length).to eq(15)
27
+ expect(megahal.instance_variable_get(:@seed).count([1, 2])).to be > 0
28
+ expect(megahal.instance_variable_get(:@fore).count([1, 1])).to be > 0
29
+ expect(megahal.instance_variable_get(:@back).count([1, 1])).to be > 0
30
+ expect(megahal.instance_variable_get(:@case).count([1, 5])).to be > 0
31
+ expect(megahal.instance_variable_get(:@punc).count([1, 10])).to be > 0
32
+ megahal.clear
33
+ expect(megahal.instance_variable_get(:@dictionary).length).to eq(3)
34
+ expect(megahal.instance_variable_get(:@seed).count([0, 0])).to eq(0)
35
+ expect(megahal.instance_variable_get(:@fore).count([1, 1])).to eq(0)
36
+ expect(megahal.instance_variable_get(:@back).count([1, 1])).to eq(0)
37
+ expect(megahal.instance_variable_get(:@case).count([1, 5])).to eq(0)
38
+ expect(megahal.instance_variable_get(:@punc).count([1, 10])).to eq(0)
39
+ end
40
+ end
41
+
42
+ describe "#become" do
43
+ it "switches to another personality" do
44
+ expect(megahal.reply("holmes")).to_not match(/watson/i)
45
+ megahal.become(:sherlock)
46
+ expect(megahal.reply("holmes")).to match(/watson/i)
47
+ end
48
+ end
49
+
50
+ describe "#reply" do
51
+ it "swaps keywords" do
52
+ expect(megahal.reply("why")).to match(/because/i)
53
+ end
54
+ end
55
+
56
+ describe "#save" do
57
+ it "saves the brain" do
58
+ begin
59
+ file = Tempfile.new('megahal_spec')
60
+ megahal.clear
61
+ megahal.reply("one two three four five")
62
+ megahal.save(file.path)
63
+ megahal.clear
64
+ expect(megahal.reply("")).to eq("...")
65
+ megahal.load(file.path)
66
+ expect(megahal.reply("")).to eq("one two three four five")
67
+ ensure
68
+ file.close
69
+ file.unlink
70
+ end
71
+ end
72
+ end
73
+
74
+ describe "#train" do
75
+ it "learns from a text file" do
76
+ megahal.clear
77
+ begin
78
+ file = Tempfile.new('megahal_spec')
79
+ file.write("one two three four five")
80
+ file.close
81
+ expect(megahal.reply("")).to eq("...")
82
+ megahal.train(file.path)
83
+ expect(megahal.reply("")).to eq("one two three four five")
84
+ ensure
85
+ file.unlink
86
+ end
87
+ end
88
+ end
89
+
90
+ end
@@ -0,0 +1,30 @@
1
+ require 'simplecov'
2
+
3
+ module SimpleCov::Configuration
4
+ def clean_filters
5
+ @filters = []
6
+ end
7
+ end
8
+
9
+ SimpleCov.configure do
10
+ clean_filters
11
+ load_profile 'test_frameworks'
12
+ end
13
+
14
+ ENV["COVERAGE"] && SimpleCov.start do
15
+ add_filter "/.rvm/"
16
+ end
17
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
18
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
19
+
20
+ require 'rspec'
21
+
22
+ require 'megahal'
23
+
24
+ # Requires supporting files with custom matchers and macros, etc,
25
+ # in ./support/ and its subdirectories.
26
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
27
+
28
+ RSpec.configure do |config|
29
+
30
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: megahal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Hutchens
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.6'
41
- - !ruby/object:Gem::Dependency
42
- name: hodel_3000_compliant_logger
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '0.1'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '0.1'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: ruby-progressbar
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -224,6 +210,8 @@ files:
224
210
  - lib/megahal/personalities/startrek.rb
225
211
  - lib/megahal/personalities/starwars.rb
226
212
  - megahal.gemspec
213
+ - spec/megahal_spec.rb
214
+ - spec/spec_helper.rb
227
215
  homepage: http://github.com/jasonhutchens/megahal
228
216
  licenses:
229
217
  - UNLICENSE