stackmob 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|