Sha256: 51c63870fb6f8092d6e7a703305836942afa1b3a060aee2693cc0e65f9a9acda

Contents?: true

Size: 1.52 KB

Versions: 1

Compression:

Stored size: 1.52 KB

Contents

# frozen_string_literal: true

module Staticky
  module Resources
    module Plugins
      module Prelude
        module ClassMethods
          def new(**env)
            super().tap do |resource|
              env.each do |key, value|
                resource.send(:"#{key}=", value)
              end
            end
          end
        end

        module InstanceMethods
          def filepath
            destination.join(basename)
          end

          def read
            filepath.read
          end

          def basename
            root? ? "index.html" : "#{url}.html"
          end

          def root?
            url == "/"
          end

          def uri
            return @uri if defined?(@uri)

            raise ArgumentError, "url is required"
          end

          def destination
            @destination ||= Staticky.build_path
          end

          def destination=(destination)
            @destination = Pathname(destination)
          end

          def url
            return @url if defined?(@url)

            raise ArgumentError, "url is required"
          end

          def url=(url)
            @url = url
            @uri = parse_url(url)
          end

          private

          def parse_url(url)
            URI(url).tap do |uri|
              uri.path = "/#{uri.path}" unless uri.path.start_with?("/")
            end
          rescue URI::InvalidURIError => e
            raise ArgumentError, e.message
          end
        end
      end

      register_plugin(:prelude, Prelude)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
staticky-0.2.0 lib/staticky/resources/plugins/prelude.rb