bayesball 0.1.1 → 0.2.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 478528e5894a3dedc57435782136dae425e36c49
4
+ data.tar.gz: 2c6b799680658bb607031eee0b4ca985eff6f14a
5
+ SHA512:
6
+ metadata.gz: f28d402de88b753a1fe012e5e7e3cabdf59a8c001d6154fcd02d237fe1d66462922e50dffd9f18cb6900d92d0be4d6dd5a98c148d5c0686a4e6d11651fc7c2cb
7
+ data.tar.gz: 804e9ebdc8a73a5fe741482ffa2282624227530b136fac9a1faf52bee0b0f0e4dde152e163a104b9d47f267a44171d97d4d25a63200606aea1d31899cd519bf7
data/Gemfile CHANGED
@@ -3,8 +3,9 @@ source 'https://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  group :development do
6
- gem 'guard-minitest'
7
6
  gem 'rake'
8
7
  gem 'mongo'
9
8
  gem 'bson_ext'
9
+ gem 'sequel'
10
+ gem 'sqlite3'
10
11
  end
@@ -1,5 +1,6 @@
1
1
  module Bayesball
2
2
  module Persistence
3
3
  autoload :Mongo, 'bayesball/persistence/mongo'
4
+ autoload :Sequel, 'bayesball/persistence/sequel'
4
5
  end
5
6
  end
@@ -0,0 +1,38 @@
1
+ module Bayesball
2
+ module Persistence
3
+ class Sequel
4
+ include Enumerable
5
+
6
+ attr_reader :dataset
7
+ def initialize(dataset)
8
+ @dataset = dataset
9
+ end
10
+
11
+ def empty?
12
+ @collection.count == 0
13
+ end
14
+
15
+ def [](key)
16
+ dataset.where(bucket: key).to_hash(:word, :count)
17
+ end
18
+
19
+ def []=(key, value)
20
+ dataset.where(bucket: key).delete
21
+ value.each do |word, count|
22
+ dataset.insert word: word, count: count, bucket: key
23
+ end
24
+ end
25
+
26
+ def each
27
+ if block_given?
28
+ dataset.to_a.group_by{|i| i[:bucket] }.each do |bucket, group|
29
+ counts = Hash[group.map{|g| [g[:word], g[:count]]}]
30
+ yield [bucket, counts]
31
+ end
32
+ else
33
+ self.to_enum
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,3 +1,3 @@
1
1
  module Bayesball
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ module Bayesball
4
+ module Persistence
5
+ describe Sequel do
6
+ let(:dataset) { SEQUEL_DB[:bayesball_buckets] }
7
+ let(:persistence) { Sequel.new(dataset) }
8
+
9
+ it 'should return counts' do
10
+ persistence['truck'].wont_be_nil
11
+ end
12
+
13
+ it 'should set counts' do
14
+ persistence['car'] = {'x' => 3, 'y' => 2}
15
+ persistence['car'].must_equal 'x' => 3, 'y' => 2
16
+ end
17
+
18
+ it 'should reduce' do
19
+ persistence['duck'] = {'x' => 8, 'y' => 5}
20
+ persistence['cat'] = {'x' => 7, 'y' => 1}
21
+ persistence['dog'] = {'x' => 2, 'y' => 2}
22
+
23
+ result = persistence.reduce({}) do |memo, (category, counts)|
24
+ total = counts.values.reduce(:+).to_f
25
+ memo[category] = total
26
+ memo
27
+ end
28
+ result['duck'].must_equal 13
29
+ result['cat'].must_equal 8
30
+ result['dog'].must_equal 4
31
+ end
32
+
33
+ it 'should return enumerator from each' do
34
+ persistence.each.class.must_equal Enumerator
35
+ end
36
+ end
37
+ end
38
+ end
data/spec/spec_helper.rb CHANGED
@@ -7,3 +7,14 @@ require 'minitest/pride'
7
7
  require 'minitest/autorun'
8
8
 
9
9
  Bundler.require :development
10
+
11
+ SEQUEL_DB = Sequel.connect 'sqlite:///'
12
+
13
+ SEQUEL_DB.create_table :bayesball_buckets do
14
+ column :bucket, String, null: false
15
+ column :word, String, null: false
16
+ column :count, Integer, null: false
17
+
18
+ index :bucket
19
+ index [:bucket, :word], unique: true
20
+ end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bayesball
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
5
- prerelease:
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jason Staten
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-04-13 00:00:00.000000000 Z
11
+ date: 2013-08-13 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: A bayes classifier
15
14
  email:
@@ -29,42 +28,38 @@ files:
29
28
  - lib/bayesball/classifier.rb
30
29
  - lib/bayesball/persistence.rb
31
30
  - lib/bayesball/persistence/mongo.rb
31
+ - lib/bayesball/persistence/sequel.rb
32
32
  - lib/bayesball/stopwords.txt
33
33
  - lib/bayesball/version.rb
34
34
  - spec/bayesball/classifier_spec.rb
35
35
  - spec/bayesball/persistence/mongo_spec.rb
36
+ - spec/bayesball/persistence/sequel_spec.rb
36
37
  - spec/spec_helper.rb
37
38
  homepage: ''
38
39
  licenses: []
40
+ metadata: {}
39
41
  post_install_message:
40
42
  rdoc_options: []
41
43
  require_paths:
42
44
  - lib
43
45
  required_ruby_version: !ruby/object:Gem::Requirement
44
- none: false
45
46
  requirements:
46
- - - ! '>='
47
+ - - '>='
47
48
  - !ruby/object:Gem::Version
48
49
  version: '0'
49
- segments:
50
- - 0
51
- hash: -4130593485830818059
52
50
  required_rubygems_version: !ruby/object:Gem::Requirement
53
- none: false
54
51
  requirements:
55
- - - ! '>='
52
+ - - '>='
56
53
  - !ruby/object:Gem::Version
57
54
  version: '0'
58
- segments:
59
- - 0
60
- hash: -4130593485830818059
61
55
  requirements: []
62
56
  rubyforge_project:
63
- rubygems_version: 1.8.18
57
+ rubygems_version: 2.0.3
64
58
  signing_key:
65
- specification_version: 3
59
+ specification_version: 4
66
60
  summary: A bayes classifier
67
61
  test_files:
68
62
  - spec/bayesball/classifier_spec.rb
69
63
  - spec/bayesball/persistence/mongo_spec.rb
64
+ - spec/bayesball/persistence/sequel_spec.rb
70
65
  - spec/spec_helper.rb