erp_search 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,13 @@
1
+ require 'sunspot_rails'
2
+
3
+ module ErpSearch
4
+ class Engine < Rails::Engine
5
+ isolate_namespace ErpSearch
6
+
7
+ #add observers
8
+ #this is ugly need a better way
9
+ observers = [:party_observer, :contact_observer]
10
+ (config.active_record.observers.nil?) ? config.active_record.observers = observers : config.active_record.observers += observers
11
+
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ module ErpSearch
2
+ VERSION = "3.0.0"
3
+ end
@@ -0,0 +1,128 @@
1
+ require 'action_controller'
2
+ require 'sunspot/rails/tasks'
3
+
4
+ namespace :sunspot do
5
+ task :reindex_party_search_facts, [:batch_size, :batch_commit] => :environment do |t,args|
6
+ default_batch_commit = true
7
+ default_batch_size = 1000
8
+
9
+ batch_size = (args.batch_size || default_batch_size).to_i
10
+ batch_commit = (args.batch_commit || default_batch_commit)
11
+ start_time = Time.now
12
+
13
+ puts "Starting Indexing with batch size of #{batch_size} at #{start_time} ..."
14
+ puts "Batch commit is set to #{batch_commit}"
15
+ puts "There are #{PartySearchFact.count} parties to index"
16
+ puts "This takes roughly 30 minutes per 500,000 parties"
17
+ PartySearchFact.solr_reindex(:batch_size => batch_size, :batch_commit => batch_commit)
18
+ end_time = Time.now
19
+ puts "Done. Finished at: #{end_time}"
20
+ puts "Elapsed time: #{(end_time - start_time)/60} minutes"
21
+ end
22
+
23
+ task :delete_party_search_facts => :environment do
24
+ puts "Removing Indexes ..."
25
+ PartySearchFact.solr_remove_all_from_index!
26
+ puts "Done."
27
+ end
28
+
29
+ task :reindex_content => :environment do
30
+ puts "Indexing ..."
31
+ Content.solr_reindex
32
+ puts "Done."
33
+ end
34
+
35
+ task :delete_content => :environment do
36
+ puts "Removing Indexes ..."
37
+ Content.solr_remove_all_from_index!
38
+ puts "Done."
39
+ end
40
+
41
+ namespace :tenants do
42
+ def get_all_tenants
43
+ # get all tenants
44
+ tenants = Tenant.all
45
+
46
+ # add public schema if it is in list
47
+ public_schema = Tenant.new
48
+ public_schema.id = 0
49
+ public_schema.schema = 'public'
50
+ schemas = tenants.collect{|t| t.schema }
51
+ tenants << public_schema unless schemas.include?('public')
52
+ tenants
53
+ end
54
+
55
+ task :reindex_content => :environment do
56
+ # loop thru tenants
57
+ get_all_tenants.each do |t|
58
+ puts "Indexing #{t.schema} ..."
59
+
60
+ set_current_schema(t.schema)
61
+
62
+ remove_tenant_indexes(Content, t.id)
63
+
64
+ # reindex content for tenant
65
+ Content.solr_index
66
+ Sunspot.commit
67
+ end
68
+
69
+ puts "Done."
70
+ end
71
+
72
+ task :delete_content => :environment do
73
+ puts "Removing Indexes for All Tenants! ..."
74
+ Content.solr_remove_all_from_index!
75
+ puts "Done."
76
+ end
77
+ end
78
+
79
+ def get_tenant_id_by_schema(schema)
80
+ tenant_id = Tenant.find_by_schema(schema).id rescue 0
81
+ puts "tenant id is zero which means public schema!" if tenant_id == 0
82
+ return tenant_id
83
+ end
84
+
85
+ def set_current_schema(schema)
86
+ # set current tenant_id in Thread
87
+ if schema == 'public'
88
+ Thread.current[:tenant_id] = 0
89
+ else
90
+ Thread.current[:tenant_id] = get_tenant_id_by_schema(schema)
91
+ end
92
+
93
+ #set schema
94
+ Tenancy::SchemaUtil.set_search_path(schema)
95
+ end
96
+
97
+ def remove_tenant_indexes(object, tenant_id)
98
+ # remove by query
99
+ Sunspot.remove(object) do
100
+ with(:tenant_id).equal_to(tenant_id)
101
+ end
102
+ Sunspot.commit
103
+ end
104
+
105
+ namespace :tenant do
106
+ task :reindex_content, [:schema] => :environment do |t,args|
107
+ puts "Indexing #{args.schema} ..."
108
+
109
+ set_current_schema(args.schema)
110
+
111
+ remove_tenant_indexes(Content, get_tenant_id_by_schema(args.schema))
112
+
113
+ Content.solr_index
114
+ Sunspot.commit
115
+ puts "Done."
116
+ end
117
+
118
+ task :delete_content, [:schema] => :environment do |t,args|
119
+ puts "Removing Indexes ..."
120
+
121
+ set_current_schema(args.schema)
122
+
123
+ remove_tenant_indexes(Content, get_tenant_id_by_schema(args.schema))
124
+ puts "Done."
125
+ end
126
+ end
127
+ end
128
+
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: erp_search
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Rick Koloski, Russell Holmes
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-06 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sunspot_rails
16
+ requirement: &2161006980 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - =
20
+ - !ruby/object:Gem::Version
21
+ version: 1.3.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2161006980
25
+ - !ruby/object:Gem::Dependency
26
+ name: sunspot_solr
27
+ requirement: &2161006460 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - =
31
+ - !ruby/object:Gem::Version
32
+ version: 1.3.0
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *2161006460
36
+ - !ruby/object:Gem::Dependency
37
+ name: knitkit
38
+ requirement: &2161005960 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *2161005960
47
+ description: The CompassAE Search Engine provides functionality to facilitate both
48
+ dimensional and index-based searches. CompassAE by default will search for an instance
49
+ of SOLR/Sunspot and use it if it is available, otherwise it will attempt to use
50
+ SQL to implement content searches. This engine also contains a demonstration of
51
+ how to implement a denormalized search fact table using the Party entity.
52
+ email:
53
+ - russonrails@gmail.com
54
+ executables: []
55
+ extensions: []
56
+ extra_rdoc_files: []
57
+ files:
58
+ - app/assets/javascripts/erp_search/application.js
59
+ - app/assets/stylesheets/erp_search/application.css
60
+ - app/controllers/erp_search/application_controller.rb
61
+ - app/helpers/erp_search/application_helper.rb
62
+ - app/models/extensions/content.rb
63
+ - app/models/extensions/party.rb
64
+ - app/models/party_search_fact.rb
65
+ - app/observers/contact_observer.rb
66
+ - app/observers/email_address_observer.rb
67
+ - app/observers/individual_observer.rb
68
+ - app/observers/organization_observer.rb
69
+ - app/observers/party_observer.rb
70
+ - app/observers/phone_number_observer.rb
71
+ - app/observers/postal_address_observer.rb
72
+ - app/views/layouts/erp_search/application.html.erb
73
+ - config/routes.rb
74
+ - config/sunspot.yml
75
+ - db/migrate/20110817165116_recreate_party_search_facts_table.rb
76
+ - lib/erp_search/engine.rb
77
+ - lib/erp_search/version.rb
78
+ - lib/erp_search.rb
79
+ - lib/tasks/solr_index.rake
80
+ - GPL-3-LICENSE
81
+ - Rakefile
82
+ - README.rdoc
83
+ homepage: http://development.compassagile.com
84
+ licenses: []
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 1.8.10
104
+ signing_key:
105
+ specification_version: 3
106
+ summary: The CompassAE Search Engine provides functionality to facilitate both dimensional
107
+ and index-based searches.
108
+ test_files: []