seasyar 0.0.2 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -3,14 +3,14 @@ source "http://rubygems.org"
3
3
  # Example:
4
4
  # gem "activesupport", ">= 2.3.5"
5
5
 
6
- gem "seasy", "0.0.4"
7
- gem "activerecord"
6
+ gem "seasy", "0.0.6"
7
+ gem "activerecord", "~> 3.0"
8
+ gem "multi_json", "~> 1.0"
8
9
 
9
10
  # Add dependencies to develop your gem here.
10
11
  # Include everything needed to run rake, tests, features, etc.
11
12
  group :development do
12
13
  gem "rspec"
13
- # gem "shoulda", ">= 0"
14
14
  gem "bundler", "~> 1.0.0"
15
15
  gem "jeweler", "~> 1.6.4"
16
16
  gem "rcov", ">= 0"
data/Gemfile.lock CHANGED
@@ -20,6 +20,7 @@ GEM
20
20
  bundler (~> 1.0)
21
21
  git (>= 1.2.5)
22
22
  rake
23
+ multi_json (1.0.3)
23
24
  rake (0.9.2)
24
25
  rcov (0.9.10)
25
26
  rspec (2.6.0)
@@ -30,7 +31,7 @@ GEM
30
31
  rspec-expectations (2.6.0)
31
32
  diff-lcs (~> 1.1.2)
32
33
  rspec-mocks (2.6.0)
33
- seasy (0.0.4)
34
+ seasy (0.0.6)
34
35
  sqlite3 (1.3.3)
35
36
  standalone_migrations (1.0.1)
36
37
  activerecord (>= 3)
@@ -41,11 +42,12 @@ PLATFORMS
41
42
  ruby
42
43
 
43
44
  DEPENDENCIES
44
- activerecord
45
+ activerecord (~> 3.0)
45
46
  bundler (~> 1.0.0)
46
47
  jeweler (~> 1.6.4)
48
+ multi_json (~> 1.0)
47
49
  rcov
48
50
  rspec
49
- seasy (= 0.0.4)
51
+ seasy (= 0.0.6)
50
52
  sqlite3
51
53
  standalone_migrations
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.8
Binary file
@@ -0,0 +1,9 @@
1
+ class AddSource < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :seasy_data, :source, :string
4
+ end
5
+
6
+ def self.down
7
+ remove_column :seasy_data, :source
8
+ end
9
+ end
data/db/schema.rb CHANGED
@@ -10,7 +10,7 @@
10
10
  #
11
11
  # It's strongly recommended to check this file into your version control system.
12
12
 
13
- ActiveRecord::Schema.define(:version => 20110906072000) do
13
+ ActiveRecord::Schema.define(:version => 20110926212900) do
14
14
 
15
15
  create_table "seasy_data", :force => true do |t|
16
16
  t.string "key"
@@ -18,6 +18,7 @@ ActiveRecord::Schema.define(:version => 20110906072000) do
18
18
  t.integer "weight"
19
19
  t.datetime "created_at"
20
20
  t.datetime "updated_at"
21
+ t.string "source"
21
22
  end
22
23
 
23
24
  end
@@ -1,5 +1,4 @@
1
1
  require 'active_record'
2
- require 'seasydata'
3
2
 
4
3
  module Seasyar
5
4
 
@@ -7,17 +6,25 @@ module Seasyar
7
6
 
8
7
  ## seasy storage implementation ##
9
8
 
10
- def save target, weights
9
+ def save target, weights, options = {}
10
+ raise "source is not set" if options[:source].nil?
11
+ source = options[:source]
12
+
13
+ old = SeasyData.find_all_by_source source
14
+ old.each { |data| data.delete }
15
+
11
16
  weights.keys.each do |k|
12
17
  i = Seasyar::SeasyData.new
13
18
  i.key = k
14
19
  i.target = target
20
+ i.source = source
15
21
  i.weight = weights[k]
16
22
  i.save!
17
23
  end
18
24
  end
19
25
 
20
26
  def search question
27
+ # todo : count hits.....
21
28
  hits = Seasyar::SeasyData.find_all_by_key question
22
29
  result = {}
23
30
  hits.each do |one_hit|
@@ -26,6 +33,10 @@ module Seasyar
26
33
  result
27
34
  end
28
35
 
36
+ def remove deletee
37
+ Seasyar::SeasyData.find_all_by_source( deletee ).each {|data| data.delete}
38
+ end
39
+
29
40
  ## helper methods ##
30
41
 
31
42
  end
@@ -0,0 +1,32 @@
1
+ module Seasyar
2
+ require 'seasy'
3
+
4
+ def index index_name, *fields
5
+ index = Seasy::Index.with_name index_name.to_s
6
+
7
+ value = ''
8
+ fields.each do |one_field|
9
+ value << " #{self.send one_field }"
10
+ end
11
+
12
+ target = self.id
13
+ source = "#{self.class}:#{target}"
14
+
15
+ if block_given?
16
+ target = yield self
17
+ end
18
+ index.add value.to_s, target.to_s, :source => source
19
+ end
20
+
21
+ def search index_name, query
22
+ index = Seasy::Index.with_name index_name.to_s
23
+ index.search query
24
+ end
25
+
26
+ def unindex index_name
27
+ index = Seasy::Index.with_name index_name.to_s
28
+ index.remove "#{self.class}:#{self.id}"
29
+ end
30
+
31
+ module_function :index, :search, :unindex
32
+ end
data/lib/seasyar.rb CHANGED
@@ -1,25 +1,4 @@
1
- require 'activerecordstorage'
2
- require 'seasydata'
1
+ require 'seasyar/activerecordstorage'
2
+ require 'seasyar/seasydata'
3
+ require 'seasyar/seasyar'
3
4
 
4
- module Seasyar
5
- require 'seasy'
6
-
7
- def index index_name, *fields
8
- index = Seasy::Index.with_name index_name.to_s
9
- fields.each do |one_field|
10
- value = self.send one_field
11
- target = self.id
12
- if block_given?
13
- target = yield self
14
- end
15
- index.add value.to_s, target.to_s
16
- end
17
- end
18
-
19
- def search index_name, query
20
- index = Seasy::Index.with_name index_name.to_s
21
- index.search query
22
- end
23
-
24
- module_function :index, :search
25
- end
data/seasyar.gemspec ADDED
@@ -0,0 +1,83 @@
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 = "seasyar"
8
+ s.version = "0.0.8"
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 = "Seasy integration. Active record storage for seasy and save hooks in models."
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
+ "db/config.yml",
29
+ "db/development.sqlite3",
30
+ "db/migrate/20110906072000_create_index.rb",
31
+ "db/migrate/20110926212900_add_source.rb",
32
+ "db/schema.rb",
33
+ "lib/seasyar.rb",
34
+ "lib/seasyar/activerecordstorage.rb",
35
+ "lib/seasyar/seasyar.rb",
36
+ "lib/seasyar/seasydata.rb",
37
+ "seasyar.gemspec",
38
+ "spec/seasyar_spec.rb",
39
+ "spec/storage_spec.rb"
40
+ ]
41
+ s.homepage = "http://github.com/froderik/seasyar"
42
+ s.licenses = ["MIT"]
43
+ s.require_paths = ["lib"]
44
+ s.rubygems_version = "1.8.10"
45
+ s.summary = "active record integration for seasy"
46
+
47
+ if s.respond_to? :specification_version then
48
+ s.specification_version = 3
49
+
50
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
51
+ s.add_runtime_dependency(%q<seasy>, ["= 0.0.6"])
52
+ s.add_runtime_dependency(%q<activerecord>, ["~> 3.0"])
53
+ s.add_runtime_dependency(%q<multi_json>, ["~> 1.0"])
54
+ s.add_development_dependency(%q<rspec>, [">= 0"])
55
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
56
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
57
+ s.add_development_dependency(%q<rcov>, [">= 0"])
58
+ s.add_development_dependency(%q<standalone_migrations>, [">= 0"])
59
+ s.add_development_dependency(%q<sqlite3>, [">= 0"])
60
+ else
61
+ s.add_dependency(%q<seasy>, ["= 0.0.6"])
62
+ s.add_dependency(%q<activerecord>, ["~> 3.0"])
63
+ s.add_dependency(%q<multi_json>, ["~> 1.0"])
64
+ s.add_dependency(%q<rspec>, [">= 0"])
65
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
66
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
67
+ s.add_dependency(%q<rcov>, [">= 0"])
68
+ s.add_dependency(%q<standalone_migrations>, [">= 0"])
69
+ s.add_dependency(%q<sqlite3>, [">= 0"])
70
+ end
71
+ else
72
+ s.add_dependency(%q<seasy>, ["= 0.0.6"])
73
+ s.add_dependency(%q<activerecord>, ["~> 3.0"])
74
+ s.add_dependency(%q<multi_json>, ["~> 1.0"])
75
+ s.add_dependency(%q<rspec>, [">= 0"])
76
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
77
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
78
+ s.add_dependency(%q<rcov>, [">= 0"])
79
+ s.add_dependency(%q<standalone_migrations>, [">= 0"])
80
+ s.add_dependency(%q<sqlite3>, [">= 0"])
81
+ end
82
+ end
83
+
@@ -0,0 +1,69 @@
1
+ require 'seasyar'
2
+
3
+
4
+ class Dummy
5
+ include Seasyar
6
+
7
+ def initialize id, static
8
+ @id = id
9
+ @static = static
10
+ end
11
+
12
+ INDEX_NAME = "test_index_name"
13
+
14
+ def save
15
+ index INDEX_NAME, :static
16
+ end
17
+
18
+ def save_with_block
19
+ index( INDEX_NAME, :static ) {|unused| 666}
20
+ end
21
+
22
+ def removal
23
+ unindex INDEX_NAME
24
+ end
25
+
26
+ def id
27
+ @id
28
+ end
29
+
30
+ def static
31
+ @static
32
+ end
33
+ end
34
+
35
+ describe Seasyar do
36
+ before :all do
37
+ ActiveRecord::Base.configurations = YAML::load(IO.read('db/config.yml'))
38
+ ActiveRecord::Base.establish_connection('development')
39
+
40
+ Seasy.configure do |config|
41
+ config.storage = Seasyar::ActiveRecordStorage
42
+ end
43
+ end
44
+
45
+ before :each do
46
+ Seasyar::SeasyData.all.each { |data| data.delete }
47
+ end
48
+
49
+ it "should save to index" do
50
+ d = Dummy.new 42, 'static'
51
+ d.save
52
+ Seasyar.search( Dummy::INDEX_NAME, 'static' ).should == {42.to_s => 1}
53
+ end
54
+
55
+ it "should save source" do
56
+ d = Dummy.new 144, 'diff'
57
+ d.save_with_block
58
+ Seasyar.search( Dummy::INDEX_NAME, 'diff' ).should == {666.to_s => 1}
59
+
60
+ d.save # the 666 entry should be removed and 42 be there instead
61
+ Seasyar.search( Dummy::INDEX_NAME, 'diff' ).should == {144.to_s => 1}
62
+ end
63
+
64
+ it "should remove from index" do
65
+ d = Dummy.new 43, 'static'
66
+ d.save
67
+ d.removal
68
+ end
69
+ end
data/spec/storage_spec.rb CHANGED
@@ -1,13 +1,12 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
 
4
- require 'activerecordstorage'
5
- require 'fragmentizer'
4
+ require 'seasyar'
5
+ require 'seasy'
6
6
  require 'active_record'
7
7
 
8
8
  describe Seasyar::ActiveRecordStorage do
9
9
  before :all do
10
- # ActiveRecord::Base.logger = Logger.new('log/debug.log')
11
10
  ActiveRecord::Base.configurations = YAML::load(IO.read('db/config.yml'))
12
11
  ActiveRecord::Base.establish_connection('development')
13
12
  end
@@ -15,7 +14,36 @@ describe Seasyar::ActiveRecordStorage do
15
14
  it "should save entries and make them searchable" do
16
15
  target = 1
17
16
  weights = Fragmentizer.new.fragmentize 'test'
18
- subject.save target, weights
19
- subject.query( 'es' ).should == {"1" => 1}
17
+ subject.save target, weights, :source => "1"
18
+ subject.search( 'es' ).should == {"1" => 1}
19
+ end
20
+
21
+ it "should remove entries when saving new ones" do
22
+ target = 1
23
+ weights = Fragmentizer.new.fragmentize 'test'
24
+ subject.save target, weights, :source => "1"
25
+
26
+ weights = Fragmentizer.new.fragmentize 'different'
27
+ subject.save target, weights, :source => "1"
28
+
29
+ subject.search( 'es' ).should == {}
30
+ end
31
+
32
+ it "should accept a source as basis for what to delete in between adding" do
33
+ Seasy.configure do |config|
34
+ config.storage = Seasyar::ActiveRecordStorage
35
+ end
36
+ i = Seasy::Index.new
37
+ i.add 'ruben', 'landsnora', :source => 'veddesta'
38
+ i.search( 'ruben' ).should == {'landsnora' => 1}
39
+
40
+ i.add 'ruben', 'edsberg', :source => 'edsberg'
41
+ i.search( 'ruben' ).should == {'landsnora' => 1, 'edsberg' => 1}
42
+
43
+ i.add 'sten', 'landsnora', :source => 'veddesta'
44
+ i.search( 'ruben' ).should == {'edsberg' => 1}
45
+
46
+ i.add 'sten', 'edsberg', :source => 'edsberg'
47
+ i.search( 'ruben' ).should == {}
20
48
  end
21
49
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: seasyar
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.2
5
+ version: 0.0.8
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: seasy
@@ -20,7 +19,7 @@ dependencies:
20
19
  requirements:
21
20
  - - "="
22
21
  - !ruby/object:Gem::Version
23
- version: 0.0.4
22
+ version: 0.0.6
24
23
  type: :runtime
25
24
  prerelease: false
26
25
  version_requirements: *id001
@@ -29,15 +28,26 @@ dependencies:
29
28
  requirement: &id002 !ruby/object:Gem::Requirement
30
29
  none: false
31
30
  requirements:
32
- - - ">="
31
+ - - ~>
33
32
  - !ruby/object:Gem::Version
34
- version: "0"
33
+ version: "3.0"
35
34
  type: :runtime
36
35
  prerelease: false
37
36
  version_requirements: *id002
38
37
  - !ruby/object:Gem::Dependency
39
- name: rspec
38
+ name: multi_json
40
39
  requirement: &id003 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: "1.0"
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: rspec
50
+ requirement: &id004 !ruby/object:Gem::Requirement
41
51
  none: false
42
52
  requirements:
43
53
  - - ">="
@@ -45,10 +55,10 @@ dependencies:
45
55
  version: "0"
46
56
  type: :development
47
57
  prerelease: false
48
- version_requirements: *id003
58
+ version_requirements: *id004
49
59
  - !ruby/object:Gem::Dependency
50
60
  name: bundler
51
- requirement: &id004 !ruby/object:Gem::Requirement
61
+ requirement: &id005 !ruby/object:Gem::Requirement
52
62
  none: false
53
63
  requirements:
54
64
  - - ~>
@@ -56,10 +66,10 @@ dependencies:
56
66
  version: 1.0.0
57
67
  type: :development
58
68
  prerelease: false
59
- version_requirements: *id004
69
+ version_requirements: *id005
60
70
  - !ruby/object:Gem::Dependency
61
71
  name: jeweler
62
- requirement: &id005 !ruby/object:Gem::Requirement
72
+ requirement: &id006 !ruby/object:Gem::Requirement
63
73
  none: false
64
74
  requirements:
65
75
  - - ~>
@@ -67,10 +77,10 @@ dependencies:
67
77
  version: 1.6.4
68
78
  type: :development
69
79
  prerelease: false
70
- version_requirements: *id005
80
+ version_requirements: *id006
71
81
  - !ruby/object:Gem::Dependency
72
82
  name: rcov
73
- requirement: &id006 !ruby/object:Gem::Requirement
83
+ requirement: &id007 !ruby/object:Gem::Requirement
74
84
  none: false
75
85
  requirements:
76
86
  - - ">="
@@ -78,10 +88,10 @@ dependencies:
78
88
  version: "0"
79
89
  type: :development
80
90
  prerelease: false
81
- version_requirements: *id006
91
+ version_requirements: *id007
82
92
  - !ruby/object:Gem::Dependency
83
93
  name: standalone_migrations
84
- requirement: &id007 !ruby/object:Gem::Requirement
94
+ requirement: &id008 !ruby/object:Gem::Requirement
85
95
  none: false
86
96
  requirements:
87
97
  - - ">="
@@ -89,10 +99,10 @@ dependencies:
89
99
  version: "0"
90
100
  type: :development
91
101
  prerelease: false
92
- version_requirements: *id007
102
+ version_requirements: *id008
93
103
  - !ruby/object:Gem::Dependency
94
104
  name: sqlite3
95
- requirement: &id008 !ruby/object:Gem::Requirement
105
+ requirement: &id009 !ruby/object:Gem::Requirement
96
106
  none: false
97
107
  requirements:
98
108
  - - ">="
@@ -100,7 +110,7 @@ dependencies:
100
110
  version: "0"
101
111
  type: :development
102
112
  prerelease: false
103
- version_requirements: *id008
113
+ version_requirements: *id009
104
114
  description: Seasy integration. Active record storage for seasy and save hooks in models.
105
115
  email: fredrik@eldfluga.se
106
116
  executables: []
@@ -122,12 +132,15 @@ files:
122
132
  - db/config.yml
123
133
  - db/development.sqlite3
124
134
  - db/migrate/20110906072000_create_index.rb
135
+ - db/migrate/20110926212900_add_source.rb
125
136
  - db/schema.rb
126
- - lib/activerecordstorage.rb
127
137
  - lib/seasyar.rb
128
- - lib/seasydata.rb
138
+ - lib/seasyar/activerecordstorage.rb
139
+ - lib/seasyar/seasyar.rb
140
+ - lib/seasyar/seasydata.rb
141
+ - seasyar.gemspec
142
+ - spec/seasyar_spec.rb
129
143
  - spec/storage_spec.rb
130
- has_rdoc: true
131
144
  homepage: http://github.com/froderik/seasyar
132
145
  licenses:
133
146
  - MIT
@@ -141,7 +154,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
141
154
  requirements:
142
155
  - - ">="
143
156
  - !ruby/object:Gem::Version
144
- hash: -1962273080970547351
157
+ hash: 2356686226470266283
145
158
  segments:
146
159
  - 0
147
160
  version: "0"
@@ -154,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
167
  requirements: []
155
168
 
156
169
  rubyforge_project:
157
- rubygems_version: 1.6.0
170
+ rubygems_version: 1.8.10
158
171
  signing_key:
159
172
  specification_version: 3
160
173
  summary: active record integration for seasy
File without changes