Class: TRMNLPreview::App

Inherits:
Sinatra::Base
  • Object
show all
Defined in:
lib/trmnl_preview/app.rb

Constant Summary collapse

VIEWS =

Constants

%w{full half_horizontal half_vertical quadrant}

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ App

Returns a new instance of App.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/trmnl_preview/app.rb', line 17

def initialize(*args)
  super

  @config_path = File.join(settings.user_dir, 'config.toml')
  @user_views_dir = File.join(settings.user_dir, 'views')
  @temp_dir = File.join(settings.user_dir, 'tmp')
  @data_json_path = File.join(@temp_dir, 'data.json')

  unless File.exist?(@config_path)
    puts "No config.toml found in #{settings.user_dir}"
    exit 1
  end

  unless Dir.exist?(@user_views_dir)
    puts "No views found at #{@user_views_dir}"
    exit 1
  end

  FileUtils.mkdir_p(@temp_dir)

  @config = TomlRB.load_file(@config_path)
  strategy = @config['strategy']

  unless ['polling', 'webhook'].include?(strategy)
    puts "Invalid strategy: #{strategy} (must be 'polling' or 'webhook')"
    exit 1
  end

  url = @config['url']
  polling_headers = @config['polling_headers'] || {}

  if strategy == 'polling'
    if url.nil?
      puts "URL is required for polling strategy"
      exit 1
    end

    print "Fetching #{url}... "
    payload = URI.open(url, polling_headers).read
    File.write(@data_json_path, payload)
    puts "got #{payload.size} bytes"
  end

  @liquid_environment = Liquid::Environment.build do |env|
    env.register_filter(TRMNLPreview::LiquidFilters)
  end
end