seasyar 0.0.2 → 0.0.8

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/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