Class: MacawFramework::Macaw

Inherits:
Object
  • Object
show all
Defined in:
lib/macaw_framework.rb

Overview

Class responsible for creating endpoints and starting the web server.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(custom_log: Logger.new($stdout), server: ThreadServer, dir: nil) ⇒ Macaw

Initialize Macaw Class

Parameters:

  • custom_log (Logger) (defaults to: Logger.new($stdout))
  • server (ThreadServer) (defaults to: ThreadServer)
  • dir (String?) (defaults to: nil)


31
32
33
34
35
36
# File 'lib/macaw_framework.rb', line 31

def initialize(custom_log: Logger.new($stdout), server: ThreadServer, dir: nil)
  apply_options(custom_log)
  create_endpoint_public_files(dir)
  setup_default_configs
  @server_class = server
end

Instance Attribute Details

#bindObject

Returns the value of attribute bind.



24
25
26
# File 'lib/macaw_framework.rb', line 24

def bind
  @bind
end

#cached_methodsObject (readonly)

Returns the value of attribute cached_methods.



23
24
25
# File 'lib/macaw_framework.rb', line 23

def cached_methods
  @cached_methods
end

#configObject (readonly)

Returns the value of attribute config.



23
24
25
# File 'lib/macaw_framework.rb', line 23

def config
  @config
end

#jobsObject (readonly)

Returns the value of attribute jobs.



23
24
25
# File 'lib/macaw_framework.rb', line 23

def jobs
  @jobs
end

#macaw_logObject (readonly)

Returns the value of attribute macaw_log.



23
24
25
# File 'lib/macaw_framework.rb', line 23

def macaw_log
  @macaw_log
end

#portObject

Returns the value of attribute port.



24
25
26
# File 'lib/macaw_framework.rb', line 24

def port
  @port
end

#routesObject (readonly)

Returns the value of attribute routes.



23
24
25
# File 'lib/macaw_framework.rb', line 23

def routes
  @routes
end

#secure_headerObject (readonly)

Returns the value of attribute secure_header.



23
24
25
# File 'lib/macaw_framework.rb', line 23

def secure_header
  @secure_header
end

#sessionObject (readonly)

Returns the value of attribute session.



23
24
25
# File 'lib/macaw_framework.rb', line 23

def session
  @session
end

#threadsObject

Returns the value of attribute threads.



24
25
26
# File 'lib/macaw_framework.rb', line 24

def threads
  @threads
end

Instance Method Details

#delete(path, cache: [], &block) ⇒ Object

Creates a DELETE endpoint associated with the respective path.

Examples:


macaw = MacawFramework::Macaw.new
macaw.delete("/hello") do |context|
  return "Hello World!", 200, { "Content-Type" => "text/plain" }
end

Parameters:

  • path (String)
  • block (Proc)


115
116
117
# File 'lib/macaw_framework.rb', line 115

def delete(path, cache: [], &block)
  map_new_endpoint('delete', cache, path, &block)
end

#get(path, cache: [], &block) ⇒ Object

Creates a GET endpoint associated with the respective path.

Examples:

macaw = MacawFramework::Macaw.new
macaw.get("/hello") do |context|
  return "Hello World!", 200, { "Content-Type" => "text/plain" }
end

Parameters:

  • path (String)
  • block (Proc)


50
51
52
# File 'lib/macaw_framework.rb', line 50

def get(path, cache: [], &block)
  map_new_endpoint('get', cache, path, &block)
end

#patch(path, cache: [], &block) ⇒ Object

Creates a PATCH endpoint associated with the respective path.

Examples:


macaw = MacawFramework::Macaw.new
macaw.patch("/hello") do |context|
  return "Hello World!", 200, { "Content-Type" => "text/plain" }
end

Parameters:

  • path (String)
  • block (Proc)


99
100
101
# File 'lib/macaw_framework.rb', line 99

def patch(path, cache: [], &block)
  map_new_endpoint('patch', cache, path, &block)
end

#post(path, cache: [], &block) ⇒ Object

Creates a POST endpoint associated with the respective path.

Examples:


macaw = MacawFramework::Macaw.new
macaw.post("/hello") do |context|
  return "Hello World!", 200, { "Content-Type" => "text/plain" }
end

Parameters:

  • path (String)
  • cache (Boolean) (defaults to: [])
  • block (Proc)


67
68
69
# File 'lib/macaw_framework.rb', line 67

def post(path, cache: [], &block)
  map_new_endpoint('post', cache, path, &block)
end

#put(path, cache: [], &block) ⇒ Object

Creates a PUT endpoint associated with the respective path.

Examples:


macaw = MacawFramework::Macaw.new
macaw.put("/hello") do |context|
  return "Hello World!", 200, { "Content-Type" => "text/plain" }
end

Parameters:

  • path (String)
  • block (Proc)


83
84
85
# File 'lib/macaw_framework.rb', line 83

def put(path, cache: [], &block)
  map_new_endpoint('put', cache, path, &block)
end

#setup_job(interval: 60, start_delay: 0, job_name: "job_#{SecureRandom.uuid}", &block) ⇒ Object

Spawn and start a thread running the defined periodic job.

Examples:


macaw = MacawFramework::Macaw.new
macaw.setup_job(interval: 60, start_delay: 60, job_name: "job 1") do
  puts "I'm a periodic job that runs every minute"
end

Parameters:

  • interval (Integer) (defaults to: 60)
  • start_delay (Integer?) (defaults to: 0)
  • job_name (String) (defaults to: "job_#{SecureRandom.uuid}")
  • block (Proc)


132
133
134
135
136
137
# File 'lib/macaw_framework.rb', line 132

def setup_job(interval: 60, start_delay: 0, job_name: "job_#{SecureRandom.uuid}", &block)
  @cron_runner ||= CronRunner.new(self)
  @jobs ||= []
  @cron_runner.start_cron_job_thread(interval, start_delay, job_name, &block)
  @jobs << job_name
end

#start!Object

Starts the web server



141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'lib/macaw_framework.rb', line 141

def start!
  if @macaw_log.nil?
    puts('---------------------------------')
    puts("Starting server at port #{@port}")
    puts("Number of threads: #{@threads}")
    puts('---------------------------------')
  else
    @macaw_log.info('---------------------------------')
    @macaw_log.info("Starting server at port #{@port}")
    @macaw_log.info("Number of threads: #{@threads}")
    @macaw_log.info('---------------------------------')
  end
  @server = @server_class.new(self, @endpoints_to_cache, @cache, @prometheus, @prometheus_middleware)
  server_loop(@server)
rescue Interrupt
  if @macaw_log.nil?
    puts('Stopping server')
    @server.close
    puts('Macaw stop flying for some seeds...')
  else
    @macaw_log.info('Stopping server')
    @server.close
    @macaw_log.info('Macaw stop flying for some seeds...')
  end
end

#start_without_server!Object

This method is intended to start the framework without an web server. This can be useful when you just want to keep cron jobs running, without mapping any HTTP endpoints.



172
173
174
175
176
177
# File 'lib/macaw_framework.rb', line 172

def start_without_server!
  @macaw_log.nil? ? puts('Application starting') : @macaw_log.info('Application starting')
  loop { sleep(3600) }
rescue Interrupt
  @macaw_log.nil? ? puts('Macaw stop flying for some seeds.') : @macaw_log.info('Macaw stop flying for some seeds.')
end