mongopipe 1.3
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/mongopipe.rb +136 -0
- metadata +78 -0
data/mongopipe.rb
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
## ----------------------------------------------------------------------------------
|
2
|
+
## USAGE:
|
3
|
+
## ----------------------------------------------------------------------------------
|
4
|
+
## ruby ./pubnub-mongodb-ruby-pipe.rb
|
5
|
+
## ----------------------------------------------------------------------------------
|
6
|
+
##
|
7
|
+
## See bottom of file for usage coding usage.
|
8
|
+
##
|
9
|
+
## ----------------------------------------------------------------------------------
|
10
|
+
|
11
|
+
## ----------------------------------------------------------------------------------
|
12
|
+
## Example Usage
|
13
|
+
## ----------------------------------------------------------------------------------
|
14
|
+
# MongoPubNubPipe::Connect.new(
|
15
|
+
# :puts_usage => true,
|
16
|
+
# :publish_key => 'demo',
|
17
|
+
# :subscribe_key => 'demo',
|
18
|
+
# :db => 'test',
|
19
|
+
# :collection => 'cap_collection',
|
20
|
+
# :callback => lambda{ |doc|
|
21
|
+
# ## Optional Callback Called on Doc Insert
|
22
|
+
# ## Remove :callback if you don't need it.
|
23
|
+
# puts(doc)
|
24
|
+
# }
|
25
|
+
# ).pipe()
|
26
|
+
|
27
|
+
require 'rubygems'
|
28
|
+
require 'pubnub'
|
29
|
+
require 'mongo'
|
30
|
+
|
31
|
+
module MongoPubNubPipe
|
32
|
+
class Connect
|
33
|
+
def initialize(args={})
|
34
|
+
@publish_key = args[:publish_key] or 'demo'
|
35
|
+
@subscribe_key = args[:subscribe_key] or 'demo'
|
36
|
+
@database = args[:db] or 'test'
|
37
|
+
@collection = args[:collection] or 'cap_col'
|
38
|
+
@server_port = args[:port] or 27017
|
39
|
+
@server_ip = args[:ip] or '0.0.0.0'
|
40
|
+
@callback = args[:callback] or lambda {}
|
41
|
+
@channel = "#{@database}.#{@collection}"
|
42
|
+
@pubnub = Pubnub.new(
|
43
|
+
:publish_key => @publish_key,
|
44
|
+
:subscribe_key => @subscribe_key
|
45
|
+
)
|
46
|
+
|
47
|
+
if args[:puts_usage]
|
48
|
+
puts " "
|
49
|
+
puts " ------------------------------------------------------"
|
50
|
+
puts " Step 1:"
|
51
|
+
puts " -------"
|
52
|
+
puts " Open Your Browser to Show PubNub Pipe Console"
|
53
|
+
puts " ------------------------------------------------------"
|
54
|
+
puts " "
|
55
|
+
puts " > open http://www.pubnub.com/console?channel=#{@channel}"
|
56
|
+
puts " "
|
57
|
+
puts " ------------------------------------------------------"
|
58
|
+
puts " Step 2:"
|
59
|
+
puts " -------"
|
60
|
+
puts " Open Demo Map on Your Phone"
|
61
|
+
puts " ------------------------------------------------------"
|
62
|
+
puts " "
|
63
|
+
puts " > open http://goo.gl/HAqAv##{@channel}"
|
64
|
+
puts " "
|
65
|
+
puts " ------------------------------------------------------"
|
66
|
+
puts " Step 3:"
|
67
|
+
puts " -------"
|
68
|
+
puts " Insert Test Data"
|
69
|
+
puts " ------------------------------------------------------"
|
70
|
+
puts " "
|
71
|
+
puts " > ./mongo"
|
72
|
+
puts " "
|
73
|
+
puts " > use #{@database}"
|
74
|
+
puts " > db.#{@collection}.insert({ latlon : [ 1.5, 2.0 ] })"
|
75
|
+
puts " "
|
76
|
+
end
|
77
|
+
|
78
|
+
## ---------------
|
79
|
+
## Easter Egg
|
80
|
+
## ---------------
|
81
|
+
'''
|
82
|
+
for (var i=0;i<10;i++) {
|
83
|
+
db.cap_collection.insert({
|
84
|
+
latlon : [ Math.random()*40.0, Math.random()*-122.0 ]
|
85
|
+
})
|
86
|
+
}
|
87
|
+
'''
|
88
|
+
self.connect()
|
89
|
+
end
|
90
|
+
|
91
|
+
def connect()
|
92
|
+
@connection = Mongo::Connection.new( @server_ip, @server_port )
|
93
|
+
@db = @connection[@database]
|
94
|
+
@table = @db[@collection]
|
95
|
+
@cursor = Mongo::Cursor.new(
|
96
|
+
@table,
|
97
|
+
:timeout => false,
|
98
|
+
:tailable => true
|
99
|
+
)
|
100
|
+
|
101
|
+
if not @db.collection_names.include?(@collection)
|
102
|
+
@db.create_collection( @collection, {
|
103
|
+
:capped => true,
|
104
|
+
:max => 1024,
|
105
|
+
:size => 1024
|
106
|
+
} )
|
107
|
+
@table = @db[@collection]
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def pipe()
|
112
|
+
if not @started then
|
113
|
+
while doc = @cursor.next do end
|
114
|
+
@started = true
|
115
|
+
end
|
116
|
+
while true do
|
117
|
+
begin
|
118
|
+
doc = @cursor.next
|
119
|
+
if @cursor.closed?; self.connect(); next end
|
120
|
+
if doc == nil; sleep(1); next end
|
121
|
+
rescue
|
122
|
+
self.connect()
|
123
|
+
self.pipe()
|
124
|
+
return
|
125
|
+
end
|
126
|
+
|
127
|
+
@callback.call(doc)
|
128
|
+
@pubnub.publish(
|
129
|
+
:channel => @channel,
|
130
|
+
:message => doc,
|
131
|
+
:callback => lambda {|x|}
|
132
|
+
)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mongopipe
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '1.3'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- PubNub
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-01-01 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: pubnub
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: mongo
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description: MongoDB Pipe powered by PubNub.
|
47
|
+
email: help@pubnub.com
|
48
|
+
executables: []
|
49
|
+
extensions: []
|
50
|
+
extra_rdoc_files: []
|
51
|
+
files:
|
52
|
+
- mongopipe.rb
|
53
|
+
homepage: https://github.com/stephenlb/pubnub-mongo-pipe
|
54
|
+
licenses:
|
55
|
+
- MIT
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options: []
|
58
|
+
require_paths:
|
59
|
+
- lib
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ! '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
72
|
+
requirements: []
|
73
|
+
rubyforge_project:
|
74
|
+
rubygems_version: 1.8.24
|
75
|
+
signing_key:
|
76
|
+
specification_version: 3
|
77
|
+
summary: Pipe MongoDB Document Data directly to your Mobile App.
|
78
|
+
test_files: []
|