simperium 0.0.2.3 → 0.0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/simperium.rb +4 -4
- data/lib/simperium/listener-export-mongohq +1 -2
- data/lib/simperium/version.rb +1 -1
- data/simperium.gemspec +1 -2
- data/test/test_simperium.rb +24 -24
- data/test/test_simperium_mirror.rb +1 -2
- metadata +3 -19
- data/README.md +0 -2
- data/lib/simperium/heroku-addon-doc.md +0 -152
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.2.3
|
1
|
+
0.0.2.3
|
data/lib/simperium.rb
CHANGED
@@ -366,7 +366,7 @@ module Simperium
|
|
366
366
|
options = defaults
|
367
367
|
end
|
368
368
|
|
369
|
-
@bucket = Bucket.new(appname, auth_token, '
|
369
|
+
@bucket = Simperium::Bucket.new(appname, auth_token, 'spuser',
|
370
370
|
options=options)
|
371
371
|
|
372
372
|
url = "#{appname}/user"
|
@@ -397,9 +397,9 @@ module Simperium
|
|
397
397
|
#the first argument is a Symbol, so you need to_s it you want to pattern match
|
398
398
|
unless method_sym.to_s =~ /=$/
|
399
399
|
if method_sym.to_s == 'spuser'
|
400
|
-
@getitem[method_sym] ||= SPUser.new(@appname, @token)
|
400
|
+
@getitem[method_sym] ||= Simperium::SPUser.new(@appname, @token)
|
401
401
|
else
|
402
|
-
@getitem[method_sym] ||= Bucket.new(@appname, @token, method_sym)
|
402
|
+
@getitem[method_sym] ||= Simperium::Bucket.new(@appname, @token, method_sym)
|
403
403
|
end
|
404
404
|
end
|
405
405
|
end
|
@@ -421,7 +421,7 @@ module Simperium
|
|
421
421
|
end
|
422
422
|
|
423
423
|
def as_user(userid)
|
424
|
-
return Api.new(@appname, @token, userid=userid, @_options)
|
424
|
+
return Simperium::Api.new(@appname, @token, userid=userid, @_options)
|
425
425
|
end
|
426
426
|
end
|
427
427
|
end
|
@@ -3,7 +3,6 @@ require 'rubygems'
|
|
3
3
|
require 'simperium'
|
4
4
|
require 'uri'
|
5
5
|
require 'mongo'
|
6
|
-
require 'optparse'
|
7
6
|
|
8
7
|
MONGOHQ_URL = ENV['MONGOHQ_URL']
|
9
8
|
|
@@ -12,7 +11,7 @@ conn = Mongo::Connection.from_uri(MONGOHQ_URL)
|
|
12
11
|
$db = conn.db(uri.path.gsub(/^\//, ''))
|
13
12
|
|
14
13
|
def main(appname, admin_key, bucket)
|
15
|
-
_bucket = Bucket.new(appname, admin_key, bucket)
|
14
|
+
_bucket = Simperium::Bucket.new(appname, admin_key, bucket)
|
16
15
|
|
17
16
|
begin
|
18
17
|
cv = $db['__meta__'].find_one
|
data/lib/simperium/version.rb
CHANGED
data/simperium.gemspec
CHANGED
data/test/test_simperium.rb
CHANGED
@@ -10,31 +10,31 @@ require 'simperium'
|
|
10
10
|
@@_auth_token = nil
|
11
11
|
def get_auth_token
|
12
12
|
if @@_auth_token.nil?
|
13
|
-
|
13
|
+
auth = Simperium::Auth.new(@@appname, @@api_key)
|
14
14
|
uuid = UUID.new
|
15
|
-
|
16
|
-
|
15
|
+
username = uuid.generate(:compact) + '@foo.com'
|
16
|
+
password = uuid.generate(:compact)
|
17
17
|
@@_auth_token = auth.create(username, password)
|
18
18
|
end
|
19
19
|
return @@_auth_token
|
20
20
|
end
|
21
21
|
|
22
22
|
class TestSimperiumRuby < Test::Unit::TestCase
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
def test_auth_create
|
24
|
+
get_auth_token
|
25
|
+
end
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
def test_bucket_get
|
28
|
+
uuid = UUID.new
|
29
|
+
bucket = Simperium::Bucket.new(@@appname, get_auth_token, uuid.generate(:compact))
|
30
30
|
bucket.post('item1', {'x'=> 1})
|
31
31
|
assert_equal(bucket.get('item1'), {'x' => 1})
|
32
|
-
|
32
|
+
end
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
34
|
+
def test_bucket_index
|
35
|
+
uuid = UUID.new
|
36
|
+
bucket = Simperium::Bucket.new(@@appname, get_auth_token, uuid.generate(:compact))
|
37
|
+
(0..2).each { |i| bucket.post("item#{i}", {'x' => i}) }
|
38
38
|
|
39
39
|
got = bucket.index(:data=>false, :mark=>nil, :limit=>2, :since=>nil)
|
40
40
|
want = {
|
@@ -50,11 +50,11 @@ class TestSimperiumRuby < Test::Unit::TestCase
|
|
50
50
|
'current'=> got['current'],
|
51
51
|
'index' => [
|
52
52
|
{'id' => 'item0', 'v' => 1}] }
|
53
|
-
|
53
|
+
end
|
54
54
|
|
55
|
-
|
56
|
-
|
57
|
-
|
55
|
+
def test_bucket_post
|
56
|
+
uuid = UUID.new
|
57
|
+
bucket = Simperium::Bucket.new(@@appname, get_auth_token, uuid.generate(:compact))
|
58
58
|
bucket.post('item1', {'a'=>1})
|
59
59
|
assert_equal(bucket.get('item1'), {'a'=>1})
|
60
60
|
|
@@ -63,15 +63,15 @@ class TestSimperiumRuby < Test::Unit::TestCase
|
|
63
63
|
|
64
64
|
bucket.post('item1', {'c'=>3}, :replace=>true)
|
65
65
|
assert_equal(bucket.get('item1'), {'c'=>3})
|
66
|
-
|
66
|
+
end
|
67
67
|
|
68
|
-
|
69
|
-
|
68
|
+
def test_user_get
|
69
|
+
user = Simperium::SPUser.new(@@appname, get_auth_token)
|
70
70
|
user.post({'x'=> 1})
|
71
71
|
assert_equal(user.get, {'x'=> 1})
|
72
|
-
|
72
|
+
end
|
73
73
|
|
74
|
-
|
74
|
+
def test_api_getitem
|
75
75
|
api = Simperium::Api.new(@@appname, get_auth_token)
|
76
76
|
assert_instance_of(Simperium::Bucket, api['bucket'], "api[bucket] should be an instance of Bucket")
|
77
77
|
end
|
@@ -83,6 +83,6 @@ class TestSimperiumRuby < Test::Unit::TestCase
|
|
83
83
|
|
84
84
|
def test_api_user
|
85
85
|
api = Simperium::Api.new(@@appname, get_auth_token)
|
86
|
-
assert_instance_of(Simperium::SPUser, api.spuser, "api.
|
86
|
+
assert_instance_of(Simperium::SPUser, api.spuser, "api.user should be an instance of User")
|
87
87
|
end
|
88
88
|
end
|
@@ -3,10 +3,9 @@ require 'simperium/listener-export-mongohq'
|
|
3
3
|
|
4
4
|
@admin_key = ENV['SIMPERIUM_CLIENT_TEST_ADMINKEY']
|
5
5
|
@appname = ENV['SIMPERIUM_CLIENT_TEST_APPNAME']
|
6
|
-
@bucket = 'todo'
|
7
6
|
|
8
7
|
class TestMirror < Test::Unit::TestCase
|
9
8
|
def test_simperium_mirror
|
10
|
-
|
9
|
+
Listener::mirror(@appname, @admin_key, 'todo')
|
11
10
|
end
|
12
11
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simperium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 79
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
9
|
- 2
|
10
|
-
-
|
11
|
-
version: 0.0.2.
|
10
|
+
- 4
|
11
|
+
version: 0.0.2.4
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Ray Ventura
|
@@ -61,20 +61,6 @@ dependencies:
|
|
61
61
|
version: "0"
|
62
62
|
type: :runtime
|
63
63
|
version_requirements: *id003
|
64
|
-
- !ruby/object:Gem::Dependency
|
65
|
-
name: mongo
|
66
|
-
prerelease: false
|
67
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
68
|
-
none: false
|
69
|
-
requirements:
|
70
|
-
- - ">="
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
hash: 3
|
73
|
-
segments:
|
74
|
-
- 0
|
75
|
-
version: "0"
|
76
|
-
type: :runtime
|
77
|
-
version_requirements: *id004
|
78
64
|
description: Simperium moves data instantly and automatically everywhere it's needed. See https://simperium.com for details.
|
79
65
|
email:
|
80
66
|
- ray@simperium.com
|
@@ -86,12 +72,10 @@ extra_rdoc_files: []
|
|
86
72
|
|
87
73
|
files:
|
88
74
|
- Gemfile
|
89
|
-
- README.md
|
90
75
|
- VERSION
|
91
76
|
- lib/simperium.rb
|
92
77
|
- lib/simperium/changes.rb
|
93
78
|
- lib/simperium/error_handling.rb
|
94
|
-
- lib/simperium/heroku-addon-doc.md
|
95
79
|
- lib/simperium/listener-export-mongohq
|
96
80
|
- lib/simperium/version.rb
|
97
81
|
- simperium.gemspec
|
data/README.md
DELETED
@@ -1,152 +0,0 @@
|
|
1
|
-
Simperium(http://addons.heroku.com/simperium) is an [add-on](http://addons.heroku.com) for circulating your data between mobile, web, and desktop versions of your app.
|
2
|
-
|
3
|
-
Adding Simpierum to your app makes your code simpler and your users happier:
|
4
|
-
|
5
|
-
* Data transparently moves across mobile, web, and desktop versions of your app
|
6
|
-
* Your users can read and write data even when they're offline
|
7
|
-
* Multiple users can collaborate with the same data at the same time
|
8
|
-
* You can build unique backend services that read and write data
|
9
|
-
|
10
|
-
Simperium is accessible via an API and has supported backend libraries for Ruby and Python and client libraries for Javascript and iOS/OS X. This add-on lets you mirror data circulated by Simpierum directly into your datastore.
|
11
|
-
|
12
|
-
## Provisioning the add-on
|
13
|
-
|
14
|
-
Simperium can be attached to a Heroku application via the CLI:
|
15
|
-
|
16
|
-
<div class="callout" markdown="1">
|
17
|
-
A list of all plans available can be found [here](http://addons.heroku.com/simperium).
|
18
|
-
</div>
|
19
|
-
|
20
|
-
:::term
|
21
|
-
$ heroku addons:add simperium
|
22
|
-
-----> Adding simperium to sharp-mountain-4005... done, v18 (free)
|
23
|
-
|
24
|
-
Once Simperium has been added a `SIMPERIUM_APP_ID` and `SIMPERIUM_ADMIN_KEY` setting will be available in the app configuration and will contain keys to access the newly provisioned Simperium app instance. This can be confirmed using the `heroku config` command.
|
25
|
-
|
26
|
-
:::term
|
27
|
-
$ heroku config | grep SIMPERIUM_APP_ID
|
28
|
-
SIMPERIUM_APP_ID => frogs-criteria-4c4
|
29
|
-
|
30
|
-
:::term
|
31
|
-
$ heroku config | grep SIMPERIUM_ADMIN_KEY
|
32
|
-
SIMPERIUM_ADMIN_KEY => cbbae31841ac4d44a93cd82081a5b74f
|
33
|
-
|
34
|
-
After installing Simpierum your application can begin mirroring data to your datastore.
|
35
|
-
|
36
|
-
## Local setup
|
37
|
-
|
38
|
-
### Environment setup
|
39
|
-
|
40
|
-
After provisioning the add-on you'll want to locally replicate the config vars so your development environment can operate against the service.
|
41
|
-
|
42
|
-
<div class="callout" markdown="1">
|
43
|
-
Though less portable it’s also possible to set local environment variables using `export SIMPERIUM_APP_ID=value` and `export SIMPERIUM_APP_KEY=value`.
|
44
|
-
</div>
|
45
|
-
|
46
|
-
Use [Foreman](config-vars#local_setup) to reliably configure and run the process formation specified in your app’s [Procfile](procfile). Foreman reads configuration variables from an .env file. Use the following command to add the SIMPERIUM_APP_ID and SIMPERIUM_ADMIN_KEY values retrieved from heroku config to `.env`.
|
47
|
-
|
48
|
-
:::term
|
49
|
-
$ heroku config -s | grep SIMPERIUM_APP_ID >> .env
|
50
|
-
$ heroku config -s | grep SIMPERIUM_ADMIN_KEY >> .env
|
51
|
-
$ more .env
|
52
|
-
|
53
|
-
<p class="warning" markdown="1">
|
54
|
-
Credentials and other sensitive configuration values should not be committed to source-control. In Git exclude the .env file with: `echo .env >> .gitignore`.
|
55
|
-
</p>
|
56
|
-
|
57
|
-
### Mirroring Data from Simperium to MongoHQ
|
58
|
-
|
59
|
-
In order to begin mirroring data from Simperium to MongoHQ, we need to install the simperium gem.
|
60
|
-
|
61
|
-
:::term
|
62
|
-
sudo gem install simperium
|
63
|
-
|
64
|
-
Grab a copy of the listner file that handles mirroring between MongoHQ and Simperium:
|
65
|
-
|
66
|
-
:::term
|
67
|
-
$ curl -O https://raw.github.com/Simperium/simperium/master/ruby/lib/simperium/listener-export-mongohq
|
68
|
-
|
69
|
-
Install the mongo gem and bson_ext dependency:
|
70
|
-
|
71
|
-
:::term
|
72
|
-
$ sudo gem update --system
|
73
|
-
|
74
|
-
:::term
|
75
|
-
sudo gem install mongo
|
76
|
-
sudo gem install bson_ext
|
77
|
-
|
78
|
-
Now, let Heroku know we want to run this new listener:
|
79
|
-
|
80
|
-
:::term
|
81
|
-
$ echo "worker: ruby listener-export-mongohq SIMPERIUM_APP_ID SIMPERIUM_ADMIN_KEY BUCKET_NAME" > Procfile
|
82
|
-
|
83
|
-
Note, BUCKET_NAME is the name of the bucket you want to mirror.
|
84
|
-
|
85
|
-
Start up our mongo instance with MongoHQ:
|
86
|
-
|
87
|
-
:::term
|
88
|
-
heroku addons:add mongohq:free
|
89
|
-
|
90
|
-
Finally, commit and re-push to Heroku:
|
91
|
-
|
92
|
-
:::term
|
93
|
-
$ git add .
|
94
|
-
$ git commit -m "realtime export to MongoHQ"
|
95
|
-
$ git push heroku master
|
96
|
-
|
97
|
-
Simperium activity can be observed within the Heroku log-stream by running the following:
|
98
|
-
|
99
|
-
:::term
|
100
|
-
$ heroku logs --tail
|
101
|
-
|
102
|
-
## Dashboard
|
103
|
-
|
104
|
-
<div class="callout" markdown="1">
|
105
|
-
For more information on the features available within the Simperium dashboard please see the docs at [simperium.com/docs/reference](http://simperium.com/docs/reference).
|
106
|
-
</div>
|
107
|
-
|
108
|
-
The Simpierum dashboard allows you to delete app data, debug with our data browser, and invite developers to your Simperium app.
|
109
|
-
|
110
|
-
![Simperium Dashboard](http://i.imgur.com/FkuUw.png "Simpierum Dashboard")
|
111
|
-
|
112
|
-
The dashboard can be accessed via the CLI:
|
113
|
-
|
114
|
-
:::term
|
115
|
-
$ heroku addons:open simperium
|
116
|
-
Opening simpierum for sharp-mountain-4005…
|
117
|
-
|
118
|
-
or by visiting the [Heroku apps web interface](http://heroku.com/myapps) and selecting the application in question. Select Simperium from the Add-ons menu.
|
119
|
-
|
120
|
-
![Simperium Add-ons Dropdown](http://f.cl.ly/items/1B090n1P0d3W0I0R172r/addons.png "Simperium Add-ons Dropdown")
|
121
|
-
|
122
|
-
|
123
|
-
## Migrating between plans
|
124
|
-
|
125
|
-
<div class="note" markdown="1">Application owners should carefully manage the migration timing to ensure proper application function during the migration process.</div>
|
126
|
-
|
127
|
-
Use the `heroku addons:upgrade` command to migrate to a new plan.
|
128
|
-
|
129
|
-
:::term
|
130
|
-
$ heroku addons:upgrade simperium:pro
|
131
|
-
-----> Upgrading simperium:pro to sharp-mountain-4005... done, v18 ($XX/mo)
|
132
|
-
Your plan has been updated to: simperium:pro
|
133
|
-
|
134
|
-
## Removing the add-on
|
135
|
-
|
136
|
-
Simperium can be removed via the CLI.
|
137
|
-
|
138
|
-
<div class="warning" markdown="1">This will destroy all associated data and cannot be undone!</div>
|
139
|
-
|
140
|
-
:::term
|
141
|
-
$ heroku addons:remove simperium
|
142
|
-
-----> Removing simperium from sharp-mountain-4005... done, v20 (free)
|
143
|
-
|
144
|
-
## Support
|
145
|
-
|
146
|
-
All Simperium support and runtime issues should be logged with Heroku Support at https://support.heroku.com. Any non-support related issues or product feedback is welcome at help@simperium.com.
|
147
|
-
|
148
|
-
## Additional resources
|
149
|
-
|
150
|
-
Additional resources are available at:
|
151
|
-
|
152
|
-
* [Site docs](http://simperium.com/docs/reference)
|