brisk 0.1.0

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