Sha256: f082c0fadb28b55d6c4ab57e54ef331f9ee35cfee9f7d0a46b090ce15e98b47d

Contents?: true

Size: 1000 Bytes

Versions: 3

Compression:

Stored size: 1000 Bytes

Contents

# frozen_string_literal: true

module Nocode
  module Util
    module Optionable
      def self.included(klass)
        klass.extend(ClassMethods)
      end

      # Class-level DSL Methods
      module ClassMethods
        def option(*values)
          values.each { |v| options << v.to_s }
        end

        def options
          @options ||= []
        end
      end

      OPTION_PREFIX = '_option'

      def options
        @options || {}
      end

      def method_missing(name, *args, &block)
        key = option_key(name)

        if name.to_s.end_with?(OPTION_PREFIX) && self.class.options.include?(key)
          options[key]
        else
          super
        end
      end

      def respond_to_missing?(name, include_private = false)
        key = option_key(name)

        (name.to_s.end_with?(OPTION_PREFIX) && self.class.options.include?(key)) || super
      end

      private

      def option_key(name)
        name.to_s.gsub(OPTION_PREFIX, '')
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
nocode-0.0.3 lib/nocode/util/optionable.rb
nocode-0.0.2 lib/nocode/util/optionable.rb
nocode-0.0.1 lib/nocode/util/optionable.rb