Sha256: 08ed1f45451a3f1de9855603ac0e4fb05a7dc9e5b4fbf457664aa6f203289171

Contents?: true

Size: 1.88 KB

Versions: 1

Compression:

Stored size: 1.88 KB

Contents

require 'bundler/setup'
require 'jsonical'
require 'sinatra'
require 'datadog/statsd'

statsd = Datadog::Statsd.new(
  'localhost',
  8125,
  namespace: 'jsonical',
  tag: 'production:true'
)

configure { set :server, :puma }
set :protection, except: :path_traversal

get '/events/:orn/links' do
  content_type('application/json')

  statsd.increment('events.view')

  event = statsd.time('events.fetch') do
    JSONiCal::VEVENTModel.new(JSONiCal::VEVENTRepo.find(params[:orn]))
  end

  statsd.time('template.render') do
    Oj.dump(
      JSONiCal::LinksBuilder.
        new(event).
        call
    )
  end
end

get '/events/:orn' do
  content_type('text/calendar')
  response.headers['Content-Disposition'] = 'filename="jobteaser.ics"'

  statsd.increment('events.view')

  event = statsd.time('events.fetch') do
    JSONiCal::VEVENTModel.new(JSONiCal::VEVENTRepo.find(params[:orn]))
  end

  statsd.time('template.render') do
    JSONiCal::CalendarBuilder.
      new(event).
      call(vendor: params[:vendor])
  end
end

get '/calendars/:token' do
  content_type('text/calendar')
  response.headers['Content-Disposition'] = 'filename="jobteaser.ics"'

  statsd.increment('calendar.view')

  events = statsd.time('events.fetch') do
    JSONiCal::VEVENTRepo.
      events_with_token(params[:token]).
      map { |event_hash| JSONiCal::VEVENTModel.new(event_hash) }
  end

  statsd.time('template.render') do
    JSONiCal::CalendarBuilder.
      new(*events).
      call(calendar_name: 'JobTeaser')
  end
end

get '/api/v1/calendars/:orn' do
  content_type('application/json')

  statsd.increment('api.fetch.count')

  statsd.time('api.calendars.show') do
    calendar = JSONiCal.database[:vcalendars].where(orn: params[:orn]).first
    calendar or halt(404, Oj.dump('error' => '404 Not Found'))

    @res = {
      'uri' => "webcal://jsonical.herokuapp.com/calendars/#{calendar[:token]}"
    }
  end

  Oj.dump(@res)
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
JSONiCal-1.0.0 app/web.rb