cmis_rabbit_queue 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,11 +9,11 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Nitesh"]
10
10
  spec.email = ["neethiwin@gmail.com"]
11
11
  spec.summary = ""
12
- spec.description = ""
12
+ spec.description = "Wrapper to Rabbit Queue"
13
13
  spec.homepage = ""
14
14
  spec.license = "MIT"
15
15
 
16
- spec.files = ["cmis_rabbit_queue.gemspec","lib/cmis_rabbit_queue.rb","lib/cmis_rabbit_queue/document.rb","lib/cmis_rabbit_queue/folder.rb","lib/cmis_rabbit_queue/object.rb","lib/cmis_rabbit_queue/repository.rb","lib/cmis_rabbit_queue/server.rb","lib/cmis_rabbit_queue/internal/connection.rb"]
16
+ spec.files = ["cmis_rabbit_queue.gemspec","lib/cmis_rabbit_queue.rb","lib/cmis_rabbit_queue/document.rb","lib/cmis_rabbit_queue/folder.rb","lib/cmis_rabbit_queue/object.rb","lib/cmis_rabbit_queue/server.rb","lib/cmis_rabbit_queue/internal/connection.rb"]
17
17
  spec.require_paths = ["lib"]
18
18
 
19
19
  spec.add_development_dependency "bundler", "~> 1.7"
@@ -1,36 +1,102 @@
1
-
2
1
  require "bunny"
2
+ require "thread"
3
3
 
4
4
  module CmisRabbitQueue
5
5
  class Connection
6
6
 
7
- # The connection object used connect Rabbit Queue
8
- attr_reader :connection
9
- # The channel used to retrive queue instance
10
- attr_reader :channel
11
- # The logical buffer
12
- attr_reader :queue
13
- # constructor
14
- def initialize(url, port)
15
- if @connection == nil
16
- @connection = Bunny.new(:hostname => url, :port => port)
17
- @connection.start
7
+ attr_reader :reply_queue
8
+ attr_accessor :response, :call_id
9
+ attr_reader :lock, :condition
10
+ def initialize(server_queue, url, port)
11
+ conn = Bunny.new(:automatically_recover => false, :hostname => url, :port => port)
12
+ conn.start
13
+ ch = conn.create_channel
14
+ @ch = ch
15
+ @x = ch.default_exchange
16
+ @server_queue = server_queue
17
+ @reply_queue = ch.queue("", :exclusive => true)
18
+
19
+ @lock = Mutex.new
20
+ @condition = ConditionVariable.new
21
+ that = self
22
+
23
+ @reply_queue.subscribe do |delivery_info, properties, payload|
24
+ if properties[:correlation_id] == that.call_id
25
+ that.response = payload
26
+ that.lock.synchronize{that.condition.signal}
27
+ end
18
28
  end
19
29
  end
20
30
 
21
- # call this method to create a upload channel to process documents
22
- def init_channel(name)
23
- if @channel == nil
24
- @channel = @connection.create_channel
25
- @queue = @channel.queue(name)
26
- end
31
+ def create_folder(folder)
32
+ self.call_id = self.generate_uuid
33
+ @x.publish(folder.path,
34
+ :routing_key => @server_queue,
35
+ :correlation_id => call_id,
36
+ :reply_to => @reply_queue.name,
37
+ :headers => {
38
+ :operation => 'create_folder',
39
+ :path => folder.path,
40
+ :document_type => folder.type,
41
+ :created_date => folder.created_date,
42
+ :modified_date => folder.modified_date,
43
+ :created_by => folder.created_by,
44
+ :modified_by => folder.modified_by
45
+ }
46
+ )
47
+ lock.synchronize{condition.wait(lock)}
48
+ response
27
49
  end
28
50
 
29
-
51
+ def get_folders(folder)
52
+ self.call_id = self.generate_uuid
53
+ @x.publish(folder.path,
54
+ :routing_key => @server_queue,
55
+ :correlation_id => call_id,
56
+ :reply_to => @reply_queue.name,
57
+ :headers => {
58
+ :operation => 'find_contents',
59
+ :folder => folder.path,
60
+ }
61
+ )
62
+ lock.synchronize{condition.wait(lock)}
63
+ response
64
+ end
65
+
66
+ def upload_document(document)
67
+ self.call_id = self.generate_uuid
68
+ @x.publish(document.data,
69
+ :routing_key => @server_queue,
70
+ :correlation_id => call_id,
71
+ :reply_to => @reply_queue.name,
72
+ :content_type => 'multipart/form-data',
73
+ :headers => {
74
+ :operation => 'upload_document',
75
+ :path => document.path,
76
+ :document_name => document.name,
77
+ :document_type => document.type,
78
+ :created_date => document.created_date,
79
+ :modified_date => document.modified_date,
80
+ :created_by => document.created_by,
81
+ :modified_by => document.modified_by,
82
+ :content_type => document.mime_type
83
+ }
84
+ )
85
+ lock.synchronize{condition.wait(lock)}
86
+ response
87
+ end
88
+
89
+ protected
90
+
91
+ def generate_uuid
92
+ # very naive but good enough for code
93
+ # examples
94
+ "#{rand}#{rand}#{rand}"
95
+ end
30
96
 
31
97
  # This method should be automatically called during garbage collection
32
98
  def self.finalize
33
- @connection.close
99
+
34
100
  end
35
101
 
36
102
  end
@@ -1,8 +1,7 @@
1
1
  module CmisRabbitQueue
2
2
  class Object
3
3
  class << self
4
- attr_accessor :path, :created_date, :modified_by, :name, :type
5
- attr_accessor :modified_date, :created_by, :url, :label
4
+
6
5
  end
7
6
 
8
7
  def store
@@ -4,38 +4,30 @@ module CmisRabbitQueue
4
4
 
5
5
  # The connection
6
6
  attr_reader :connection
7
- #Repository
8
- attr_reader :repository
9
- attr_reader :repository_name
7
+
10
8
  # constructor
11
- def initialize(url, port, queue, repository)
12
- @repository_name = repository
13
- @connection = Connection.new(url, port)
14
- init_message_queue(queue)
15
- init_repository(repository)
9
+ def initialize(url, port, queue)
10
+ @connection = Connection.new(queue,url, port)
16
11
  end
17
12
 
18
13
 
19
14
  # create folder object with path and other required data
20
15
  def create_folder(folder)
21
- @repository.create_folder(folder)
16
+ @connection.create_folder(folder)
22
17
  end
23
18
 
24
19
  # create documentobject with path and other required data
25
20
  def create_document(document)
26
- @repository.upload_document(document)
21
+ response = @connection.upload_document(document)
22
+ return response
27
23
  end
28
- #Initalize the channel and create queue
29
- private
30
- def init_message_queue(queue)
31
- @connection.init_channel(queue)
24
+
25
+ def find_folders(folder)
26
+ @connection.get_folders(folder)
32
27
  end
28
+ #Initalize the channel and create queue
33
29
 
34
30
 
35
- #Initalize repository
36
- def init_repository(repository)
37
- @repository = Repository.new(repository, @connection.queue, @connection.channel, @connection.connection)
38
- end
39
31
 
40
32
 
41
33
 
@@ -3,6 +3,5 @@ require 'require_relative'
3
3
  require_relative 'cmis_rabbit_queue/internal/connection'
4
4
  require_relative 'cmis_rabbit_queue/document'
5
5
  require_relative 'cmis_rabbit_queue/folder'
6
- require_relative 'cmis_rabbit_queue/repository'
7
6
  require_relative 'cmis_rabbit_queue/server'
8
7
  require_relative 'cmis_rabbit_queue/object'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cmis_rabbit_queue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-09-28 00:00:00.000000000 Z
12
+ date: 2014-10-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -43,7 +43,7 @@ dependencies:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
45
  version: '10.0'
46
- description: ''
46
+ description: Wrapper to Rabbit Queue
47
47
  email:
48
48
  - neethiwin@gmail.com
49
49
  executables: []
@@ -55,7 +55,6 @@ files:
55
55
  - lib/cmis_rabbit_queue/document.rb
56
56
  - lib/cmis_rabbit_queue/folder.rb
57
57
  - lib/cmis_rabbit_queue/object.rb
58
- - lib/cmis_rabbit_queue/repository.rb
59
58
  - lib/cmis_rabbit_queue/server.rb
60
59
  - lib/cmis_rabbit_queue/internal/connection.rb
61
60
  homepage: ''
@@ -1,56 +0,0 @@
1
- module CmisRabbitQueue
2
- class Repository
3
- # repository name
4
- attr_reader :name
5
- # queue
6
- attr_reader :queue
7
- #channel
8
- attr_reader :channel
9
- #connection
10
- attr_reader :connection
11
-
12
- def initialize(name, queue, channel, connection)
13
- @name = name
14
- @queue = queue
15
- @channel = channel
16
- @connection = connection
17
- end
18
-
19
- def create_folder(folder)
20
- @channel.default_exchange.publish(
21
- folder.name, :routing_key => @queue.name,
22
- :headers => {
23
- :path => folder.path,
24
- :document_type => folder.type,
25
- :created_date => folder.created_date,
26
- :modified_date => folder.modified_date,
27
- :created_by => folder.created_by,
28
- :modified_by => folder.modified_by
29
- }
30
- )
31
- end
32
-
33
- def upload_document(document)
34
- @channel.default_exchange.publish(
35
- document.data, :routing_key => @queue.name,
36
- :headers => {
37
- :path => document.path,
38
- :document_name => document.name,
39
- :document_type => document.type,
40
- :created_date => document.created_date,
41
- :modified_date => document.modified_date,
42
- :created_by => document.created_by,
43
- :modified_by => document.modified_by,
44
- :content_type => document.mime_type
45
- }
46
- )
47
-
48
- end
49
-
50
- def get_folders(folder)
51
-
52
- end
53
-
54
- end
55
-
56
- end