Skip to content

Commit 1a9b2ca

Browse files
committed
simplify
1 parent a53f86e commit 1a9b2ca

File tree

3 files changed

+28
-158
lines changed

3 files changed

+28
-158
lines changed

README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ Run the server locally, running:
1818
$ rake run
1919
```
2020

21-
Open your browser and navigate to `http://localhost:3000`.
22-
2321
## Featurevisor project
2422

2523
Uses this Featurevisor project to fetch the configuration from: https://github.com/featurevisor/featurevisor-example-cloudflare

Rakefile

Lines changed: 3 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,46 +3,14 @@ require 'rake'
33
# Default task
44
task default: [:run]
55

6-
# Run the web server
7-
desc "Run the Hello World web server"
6+
# Run the Hello World program
7+
desc "Run the Hello World program with Featurevisor"
88
task :run do
9-
puts "Starting Ruby Hello World Web Server..."
9+
puts "Running Ruby Hello World program with Featurevisor..."
1010
puts
1111
system("ruby app.rb")
1212
end
1313

14-
# Start server in background
15-
desc "Start the web server in background"
16-
task :start do
17-
puts "Starting Hello World web server in background..."
18-
puts "Server will be available at http://localhost:3000"
19-
puts "Use 'rake stop' to stop the server"
20-
system("ruby app.rb &")
21-
puts "Server started with PID: #{$?.pid}"
22-
end
23-
24-
# Stop background server
25-
desc "Stop the background web server"
26-
task :stop do
27-
puts "Stopping background web server..."
28-
system("pkill -f 'ruby app.rb'")
29-
puts "Server stopped."
30-
end
31-
32-
# Check if port is available
33-
desc "Check if port 3000 is available"
34-
task :check_port do
35-
require 'socket'
36-
begin
37-
server = TCPServer.new(3000)
38-
server.close
39-
puts "Port 3000 is available"
40-
rescue Errno::EADDRINUSE
41-
puts "Port 3000 is already in use"
42-
puts "You may need to stop another service or use a different port"
43-
end
44-
end
45-
4614
# Clean temporary files
4715
desc "Clean temporary files"
4816
task :clean do

app.rb

Lines changed: 25 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -1,133 +1,37 @@
11
#!/usr/bin/env ruby
22

3-
# Simple Hello World Web Server
4-
# This is a basic example to get you started with Ruby web development
5-
6-
require 'socket'
73
require 'featurevisor'
84
require 'net/http'
95
require 'json'
106

11-
class HelloWorldServer
12-
def initialize(port = 3000)
13-
@port = port
14-
@server = nil
15-
16-
##
17-
# Initialize Featurevisor
18-
#
19-
datafile_url = "https://featurevisor-example-cloudflare.pages.dev/production/featurevisor-tag-all.json"
20-
21-
# Fetch the datafile
22-
response = Net::HTTP.get(URI(datafile_url))
23-
datafile_content = JSON.parse(response)
24-
symbolized_datafile = symbolize_keys(datafile_content) # @TODO: this shouldn't be required
25-
26-
# Create Featurevisor instance
27-
@featurevisor = Featurevisor.create_instance(
28-
datafile: symbolized_datafile,
29-
)
7+
def symbolize_keys(obj)
8+
case obj
9+
when Hash
10+
obj.transform_keys(&:to_sym).transform_values { |v| symbolize_keys(v) }
11+
when Array
12+
obj.map { |v| symbolize_keys(v) }
13+
else
14+
obj
3015
end
16+
end
3117

32-
def symbolize_keys(obj)
33-
case obj
34-
when Hash
35-
obj.transform_keys(&:to_sym).transform_values { |v| symbolize_keys(v) }
36-
when Array
37-
obj.map { |v| symbolize_keys(v) }
38-
else
39-
obj
40-
end
41-
end
42-
43-
def start
44-
puts "Starting Hello World Web Server on port #{@port}..."
45-
puts "Visit http://localhost:#{@port} in your browser"
46-
puts "Press Ctrl+C to stop the server"
47-
puts
48-
49-
@server = TCPServer.new(@port)
50-
51-
loop do
52-
begin
53-
client = @server.accept
54-
handle_request(client)
55-
rescue Interrupt
56-
puts "\nShutting down server..."
57-
break
58-
rescue => e
59-
puts "Error handling request: #{e.message}"
60-
ensure
61-
client&.close
62-
end
63-
end
64-
end
65-
66-
def handle_request(client)
67-
request_line = client.gets
68-
return unless request_line
69-
70-
method, path, version = request_line.split(' ')
71-
72-
# Log the request
73-
puts "#{Time.now.strftime('%Y-%m-%d %H:%M:%S')} - #{method} #{path}"
74-
75-
# Read headers
76-
headers = {}
77-
while (line = client.gets) && line.strip != ''
78-
key, value = line.split(': ', 2)
79-
headers[key.downcase] = value&.strip
80-
end
81-
82-
# Generate response
83-
response = generate_response(method, path)
84-
85-
# Send response
86-
client.write(response)
87-
end
88-
89-
def generate_response(method, path)
90-
if path == '/' && method == 'GET'
91-
# Get the feature flag value
92-
feature_flag_value = @featurevisor.is_enabled("my_feature")
93-
94-
body = "Hello World. Feature flag value is: #{feature_flag_value}"
95-
status = '200 OK'
96-
content_type = "text/plain"
97-
else
98-
body = "Not Found"
99-
status = '404 Not Found'
100-
content_type = "text/plain"
101-
end
102-
103-
response = [
104-
"HTTP/1.1 #{status}",
105-
"Content-Type: #{content_type}",
106-
"Content-Length: #{body.bytesize}",
107-
"Access-Control-Allow-Origin: *",
108-
"Connection: close",
109-
"",
110-
body
111-
].join("\r\n")
18+
##
19+
# Initialize Featurevisor
20+
#
21+
datafile_url = "https://featurevisor-example-cloudflare.pages.dev/production/featurevisor-tag-all.json"
11222

113-
response
114-
end
23+
# Fetch the datafile
24+
response = Net::HTTP.get(URI(datafile_url))
25+
datafile_content = JSON.parse(response)
26+
symbolized_datafile = symbolize_keys(datafile_content) # @TODO: this shouldn't be required
11527

116-
def stop
117-
@server&.close
118-
puts "Server stopped."
119-
end
120-
end
28+
# Create Featurevisor instance
29+
featurevisor = Featurevisor.create_instance(
30+
datafile: symbolized_datafile,
31+
)
12132

122-
# Main execution
123-
if __FILE__ == $PROGRAM_NAME
124-
server = HelloWorldServer.new(3000)
33+
# Get the feature flag value
34+
feature_flag_value = featurevisor.is_enabled("my_feature")
12535

126-
begin
127-
server.start
128-
rescue Interrupt
129-
puts "\nReceived interrupt signal..."
130-
ensure
131-
server.stop
132-
end
133-
end
36+
# Print results to terminal
37+
puts "Feature flag 'my_feature' is enabled: #{feature_flag_value}"

0 commit comments

Comments
 (0)