oxy 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 238ccecaf8bc72cc938854493237421545e3aaaf
4
- data.tar.gz: 25c0f5cc4ed8b42c2a1e8bb698990f948abb8a28
3
+ metadata.gz: f8a7625f338127548d91d41d4e8b764a6e3a1014
4
+ data.tar.gz: e89478f9b9d9c9d4d3fc3edea133212c0a403151
5
5
  SHA512:
6
- metadata.gz: 03751de965c19b3d13c4ff411660965559adaf37e103ef33ff4d36c9446357291f52f20c2fa459bf95a0dc51e3a51e7f3eca2bf3dc2d9da7fa55b83ebab345df
7
- data.tar.gz: 79d7ff85fd7c3e2da485d7aa5609fced23e662cd10f2c1af0bbee168b87435e0d1c8b44901ea3830390bc7abdc05cc33992afa0fbb494d4837dbf9f0173d8e90
6
+ metadata.gz: a17585335722e4519d79197fe7856bcc6b2a099b7fb836cf20797b94d8a63fb57e61bd288d5e1c32778aac2ca7102200719b32d6950559f0f8fb15dc7a3f76ee
7
+ data.tar.gz: 6c01096e3f53919248603bdf4c8f1ab69164729883fa288a23431224f415fe6a9659f7ed1d2cac9d6431553e16ea78ecc30ee320af533e953c794d023ce09aa9
data/lib/oxy.rb CHANGED
@@ -1,3 +1,5 @@
1
1
  require "oxy/version"
2
2
 
3
- require 'oxy/server'
3
+ require "oxy/server"
4
+ require "oxy/middleware/rsvp"
5
+ require "oxy/google_contact"
@@ -0,0 +1,6 @@
1
+ # Create new contact
2
+ class GoogleContact
3
+ def self.call(email_address, logger = $stderr)
4
+ logger.write("[GoogleContact]: #{email_address}...\n")
5
+ end
6
+ end
@@ -0,0 +1,39 @@
1
+ require "threaded"
2
+
3
+ # RSVP middleware to transform 'RSVP' requests into corresponding
4
+ # contacts in your Google Contacts via Google People API.
5
+ class Oxy::RSVP
6
+ # The set of allowed fields. Requests that do not have fields
7
+ # present in this list will not be eligible to be enqueued.
8
+ ELIGIBLE_FORMS_FIELDS = ['email_address']
9
+
10
+ # ctor.
11
+ def initialize(app, logger = $stderr)
12
+ @app = app
13
+ @logger = logger
14
+ end
15
+
16
+ # Middleware's entry point
17
+ def call(env)
18
+ # instantiate the request object
19
+ req = Rack::Request.new(env)
20
+ if req.path == "/rsvp" && req.post? && valid_form(req.POST)
21
+ # enqueue the new registration request
22
+ Threaded.enqueue(GoogleContact, req.POST["email_address"], @logger)
23
+ # redirect
24
+ [302, { "Location" => "/thank-you" }, []]
25
+ else
26
+ @app.call(env)
27
+ end
28
+ end
29
+
30
+ private
31
+ # only request with eligible form fields are valid
32
+ def valid_form(form)
33
+ unless ELIGIBLE_FORMS_FIELDS.all? { |field| form.include?(field) }
34
+ @logger.write("[RSVP]: Received an invalid form ~> #{form.inspect}\n")
35
+ return false
36
+ end
37
+ return true
38
+ end
39
+ end
data/lib/oxy/server.rb CHANGED
@@ -6,7 +6,7 @@ require "fileutils"
6
6
 
7
7
  module Oxy
8
8
  class Server
9
- attr_accessor :options
9
+ attr_accessor :options, :status
10
10
 
11
11
  attr_reader :stdout
12
12
 
@@ -35,13 +35,17 @@ module Oxy
35
35
  end
36
36
 
37
37
  def static_site_app
38
- # pin site_root_path
39
- site_root_path = @options.document_root
38
+ # pin options and logger
39
+ options, logger = @options, @stdout
40
40
  # pin not_found_path file path
41
- not_found_path = File.join(site_root_path, "404.html")
41
+ not_found_path = File.join(options.document_root, "404.html")
42
42
  # build new app
43
43
  stack = Rack::Builder.new {
44
- use Rack::TryStatic, :urls => %w[/], :try => ['.html', 'index.html', '/index.html']
44
+ # middleware to handle RSVP features
45
+ use Oxy::RSVP, logger if options.rsvp
46
+ # middleware to handle static resources
47
+ use Rack::TryStatic, :root => options.document_root, :urls => %w[/], :try => [".html", "index.html", "/index.html"]
48
+ # fallback to 404 middleware as the main application
45
49
  run Rack::NotFound.new(not_found_path)
46
50
  }
47
51
  return stack.to_app
@@ -51,12 +55,14 @@ module Oxy
51
55
  # instantiate our Rack server
52
56
  @server = Rack::Server.new({
53
57
  :app => static_site_app,
54
- :pid => File.join(oxy_home_path,"oxy.pid"),
58
+ :pid => File.join(oxy_home_path, "oxy.pid"),
55
59
  :Port => @options.port,
56
60
  :Host => @options.address,
57
- :environment => 'deployment',
58
- :server => 'puma',
59
- :daemonize => false
61
+ :environment => "deployment",
62
+ :server => "puma",
63
+ :daemonize => false,
64
+ :quiet => @options.quiet,
65
+ :directory => @options.document_root
60
66
  })
61
67
  # spin the server
62
68
  Thread.new { @server.start }
@@ -69,6 +75,8 @@ module Oxy
69
75
  # set option defaults
70
76
  @options.document_root = Dir.pwd unless @options.document_root
71
77
  @options.port = 4000 unless @options.port
78
+ @options.quiet = false unless @options.quiet
79
+ @options.rsvp = false unless @options.rsvp
72
80
  rescue OptionParser::ParseError => pe
73
81
  msg = ["#{@parser.program_name}: #{pe}", "Try `#{@parser.program_name} --help` for more information"]
74
82
  @options.error_message = msg.join("\n")
@@ -109,6 +117,18 @@ module Oxy
109
117
  op.on("-p", "--port PORT", Integer, "Define the TCP port to bind to", "Use -b for more advanced options") do |port|
110
118
  @options.port = port
111
119
  end
120
+ # parse document root
121
+ op.on("--directory PATH", "PATH to serve files from") do |path|
122
+ @options.document_root = path
123
+ end
124
+ # parse quiet mode
125
+ op.on("--quiet", "Do not display any logs to STDOUT") do
126
+ @options.quiet = true
127
+ end
128
+ # parse rsvp middleware option
129
+ op.on("--rsvp", "Enable RSVP middleware to handle form submissions") do
130
+ @options.rsvp = true
131
+ end
112
132
  end
113
133
  end
114
134
  end
data/lib/oxy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Oxy
2
- VERSION = "0.1.3"
3
- end
2
+ VERSION = "0.1.4"
3
+ end
data/oxy.gemspec CHANGED
@@ -22,10 +22,13 @@ Gem::Specification.new do |spec|
22
22
  spec.add_runtime_dependency "rack", "~> 2.0"
23
23
  spec.add_runtime_dependency "rack-contrib", "~> 1.2"
24
24
  spec.add_runtime_dependency "puma", "~> 3.10"
25
+ spec.add_runtime_dependency "threaded", "~> 0.0.4"
25
26
 
26
27
  spec.add_development_dependency "bundler", "~> 1.15"
27
28
  spec.add_development_dependency "rake", "~> 10.0"
28
29
  spec.add_development_dependency "minitest", "~> 5.0"
30
+ spec.add_development_dependency "httparty"
31
+ spec.add_development_dependency "rack-test"
29
32
 
30
33
  spec.add_development_dependency "pry"
31
34
  spec.add_development_dependency "pry-byebug"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oxy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Tsurbeleu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-28 00:00:00.000000000 Z
11
+ date: 2017-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: threaded
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.0.4
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.0.4
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +108,34 @@ dependencies:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
110
  version: '5.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: httparty
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: rack-test
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'
97
139
  - !ruby/object:Gem::Dependency
98
140
  name: pry
99
141
  requirement: !ruby/object:Gem::Requirement
@@ -183,6 +225,8 @@ files:
183
225
  - bin/oxy
184
226
  - bin/setup
185
227
  - lib/oxy.rb
228
+ - lib/oxy/google_contact.rb
229
+ - lib/oxy/middleware/rsvp.rb
186
230
  - lib/oxy/server.rb
187
231
  - lib/oxy/version.rb
188
232
  - oxy.gemspec
@@ -206,7 +250,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
250
  version: '0'
207
251
  requirements: []
208
252
  rubyforge_project:
209
- rubygems_version: 2.6.10
253
+ rubygems_version: 2.6.14
210
254
  signing_key:
211
255
  specification_version: 4
212
256
  summary: Oxy is a web server for static sites