Module: Jekyll::ServerSideRedirects::Firebase

Defined in:
lib/jekyll-server-side-redirects/servers/firebase.rb

Class Method Summary collapse

Class Method Details

.generate_firebase_json(redirects_data) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/jekyll-server-side-redirects/servers/firebase.rb', line 14

def self.generate_firebase_json(redirects_data)
    file_path = "firebase.json"
    firebase_content = {}

    if File.exist?(file_path)
        file_content = File.read(file_path)
        firebase_content = JSON.parse(file_content)
    else
        firebase_content["hosting"] = { "redirects" => [] }
    end

    valid_keys = ['source', 'destination', 'type']
    existing_redirects = firebase_content["hosting"]["redirects"].map do |redirect|
        redirect.select { |key, _| valid_keys.include?(key) }
    end

    firebase_content["hosting"]["redirects"] = (existing_redirects + redirects_data).uniq { |r| r["source"] }

    File.open(file_path, "w") do |file|
        file.write(JSON.pretty_generate(firebase_content))
    end
end

.generate_redirects(site) ⇒ Object



4
5
6
7
8
9
10
11
12
# File 'lib/jekyll-server-side-redirects/servers/firebase.rb', line 4

def self.generate_redirects(site)
    redirects_data = []

    redirects_data += process_redirects(site.pages)
    redirects_data += process_redirects(site.posts.docs)
    generate_firebase_json(redirects_data)

    redirects_data
end

.process_redirects(data) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/jekyll-server-side-redirects/servers/firebase.rb', line 37

def self.process_redirects(data)
    redirects = []
    data.each do |item|
        next unless item.data['redirect_from']

        redirect_from = item.data['redirect_from']
        redirect_from = [redirect_from] unless redirect_from.is_a?(Array)

        redirect_from.each do |source|
            redirects << {
                'source' => source,
                'destination' => item.permalink,
                'type' => item.data['redirect_type'] || 301 
            }
        end
    end
    redirects
end