Module: Heroku::API::Mock
- Defined in:
- lib/heroku/api/mock.rb,
lib/heroku/api/mock/apps.rb,
lib/heroku/api/mock/keys.rb,
lib/heroku/api/mock/logs.rb,
lib/heroku/api/mock/user.rb,
lib/heroku/api/mock/addons.rb,
lib/heroku/api/mock/stacks.rb,
lib/heroku/api/mock/domains.rb,
lib/heroku/api/mock/releases.rb,
lib/heroku/api/mock/processes.rb,
lib/heroku/api/mock/config_vars.rb,
lib/heroku/api/mock/collaborators.rb
Constant Summary collapse
- APP_NOT_FOUND =
{ :body => 'App not found.', :status => 404 }
- USER_NOT_FOUND =
{ :body => 'User not found.', :status => 404 }
- STACKS =
[ { "beta" => false, "requested" => false, "current" => false, "name" => "aspen-mri-1.8.6" }, { "beta" => false, "requested" => false, "current" => false, "name" => "bamboo-mri-1.9.2" }, { "beta" => false, "requested" => false, "current" => false, "name" => "bamboo-ree-1.8.7" }, { "beta" => true, "requested" => false, "current" => false, "name" => "cedar" } ]
Class Method Summary collapse
- .add_mock_app_addon(mock_data, app, addon) ⇒ Object
- .get_mock_addon(mock_data, addon) ⇒ Object
- .get_mock_addon_price(mock_data, addon) ⇒ Object
- .get_mock_app(mock_data, app) ⇒ Object
- .get_mock_app_addon(mock_data, app, addon) ⇒ Object
- .get_mock_app_domain(mock_data, app, domain) ⇒ Object
- .get_mock_collaborator(mock_data, app, email) ⇒ Object
- .get_mock_key(mock_data, key) ⇒ Object
- .get_mock_processes(mock_data, app) ⇒ Object
- .gzip(string) ⇒ Object
- .json_gzip(string) ⇒ Object
- .parse_stub_params(params) ⇒ Object
- .remove_mock_app_addon(mock_data, app, addon) ⇒ Object
- .timestamp ⇒ Object
- .with_mock_app(mock_data, app, &block) ⇒ Object
Class Method Details
.add_mock_app_addon(mock_data, app, addon) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/heroku/api/mock.rb', line 35 def self.add_mock_app_addon(mock_data, app, addon) addon_data = get_mock_addon(mock_data, addon) mock_data[:addons][app] << addon_data.reject {|key, value| !['beta', 'configured', 'description', 'name', 'state', 'url'].include?(key)} version = mock_data[:releases][app].map {|release| release['name'][1..-1].to_i}.max || 0 env = if get_mock_app(mock_data, app)['stack'] == 'cedar' { 'BUNDLE_WITHOUT' => 'development:test', 'DATABASE_URL' => 'postgres://username:[email protected]/username', 'LANG' => 'en_US.UTF-8', 'RACK_ENV' => 'production', 'SHARED_DATABASE_URL' => 'postgres://username:[email protected]/username' } else {} end mock_data[:releases][app] << { 'addons' => mock_data[:addons][app].map {|addon| addon['name']}, 'commit' => nil, 'created_at' => , 'descr' => "Add-on add #{addon_data['name']}", 'env' => env, 'name' => "v#{version + 1}", 'pstable' => { 'web' => '' }, 'user' => '[email protected]' } end |
.get_mock_addon(mock_data, addon) ⇒ Object
62 63 64 65 66 67 68 |
# File 'lib/heroku/api/mock.rb', line 62 def self.get_mock_addon(mock_data, addon) @addons ||= begin data = File.read("#{File.dirname(__FILE__)}/mock/cache/get_addons.json") Heroku::API::OkJson.decode(data) end @addons.detect {|addon_data| addon_data['name'] == addon} end |
.get_mock_addon_price(mock_data, addon) ⇒ Object
70 71 72 73 74 75 76 77 78 |
# File 'lib/heroku/api/mock.rb', line 70 def self.get_mock_addon_price(mock_data, addon) addon_data = get_mock_addon(mock_data, addon) price_cents = addon_data['price_cents'] || 0 price = format("$%d/mo", price_cents / 100) if price == '$0/mo' price = 'free' end price end |
.get_mock_app(mock_data, app) ⇒ Object
80 81 82 |
# File 'lib/heroku/api/mock.rb', line 80 def self.get_mock_app(mock_data, app) mock_data[:apps].detect {|app_data| app_data['name'] == app} end |
.get_mock_app_addon(mock_data, app, addon) ⇒ Object
84 85 86 |
# File 'lib/heroku/api/mock.rb', line 84 def self.get_mock_app_addon(mock_data, app, addon) mock_data[:addons][app].detect {|addon_data| addon_data['name'] == addon} end |
.get_mock_app_domain(mock_data, app, domain) ⇒ Object
88 89 90 |
# File 'lib/heroku/api/mock.rb', line 88 def self.get_mock_app_domain(mock_data, app, domain) mock_data[:domains][app].detect {|domain_data| domain_data['domain'] == domain} end |
.get_mock_collaborator(mock_data, app, email) ⇒ Object
92 93 94 |
# File 'lib/heroku/api/mock.rb', line 92 def self.get_mock_collaborator(mock_data, app, email) mock_data[:collaborators][app].detect {|collaborator_data| collaborator_data['email'] == email} end |
.get_mock_key(mock_data, key) ⇒ Object
96 97 98 |
# File 'lib/heroku/api/mock.rb', line 96 def self.get_mock_key(mock_data, key) mock_data[:keys].detect {|key_data| %r{ #{Regexp.escape(key)}$}.match(key_data['contents'])} end |
.get_mock_processes(mock_data, app) ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/heroku/api/mock.rb', line 100 def self.get_mock_processes(mock_data, app) mock_data[:ps][app].map do |ps| # swap day/month positions for Time.parse time_parts = ps['transitioned_at'].split(' ') date_parts = time_parts.first.split('/') date_parts[1], date_parts[2] = date_parts[2], date_parts[1] time_parts[0] = date_parts.join('/') munged_time = time_parts.join(' ') elapsed = Time.now.to_i - Time.parse(munged_time).to_i ps['elapsed'] = elapsed pretty_elapsed = if elapsed < 60 "#{elapsed}s" elsif elapsed < (60 * 60) "#{elapsed / 60}m" else "#{elapsed / 60 / 60}h" end ps['pretty_state'] = "#{ps['state']} for #{pretty_elapsed}" ps end end |
.gzip(string) ⇒ Object
125 126 127 128 129 130 131 |
# File 'lib/heroku/api/mock.rb', line 125 def self.gzip(string) io = StringIO.new gzip = Zlib::GzipWriter.new(io) gzip.write(string) gzip.close io.string end |
.json_gzip(string) ⇒ Object
133 134 135 |
# File 'lib/heroku/api/mock.rb', line 133 def self.json_gzip(string) gzip(Heroku::API::OkJson.encode(string)) end |
.parse_stub_params(params) ⇒ Object
137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/heroku/api/mock.rb', line 137 def self.parse_stub_params(params) api_key = Base64.decode64(params[:headers]['Authorization']).split(':').last parsed = params.dup begin # try to JSON decode parsed[:body] &&= Heroku::API::OkJson.decode(parsed[:body]) rescue # else leave as is end [parsed, @mock_data[api_key]] end |
.remove_mock_app_addon(mock_data, app, addon) ⇒ Object
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/heroku/api/mock.rb', line 149 def self.remove_mock_app_addon(mock_data, app, addon) addon_data = mock_data[:addons][app].detect {|addon_data| addon_data['name'] == addon} mock_data[:addons][app].delete(addon_data) version = mock_data[:releases][app].map {|release| release['name'][1..-1].to_i}.max || 0 env = if get_mock_app(mock_data, app)['stack'] == 'cedar' { 'BUNDLE_WITHOUT' => 'development:test', 'DATABASE_URL' => 'postgres://username:[email protected]/username', 'LANG' => 'en_US.UTF-8', 'RACK_ENV' => 'production', 'SHARED_DATABASE_URL' => 'postgres://username:[email protected]/username' } else {} end mock_data[:releases][app] << { 'addons' => mock_data[:addons][app].map {|addon| addon['name']}, 'commit' => nil, 'created_at' => , 'descr' => "Add-on remove #{addon_data['name']}", 'env' => env, 'name' => "v#{version + 1}", 'pstable' => { 'web' => '' }, 'user' => '[email protected]' } end |
.timestamp ⇒ Object
184 185 186 |
# File 'lib/heroku/api/mock.rb', line 184 def self. Time.now.strftime("%G/%d/%m %H:%M:%S %z") end |
.with_mock_app(mock_data, app, &block) ⇒ Object
176 177 178 179 180 181 182 |
# File 'lib/heroku/api/mock.rb', line 176 def self.with_mock_app(mock_data, app, &block) if app_data = get_mock_app(mock_data, app) yield(app_data) else APP_NOT_FOUND end end |