stackmob 0.0.2 → 0.1.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/README.md +4 -7
- data/bin/stackmob +5 -0
- data/lib/stackmob.rb +30 -4
- data/lib/stackmob/cli/local_server.rb +60 -0
- data/lib/stackmob/cli/main.rb +33 -0
- data/lib/stackmob/client.rb +21 -11
- data/lib/stackmob/middleware/proxy.rb +68 -0
- data/lib/stackmob/middleware/rewrite.rb +50 -0
- data/lib/stackmob/tasks.rb +1 -1
- metadata +121 -68
- data/.document +0 -5
- data/Gemfile +0 -16
- data/Gemfile.lock +0 -47
- data/Rakefile +0 -59
- data/VERSION +0 -1
- data/stackmob.gemspec +0 -100
- data/test/helper.rb +0 -22
- data/test/integration/test_client.rb +0 -45
- data/test/integration/test_data_store.rb +0 -31
- data/test/integration/test_deployer.rb +0 -23
- data/test/integration/test_push.rb +0 -24
- data/test/integration_helper.rb +0 -46
- data/test/unit/stackmob/rack/test_simple_oauth_provider.rb +0 -52
- data/test/unit/stackmob/test_client.rb +0 -105
- data/test/unit/stackmob/test_data_store.rb +0 -83
- data/test/unit/stackmob/test_deployer.rb +0 -21
- data/test/unit/stackmob/test_push.rb +0 -133
- data/test/unit/test_stackmob.rb +0 -129
data/README.md
CHANGED
@@ -17,7 +17,7 @@ Additionally, you will want to include some helpful methods in your controllers.
|
|
17
17
|
## Configuring Your Application (For Local Development)
|
18
18
|
|
19
19
|
This section only pertains to setting up your Rails or Sinatra application for development & testing. If you wish solely to deploy to Heroku you can skip this section.
|
20
|
-
|
20
|
+
|
21
21
|
For local development, a few configuration details need to be set in the file `config/stackmob.yml`. You will need your subdomain, the name of the application you created, as well as your public and private keys for both development (sandbox) and production from the StackMob add-on dashboard. When specifying your Heroku hostname, if your application is available under the herokuapp.com domain as well as heroku.com, use the herokuapp.com domain otherwise, use heroku.com.
|
22
22
|
|
23
23
|
# example config/stackmob.yml
|
@@ -171,7 +171,7 @@ Deploying your Heroku application only requires one additional step. After you h
|
|
171
171
|
|
172
172
|
This rake task will inform the StackMob servers that you have deployed a new version of your application as well as update any information that may be needed to proxy requests to your application.
|
173
173
|
|
174
|
-
Once your API & Application are deployed, you can, of course, start using it with the
|
174
|
+
Once your API & Application are deployed, you can, of course, start using it with the <a href="https://github.com/stackmob/StackMob_iOS">StackMob iOS SDK</a> but if you would like to take things for a test drive, you can also use `StackMob::Client`. Create a client to use your production keys like the example below:
|
175
175
|
|
176
176
|
client = StackMob::Client.new(StackMob.dev_url, StackMob.app_name, StackMob::PRODUCTION, StackMob.config['production']['key'], StackMob.config['production']['secret'])
|
177
177
|
|
@@ -179,9 +179,6 @@ You can then proxy requests to your application using the `StackMob::Client#requ
|
|
179
179
|
|
180
180
|
client.request(:get, :api, "heroku/proxy/path/to/proxy/to")
|
181
181
|
|
182
|
-
## Running your Application Locally in Development
|
183
|
-
|
184
|
-
|
185
182
|
|
186
183
|
## Contributing to stackmob gem
|
187
184
|
|
@@ -189,13 +186,13 @@ The stackmob Ruby Gem is Apache 2.0 licensed (see LICENSE.txt) and we look forwa
|
|
189
186
|
|
190
187
|
### Reporting Bugs
|
191
188
|
|
192
|
-
We are using
|
189
|
+
We are using <a href="https://github.com/stackmob/stackmob-ruby/issues">GitHub Issues</a> to track feature requests and bugs.
|
193
190
|
|
194
191
|
### Running the Tests
|
195
192
|
|
196
193
|
Before submitting a pull request add any appropriate tests and run them along with the existing ones. The gem includes tasks to run unit & integration tests seperately or together. Before running the integration tests you will need to setup a few things. First, create a new application on your StackMob account named "test". In the new application, create a User Object named "user", with one extra string field, "name". Finally, you will have to set a few environment variables. If your using RVM, a good place to put these is your .rvmrc file.
|
197
194
|
|
198
|
-
export STACKMOB_TEST_URL="YOURDOMAIN.stackmob.com"
|
195
|
+
export STACKMOB_TEST_URL="http://YOURDOMAIN.stackmob.com"
|
199
196
|
export STACKMOB_TEST_KEY="YOUR TEST APP PUB KEY"
|
200
197
|
export STACKMOB_TEST_SECRET="YOUR TEST APP PRIV KEY"
|
201
198
|
|
data/bin/stackmob
ADDED
data/lib/stackmob.rb
CHANGED
@@ -21,14 +21,31 @@ require 'stackmob/data_store'
|
|
21
21
|
require 'stackmob/push'
|
22
22
|
require 'stackmob/rack/simple_oauth_provider'
|
23
23
|
require 'stackmob/helpers'
|
24
|
+
require 'stackmob/cli/main'
|
24
25
|
|
25
26
|
module StackMob
|
26
27
|
|
28
|
+
CONFIG_FILES = ["config/stackmob.yml",".stackmob"]
|
29
|
+
|
30
|
+
class ConfigurationError < RuntimeError; end
|
31
|
+
|
32
|
+
|
27
33
|
SANDBOX = 0
|
28
34
|
PRODUCTION = 1
|
29
35
|
|
30
36
|
def self.config
|
31
|
-
@config ||=
|
37
|
+
@config ||= load_config(CONFIG_FILES.clone)
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.load_config(filenames)
|
42
|
+
YAML.load_file(filenames.shift)
|
43
|
+
rescue Errno::ENOENT
|
44
|
+
if !filenames.empty?
|
45
|
+
load_config(filenames)
|
46
|
+
else
|
47
|
+
raise ConfigurationError.new("Missing configuration file (#{CONFIG_FILES.join(' or ')})")
|
48
|
+
end
|
32
49
|
end
|
33
50
|
|
34
51
|
def self.secret
|
@@ -47,8 +64,13 @@ module StackMob
|
|
47
64
|
ENV['STACKMOB_CLIENT_NAME'] || StackMob.config['sm_client_name']
|
48
65
|
end
|
49
66
|
|
50
|
-
def self.dev_url
|
51
|
-
|
67
|
+
def self.dev_url
|
68
|
+
if env_url = ENV['STACKMOB_DEV_URL']
|
69
|
+
env_url
|
70
|
+
else
|
71
|
+
cluster_name = (is_html5?) ? "mob1" : "mob2"
|
72
|
+
"http://#{StackMob.client_name}.#{cluster_name}.stackmob.com"
|
73
|
+
end
|
52
74
|
end
|
53
75
|
|
54
76
|
def self.env
|
@@ -59,12 +81,16 @@ module StackMob
|
|
59
81
|
env == PRODUCTION ? "production" : "development"
|
60
82
|
end
|
61
83
|
|
84
|
+
def self.is_html5?
|
85
|
+
config['html5']
|
86
|
+
end
|
87
|
+
|
62
88
|
def self.is_production?
|
63
89
|
ENV["RACK_ENV"] == "production"
|
64
90
|
end
|
65
91
|
|
66
92
|
def self.sm_env_key_str(suffix)
|
67
|
-
"STACKMOB_" + ((is_production?) ? "PROD" : "SAND") + "_#{suffix.upcase}"
|
93
|
+
"STACKMOB_" + ((is_production?) ? "PROD" : "SAND") + "_#{suffix.to_s.upcase}"
|
68
94
|
end
|
69
95
|
|
70
96
|
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# Copyright 2012 StackMob
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require 'rack'
|
16
|
+
require 'stackmob/middleware/rewrite'
|
17
|
+
require 'stackmob/middleware/proxy'
|
18
|
+
|
19
|
+
begin
|
20
|
+
require 'thin/version'
|
21
|
+
|
22
|
+
module Thin::VERSION
|
23
|
+
# Censoring
|
24
|
+
if CODENAME == "Bat-Shit Crazy"
|
25
|
+
remove_const :CODENAME
|
26
|
+
CODENAME = "Rockhead Slate"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
rescue LoadError
|
30
|
+
end
|
31
|
+
|
32
|
+
module StackMob
|
33
|
+
module CLI
|
34
|
+
module LocalServer
|
35
|
+
DEFAULT_PORT = 4567
|
36
|
+
|
37
|
+
class Server < ::Rack::Server
|
38
|
+
def app
|
39
|
+
options[:app]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def start_local_server(port = DEFAULT_PORT, path_root = '.')
|
44
|
+
app = ::Rack::Builder.new do
|
45
|
+
use StackMob::Middleware::Proxy
|
46
|
+
use StackMob::Middleware::Rewrite
|
47
|
+
|
48
|
+
endpoint = ::Rack::Static.new lambda { |e| [] }, :urls => ['/'], :root => path_root
|
49
|
+
map "/" do
|
50
|
+
run endpoint
|
51
|
+
end
|
52
|
+
end.to_app
|
53
|
+
Server.start :app => app, :host => '0.0.0.0', :server => 'thin', :Port => port
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# Copyright 2012 StackMob
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
|
16
|
+
require 'thor'
|
17
|
+
require 'stackmob/cli/local_server'
|
18
|
+
|
19
|
+
module StackMob
|
20
|
+
module CLI
|
21
|
+
class Main < Thor
|
22
|
+
include LocalServer
|
23
|
+
|
24
|
+
method_option "port", :type => :string, :banner => "port to start server on", :aliases => "-p", :default => "4567"
|
25
|
+
method_option "path", :type => :string, :banner => "root directory to serve files from", :default => "."
|
26
|
+
desc "server", "start test server"
|
27
|
+
def server
|
28
|
+
start_local_server(options[:port], options[:path])
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/stackmob/client.rb
CHANGED
@@ -33,18 +33,28 @@ module StackMob
|
|
33
33
|
create_oauth_client(oauth_key, oauth_secret, base_url)
|
34
34
|
end
|
35
35
|
|
36
|
-
def request(method, service, path, params = {})
|
37
|
-
request_path, request_body = generate_path_and_body(method, service, path, params)
|
36
|
+
def request(method, service, path, params = {}, raw = false, headers = {})
|
37
|
+
request_path, request_body = generate_path_and_body(method, service, path, params, raw)
|
38
|
+
|
39
|
+
args = [method, request_path]
|
40
|
+
if [:post, :put].include?(method)
|
41
|
+
headers.merge!("Content-Type" => "application/json")
|
42
|
+
args << request_body << headers
|
43
|
+
else
|
44
|
+
args << headers
|
45
|
+
end
|
38
46
|
|
39
|
-
args = [method, request_path, request_body]
|
40
|
-
args << {"Content-Type" => "application/json"} if [:post, :put].include?(method)
|
41
47
|
response = @oauth_client.send(*args)
|
42
48
|
|
43
|
-
|
44
|
-
|
45
|
-
parse_response(response) if method != :delete
|
49
|
+
if raw
|
50
|
+
response
|
46
51
|
else
|
47
|
-
|
52
|
+
rcode = response.code.to_i
|
53
|
+
if rcode >= 200 && rcode <= 299
|
54
|
+
parse_response(response) if method != :delete
|
55
|
+
else
|
56
|
+
raise RequestError.new("\nReq Method: #{method}\nReq. Path: #{request_path}\nReq. Body: #{request_body}\nResp. Code: #{rcode}, Resp Body: #{response.respond_to?(:body) ? response.body : 'unknown'}")
|
57
|
+
end
|
48
58
|
end
|
49
59
|
end
|
50
60
|
|
@@ -53,13 +63,13 @@ module StackMob
|
|
53
63
|
end
|
54
64
|
private :create_oauth_client
|
55
65
|
|
56
|
-
def generate_path_and_body(method, service, path, params)
|
66
|
+
def generate_path_and_body(method, service, path, params, raw)
|
57
67
|
intermediate_path = full_path(service, path)
|
58
68
|
case method
|
59
69
|
when :get, :delete
|
60
|
-
[intermediate_path + "?" + params_to_qs(params), ""]
|
70
|
+
[intermediate_path + "?" + (raw ? params : params_to_qs(params)), ""]
|
61
71
|
when :post, :put
|
62
|
-
[intermediate_path, Yajl::Encoder.encode(params)]
|
72
|
+
[intermediate_path, raw ? params : Yajl::Encoder.encode(params)]
|
63
73
|
else
|
64
74
|
raise InvalidRequestMethod
|
65
75
|
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# Copyright 2012 StackMob
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require 'rack'
|
16
|
+
|
17
|
+
module StackMob
|
18
|
+
module Middleware
|
19
|
+
class Proxy
|
20
|
+
|
21
|
+
HEADER_NAME = 'X-StackMob-Proxy'
|
22
|
+
RACK_ENV_NAME = 'HTTP_X_STACKMOB_PROXY'
|
23
|
+
VALID_HEADER_VALUES = ['stackmob-api']
|
24
|
+
|
25
|
+
EXCLUDED_HEADERS = ["VERSION", "DATE", "HOST"].map { |s| "HTTP_#{s}" }
|
26
|
+
|
27
|
+
def initialize(app)
|
28
|
+
@app = app
|
29
|
+
end
|
30
|
+
|
31
|
+
def call(env)
|
32
|
+
if VALID_HEADER_VALUES.include?(env[RACK_ENV_NAME])
|
33
|
+
req = ::Rack::Request.new(env)
|
34
|
+
method = http_method(env)
|
35
|
+
headers = http_headers(env)
|
36
|
+
params = [:put,:post].include?(method) ? req.body : req.query_string
|
37
|
+
|
38
|
+
response = client.request(method, :api, env['PATH_INFO'], params, true, headers)
|
39
|
+
|
40
|
+
[response.code.to_i, response.to_hash, response.body]
|
41
|
+
else
|
42
|
+
@app.call(env)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def client
|
47
|
+
@client ||= StackMob::Client.new(StackMob.dev_url, StackMob.app_name, StackMob::SANDBOX, StackMob.key, StackMob.secret)
|
48
|
+
end
|
49
|
+
private :client
|
50
|
+
|
51
|
+
def http_method(env)
|
52
|
+
env['REQUEST_METHOD'].downcase.to_sym
|
53
|
+
end
|
54
|
+
|
55
|
+
def http_headers(env)
|
56
|
+
headers = {}
|
57
|
+
for headerArr in env.select { |k, v| k.start_with? 'HTTP_' }
|
58
|
+
if !EXCLUDED_HEADERS.include?(headerArr[0])
|
59
|
+
headers[headerArr[0].sub('HTTP_', '')] = headerArr[1]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
headers["Accept"] = "application/json"
|
63
|
+
headers
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# Copyright 2012 StackMob
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module StackMob
|
16
|
+
module Middleware
|
17
|
+
class Rewrite
|
18
|
+
def initialize(app)
|
19
|
+
@app = app
|
20
|
+
end
|
21
|
+
|
22
|
+
def call(env)
|
23
|
+
status, hdrs, body = @app.call(env)
|
24
|
+
original_response = [status, hdrs, body]
|
25
|
+
|
26
|
+
if status == 404
|
27
|
+
path_info = env['PATH_INFO']
|
28
|
+
env['PATH_INFO'] = "#{path_info}/index.html".gsub('//', '/')
|
29
|
+
|
30
|
+
|
31
|
+
status, hdrs, body = @app.call(env)
|
32
|
+
|
33
|
+
if status == 404
|
34
|
+
env['PATH_INFO'] = "/404.html"
|
35
|
+
|
36
|
+
status, hdrs, body = @app.call(env)
|
37
|
+
|
38
|
+
if status == 404
|
39
|
+
status, hdrs, body = original_response
|
40
|
+
else
|
41
|
+
status = 404
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
[ status, hdrs, body ]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/stackmob/tasks.rb
CHANGED
@@ -23,7 +23,7 @@ namespace :stackmob do
|
|
23
23
|
abort("No Heroku App Name or Hostname Found in StackMob Config") if StackMob.config['heroku_app_name'].to_s.blank? && StackMob.config['heroku_hostname'].to_s.blank?
|
24
24
|
|
25
25
|
hostname = StackMob.config['heroku_hostname'] || "#{StackMob.config['heroku_app_name']}.herokuapp.com"
|
26
|
-
client = StackMob::Client.new("http://#{StackMob.client_name}.mob2.stackmob.com", StackMob.app_name, StackMob::SANDBOX, StackMob.config['development']['key'], StackMob.config['development']['
|
26
|
+
client = StackMob::Client.new("http://#{StackMob.client_name}.mob2.stackmob.com", StackMob.app_name, StackMob::SANDBOX, StackMob.config['development']['key'], StackMob.config['development']['secret'])
|
27
27
|
deployer = StackMob::Deployer.new(client)
|
28
28
|
|
29
29
|
begin
|
metadata
CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.2
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- StackMob
|
@@ -15,11 +15,10 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2012-02-15 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
|
22
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
21
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
23
22
|
none: false
|
24
23
|
requirements:
|
25
24
|
- - ~>
|
@@ -30,12 +29,12 @@ dependencies:
|
|
30
29
|
- 4
|
31
30
|
- 5
|
32
31
|
version: 0.4.5
|
33
|
-
version_requirements: *id001
|
34
|
-
name: oauth
|
35
32
|
prerelease: false
|
36
|
-
|
33
|
+
requirement: *id001
|
37
34
|
type: :runtime
|
38
|
-
|
35
|
+
name: oauth
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
39
38
|
none: false
|
40
39
|
requirements:
|
41
40
|
- - ~>
|
@@ -46,26 +45,76 @@ dependencies:
|
|
46
45
|
- 8
|
47
46
|
- 2
|
48
47
|
version: 0.8.2
|
49
|
-
|
48
|
+
prerelease: false
|
49
|
+
requirement: *id002
|
50
|
+
type: :runtime
|
50
51
|
name: yajl-ruby
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ~>
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 39
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
- 14
|
62
|
+
- 0
|
63
|
+
version: 0.14.0
|
51
64
|
prerelease: false
|
65
|
+
requirement: *id003
|
66
|
+
type: :runtime
|
67
|
+
name: thor
|
52
68
|
- !ruby/object:Gem::Dependency
|
53
|
-
|
54
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
69
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
55
70
|
none: false
|
56
71
|
requirements:
|
57
|
-
- -
|
72
|
+
- - ~>
|
58
73
|
- !ruby/object:Gem::Version
|
59
|
-
hash:
|
74
|
+
hash: 31
|
60
75
|
segments:
|
76
|
+
- 1
|
77
|
+
- 2
|
61
78
|
- 0
|
62
|
-
version:
|
63
|
-
version_requirements: *id003
|
64
|
-
name: minitest
|
79
|
+
version: 1.2.0
|
65
80
|
prerelease: false
|
81
|
+
requirement: *id004
|
82
|
+
type: :runtime
|
83
|
+
name: thin
|
66
84
|
- !ruby/object:Gem::Dependency
|
85
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ~>
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
hash: 27
|
91
|
+
segments:
|
92
|
+
- 1
|
93
|
+
- 3
|
94
|
+
- 0
|
95
|
+
version: 1.3.0
|
96
|
+
prerelease: false
|
97
|
+
requirement: *id005
|
98
|
+
type: :runtime
|
99
|
+
name: rack
|
100
|
+
- !ruby/object:Gem::Dependency
|
101
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
102
|
+
none: false
|
103
|
+
requirements:
|
104
|
+
- - ~>
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
hash: 35
|
107
|
+
segments:
|
108
|
+
- 2
|
109
|
+
- 11
|
110
|
+
- 0
|
111
|
+
version: 2.11.0
|
112
|
+
prerelease: false
|
113
|
+
requirement: *id006
|
67
114
|
type: :development
|
68
|
-
|
115
|
+
name: minitest
|
116
|
+
- !ruby/object:Gem::Dependency
|
117
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
69
118
|
none: false
|
70
119
|
requirements:
|
71
120
|
- - ~>
|
@@ -76,12 +125,12 @@ dependencies:
|
|
76
125
|
- 6
|
77
126
|
- 0
|
78
127
|
version: 0.6.0
|
79
|
-
version_requirements: *id004
|
80
|
-
name: yard
|
81
128
|
prerelease: false
|
82
|
-
|
129
|
+
requirement: *id007
|
83
130
|
type: :development
|
84
|
-
|
131
|
+
name: yard
|
132
|
+
- !ruby/object:Gem::Dependency
|
133
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
85
134
|
none: false
|
86
135
|
requirements:
|
87
136
|
- - ">="
|
@@ -90,12 +139,12 @@ dependencies:
|
|
90
139
|
segments:
|
91
140
|
- 0
|
92
141
|
version: "0"
|
93
|
-
version_requirements: *id005
|
94
|
-
name: cucumber
|
95
142
|
prerelease: false
|
96
|
-
|
143
|
+
requirement: *id008
|
97
144
|
type: :development
|
98
|
-
|
145
|
+
name: cucumber
|
146
|
+
- !ruby/object:Gem::Dependency
|
147
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
99
148
|
none: false
|
100
149
|
requirements:
|
101
150
|
- - ~>
|
@@ -106,12 +155,12 @@ dependencies:
|
|
106
155
|
- 0
|
107
156
|
- 0
|
108
157
|
version: 1.0.0
|
109
|
-
version_requirements: *id006
|
110
|
-
name: bundler
|
111
158
|
prerelease: false
|
112
|
-
|
159
|
+
requirement: *id009
|
113
160
|
type: :development
|
114
|
-
|
161
|
+
name: bundler
|
162
|
+
- !ruby/object:Gem::Dependency
|
163
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
115
164
|
none: false
|
116
165
|
requirements:
|
117
166
|
- - ~>
|
@@ -122,12 +171,12 @@ dependencies:
|
|
122
171
|
- 6
|
123
172
|
- 4
|
124
173
|
version: 1.6.4
|
125
|
-
version_requirements: *id007
|
126
|
-
name: jeweler
|
127
174
|
prerelease: false
|
128
|
-
|
175
|
+
requirement: *id010
|
129
176
|
type: :development
|
130
|
-
|
177
|
+
name: jeweler
|
178
|
+
- !ruby/object:Gem::Dependency
|
179
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
131
180
|
none: false
|
132
181
|
requirements:
|
133
182
|
- - ">="
|
@@ -136,12 +185,12 @@ dependencies:
|
|
136
185
|
segments:
|
137
186
|
- 0
|
138
187
|
version: "0"
|
139
|
-
version_requirements: *id008
|
140
|
-
name: rcov
|
141
188
|
prerelease: false
|
142
|
-
|
189
|
+
requirement: *id011
|
143
190
|
type: :development
|
144
|
-
|
191
|
+
name: rcov
|
192
|
+
- !ruby/object:Gem::Dependency
|
193
|
+
version_requirements: &id012 !ruby/object:Gem::Requirement
|
145
194
|
none: false
|
146
195
|
requirements:
|
147
196
|
- - ">="
|
@@ -150,12 +199,12 @@ dependencies:
|
|
150
199
|
segments:
|
151
200
|
- 0
|
152
201
|
version: "0"
|
153
|
-
version_requirements: *id009
|
154
|
-
name: mocha
|
155
202
|
prerelease: false
|
156
|
-
|
203
|
+
requirement: *id012
|
157
204
|
type: :development
|
158
|
-
|
205
|
+
name: mocha
|
206
|
+
- !ruby/object:Gem::Dependency
|
207
|
+
version_requirements: &id013 !ruby/object:Gem::Requirement
|
159
208
|
none: false
|
160
209
|
requirements:
|
161
210
|
- - ">="
|
@@ -164,12 +213,12 @@ dependencies:
|
|
164
213
|
segments:
|
165
214
|
- 0
|
166
215
|
version: "0"
|
167
|
-
version_requirements: *id010
|
168
|
-
name: rack-test
|
169
216
|
prerelease: false
|
170
|
-
|
217
|
+
requirement: *id013
|
171
218
|
type: :development
|
172
|
-
|
219
|
+
name: rack-test
|
220
|
+
- !ruby/object:Gem::Dependency
|
221
|
+
version_requirements: &id014 !ruby/object:Gem::Requirement
|
173
222
|
none: false
|
174
223
|
requirements:
|
175
224
|
- - ">="
|
@@ -178,50 +227,54 @@ dependencies:
|
|
178
227
|
segments:
|
179
228
|
- 0
|
180
229
|
version: "0"
|
181
|
-
|
230
|
+
prerelease: false
|
231
|
+
requirement: *id014
|
232
|
+
type: :development
|
182
233
|
name: bluecloth
|
234
|
+
- !ruby/object:Gem::Dependency
|
235
|
+
version_requirements: &id015 !ruby/object:Gem::Requirement
|
236
|
+
none: false
|
237
|
+
requirements:
|
238
|
+
- - ~>
|
239
|
+
- !ruby/object:Gem::Version
|
240
|
+
hash: 15
|
241
|
+
segments:
|
242
|
+
- 2
|
243
|
+
- 2
|
244
|
+
- 4
|
245
|
+
version: 2.2.4
|
183
246
|
prerelease: false
|
247
|
+
requirement: *id015
|
248
|
+
type: :development
|
249
|
+
name: httpclient
|
184
250
|
description: Support Gem for StackMob Heroku Add-On
|
185
251
|
email: jordan@stackmob.com
|
186
|
-
executables:
|
187
|
-
|
252
|
+
executables:
|
253
|
+
- stackmob
|
188
254
|
extensions: []
|
189
255
|
|
190
256
|
extra_rdoc_files:
|
191
257
|
- LICENSE.txt
|
192
258
|
- README.md
|
193
259
|
files:
|
194
|
-
- .document
|
195
|
-
- Gemfile
|
196
|
-
- Gemfile.lock
|
197
260
|
- LICENSE.txt
|
198
261
|
- README.md
|
199
|
-
- Rakefile
|
200
|
-
- VERSION
|
201
262
|
- lib/stackmob.rb
|
263
|
+
- lib/stackmob/cli/local_server.rb
|
264
|
+
- lib/stackmob/cli/main.rb
|
202
265
|
- lib/stackmob/client.rb
|
203
266
|
- lib/stackmob/data_store.rb
|
204
267
|
- lib/stackmob/deployer.rb
|
205
268
|
- lib/stackmob/helpers.rb
|
269
|
+
- lib/stackmob/middleware/proxy.rb
|
270
|
+
- lib/stackmob/middleware/rewrite.rb
|
206
271
|
- lib/stackmob/push.rb
|
207
272
|
- lib/stackmob/rack/simple_oauth_provider.rb
|
208
273
|
- lib/stackmob/rails.rb
|
209
274
|
- lib/stackmob/railtie.rb
|
210
275
|
- lib/stackmob/sinatra.rb
|
211
276
|
- lib/stackmob/tasks.rb
|
212
|
-
- stackmob
|
213
|
-
- test/helper.rb
|
214
|
-
- test/integration/test_client.rb
|
215
|
-
- test/integration/test_data_store.rb
|
216
|
-
- test/integration/test_deployer.rb
|
217
|
-
- test/integration/test_push.rb
|
218
|
-
- test/integration_helper.rb
|
219
|
-
- test/unit/stackmob/rack/test_simple_oauth_provider.rb
|
220
|
-
- test/unit/stackmob/test_client.rb
|
221
|
-
- test/unit/stackmob/test_data_store.rb
|
222
|
-
- test/unit/stackmob/test_deployer.rb
|
223
|
-
- test/unit/stackmob/test_push.rb
|
224
|
-
- test/unit/test_stackmob.rb
|
277
|
+
- bin/stackmob
|
225
278
|
homepage: http://github.com/stackmob/stackmob-ruby
|
226
279
|
licenses:
|
227
280
|
- MIT
|
@@ -251,7 +304,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
251
304
|
requirements: []
|
252
305
|
|
253
306
|
rubyforge_project:
|
254
|
-
rubygems_version: 1.8.
|
307
|
+
rubygems_version: 1.8.15
|
255
308
|
signing_key:
|
256
309
|
specification_version: 3
|
257
310
|
summary: Support Gem for StackMob Heroku Add-On
|