seasy 0.0.4 → 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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.6
@@ -1,2 +1,2 @@
1
- require 'fragmentizer'
2
- require 'index'
1
+ require 'seasy/fragmentizer'
2
+ require 'seasy/index'
@@ -38,19 +38,11 @@ module Seasy
38
38
  @@indices[stringed_name]
39
39
  end
40
40
 
41
- def add searchee, target
42
- save target, fragmentize( searchee )
41
+ def add searchee, target, options = {}
42
+ options[:source] = target if options[:source].nil?
43
+ save target, fragmentize( searchee ), options
43
44
  end
44
45
 
45
- def fragmentize searchee
46
- f = Fragmentizer.new
47
- f.fragmentize searchee
48
- end
49
-
50
- def save target, weights
51
- @storage.save target, weights
52
- end
53
-
54
46
  def search query
55
47
  @storage.search query
56
48
  end
@@ -58,6 +50,22 @@ module Seasy
58
50
  def clear
59
51
  @storage.clear
60
52
  end
53
+
54
+ def remove target
55
+ @storage.remove target
56
+ end
57
+
58
+ private
59
+
60
+ def fragmentize searchee
61
+ f = Fragmentizer.new
62
+ f.fragmentize searchee
63
+ end
64
+
65
+ def save target, weights, options
66
+ @storage.save target, weights, options
67
+ end
68
+
61
69
  end
62
70
 
63
71
  # a store got search queries as keys and an array of
@@ -65,12 +73,17 @@ module Seasy
65
73
  class InMemoryStorage
66
74
  def initialize
67
75
  @store = {}
76
+ @sources = {}
68
77
  end
69
78
 
70
79
  # target is a simple value - we care not what
71
80
  # weights are all fragments (indices) and their weight
72
81
  # eg. { "aba" => 1, "ab" => 1, "ba" => 1, "b" => 1, "a" => 2 } for the string "aba"
73
- def save target, weights
82
+ def save target, weights, options = {}
83
+ raise ":source need to be set" if options[:source].nil?
84
+ source = options[:source]
85
+ @sources[source] ||= []
86
+ @sources[source] << target
74
87
  weights.keys.each do |key|
75
88
  add weights[key], key, target
76
89
  end
@@ -93,6 +106,15 @@ module Seasy
93
106
 
94
107
  def clear
95
108
  @store = {}
109
+ @sources = {}
110
+ end
111
+
112
+ def remove source
113
+ targets = @sources[source]
114
+ puts "deleting #{source}"
115
+ @store.delete_if {|key,value| !value[targets.first].nil?}
116
+ puts "#{@store}"
117
+ puts "#{@sources}"
96
118
  end
97
119
 
98
120
  end
@@ -0,0 +1,62 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "seasy"
8
+ s.version = "0.0.6"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Fredrik Rubensson"]
12
+ s.date = "2011-09-28"
13
+ s.description = "An easy to use search index (requiring no external servers) with a pluggable design for index storage."
14
+ s.email = "fredrik@eldfluga.se"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rvmrc",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "lib/seasy.rb",
29
+ "lib/seasy/fragmentizer.rb",
30
+ "lib/seasy/index.rb",
31
+ "seasy.gemspec",
32
+ "spec/fragmentizer_spec.rb",
33
+ "spec/index_spec.rb"
34
+ ]
35
+ s.homepage = "http://github.com/froderik/seasy"
36
+ s.licenses = ["MIT"]
37
+ s.require_paths = ["lib"]
38
+ s.rubygems_version = "1.8.10"
39
+ s.summary = "server less search"
40
+
41
+ if s.respond_to? :specification_version then
42
+ s.specification_version = 3
43
+
44
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
45
+ s.add_development_dependency(%q<rspec>, [">= 2.5.0"])
46
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
47
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
48
+ s.add_development_dependency(%q<rcov>, [">= 0"])
49
+ else
50
+ s.add_dependency(%q<rspec>, [">= 2.5.0"])
51
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
52
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
53
+ s.add_dependency(%q<rcov>, [">= 0"])
54
+ end
55
+ else
56
+ s.add_dependency(%q<rspec>, [">= 2.5.0"])
57
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
58
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
59
+ s.add_dependency(%q<rcov>, [">= 0"])
60
+ end
61
+ end
62
+
@@ -1,7 +1,7 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
 
4
- require 'fragmentizer'
4
+ require 'seasy'
5
5
 
6
6
  describe Fragmentizer do
7
7
  it "should split a string in its parts" do
@@ -1,33 +1,38 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
 
4
- require 'fragmentizer'
5
- require 'index'
4
+ require 'seasy'
6
5
 
7
6
  include Seasy
8
7
 
9
8
  describe Index do
10
9
  before :each do
11
10
  subject.clear
11
+ configure do |config|
12
+ config.storage = InMemoryStorage
13
+ end
12
14
  end
13
15
 
14
16
  it "should default and have some basic behaviour" do
15
17
  i = subject
16
- i.add 'fredrik den store', 1
17
- i.search( "red" ).should == {1 => 1}
18
- i.add 'red red wine', 2
19
- i.search( "red").should == {2 => 2 ,1 => 1}
20
- i.search( "e" ).should == {1 => 3, 2 => 3}
18
+ target_one = "1"
19
+ target_two = "2"
20
+ i.add 'fredrik den store', target_one
21
+ i.search( "red" ).should == {target_one => 1}
22
+ i.add 'red red wine', target_two
23
+ i.search( "red").should == {target_two => 2 ,target_one => 1}
24
+ i.search( "e" ).should == {target_one => 3, target_two => 3}
21
25
  end
22
26
 
23
27
  it "should be possible to add complex strings twice" do
24
28
  i = subject
25
- i.add 'fluff', 1
26
- i.search( 'f' ).should == {1 => 3}
27
- i.add 'fluffluff', 1
28
- i.search( 'fluff' ).should == {1 => 3}
29
- i.search( 'lu' ).should == {1 => 3}
30
- i.search( 'f' ).should == {1 => 8}
29
+ target = 1
30
+ i.add 'fluff', target
31
+ i.search( 'f' ).should == {target => 3}
32
+ i.add 'fluffluff', target
33
+ i.search( 'fluff' ).should == {target => 3}
34
+ i.search( 'lu' ).should == {target => 3}
35
+ i.search( 'f' ).should == {target => 8}
31
36
  end
32
37
 
33
38
  it "should have named indices" do
@@ -47,6 +52,29 @@ describe Index do
47
52
  another_index.search( 'ean' ).should == { }
48
53
  end
49
54
 
55
+ it "should handle source also" do
56
+ i = subject
57
+ i.add 'landsnora', 'edsberg'
58
+ i.add 'landsnora', 'edsberg', :source => 'sollentuna'
59
+ i.search( 'landsnora' ).should == {'edsberg' => 2}
60
+ end
61
+
62
+ it "should remove targets" do
63
+ i = subject
64
+ i.add 'searchentry', 'gooo', :source => 'gooo'
65
+ i.search( 'entry' ).should == {'gooo' => 1}
66
+ i.remove 'gooo'
67
+ i.search( 'entry' ).should == {}
68
+ end
69
+
70
+ it "should remove sources" do
71
+ i = subject
72
+ i.add 'searchentry', 'target', :source => 'hoola'
73
+ i.search( 'entry' ).should == {'target' => 1}
74
+ i.remove 'hoola'
75
+ i.search( 'entry' ).should == {}
76
+ end
77
+
50
78
  it "should have a configurable storage" do
51
79
  configure do |config|
52
80
  config.storage = DummyStorage
@@ -58,6 +86,7 @@ describe Index do
58
86
  DummyStorage.should be_saved_once
59
87
  DummyStorage.should be_searched_once
60
88
  end
89
+
61
90
  end
62
91
 
63
92
  class DummyStorage
@@ -66,7 +95,7 @@ class DummyStorage
66
95
  @@searched_count = 0
67
96
  end
68
97
 
69
- def save target, weights
98
+ def save target, weights, options = {}
70
99
  @@saved_count += 1
71
100
  end
72
101
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: seasy
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.4
5
+ version: 0.0.6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Fredrik Rubensson
@@ -10,8 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-09-14 00:00:00 +02:00
14
- default_executable:
13
+ date: 2011-09-28 00:00:00 Z
15
14
  dependencies:
16
15
  - !ruby/object:Gem::Dependency
17
16
  name: rspec
@@ -75,12 +74,12 @@ files:
75
74
  - README.rdoc
76
75
  - Rakefile
77
76
  - VERSION
78
- - lib/fragmentizer.rb
79
- - lib/index.rb
80
77
  - lib/seasy.rb
78
+ - lib/seasy/fragmentizer.rb
79
+ - lib/seasy/index.rb
80
+ - seasy.gemspec
81
81
  - spec/fragmentizer_spec.rb
82
82
  - spec/index_spec.rb
83
- has_rdoc: true
84
83
  homepage: http://github.com/froderik/seasy
85
84
  licenses:
86
85
  - MIT
@@ -94,7 +93,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
94
93
  requirements:
95
94
  - - ">="
96
95
  - !ruby/object:Gem::Version
97
- hash: -968263035200512692
96
+ hash: 2921882298232585062
98
97
  segments:
99
98
  - 0
100
99
  version: "0"
@@ -107,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
106
  requirements: []
108
107
 
109
108
  rubyforge_project:
110
- rubygems_version: 1.6.0
109
+ rubygems_version: 1.8.10
111
110
  signing_key:
112
111
  specification_version: 3
113
112
  summary: server less search