brisk 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7fda12aee0efddd813bc88c4569ffe04cc38e9db
4
+ data.tar.gz: fb8e0e72095b7af45f7b5265fc345edf5ada054e
5
+ SHA512:
6
+ metadata.gz: 0683d83026e1b2f5ee3396e3ac28c5c833eb05763e0b1222e3c811807c26ca9977df895c275ffd4e0b7b66022c8c60c8f069477c09c1abbbbe4eba5df172d8c6
7
+ data.tar.gz: 3d41ccf08b7112a259d60cc9098dd3bf12c0ec5b5cf6a17cfae259adaa4edca71bc8e4c091f531e869f0337d181b4546c46fe74276cc1fd1a6a4824f0248d791
data/bin/brisk ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ dir = File.dirname(__FILE__)
4
+
5
+ system "sudo ruby #{dir}/../lib/brisk.rb #{ARGV[0]}"
data/lib/brisk.rb ADDED
@@ -0,0 +1,54 @@
1
+ require 'thor'
2
+ require 'brisk/configuration'
3
+ require 'brisk/thin'
4
+ require 'brisk/dnsmasq'
5
+ require 'brisk/rerun'
6
+ require 'brisk/constants'
7
+ require 'brisk/server/server'
8
+
9
+ class Valet < Thor
10
+
11
+ desc "install", "install Valet"
12
+ def install
13
+ Thin.install
14
+ Configuration.install
15
+ DnsMasq.install
16
+ Rerun.install
17
+ Thin.restart
18
+ puts "Ruby Valet installed Successfully. Start adding directories by using brisk set".colorize(:green)
19
+ end
20
+
21
+ desc "set", "Set directory"
22
+ def set
23
+ Configuration.add_path(Dir.pwd)
24
+ puts "Successfully added directory".colorize(:green)
25
+ end
26
+
27
+ desc "unset", "Unset directory"
28
+ def unset
29
+ Configuration.remove_path(Dir.pwd)
30
+ puts "Successfully removed directory".colorize(:green)
31
+ end
32
+
33
+ desc "kill", "Kill web server"
34
+ def kill
35
+ Server.kill(Constants::VALET_HOME)
36
+ end
37
+
38
+ desc "stop", "Stops the server"
39
+ def stop
40
+ Thin.stop
41
+ end
42
+
43
+ desc "start", "Starts the server"
44
+ def start
45
+ Thin.stop
46
+ end
47
+
48
+ desc "restart", "Restarts the server"
49
+ def restart
50
+ Thin.restart
51
+ end
52
+ end
53
+
54
+ Valet.start(ARGV)
@@ -0,0 +1,46 @@
1
+ require 'brisk/constants'
2
+ require 'fileutils'
3
+ require 'json'
4
+
5
+ class Configuration
6
+ include Constants
7
+ def self.install
8
+ unless File.directory?(directory = Constants::VALET_HOME)
9
+ FileUtils.mkdir_p(directory, :mode => 0755)
10
+ end
11
+
12
+ unless File.directory?(drivers_directory = Constants::VALET_HOME + '/Drivers')
13
+ FileUtils.mkdir_p(drivers_directory, :mode => 0755)
14
+ end
15
+
16
+ unless File.directory?(path)
17
+ write({:domain => 'dev', 'paths' => []})
18
+ end
19
+ end
20
+
21
+ def self.add_path(path)
22
+ config = read
23
+ config['paths'].push(path)
24
+ write(config)
25
+ end
26
+
27
+ def self.remove_path(path)
28
+ config = read
29
+ config['paths'].delete_if {|i| i == path}
30
+ write(config)
31
+ end
32
+
33
+ def self.path
34
+ return Constants::VALET_HOME + '/config.json'
35
+ end
36
+
37
+ def self.read
38
+ JSON.parse(File.read(path))
39
+ end
40
+
41
+ def self.write(config)
42
+ File.open(path, "w+") do |f|
43
+ f.write(config.to_json)
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,3 @@
1
+ module Constants
2
+ VALET_HOME = ENV["HOME"] + '/.brisk'
3
+ end
@@ -0,0 +1,52 @@
1
+ require 'colorize'
2
+
3
+ class DnsMasq
4
+
5
+ def self.install
6
+ unless is_installed?
7
+ puts "Installing DnsMasq...".colorize(:green)
8
+ download
9
+ end
10
+
11
+ create_custom_configuration
12
+
13
+ create_resolver
14
+
15
+ system "brew services restart dnsmasq > /dev/null"
16
+ end
17
+
18
+ def self.is_installed?
19
+ system "brew list | grep dnsmasq >> /dev/null"
20
+
21
+ $? == 0
22
+ end
23
+
24
+ def self.download
25
+ system "sudo -u #{ENV['SUDO_USER']} brew install dnsmasq"
26
+ end
27
+
28
+ def self.create_custom_configuration
29
+ dnsmasq_path = "/Users/#{ENV['SUDO_USER']}/.brisk/dnsmasq.conf"
30
+
31
+ unless File.file?('/usr/local/etc/dnsmasq.conf')
32
+ FileUtils.copy('/usr/local/opt/dnsmasq/dnsmasq.conf.example','/usr/local/etc/dnsmasq.conf')
33
+ end
34
+
35
+ if File.read('/usr/local/etc/dnsmasq.conf').index(dnsmasq_path) == nil
36
+ File.open('/usr/local/etc/dnsmasq.conf', 'a') { |f| f.puts "conf-file=" + dnsmasq_path }
37
+ end
38
+
39
+ File.write(dnsmasq_path, 'address=/.dev/127.0.0.1')
40
+ end
41
+
42
+ def self.create_resolver
43
+ unless File.directory?('/etc/resolver')
44
+ FileUtils.mkdir_p('/etc/resolver')
45
+ end
46
+
47
+ # File.write('etc/resolver/dev', 'nameserver 127.0.0.1')
48
+ File.open('/etc/resolver/dev', 'w+') do |f|
49
+ f.write('nameserver 127.0.0.1')
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,19 @@
1
+ class Rerun
2
+
3
+ def self.install
4
+ unless is_installed?
5
+ puts "Installing rerun...".colorize(:green)
6
+ download
7
+ end
8
+ end
9
+
10
+ def self.is_installed?
11
+ system "gem list -i rerun > /dev/null"
12
+
13
+ $? == 0
14
+ end
15
+
16
+ def self.download
17
+ system "gem install rerun >> /dev/null"
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ class BriskRequestHelper
2
+
3
+ def initialize(env)
4
+ @env = env
5
+ @request = Rack::Request.new(env)
6
+ end
7
+
8
+ def get_site
9
+ @request.host[0..-5]
10
+ end
11
+
12
+ def valet_home_path
13
+ uid = File.stat(__FILE__).uid
14
+ home_dir = Etc.getpwuid(uid).dir
15
+ home_dir + "/.brisk"
16
+ end
17
+
18
+ def get_config
19
+ config = JSON.parse(File.read(valet_home_path + '/config.json'))
20
+ end
21
+ end
@@ -0,0 +1,5 @@
1
+ require 'brisk/server/proxy'
2
+ require 'brisk/server/server_middleware'
3
+
4
+ use ServerMiddleware
5
+ run AppProxy.new
@@ -0,0 +1,18 @@
1
+ class Pid
2
+
3
+ def self.write(path, pid)
4
+ File.open("#{path}/pid.txt", 'w') do |f|
5
+ f.write(pid)
6
+ end
7
+
8
+ sleep(1)
9
+ end
10
+
11
+ def self.read(path)
12
+ File.read("#{path}/tmp/pids/thin.pid")
13
+ end
14
+
15
+ def self.exists?(path)
16
+ File.file?("#{path}/tmp/pids/thin.pid")
17
+ end
18
+ end
@@ -0,0 +1,63 @@
1
+ require 'rack-proxy'
2
+ require 'etc'
3
+ require 'json'
4
+ require 'brisk/server/server_middleware'
5
+ require 'brisk/server/brisk_request_helper'
6
+ require 'brisk/server/server'
7
+ require 'brisk/server/site'
8
+ require 'brisk/server/pid'
9
+
10
+ class AppProxy < Rack::Proxy
11
+
12
+
13
+ def rewrite_env(env)
14
+ # Get all the necessary info
15
+ request = BriskRequestHelper.new env
16
+ site = request.get_site
17
+ valet_home_path = request.valet_home_path
18
+
19
+ # Kill existing servers, so we don't get conflitcs
20
+ if Server.is_running(valet_home_path)
21
+
22
+ if Site.read_site(valet_home_path) == site
23
+ env["HTTP_HOST"] = "localhost:3000"
24
+ return env
25
+ end
26
+
27
+ existing_pid = Server.read(valet_home_path)
28
+ Server.shutdown(existing_pid)
29
+ end
30
+
31
+ config = request.get_config
32
+
33
+ valet_site_path = nil
34
+
35
+ # Check if we can find a folder based on the URL
36
+ config['paths'].each do |path|
37
+ if File.directory?("/#{path}/#{site}")
38
+ if File.file?("/#{path}/#{site}/config.ru")
39
+ valet_site_path = "/#{path}/#{site}"
40
+ end
41
+ end
42
+ end
43
+
44
+ # Boot up the server
45
+ Server.start(valet_site_path)
46
+
47
+ started = Server.is_started(valet_site_path)
48
+
49
+ # Write the pid to a file so we can delete it later on
50
+ if started
51
+ pid = Pid.read(valet_site_path)
52
+ Pid.write(valet_home_path, pid)
53
+ Site.write_site(valet_home_path, site)
54
+ end
55
+
56
+ sleep(2)
57
+
58
+ # # Set the host to the server we just started
59
+ env["HTTP_HOST"] = "localhost:3000"
60
+
61
+ env
62
+ end
63
+ end
@@ -0,0 +1,36 @@
1
+ require 'brisk/server/pid'
2
+
3
+ class Server
4
+
5
+ def self.is_running(path)
6
+ File.file?("#{path}/pid.txt")
7
+ end
8
+
9
+ def self.read(path)
10
+ File.read("#{path}/pid.txt")
11
+ end
12
+
13
+ def self.kill(path)
14
+ if is_running(path)
15
+ pid = read path
16
+ shutdown pid
17
+ end
18
+ end
19
+
20
+ def self.start(path)
21
+ spawn "cd #{path} && /usr/local/bin/rerun \"/usr/local/bin/thin -d -R config.ru -a localhost -p 3000 start\""
22
+ end
23
+
24
+ def self.is_started(path, counter = 0)
25
+ sleep(1)
26
+ if Pid.exists?(path)
27
+ return true
28
+ end
29
+
30
+ is_started(path, counter + 1)
31
+ end
32
+
33
+ def self.shutdown(pid)
34
+ system "sudo kill -9 #{pid}"
35
+ end
36
+ end
@@ -0,0 +1,31 @@
1
+ require 'brisk/server/brisk_request_helper'
2
+
3
+ class ServerMiddleware
4
+ def initialize(app)
5
+ @app = app
6
+ end
7
+
8
+ def call(env)
9
+ request = BriskRequestHelper.new env
10
+ site = request.get_site
11
+ valet_home_path = request.valet_home_path
12
+
13
+ config = request.get_config
14
+
15
+ valet_site_path = nil
16
+
17
+ config['paths'].each do |path|
18
+ if File.directory?("/#{path}/#{site}")
19
+ if File.file?("/#{path}/#{site}/config.ru")
20
+ valet_site_path = "/#{path}/#{site}"
21
+ end
22
+ end
23
+ end
24
+
25
+ if valet_site_path.nil?
26
+ return [404, {}, ['Not found']]
27
+ end
28
+
29
+ @app.call(env)
30
+ end
31
+ end
@@ -0,0 +1,17 @@
1
+ class Site
2
+ def self.write_site(path, site)
3
+ File.open("#{path}/site.txt", "w+") do |f|
4
+ f.write(site)
5
+ end
6
+ end
7
+
8
+ def self.read_site(path)
9
+ if site_file_exists?(path)
10
+ return File.read("#{path}/site.txt")
11
+ end
12
+ end
13
+
14
+ def self.site_file_exists?(path)
15
+ File.file?("#{path}/site.txt")
16
+ end
17
+ end
data/lib/brisk/thin.rb ADDED
@@ -0,0 +1,40 @@
1
+ require 'colorize'
2
+
3
+ class Thin
4
+
5
+ def self.install
6
+ unless system "gem list -i thin > /dev/null"
7
+ system "gem install thin > /dev/null"
8
+
9
+ if $? == 0
10
+ puts "Successfuly installed thin".colorize(:green)
11
+ else
12
+ puts "Something went wrong while installing thin. The process gets stopped".colorize(:red)
13
+ end
14
+ end
15
+
16
+ path = File.expand_path("../../stubs/daemon.plist", __dir__)
17
+ server = File.expand_path("server/config.ru", __dir__)
18
+
19
+ file = File.read(path)
20
+
21
+ new_file = file.gsub("SERVER_PATH", server)
22
+ File.open("/Library/LaunchDaemons/com.frankleef.briskServer.plist", "w+") do |file|
23
+ file.write(new_file)
24
+ end
25
+ end
26
+
27
+ def self.restart
28
+ stop
29
+
30
+ start
31
+ end
32
+
33
+ def self.start
34
+ system "launchctl load /Library/LaunchDaemons/com.frankleef.briskServer.plist > /dev/null"
35
+ end
36
+
37
+ def self.stop
38
+ system "launchctl unload /Library/LaunchDaemons/com.frankleef.briskServer.plist > /dev/null"
39
+ end
40
+ end
@@ -0,0 +1,3 @@
1
+ module Brisk
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>Label</key>
6
+ <string>com.frankleef.rubyValetServer</string>
7
+ <key>ProgramArguments</key>
8
+ <array>
9
+ <string>/usr/local/bin/thin</string>
10
+ <string>start</string>
11
+ <string>-R</string>
12
+ <string>SERVER_PATH</string>
13
+ <string>-p</string>
14
+ <string>80</string>
15
+ </array>
16
+ <key>RunAtLoad</key>
17
+ <true/>
18
+ <key>StandardOutput</key>
19
+ <string>/tmp/com.frankleef.briskServer.out</string>
20
+ <key>StandardErrorPath</key>
21
+ <string>/tmp/com.frankleef.briskServer.err</string>
22
+ </dict>
23
+ </plist>
metadata ADDED
@@ -0,0 +1,146 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: brisk
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Frank
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-05-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.11'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: thor
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.19.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 0.19.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: colorize
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 0.7.7
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 0.7.7
83
+ - !ruby/object:Gem::Dependency
84
+ name: rack-proxy
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 0.5.17
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 0.5.17
97
+ description: A simple gem that maps all folder to a *.dev url
98
+ email:
99
+ - fr.levering@gmail.com
100
+ executables:
101
+ - brisk
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - bin/brisk
106
+ - lib/brisk.rb
107
+ - lib/brisk/configuration.rb
108
+ - lib/brisk/constants.rb
109
+ - lib/brisk/dnsmasq.rb
110
+ - lib/brisk/rerun.rb
111
+ - lib/brisk/server/brisk_request_helper.rb
112
+ - lib/brisk/server/config.ru
113
+ - lib/brisk/server/pid.rb
114
+ - lib/brisk/server/proxy.rb
115
+ - lib/brisk/server/server.rb
116
+ - lib/brisk/server/server_middleware.rb
117
+ - lib/brisk/server/site.rb
118
+ - lib/brisk/thin.rb
119
+ - lib/brisk/version.rb
120
+ - stubs/daemon.plist
121
+ homepage: https://www.github.com/frankieleef/brisk
122
+ licenses:
123
+ - MIT
124
+ metadata:
125
+ allowed_push_host: https://rubygems.org
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirements: []
141
+ rubyforge_project:
142
+ rubygems_version: 2.4.5
143
+ signing_key:
144
+ specification_version: 4
145
+ summary: Brisk
146
+ test_files: []