oxy 0.1.0 → 0.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3b4f150980fce178f915f13fe44e58c28ba838e1
4
- data.tar.gz: 3ed19f03a1886eedb7e85985963f8f725bae1278
3
+ metadata.gz: c3a23994e0098c5d49df8b240845baa9340739e1
4
+ data.tar.gz: 0c2adf420f29e5d316ee2590005518d193532b51
5
5
  SHA512:
6
- metadata.gz: 11740aa0c82135b68f1e2f09bbe4b614d7c792ba34e4663157c02a2b707e7584c9ec973c022109b6624c2868c355c7c8498e50de1d729c2329023433c2f12471
7
- data.tar.gz: 32e47a9528601f5c40054d77eccbb9ec7acaf5dbf27ce8ce74b105e54db76a39a45fc57469a83b11951cb265446589e8e8cdf5ac477a659649bccab92bdeae53
6
+ metadata.gz: 03f74bad6f4c45d79fd5a106aef3c72a5c3a33ddeafcf5a2091bf962d8e40e5182112eb0a69dc6fcaec0c77f9ce6c0193e415b1bd74da8681b01e0f0d8addae4
7
+ data.tar.gz: 9f975637fc3477b4a6c3aa23824a7fdbcfd80010196481126d793c4f4bf95634040f21511911d189875116c87b593c30200eda8bab37cd339970f0e6ec087ea6
data/Gemfile CHANGED
@@ -3,4 +3,4 @@ source "https://rubygems.org"
3
3
  git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in oxy.gemspec
6
- gemspec
6
+ gemspec
data/Rakefile CHANGED
@@ -7,4 +7,4 @@ Rake::TestTask.new(:test) do |t|
7
7
  t.test_files = FileList["test/**/*_test.rb"]
8
8
  end
9
9
 
10
- task :default => :test
10
+ task :default => :test
data/bin/oxy ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'oxy'
4
+
5
+ Oxy::Server.new(ARGV).run
data/lib/oxy/server.rb ADDED
@@ -0,0 +1,115 @@
1
+ require "optparse"
2
+ require "ostruct"
3
+ require "rack"
4
+ require "rack/contrib"
5
+
6
+ module Oxy
7
+ class Server
8
+ attr_accessor :options
9
+
10
+ attr_reader :stdout
11
+
12
+ def initialize(argv = [], stdin = $stdin, stdout = $stdout, stderr = $stderr)
13
+ @stdout = stdout
14
+ @options = OpenStruct.new
15
+ @parser = option_parser
16
+ # actually parse arguments input
17
+ parse_options(argv)
18
+ end
19
+
20
+ def run
21
+ # setup oxy's folder
22
+ FileUtils.mkdir_p(oxy_home_path) unless File.exist?(oxy_home_path)
23
+ # process user's options (if any)
24
+ miscellaneous
25
+ # start server's thread
26
+ server_thread = start_server
27
+ # wait for the server's thread to join
28
+ server_thread.join if server_thread
29
+ end
30
+
31
+ private
32
+ def oxy_home_path
33
+ "#{ENV["HOME"]}/oxy"
34
+ end
35
+
36
+ def static_site_app
37
+ # pin site_root_path
38
+ site_root_path = @options.document_root
39
+ # pin not_found_path file path
40
+ not_found_path = File.join(site_root_path, "404.html")
41
+ # build new app
42
+ stack = Rack::Builder.new {
43
+ use Rack::CommonLogger
44
+ use Rack::TryStatic, :urls => %w[/], :try => ['.html', 'index.html', '/index.html']
45
+ run Rack::NotFound.new(not_found_path)
46
+ }
47
+ return stack.to_app
48
+ end
49
+
50
+ def start_server
51
+ # instantiate our Rack server
52
+ @server = Rack::Server.new({
53
+ :app => static_site_app,
54
+ :pid => File.join(oxy_home_path,"oxy.pid"),
55
+ :Port => @options.port,
56
+ :Host => @options.address,
57
+ :environment => 'deployment',
58
+ :server => 'puma',
59
+ :daemonize => false
60
+ })
61
+ # spin the server
62
+ Thread.new { @server.start }
63
+ end
64
+
65
+ def parse_options(argv = [])
66
+ begin
67
+ # parse options input from the user
68
+ @parser.parse!(argv)
69
+ # set option defaults
70
+ @options.document_root = Dir.pwd unless @options.document_root
71
+ @options.port = 4000 unless @options.port
72
+ rescue OptionParser::ParseError => pe
73
+ msg = ["#{@parser.program_name}: #{pe}", "Try `#{@parser.program_name} --help` for more information"]
74
+ @options.error_message = msg.join("\n")
75
+ end
76
+ end
77
+
78
+ # Miscellaneous options simply renders the appropriate information to the output.
79
+ def miscellaneous
80
+ if @options.show_version then
81
+ @stdout.puts "#{@parser.program_name}: version #{Oxy::VERSION}"
82
+ exit 0
83
+ elsif @options.show_help then
84
+ @stdout.puts @parser.to_s
85
+ exit 0
86
+ elsif @options.error_message then
87
+ @stdout.puts @options.error_message
88
+ exit 1
89
+ end
90
+ end
91
+
92
+ def option_parser
93
+ # We derive our options from Puma to avoid confusion
94
+ OptionParser.new do |op|
95
+ op.separator ""
96
+ # parse help
97
+ op.on("-h", "--help", "Display this text") do
98
+ @options.show_help = true
99
+ end
100
+ # parse version
101
+ op.on("-V", "--version", "Show version") do
102
+ @options.show_version = true
103
+ end
104
+ # parse uri
105
+ op.on("-b", "--bind URI", "URI to bind to (tcp://, unix://, ssl://)") do |uri|
106
+ @options.uri = uri
107
+ end
108
+ # parse port no.
109
+ op.on("-p", "--port PORT", Integer, "Define the TCP port to bind to", "Use -b for more advanced options") do |port|
110
+ @options.port = port
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
data/lib/oxy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Oxy
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/lib/oxy.rb CHANGED
@@ -1,5 +1,3 @@
1
1
  require "oxy/version"
2
2
 
3
- module Oxy
4
- # Your code goes here...
5
- end
3
+ require 'oxy/server'
data/oxy.gemspec CHANGED
@@ -16,11 +16,20 @@ Gem::Specification.new do |spec|
16
16
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
17
  f.match(%r{^(test|spec|features)/})
18
18
  end
19
- spec.bindir = "exe"
20
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.executables = ["oxy".freeze]
21
20
  spec.require_paths = ["lib"]
22
21
 
22
+ spec.add_runtime_dependency "rack", "~> 2.0"
23
+ spec.add_runtime_dependency "rack-contrib", "~> 1.2"
24
+ spec.add_runtime_dependency "puma", "~> 3.10"
25
+
23
26
  spec.add_development_dependency "bundler", "~> 1.15"
24
27
  spec.add_development_dependency "rake", "~> 10.0"
25
28
  spec.add_development_dependency "minitest", "~> 5.0"
29
+
30
+ spec.add_development_dependency "pry"
31
+ spec.add_development_dependency "pry-byebug"
32
+ spec.add_development_dependency "pry-doc"
33
+ spec.add_development_dependency "pry-rescue"
34
+ spec.add_development_dependency "pry-stack_explorer"
26
35
  end
metadata CHANGED
@@ -1,15 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oxy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Tsurbeleu
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-26 00:00:00.000000000 Z
11
+ date: 2017-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rack-contrib
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: puma
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.10'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.10'
13
55
  - !ruby/object:Gem::Dependency
14
56
  name: bundler
15
57
  requirement: !ruby/object:Gem::Requirement
@@ -52,10 +94,81 @@ dependencies:
52
94
  - - "~>"
53
95
  - !ruby/object:Gem::Version
54
96
  version: '5.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pry-byebug
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: pry-doc
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: pry-rescue
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: pry-stack_explorer
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
55
167
  description:
56
168
  email:
57
169
  - pavel.tsurbeleu@me.com
58
- executables: []
170
+ executables:
171
+ - oxy
59
172
  extensions: []
60
173
  extra_rdoc_files: []
61
174
  files:
@@ -67,8 +180,10 @@ files:
67
180
  - README.md
68
181
  - Rakefile
69
182
  - bin/console
183
+ - bin/oxy
70
184
  - bin/setup
71
185
  - lib/oxy.rb
186
+ - lib/oxy/server.rb
72
187
  - lib/oxy/version.rb
73
188
  - oxy.gemspec
74
189
  homepage: http://oxy.io
@@ -91,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
206
  version: '0'
92
207
  requirements: []
93
208
  rubyforge_project:
94
- rubygems_version: 2.6.13
209
+ rubygems_version: 2.6.10
95
210
  signing_key:
96
211
  specification_version: 4
97
212
  summary: Oxy is a web server for static sites