mini-heroku 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/mh +25 -0
  3. data/lib/mini-heroku.rb +162 -0
  4. metadata +48 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3991e69eb5a68627bebd68a704540863561eba2a
4
+ data.tar.gz: 7165c557f29f0c4ceabba209fc47980830e5b761
5
+ SHA512:
6
+ metadata.gz: '03573348cd4f7b75b8465bc39aab2dfa03800288f6fb34ce5a1926372f8b0c77b68795d6ba71fb019bc5e830c75277cbdb32943fc8955f3fc30f86d3cf8ce2bb'
7
+ data.tar.gz: d3dad0d8fda0619f225fa5c8820f3c6ab078e61ff952225e2ee16c046b4d251d6f37242ed122becd3832907d2ce94e040ac4c9f4adead428812a677cf6b8e6d0
data/bin/mh ADDED
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+ require "mini-heroku"
3
+ arg = ARGV[0].chomp.downcase
4
+ case arg
5
+ when "create"
6
+ name = ARGV[1]
7
+ MiniHeroku.create(name)
8
+ when "refresh"
9
+ MiniHeroku.refresh()
10
+ when "deploy"
11
+ MiniHeroku.deploy()
12
+ when "setenvironment"
13
+ MiniHeroku.setProductionEnvironment()
14
+ when "start"
15
+ MiniHeroku.start()
16
+ when "help"
17
+ puts "Commands are:"
18
+ puts "create *name*"
19
+ puts "refresh"
20
+ puts "deploy"
21
+ puts "start"
22
+ puts "setenvironment"
23
+ else
24
+ puts "MH: Unknown command: " + arg + " ; type \"help\" for help"
25
+ end
@@ -0,0 +1,162 @@
1
+ require "rubygems"
2
+ require "json"
3
+
4
+ module MiniHeroku
5
+
6
+ DEFAULT_PROCFILE = "web: bundle exec ruby server.rb -p $PORT"
7
+ DEFAULT_GITIGNORE = [".env","mhenvironment.json"].join("\n")
8
+ DEFAULT_SERVER = [
9
+ "require 'sinatra'",
10
+ "",
11
+ "get '/' do",
12
+ " \"Hello world! Your variable defaultKey is (probably empty): \#{ENV['defaultKey']}\"",
13
+ "end"
14
+ ]
15
+ DEFAULT_CONFIG = {
16
+ devUsesProdEnviromnent: true,
17
+ environmentKeys: [
18
+ :defaultKey
19
+ ]
20
+ }
21
+
22
+ def self.start()
23
+ system("heroku local")
24
+ end
25
+
26
+ def self.create(name)
27
+ puts("MH: Creating #{name}")
28
+ system("git init")
29
+ system("heroku create #{name}")
30
+ refresh()
31
+ end
32
+
33
+ def self.getGems()
34
+ installed = `gem list`.split("\n")
35
+ installed.map! do |g|
36
+ name, rest = g.split(" (")
37
+ version = rest.scan(/(^)((\d|\.)*)/)[0][1]
38
+ [name, version]
39
+ end
40
+ return Hash[installed]
41
+ end
42
+
43
+ def self.refresh()
44
+ #config
45
+ config = DEFAULT_CONFIG
46
+ if File.file?("mhconfig.json")
47
+ config.merge!(JSON.parse(File.read("mhconfig.json"), :symbolize_names => true))
48
+ puts("MH: Config found")
49
+ end
50
+ File.open("mhconfig.json", "wb") do |f|
51
+ f.write JSON.pretty_generate(config)
52
+ end
53
+
54
+ #environment
55
+ environment = {
56
+ production: {},
57
+ development: {}
58
+ }
59
+ for key in config[:environmentKeys]
60
+ environment[:production][key] = ""
61
+ environment[:development][key] = ""
62
+ end
63
+ if File.file?("mhenvironment.json")
64
+ old = JSON.parse(File.read("mhenvironment.json"), :symbolize_names => true)
65
+ environment = environment.merge(old)
66
+ end
67
+ File.open("mhenvironment.json", "wb") do |f|
68
+ f.write(JSON.pretty_generate(environment))
69
+ end
70
+
71
+ #env file
72
+ File.open(".env", "w") do |f|
73
+ vars = {}
74
+ if config[:devUsesProdEnviromnent]
75
+ vars = environment[:production]
76
+ else
77
+ vars = environment[:development]
78
+ end
79
+ vars.each do |key, value|
80
+ f.puts("#{key}=#{value}")
81
+ end
82
+ end
83
+
84
+ #procfile
85
+ if File.file?("Procfile")
86
+ puts "MH: Procfile found"
87
+ else
88
+ puts "MH: Creating Procfile"
89
+ File.open("Procfile", "w") do |f|
90
+ f.puts(DEFAULT_PROCFILE)
91
+ end
92
+ end
93
+
94
+ #gitignore
95
+ if File.file?(".gitignore")
96
+ puts "MH: .gitignore found"
97
+ else
98
+ puts "MH: Creating .gitignore"
99
+ File.open(".gitignore", "w") do |f|
100
+ f.puts(DEFAULT_GITIGNORE)
101
+ end
102
+ end
103
+
104
+ #gems
105
+ gems = ["sinatra"]
106
+ if File.file?("server.rb")
107
+ puts "MH: Checking Gems from server file"
108
+ gems = File.read("server.rb").split("\n").map do |line|
109
+ line.scan(/^(require ("|'))(\w*)("|')/).map{|match| match[2]}
110
+ end
111
+ gems.flatten!
112
+ else
113
+ puts "MH: Creating Default server file"
114
+ File.open("server.rb", "w") do |f|
115
+ f.puts(DEFAULT_SERVER)
116
+ end
117
+ end
118
+ installedGems = getGems()
119
+ didInstall = false
120
+ for gem in gems
121
+ if !(installedGems.keys.include?(gem))
122
+ puts "MH: Installing Gem #{gem}"
123
+ system("gem install #{gem}")
124
+ didInstall = true
125
+ end
126
+ end
127
+ if didInstall
128
+ puts "MH: Re-checking Gems"
129
+ installedGems = getGems()
130
+ end
131
+ puts "MH: Creating Gemfile"
132
+ File.open("Gemfile", "w") do |f|
133
+ f.puts("source 'https://rubygems.org'")
134
+ f.puts("ruby '#{RUBY_VERSION}'")
135
+ gems.each do |gem|
136
+ f.puts("gem '#{gem}', '>=#{installedGems[gem]}'")
137
+ end
138
+ end
139
+
140
+ puts "MH: Bundle"
141
+ system("bundle")
142
+ puts "MH: Refresh complete"
143
+ end
144
+
145
+ def self.setProductionEnvironment()
146
+ environment = JSON.parse(File.read("mhenvironment.json"), :symbolize_names => true)[:production]
147
+ environment = environment.each.map{|key, val| "#{key}=#{val}"}.join(" ")
148
+ system("heroku config:set " + environment)
149
+ end
150
+
151
+ def self.deploy
152
+ puts("MH: Name the commit:")
153
+ name = STDIN.gets().chomp()
154
+ system("git add .")
155
+ system("git commit -m \"#{name}\"")
156
+ system("git push heroku master")
157
+ puts("MH: Deploy complete")
158
+ end
159
+ end
160
+
161
+ #MiniHeroku.create("mini-heroku-test")
162
+ #MiniHeroku.setProductionEnvironment()
metadata ADDED
@@ -0,0 +1,48 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mini-heroku
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.9
5
+ platform: ruby
6
+ authors:
7
+ - Martin Larsson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-06-26 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Makes it easy to create, update and deply a sinatra webserver to heroku.
14
+ Be warned, this gem might run over your files if something goes worng. see 'mh help'
15
+ for commands
16
+ email: martin.99.larsson@telia.com
17
+ executables:
18
+ - mh
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - bin/mh
23
+ - lib/mini-heroku.rb
24
+ homepage: http://rubygems.org/gems/mini-heroku
25
+ licenses:
26
+ - MIT
27
+ metadata: {}
28
+ post_install_message:
29
+ rdoc_options: []
30
+ require_paths:
31
+ - lib
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 2.5.2
45
+ signing_key:
46
+ specification_version: 4
47
+ summary: Small gem for heroku and sinatra based webservers
48
+ test_files: []