acts_as_cleo 2.4.5 → 3.0.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.
- data/.rvmrc +5 -0
- data/VERSION +1 -1
- data/acts_as_cleo.gemspec +18 -7
- data/lib/acts_as_cleo.rb +5 -14
- data/lib/acts_as_cleo/acts_as_cleo.rb +11 -0
- data/lib/acts_as_cleo/instance_methods.rb +8 -8
- data/lib/acts_as_cleo_connection/acts_as_cleo_connection.rb +13 -0
- data/lib/acts_as_cleo_connection/acts_methods.rb +22 -0
- data/lib/acts_as_cleo_connection/instance_methods.rb +19 -0
- data/lib/cleo/base_server.rb +26 -0
- data/lib/cleo/cleo.rb +67 -0
- data/lib/cleo/connection_server.rb +50 -0
- data/lib/cleo/element.rb +5 -0
- data/lib/cleo/element_server.rb +81 -0
- data/lib/cleo/service.rb +16 -0
- data/lib/generators/acts_as_cleo/install/templates/cleo_initalizer.rb +1 -1
- data/lib/generators/acts_as_cleo/install/templates/jobs/cleo_connection_processor.rb +17 -0
- data/lib/generators/acts_as_cleo/install/templates/jobs/{cleo_processor.rb → cleo_element_processor.rb} +5 -6
- data/lib/xml/connection.rb +18 -0
- data/lib/xml/result.rb +20 -0
- data/test/config/cleo.yml +4 -4
- data/test/db/testing_db.sqlite +0 -0
- data/test/helper.rb +14 -3
- data/test/unit/test_active_record_callback_hooks.rb +6 -6
- data/test/unit/test_class_methods.rb +3 -3
- data/test/unit/test_cleo.rb +15 -36
- data/test/unit/test_model_to_cleo.rb +1 -1
- data/test/unit/test_result_parser.rb +2 -2
- metadata +42 -31
- data/lib/cleo.rb +0 -116
- data/lib/cleo/reference.rb +0 -5
- data/lib/cleo/result.rb +0 -18
- data/lib/cleo/server.rb +0 -53
data/.rvmrc
ADDED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
3.0.0
|
data/acts_as_cleo.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "acts_as_cleo"
|
8
|
-
s.version = "
|
8
|
+
s.version = "3.0.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Robert R. Meyer"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-04-11"
|
13
13
|
s.description = "LinkedIn Open Source type ahead tool's REST API as a ruby gem. Now with Reddis support."
|
14
14
|
s.email = "Blue.Dog.Archolite@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -17,6 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
"README.rdoc"
|
18
18
|
]
|
19
19
|
s.files = [
|
20
|
+
".rvmrc",
|
20
21
|
"Gemfile",
|
21
22
|
"LICENSE.txt",
|
22
23
|
"README.rdoc",
|
@@ -24,23 +25,32 @@ Gem::Specification.new do |s|
|
|
24
25
|
"VERSION",
|
25
26
|
"acts_as_cleo.gemspec",
|
26
27
|
"lib/acts_as_cleo.rb",
|
28
|
+
"lib/acts_as_cleo/acts_as_cleo.rb",
|
27
29
|
"lib/acts_as_cleo/acts_methods.rb",
|
28
30
|
"lib/acts_as_cleo/class_methods.rb",
|
29
31
|
"lib/acts_as_cleo/instance_methods.rb",
|
30
32
|
"lib/acts_as_cleo/private_methods.rb",
|
31
33
|
"lib/acts_as_cleo/result.rb",
|
32
34
|
"lib/acts_as_cleo/version.rb",
|
33
|
-
"lib/
|
34
|
-
"lib/
|
35
|
-
"lib/
|
36
|
-
"lib/cleo/
|
35
|
+
"lib/acts_as_cleo_connection/acts_as_cleo_connection.rb",
|
36
|
+
"lib/acts_as_cleo_connection/acts_methods.rb",
|
37
|
+
"lib/acts_as_cleo_connection/instance_methods.rb",
|
38
|
+
"lib/cleo/base_server.rb",
|
39
|
+
"lib/cleo/cleo.rb",
|
40
|
+
"lib/cleo/connection_server.rb",
|
41
|
+
"lib/cleo/element.rb",
|
42
|
+
"lib/cleo/element_server.rb",
|
43
|
+
"lib/cleo/service.rb",
|
37
44
|
"lib/generators/acts_as_cleo/install/install_generator.rb",
|
38
45
|
"lib/generators/acts_as_cleo/install/templates/cleo.yml",
|
39
46
|
"lib/generators/acts_as_cleo/install/templates/cleo_initalizer.rb",
|
40
47
|
"lib/generators/acts_as_cleo/install/templates/install.rb",
|
41
|
-
"lib/generators/acts_as_cleo/install/templates/jobs/
|
48
|
+
"lib/generators/acts_as_cleo/install/templates/jobs/cleo_connection_processor.rb",
|
49
|
+
"lib/generators/acts_as_cleo/install/templates/jobs/cleo_element_processor.rb",
|
42
50
|
"lib/generators/acts_as_cleo/install/templates/update.rb",
|
43
51
|
"lib/generators/acts_as_cleo/update/update_generator.rb",
|
52
|
+
"lib/xml/connection.rb",
|
53
|
+
"lib/xml/result.rb",
|
44
54
|
"test/config/cleo.yml",
|
45
55
|
"test/data/xml/cleo/element.xml",
|
46
56
|
"test/data/xml/cleo/elements.xml",
|
@@ -53,6 +63,7 @@ Gem::Specification.new do |s|
|
|
53
63
|
"test/db/migrate/005_create_authors.rb",
|
54
64
|
"test/db/migrate/006_create_postings.rb",
|
55
65
|
"test/db/migrate/007_cleo_table.rb",
|
66
|
+
"test/db/testing_db.sqlite",
|
56
67
|
"test/fixtures/authors.yml",
|
57
68
|
"test/fixtures/books.yml",
|
58
69
|
"test/fixtures/categories.yml",
|
data/lib/acts_as_cleo.rb
CHANGED
@@ -1,15 +1,6 @@
|
|
1
|
-
|
2
|
-
require File.dirname(__FILE__) + '/
|
1
|
+
require File.dirname(__FILE__) + '/cleo/cleo'
|
2
|
+
require File.dirname(__FILE__) + '/acts_as_cleo/acts_as_cleo'
|
3
|
+
require File.dirname(__FILE__) + '/xml/result'
|
3
4
|
|
4
|
-
#
|
5
|
-
require File.dirname(__FILE__) + '/
|
6
|
-
require File.dirname(__FILE__) + '/acts_as_cleo/class_methods'
|
7
|
-
require File.dirname(__FILE__) + '/acts_as_cleo/instance_methods'
|
8
|
-
|
9
|
-
module ActsAsCleo
|
10
|
-
include ActsMethods
|
11
|
-
|
12
|
-
require 'rails/railtie' if defined?(Rails)
|
13
|
-
end
|
14
|
-
|
15
|
-
ActiveRecord::Base.extend ActsAsCleo
|
5
|
+
#require File.dirname(__FILE__) + '/acts_as_cleo_connection/acts_as_cleo_connection'
|
6
|
+
#require File.dirname(__FILE__) + '/xml/connection'
|
@@ -0,0 +1,11 @@
|
|
1
|
+
#Load ActsAsCleo method load
|
2
|
+
require File.dirname(__FILE__) + '/acts_methods'
|
3
|
+
require File.dirname(__FILE__) + '/class_methods'
|
4
|
+
require File.dirname(__FILE__) + '/instance_methods'
|
5
|
+
|
6
|
+
module ActsAsCleo
|
7
|
+
include ActsMethods
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
ActiveRecord::Base.extend ActsAsCleo
|
@@ -2,11 +2,11 @@ module ActsAsCleo
|
|
2
2
|
module InstanceMethods
|
3
3
|
# callback hooks to keep cleo insync with data
|
4
4
|
def create_cleo
|
5
|
-
Cleo.create(self)
|
5
|
+
Cleo::ElementServer.create(self)
|
6
6
|
end
|
7
7
|
|
8
8
|
def update_cleo
|
9
|
-
Cleo.update(self)
|
9
|
+
Cleo::ElementServer.update(self)
|
10
10
|
end
|
11
11
|
|
12
12
|
def remove_from_cleo
|
@@ -14,12 +14,12 @@ module ActsAsCleo
|
|
14
14
|
current_cleo_id = self.cleo_id
|
15
15
|
cr.delete
|
16
16
|
|
17
|
-
Cleo.delete(current_cleo_id)
|
17
|
+
Cleo::ElementServer.delete(current_cleo_id)
|
18
18
|
end
|
19
19
|
|
20
20
|
def set_cleo_id
|
21
|
-
cr = Cleo::
|
22
|
-
cr = Cleo::
|
21
|
+
cr = Cleo::Element.find(:first, :conditions => ["record_type = ? and record_id = ?", record_type, self.id])
|
22
|
+
cr = Cleo::Element.create(:record_type => record_type, :record_id => self.id) if cr.nil?
|
23
23
|
end#
|
24
24
|
#end callback hooks
|
25
25
|
|
@@ -32,8 +32,8 @@ module ActsAsCleo
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def to_cleo_result
|
35
|
-
#take self and change it into a Cleo::Result and return
|
36
|
-
cr = Cleo::Result.new
|
35
|
+
#take self and change it into a Cleo::Xml::Result and return
|
36
|
+
cr = Cleo::Xml::Result.new
|
37
37
|
cr.term = []
|
38
38
|
|
39
39
|
to_process = []
|
@@ -70,7 +70,7 @@ module ActsAsCleo
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def cleo_reference
|
73
|
-
Cleo::
|
73
|
+
Cleo::Element.find(:first, :conditions => ["record_type = ? and record_id = ?", record_type, self.id])
|
74
74
|
end
|
75
75
|
|
76
76
|
private
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#Load Cleo
|
2
|
+
require File.dirname(__FILE__ + '/cleo')
|
3
|
+
|
4
|
+
#Load CleoConnection modules
|
5
|
+
%w{acts_methods class_methods instance_methods}.each do |l|
|
6
|
+
require File.dirname(__FILE__ + "/acts_as_cleo_connection/#{l}"
|
7
|
+
end
|
8
|
+
|
9
|
+
module ActsAsCleoConnection
|
10
|
+
include ActsMethods
|
11
|
+
end
|
12
|
+
|
13
|
+
ActiveRecord::Base.extend ActsAsCleoConnection
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module ActsAsCleoConnection
|
2
|
+
module ActsMethods
|
3
|
+
def acts_as_cleo_connection(opts = {})
|
4
|
+
#push in Instance Methods
|
5
|
+
include InstanceMethods
|
6
|
+
|
7
|
+
after_create :create_cleo_connection
|
8
|
+
after_update :update_cleo_connection
|
9
|
+
before_destroy :remove_cleo_connection
|
10
|
+
|
11
|
+
#Target and Origin calls
|
12
|
+
cattr_accessor :cleo_target
|
13
|
+
cattr_accessor :cleo_origin
|
14
|
+
cattr_accessor :cleo_type
|
15
|
+
|
16
|
+
#Set taggign calls
|
17
|
+
self.cleo_origin = opts[:origin]
|
18
|
+
self.cleo_target = opts[:target]
|
19
|
+
self.cleo_type = opts[:type]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module ActsAsCleoConnection
|
2
|
+
module InstanceMethods
|
3
|
+
def create_cleo_connection
|
4
|
+
Cleo::Connection.create(self)
|
5
|
+
end
|
6
|
+
|
7
|
+
def update_cleo_connection
|
8
|
+
Cleo::Connection.update(self)
|
9
|
+
end
|
10
|
+
|
11
|
+
def remove_cleo_connection
|
12
|
+
Cleo::Connection.delete(self)
|
13
|
+
end
|
14
|
+
|
15
|
+
def disable_cleo_connection
|
16
|
+
Cleo::Connection.disable(self)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Cleo
|
2
|
+
class Base
|
3
|
+
cattr_accessor :async
|
4
|
+
cattr_accessor :queue
|
5
|
+
cattr_accessor :base_url
|
6
|
+
cattr_accessor :auto_flush
|
7
|
+
|
8
|
+
def self.async?
|
9
|
+
async == true
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.auto_flush?
|
13
|
+
auto_flush == true
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.good_response_code?(response)
|
17
|
+
case response
|
18
|
+
when Net::HTTPOK
|
19
|
+
Cleo.flush if self.auto_flush?
|
20
|
+
true # success response
|
21
|
+
when Net::HTTPClientError, Net::HTTPInternalServerError
|
22
|
+
false # non-success response
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/cleo/cleo.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
#Load Cleo Sub Modules
|
2
|
+
require File.dirname(__FILE__) + '/base_server'
|
3
|
+
require File.dirname(__FILE__) + '/connection_server'
|
4
|
+
require File.dirname(__FILE__) + '/element_server'
|
5
|
+
require File.dirname(__FILE__) + '/service'
|
6
|
+
|
7
|
+
module Cleo
|
8
|
+
def self.query(query)
|
9
|
+
Cleo::ElementServer.query(query)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.net_http
|
13
|
+
uri = URI.parse(Cleo::Service.url)
|
14
|
+
Net::HTTP.new(uri.host, uri.port)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.get(uri)
|
18
|
+
response = net_http.request(Net::HTTP::Get.new(uri.request_uri))
|
19
|
+
|
20
|
+
return response if Cleo::Service.good_response_code?(response)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.flush
|
24
|
+
uri = URI.parse Cleo::Service.url + "elements/flush"
|
25
|
+
request = Net::HTTP::Post.new(uri.path)
|
26
|
+
Net::HTTP.new(uri.host, uri.port).start { |http| http.request request }
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.configure(new_config)
|
30
|
+
parts = new_config[:url].split("/")
|
31
|
+
parts -= %w{rest elements connections}
|
32
|
+
parts += %w{rest}
|
33
|
+
|
34
|
+
Cleo::Service.base_url = parts.join('/') + '/'
|
35
|
+
|
36
|
+
Cleo::ElementServer.url = (parts + %w{elements}).join('/') + '/'
|
37
|
+
Cleo::ConnectionServer.url = (parts + %w{connections}).join('/') + '/'
|
38
|
+
|
39
|
+
if new_config.has_key?(:async)
|
40
|
+
Cleo::Service.async = new_config[:async]
|
41
|
+
elsif new_config.has_key?(:run_async)
|
42
|
+
Cleo::Service.async = new_config[:run_async]
|
43
|
+
else
|
44
|
+
Cleo::Service.async = false
|
45
|
+
end
|
46
|
+
|
47
|
+
Cleo::Service.auto_flush = new_config.has_key?(:auto_flush) ? new_config[:auto_flush] : true
|
48
|
+
Cleo::Service.queue = new_config.has_key?(:queue) ? new_config[:queue] : "cleo"
|
49
|
+
|
50
|
+
if new_config.has_key?(:auto_enable_queue) && new_config[:auto_enable_queue]
|
51
|
+
env = ENV['QUEUE'] || ''
|
52
|
+
ENV['QUEUE'] = (env.split(',') << Cleo::Service.queue).uniq.join(',')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.load_configuration
|
57
|
+
cleo_file_path = File.join( Rails.root, 'config', 'cleo.yml' )
|
58
|
+
|
59
|
+
if File.exists?( cleo_file_path )
|
60
|
+
Cleo.configure(YAML::load_file( cleo_file_path )[Rails.env].symbolize_keys)
|
61
|
+
true
|
62
|
+
else
|
63
|
+
raise ArgumentError.new("No configuration file found. Check for cleo.yml")
|
64
|
+
false
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Cleo
|
2
|
+
class ConnectionServer < Cleo::Base
|
3
|
+
cattr_accessor :url
|
4
|
+
|
5
|
+
#define delete, update, create dynamically in order to set up reddis backed calls if enabled
|
6
|
+
#Cleo.update(obj) will respect async settings
|
7
|
+
%w{delete update create disable}.each do |mn|
|
8
|
+
define_singleton_method(mn.to_s) do |obj|
|
9
|
+
if Cleo::Service.async?
|
10
|
+
Resque.enqueue(Cleo::ConnectionProcessor, mn, obj.class.name, obj.id)
|
11
|
+
else
|
12
|
+
Cleo::ConnectionServer.send("execute_#{mn}".to_sym, obj)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.execute_create(con)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.execute_disable(con)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.execute_delete(con)
|
24
|
+
self.execute_disable(con)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.execute_update(con)
|
28
|
+
source = con.send("#{cleo_source}")
|
29
|
+
target = con.send("#{cleo_target}")
|
30
|
+
|
31
|
+
sender = Cleo::Xml::Connection.new(:source => source.cleo_id,
|
32
|
+
:target => target.cleo_id,
|
33
|
+
:active => con.active,
|
34
|
+
:strength => con.strength,
|
35
|
+
:type => con.cleo_type
|
36
|
+
)
|
37
|
+
|
38
|
+
uri = URI.parse Cleo::Service.connection_url + "_"
|
39
|
+
request = Net::HTTP::Post.new(uri.path)
|
40
|
+
|
41
|
+
request.body = sender.to_xml
|
42
|
+
request.content_type = 'application/xml'
|
43
|
+
|
44
|
+
response = Net::HTTP.new(uri.host, uri.port).start { |http| http.request request }
|
45
|
+
|
46
|
+
return good_response_code?(response)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
data/lib/cleo/element.rb
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
module Cleo
|
2
|
+
class ElementServer < Cleo::Base
|
3
|
+
cattr_accessor :url
|
4
|
+
|
5
|
+
#define delete, update, create dynamically in order to set up reddis backed calls if enabled
|
6
|
+
#Cleo.update(obj) will respect async settings
|
7
|
+
%w{delete update create}.each do |mn|
|
8
|
+
define_singleton_method(mn.to_s) do |obj|
|
9
|
+
if Cleo::Service.async?
|
10
|
+
Resque.enqueue(Cleo::ElementProcessor, mn, obj.class.name, obj.id)
|
11
|
+
else
|
12
|
+
Cleo::ElementServer.send("execute_#{mn}".to_sym, obj)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.find(id)
|
18
|
+
#query by element/id to get from cleo fast
|
19
|
+
uri = URI.parse(Cleo::Service.element_server_url + "#{id}")
|
20
|
+
response = Cleo.get(uri)
|
21
|
+
|
22
|
+
return nil if response.body.blank?
|
23
|
+
|
24
|
+
Cleo::Xml::Result.parse(response.body, :single => true)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.query(query_param)
|
28
|
+
uri = URI.parse(Cleo::Service.element_server_url + "search?query=#{CGI::escape query_param}")
|
29
|
+
response = Cleo.get(uri)
|
30
|
+
|
31
|
+
Cleo::Xml::Result.parse(response.body, :single => false)
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.execute_update(obj)
|
35
|
+
obj = obj.to_cleo_result unless obj.is_a?(Cleo::Xml::Result)
|
36
|
+
|
37
|
+
uri = URI.parse Cleo::Service.element_server_url + "#{obj.id}"
|
38
|
+
request = Net::HTTP::Put.new(uri.path)
|
39
|
+
|
40
|
+
request.content_type = 'application/xml'
|
41
|
+
request.body = obj.to_xml
|
42
|
+
response = Net::HTTP.new(uri.host, uri.port).start { |http| http.request request }
|
43
|
+
|
44
|
+
return good_response_code?(response)
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.execute_delete(obj_or_id)
|
48
|
+
cleo_id = nil
|
49
|
+
|
50
|
+
if obj_or_id.is_a?(Fixnum)
|
51
|
+
cleo_id = obj_or_id
|
52
|
+
elsif obj_or_id.respond_to?("cleo_id")
|
53
|
+
cleo_id = obj_or_id.cleo_id
|
54
|
+
elsif obj_or_id.is_a?(Cleo::Xml::Result)
|
55
|
+
cleo_id = obj_or_id.id
|
56
|
+
end
|
57
|
+
|
58
|
+
uri = URI.parse Cleo::Service.element_server_url + "#{cleo_id}"
|
59
|
+
request = Net::HTTP::Delete.new(uri.path)
|
60
|
+
|
61
|
+
response = Net::HTTP.new(uri.host, uri.port).start { |http| http.request request }
|
62
|
+
|
63
|
+
return good_response_code?(response)
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.execute_create(obj)
|
67
|
+
obj = obj.to_cleo_result unless obj.is_a?(Cleo::Xml::Result)
|
68
|
+
|
69
|
+
uri = URI.parse self.url + "_"
|
70
|
+
request = Net::HTTP::Post.new(uri.path)
|
71
|
+
|
72
|
+
request.body = obj.to_xml
|
73
|
+
request.content_type = 'application/xml'
|
74
|
+
|
75
|
+
response = Net::HTTP.new(uri.host, uri.port).start { |http| http.request request }
|
76
|
+
|
77
|
+
return good_response_code?(response)
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
data/lib/cleo/service.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
module Cleo
|
2
|
+
class Service < Cleo::Base
|
3
|
+
def self.url
|
4
|
+
return self.base_url
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.connection_server_url
|
8
|
+
return Cleo::ConnectionServer.url.blank? ? nil : Cleo::ConnectionServer.url
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.element_server_url
|
12
|
+
return Cleo::ElementServer.url.blank? ? nil : Cleo::ElementServer.url
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -1 +1 @@
|
|
1
|
-
Cleo
|
1
|
+
Cleo.load_configuration
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Cleo
|
2
|
+
module ConnectionProcessor
|
3
|
+
@queue = Cleo::ConnectionServer.queue
|
4
|
+
def self.perform(operation, klass, klass_id)
|
5
|
+
on_me = Kernel.const_get(klass).find(klass_id)
|
6
|
+
|
7
|
+
case operation.downcase
|
8
|
+
when "create"
|
9
|
+
Cleo::ConnectionServer.execute_create(on_me)
|
10
|
+
when "update"
|
11
|
+
Cleo::ConnectionServer.execute_update(on_me)
|
12
|
+
when "delete"
|
13
|
+
Cleo::ConnectionServer.execute_delete(on_me)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,16 +1,15 @@
|
|
1
1
|
module Cleo
|
2
|
-
module
|
3
|
-
@queue = Cleo::
|
4
|
-
|
2
|
+
module ElementProcessor
|
3
|
+
@queue = Cleo::ElementServer.queue
|
5
4
|
def self.perform(operation, klass, klass_id)
|
6
5
|
on_me = Kernel.const_get(klass).find(klass_id)
|
7
6
|
case operation.downcase
|
8
7
|
when "create"
|
9
|
-
Cleo.execute_create(on_me)
|
8
|
+
Cleo::ElementServer.execute_create(on_me)
|
10
9
|
when "update"
|
11
|
-
Cleo.execute_update(on_me)
|
10
|
+
Cleo::ElementServer.execute_update(on_me)
|
12
11
|
when "delete"
|
13
|
-
Cleo.execute_delete(on_me)
|
12
|
+
Cleo::ElementServer.execute_delete(on_me)
|
14
13
|
end
|
15
14
|
end
|
16
15
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'happymapper'
|
2
|
+
|
3
|
+
module Cleo
|
4
|
+
module Xml
|
5
|
+
class Connection
|
6
|
+
include HappyMapper
|
7
|
+
tag 'connection'
|
8
|
+
|
9
|
+
element :source, Integer
|
10
|
+
element :target, Integer
|
11
|
+
|
12
|
+
element :active, Boolean
|
13
|
+
element :strength, Float
|
14
|
+
element :timestamp, Time
|
15
|
+
element :type, String
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/xml/result.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'happymapper'
|
2
|
+
|
3
|
+
module Cleo
|
4
|
+
module Xml
|
5
|
+
class Result
|
6
|
+
include HappyMapper
|
7
|
+
tag 'element'
|
8
|
+
|
9
|
+
has_many :term, String, :tag => 'term'
|
10
|
+
element :id, Integer
|
11
|
+
element :name, String
|
12
|
+
element :score, Float
|
13
|
+
element :timestamp, Time
|
14
|
+
element :title, String
|
15
|
+
element :url, String
|
16
|
+
|
17
|
+
alias :terms :term
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/test/config/cleo.yml
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
# Config file for the acts_as_cleo plugin.
|
2
2
|
development:
|
3
|
-
url: "http://localhost:
|
3
|
+
url: "http://localhost:3030/cleo-primer/"
|
4
4
|
|
5
5
|
test:
|
6
|
-
url: "http://localhost:
|
6
|
+
url: "http://localhost:3030/cleo-primer/"
|
7
7
|
|
8
8
|
production:
|
9
|
-
url: "http://localhost:
|
9
|
+
url: "http://localhost:3030/cleo-primer/"
|
10
10
|
run_async: true
|
11
11
|
queue: "cleo"
|
12
12
|
|
13
13
|
async_test:
|
14
|
-
url: "http://localhost:
|
14
|
+
url: "http://localhost:3030/cleo-primer/"
|
15
15
|
run_async: true
|
16
16
|
queue: "cleo"
|
Binary file
|
data/test/helper.rb
CHANGED
@@ -8,9 +8,20 @@ require 'bundler'
|
|
8
8
|
require 'active_record'
|
9
9
|
require 'net/http'
|
10
10
|
|
11
|
-
#require acts_as_cleo
|
12
11
|
|
13
|
-
|
12
|
+
#load Cleo Module for result and server
|
13
|
+
require File.dirname(__FILE__) + '/../lib/cleo/cleo'
|
14
|
+
|
15
|
+
#load Cleo reference
|
16
|
+
require File.dirname(__FILE__) + '/../lib/cleo/element'
|
17
|
+
|
18
|
+
#load xml elements
|
19
|
+
require File.dirname(__FILE__) + '/../lib/xml/connection'
|
20
|
+
require File.dirname(__FILE__) + '/../lib/xml/result'
|
21
|
+
|
22
|
+
#require acts_as_cleo
|
23
|
+
require File.dirname(__FILE__) + '/../lib/acts_as_cleo/acts_as_cleo'
|
24
|
+
#require File.dirname(__FILE__) + '/../lib/acts_as_cleo_connection'
|
14
25
|
|
15
26
|
begin
|
16
27
|
Bundler.setup(:default, :development)
|
@@ -42,7 +53,7 @@ models_dir = File.join(file_dirname, 'models')
|
|
42
53
|
Dir[ models_dir + '/*.rb'].each { |m| require m }
|
43
54
|
|
44
55
|
server_config = {:url => "http://localhost:8080/cleo-primer/", :run_async => false}
|
45
|
-
Cleo
|
56
|
+
Cleo.configure server_config
|
46
57
|
|
47
58
|
class Test::Unit::TestCase
|
48
59
|
def setup
|
@@ -4,29 +4,29 @@ class TestActiveRecordCallbacHooks < Test::Unit::TestCase
|
|
4
4
|
should "have all callbacks functioning properly" do
|
5
5
|
book = Book.new(:name => "set cleo id", :author => "Rob Meyer")
|
6
6
|
assert_nil book.cleo_id
|
7
|
-
assert_nil Cleo::
|
7
|
+
assert_nil Cleo::Element.find(:first, :conditions => ["record_type = ? and record_id = ?", "Book", book.id])
|
8
8
|
|
9
9
|
assert book.save!
|
10
10
|
book_id = book.id
|
11
11
|
|
12
12
|
assert book.cleo_id
|
13
|
-
ref = Cleo::
|
13
|
+
ref = Cleo::Element.find(:first, :conditions => ["record_type = ? and record_id = ?", "Book", book_id])
|
14
14
|
assert_not_nil ref
|
15
15
|
|
16
16
|
assert book.destroy
|
17
|
-
assert_nil Cleo::
|
18
|
-
assert_nil Cleo.find(ref.id)
|
17
|
+
assert_nil Cleo::Element.find(:first, :conditions => ["record_type = ? and record_id = ?", "Book", book_id])
|
18
|
+
assert_nil Cleo::ElementServer.find(ref.id)
|
19
19
|
end
|
20
20
|
|
21
21
|
should "update cleo on record update" do
|
22
22
|
book = Book.new(:name => "update cleo", :author => "Rob Meyer")
|
23
23
|
assert book.save!
|
24
|
-
cleo_record = Cleo.find(book.cleo_id)
|
24
|
+
cleo_record = Cleo::ElementServer.find(book.cleo_id)
|
25
25
|
assert_not_nil cleo_record
|
26
26
|
book.name = "Updated my Cleo"
|
27
27
|
assert book.save!
|
28
28
|
|
29
|
-
updated_cleo_record = Cleo.find(book.cleo_id)
|
29
|
+
updated_cleo_record = Cleo::ElementServer.find(book.cleo_id)
|
30
30
|
assert_equal book.name.downcase, updated_cleo_record.name
|
31
31
|
assert_not_equal cleo_record.name, updated_cleo_record.name
|
32
32
|
|
@@ -7,11 +7,11 @@ class TestClassMethods < Test::Unit::TestCase
|
|
7
7
|
|
8
8
|
should "find record with book name" do
|
9
9
|
book = Book.create(:name => "Otherland", :author => "Tad Williams")
|
10
|
-
assert Cleo.create(book)
|
10
|
+
assert Cleo::ElementServer.create(book)
|
11
11
|
book_cleo_id = book.cleo_id
|
12
|
-
assert Cleo.find(book_cleo_id)
|
12
|
+
assert Cleo::ElementServer.find(book_cleo_id)
|
13
13
|
|
14
|
-
assert Cleo.delete(book_cleo_id), "Didn't Delete"
|
14
|
+
assert Cleo::ElementServer.delete(book_cleo_id), "Didn't Delete"
|
15
15
|
end
|
16
16
|
|
17
17
|
should "be able to query from Klass" do
|
data/test/unit/test_cleo.rb
CHANGED
@@ -4,69 +4,48 @@ class TestCleo < Test::Unit::TestCase
|
|
4
4
|
def setup
|
5
5
|
file = File.open("#{Dir.pwd}/test/data/xml/cleo/testing_element.xml")
|
6
6
|
contents = file.read
|
7
|
-
@wedge = Cleo::Result.parse(contents, :singluar => true)
|
7
|
+
@wedge = Cleo::Xml::Result.parse(contents, :singluar => true)
|
8
8
|
end
|
9
9
|
|
10
10
|
should "create then destroy Testing Object " do
|
11
|
-
code = Cleo.create(@wedge)
|
11
|
+
code = Cleo::ElementServer.create(@wedge)
|
12
12
|
assert code
|
13
13
|
|
14
|
-
wa = Cleo.find(@wedge.id)
|
14
|
+
wa = Cleo::ElementServer.find(@wedge.id)
|
15
15
|
assert_not_nil wa
|
16
16
|
assert_equal @wedge.id, wa.id
|
17
17
|
|
18
|
-
assert Cleo.delete(wa.id), "Didn't delete"
|
18
|
+
assert Cleo::ElementServer.delete(wa.id), "Didn't delete"
|
19
19
|
end
|
20
20
|
|
21
|
-
should "get google results from qery" do
|
22
|
-
r = Cleo.query("goog")
|
23
|
-
assert_not_nil r
|
24
|
-
assert_equal 0, r.count
|
25
|
-
assert_kind_of Array, r
|
26
|
-
end
|
27
|
-
|
28
|
-
=begin
|
29
|
-
This is a bad test and require default value to be in Cleo. Baddd test
|
30
|
-
should "fetch the same record by id" do
|
31
|
-
r = Cleo.query("goog").first
|
32
|
-
assert_equal r.id.blank?, false
|
33
|
-
|
34
|
-
|
35
|
-
i = Cleo.find(r.id)
|
36
|
-
assert_equal r.timestamp, i.timestamp
|
37
|
-
assert_equal r.id, i.id
|
38
|
-
end
|
39
|
-
=end
|
40
|
-
|
41
21
|
should "create, update, then destroy, Testing Object" do
|
42
|
-
code = Cleo.create(@wedge)
|
22
|
+
code = Cleo::ElementServer.create(@wedge)
|
43
23
|
assert code
|
44
24
|
|
45
|
-
wa = Cleo.find(@wedge.id)
|
25
|
+
wa = Cleo::ElementServer.find(@wedge.id)
|
46
26
|
assert_not_nil wa
|
47
27
|
assert_equal @wedge.id, wa.id
|
48
28
|
|
49
29
|
wa.name = "Luke Skywalker"
|
50
|
-
assert Cleo.update(wa)
|
30
|
+
assert Cleo::ElementServer.update(wa)
|
51
31
|
|
52
|
-
wa_update = Cleo.find(@wedge.id)
|
32
|
+
wa_update = Cleo::ElementServer.find(@wedge.id)
|
53
33
|
assert_equal "Luke Skywalker", wa_update.name
|
54
34
|
|
55
|
-
assert Cleo.delete(wa.id), "didn't delete"
|
35
|
+
assert Cleo::ElementServer.delete(wa.id), "didn't delete"
|
56
36
|
end
|
57
37
|
|
58
38
|
should "change the configuration of the server" do
|
59
39
|
server_config = {:url => "http://localhost:8080/cleo-primer/", :run_async => true, :queue => "cleo"}
|
60
40
|
|
61
|
-
Cleo
|
62
|
-
assert Cleo::
|
63
|
-
assert "cleo", Cleo::
|
41
|
+
Cleo.configure server_config
|
42
|
+
assert Cleo::Service.async?
|
43
|
+
assert "cleo", Cleo::Service.queue.to_s
|
64
44
|
|
65
45
|
|
66
46
|
server_config = {:url => "http://localhost:8080/cleo-primer/", :run_async => false}
|
67
|
-
Cleo
|
68
|
-
assert_same false, Cleo::
|
69
|
-
assert "cleo", Cleo::
|
47
|
+
Cleo.configure server_config
|
48
|
+
assert_same false, Cleo::Service.async?
|
49
|
+
assert "cleo", Cleo::Service.queue.to_s
|
70
50
|
end
|
71
51
|
end
|
72
|
-
|
@@ -4,7 +4,7 @@ class TestResult < Test::Unit::TestCase
|
|
4
4
|
def test_parser_gets_correct_element
|
5
5
|
file = File.open("#{Dir.pwd}/test/data/xml/cleo/element.xml")
|
6
6
|
contents = file.read
|
7
|
-
cr = Cleo::Result.parse(contents, :singluar => true)
|
7
|
+
cr = Cleo::Xml::Result.parse(contents, :singluar => true)
|
8
8
|
|
9
9
|
assert_not_equal cr, nil
|
10
10
|
assert_equal cr.name, "Cleo Inc."
|
@@ -13,7 +13,7 @@ class TestResult < Test::Unit::TestCase
|
|
13
13
|
def test_parser_gets_many_elements
|
14
14
|
file = File.open("#{Dir.pwd}/test/data/xml/cleo/elements.xml")
|
15
15
|
contents = file.read
|
16
|
-
cr = Cleo::Result.parse(contents)
|
16
|
+
cr = Cleo::Xml::Result.parse(contents)
|
17
17
|
|
18
18
|
assert_equal 7, cr.count
|
19
19
|
assert_match /google/i, cr.first.name
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_cleo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-04-11 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: happymapper
|
16
|
-
requirement: &
|
16
|
+
requirement: &70296838476020 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70296838476020
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rails
|
27
|
-
requirement: &
|
27
|
+
requirement: &70296838475540 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 3.1.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70296838475540
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: resque
|
38
|
-
requirement: &
|
38
|
+
requirement: &70296838475060 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70296838475060
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: shoulda
|
49
|
-
requirement: &
|
49
|
+
requirement: &70296838474580 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70296838474580
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rdoc
|
60
|
-
requirement: &
|
60
|
+
requirement: &70296838474100 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '3.12'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70296838474100
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: bundler
|
71
|
-
requirement: &
|
71
|
+
requirement: &70296838473620 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 1.0.0
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70296838473620
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: jeweler
|
82
|
-
requirement: &
|
82
|
+
requirement: &70296838473140 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.8.3
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70296838473140
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: simplecov
|
93
|
-
requirement: &
|
93
|
+
requirement: &70296838472660 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70296838472660
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: ruby-debug19
|
104
|
-
requirement: &
|
104
|
+
requirement: &70296838472180 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70296838472180
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: fixtures
|
115
|
-
requirement: &
|
115
|
+
requirement: &70296838471700 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *70296838471700
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: sqlite3
|
126
|
-
requirement: &
|
126
|
+
requirement: &70296838471220 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ! '>='
|
@@ -131,10 +131,10 @@ dependencies:
|
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *70296838471220
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: database_cleaner
|
137
|
-
requirement: &
|
137
|
+
requirement: &70296838470740 !ruby/object:Gem::Requirement
|
138
138
|
none: false
|
139
139
|
requirements:
|
140
140
|
- - ! '>='
|
@@ -142,7 +142,7 @@ dependencies:
|
|
142
142
|
version: '0'
|
143
143
|
type: :development
|
144
144
|
prerelease: false
|
145
|
-
version_requirements: *
|
145
|
+
version_requirements: *70296838470740
|
146
146
|
description: LinkedIn Open Source type ahead tool's REST API as a ruby gem. Now with
|
147
147
|
Reddis support.
|
148
148
|
email: Blue.Dog.Archolite@gmail.com
|
@@ -152,6 +152,7 @@ extra_rdoc_files:
|
|
152
152
|
- LICENSE.txt
|
153
153
|
- README.rdoc
|
154
154
|
files:
|
155
|
+
- .rvmrc
|
155
156
|
- Gemfile
|
156
157
|
- LICENSE.txt
|
157
158
|
- README.rdoc
|
@@ -159,23 +160,32 @@ files:
|
|
159
160
|
- VERSION
|
160
161
|
- acts_as_cleo.gemspec
|
161
162
|
- lib/acts_as_cleo.rb
|
163
|
+
- lib/acts_as_cleo/acts_as_cleo.rb
|
162
164
|
- lib/acts_as_cleo/acts_methods.rb
|
163
165
|
- lib/acts_as_cleo/class_methods.rb
|
164
166
|
- lib/acts_as_cleo/instance_methods.rb
|
165
167
|
- lib/acts_as_cleo/private_methods.rb
|
166
168
|
- lib/acts_as_cleo/result.rb
|
167
169
|
- lib/acts_as_cleo/version.rb
|
168
|
-
- lib/
|
169
|
-
- lib/
|
170
|
-
- lib/
|
171
|
-
- lib/cleo/
|
170
|
+
- lib/acts_as_cleo_connection/acts_as_cleo_connection.rb
|
171
|
+
- lib/acts_as_cleo_connection/acts_methods.rb
|
172
|
+
- lib/acts_as_cleo_connection/instance_methods.rb
|
173
|
+
- lib/cleo/base_server.rb
|
174
|
+
- lib/cleo/cleo.rb
|
175
|
+
- lib/cleo/connection_server.rb
|
176
|
+
- lib/cleo/element.rb
|
177
|
+
- lib/cleo/element_server.rb
|
178
|
+
- lib/cleo/service.rb
|
172
179
|
- lib/generators/acts_as_cleo/install/install_generator.rb
|
173
180
|
- lib/generators/acts_as_cleo/install/templates/cleo.yml
|
174
181
|
- lib/generators/acts_as_cleo/install/templates/cleo_initalizer.rb
|
175
182
|
- lib/generators/acts_as_cleo/install/templates/install.rb
|
176
|
-
- lib/generators/acts_as_cleo/install/templates/jobs/
|
183
|
+
- lib/generators/acts_as_cleo/install/templates/jobs/cleo_connection_processor.rb
|
184
|
+
- lib/generators/acts_as_cleo/install/templates/jobs/cleo_element_processor.rb
|
177
185
|
- lib/generators/acts_as_cleo/install/templates/update.rb
|
178
186
|
- lib/generators/acts_as_cleo/update/update_generator.rb
|
187
|
+
- lib/xml/connection.rb
|
188
|
+
- lib/xml/result.rb
|
179
189
|
- test/config/cleo.yml
|
180
190
|
- test/data/xml/cleo/element.xml
|
181
191
|
- test/data/xml/cleo/elements.xml
|
@@ -188,6 +198,7 @@ files:
|
|
188
198
|
- test/db/migrate/005_create_authors.rb
|
189
199
|
- test/db/migrate/006_create_postings.rb
|
190
200
|
- test/db/migrate/007_cleo_table.rb
|
201
|
+
- test/db/testing_db.sqlite
|
191
202
|
- test/fixtures/authors.yml
|
192
203
|
- test/fixtures/books.yml
|
193
204
|
- test/fixtures/categories.yml
|
data/lib/cleo.rb
DELETED
@@ -1,116 +0,0 @@
|
|
1
|
-
module Cleo
|
2
|
-
@@net_http = nil
|
3
|
-
|
4
|
-
#define delete, update, create dynamically in order to set up reddis backed calls if enabled
|
5
|
-
#Cleo.update(obj) will respect async settings
|
6
|
-
%w{delete update create}.each do |mn|
|
7
|
-
define_singleton_method(mn.to_s) do |obj|
|
8
|
-
if Cleo::Server.async?
|
9
|
-
Resque.enqueue(Cleo::Processor, mn, obj.class.name, obj.id)
|
10
|
-
else
|
11
|
-
Cleo.send("execute_#{mn}".to_sym, obj)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.find(id)
|
17
|
-
#query by element/id to get from cleo fast
|
18
|
-
uri = URI.parse(Cleo::Server.url + "#{id}")
|
19
|
-
response = get(uri)
|
20
|
-
|
21
|
-
return nil if response.body.blank?
|
22
|
-
|
23
|
-
Cleo::Result.parse(response.body, :single => true)
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.query(query_param)
|
27
|
-
uri = URI.parse(Cleo::Server.url + "search?query=#{CGI::escape query_param}")
|
28
|
-
response = get(uri)
|
29
|
-
|
30
|
-
Cleo::Result.parse(response.body, :single => false)
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.execute_update(obj)
|
34
|
-
obj = obj.to_cleo_result unless obj.is_a?(Cleo::Result)
|
35
|
-
|
36
|
-
uri = URI.parse Cleo::Server.url + "#{obj.id}"
|
37
|
-
request = Net::HTTP::Put.new(uri.path)
|
38
|
-
|
39
|
-
request.content_type = 'application/xml'
|
40
|
-
request.body = obj.to_xml
|
41
|
-
response = Net::HTTP.new(uri.host, uri.port).start { |http| http.request request }
|
42
|
-
|
43
|
-
return good_response_code?(response)
|
44
|
-
end
|
45
|
-
|
46
|
-
|
47
|
-
def self.execute_delete(obj_or_id)
|
48
|
-
|
49
|
-
cleo_id = nil
|
50
|
-
|
51
|
-
if obj_or_id.is_a?(Cleo::Result)
|
52
|
-
cleo_id = obj_or_id.id
|
53
|
-
elsif obj_or_id.is_a?(Fixnum)
|
54
|
-
cleo_id = obj_or_id
|
55
|
-
elsif obj_or_id.respond_to?("cleo_id")
|
56
|
-
cleo_id = obj_or_id.cleo_id
|
57
|
-
end
|
58
|
-
|
59
|
-
uri = URI.parse Cleo::Server.url + "#{cleo_id}"
|
60
|
-
request = Net::HTTP::Delete.new(uri.path)
|
61
|
-
|
62
|
-
response = Net::HTTP.new(uri.host, uri.port).start { |http| http.request request }
|
63
|
-
|
64
|
-
return good_response_code?(response)
|
65
|
-
end
|
66
|
-
|
67
|
-
def self.execute_create(obj)
|
68
|
-
obj = obj.to_cleo_result unless obj.is_a?(Cleo::Result)
|
69
|
-
|
70
|
-
uri = URI.parse Cleo::Server.url + "_"
|
71
|
-
request = Net::HTTP::Post.new(uri.path)
|
72
|
-
|
73
|
-
request.body = obj.to_xml
|
74
|
-
request.content_type = 'application/xml'
|
75
|
-
|
76
|
-
response = Net::HTTP.new(uri.host, uri.port).start { |http| http.request request }
|
77
|
-
|
78
|
-
return good_response_code?(response)
|
79
|
-
end
|
80
|
-
|
81
|
-
private
|
82
|
-
def self.net_http
|
83
|
-
@@net_http unless @@net_http.blank?
|
84
|
-
uri = URI.parse(Cleo::Server.url)
|
85
|
-
|
86
|
-
@@net_http = Net::HTTP.new(uri.host, uri.port)
|
87
|
-
end
|
88
|
-
|
89
|
-
def self.get(uri)
|
90
|
-
response = net_http.request(Net::HTTP::Get.new(uri.request_uri))
|
91
|
-
|
92
|
-
return response if good_response_code?(response)
|
93
|
-
end
|
94
|
-
|
95
|
-
private
|
96
|
-
def self.flush
|
97
|
-
uri = URI.parse Cleo::Server.url + "flush"
|
98
|
-
request = Net::HTTP::Post.new(uri.path)
|
99
|
-
Net::HTTP.new(uri.host, uri.port).start { |http| http.request request }
|
100
|
-
end
|
101
|
-
|
102
|
-
def self.good_response_code?(response)
|
103
|
-
case response
|
104
|
-
when Net::HTTPOK
|
105
|
-
flush if Cleo::Server.auto_flush?
|
106
|
-
true # success response
|
107
|
-
when Net::HTTPClientError, Net::HTTPInternalServerError
|
108
|
-
false # non-success response
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
#require Result Class
|
114
|
-
require 'cleo/server'
|
115
|
-
require 'cleo/result'
|
116
|
-
require 'cleo/reference'
|
data/lib/cleo/reference.rb
DELETED
data/lib/cleo/result.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'happymapper'
|
2
|
-
|
3
|
-
module Cleo
|
4
|
-
class Result
|
5
|
-
include HappyMapper
|
6
|
-
tag 'element'
|
7
|
-
|
8
|
-
has_many :term, String, :tag => 'term'
|
9
|
-
element :id, Integer
|
10
|
-
element :name, String
|
11
|
-
element :score, Float
|
12
|
-
element :timestamp, Time
|
13
|
-
element :title, String
|
14
|
-
element :url, String
|
15
|
-
|
16
|
-
alias :terms :term
|
17
|
-
end
|
18
|
-
end
|
data/lib/cleo/server.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
module Cleo
|
2
|
-
class Server
|
3
|
-
@@configuration= {:url => 'http://cleo.testingserver.com/cleo-primer/', :run_async => false, :queue => "cleo"}
|
4
|
-
|
5
|
-
def self.configure(new_config)
|
6
|
-
parts = new_config[:url].split("/")
|
7
|
-
parts -= %w{rest elements}
|
8
|
-
parts += %w{rest elements}
|
9
|
-
@@configuration[:url] = parts.join('/') + '/'
|
10
|
-
|
11
|
-
if new_config.has_key?(:async)
|
12
|
-
@@configuration[:async] = new_config[:async]
|
13
|
-
elsif new_config.has_key?(:run_async)
|
14
|
-
@@configuration[:async] = new_config[:run_async]
|
15
|
-
else
|
16
|
-
@@configuration[:async] = false
|
17
|
-
end
|
18
|
-
|
19
|
-
@@configuration[:auto_flush] = new_config.has_key?(:auto_flush) ? new_config[:auto_flush] : true
|
20
|
-
@@configuration[:queue] = new_config.has_key?(:queue) ? new_config[:queue] : "cleo"
|
21
|
-
|
22
|
-
if new_config.has_key?(:auto_enable_queue) && new_config[:auto_enable_queue]
|
23
|
-
env = ENV['QUEUE'] || ''
|
24
|
-
ENV['QUEUE'] = (env.split(',') << @@configuration[:queue]).uniq.join(',')
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.load_configuration
|
29
|
-
cleo_file_path = File.join( Rails.root, 'config', 'cleo.yml' )
|
30
|
-
|
31
|
-
if File.exists?( cleo_file_path )
|
32
|
-
Cleo::Server.configure(YAML::load_file( cleo_file_path )[Rails.env].symbolize_keys)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
#meta these out
|
37
|
-
def self.url
|
38
|
-
@@configuration[:url]
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.auto_flush?
|
42
|
-
@@configuration[:auto_flush]
|
43
|
-
end
|
44
|
-
|
45
|
-
def self.async?
|
46
|
-
@@configuration[:async]
|
47
|
-
end
|
48
|
-
|
49
|
-
def self.queue
|
50
|
-
@@configuration[:queue].to_sym
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|