mini-heroku 0.1.9

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.
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: []