Sha256: acfd1411ea57146521735a5a10b08f9cc9f72e9b0f0f4743be9b127bbb1c8659

Contents?: true

Size: 884 Bytes

Versions: 1

Compression:

Stored size: 884 Bytes

Contents

require_relative 'molecular/version'
require 'digest'

# Build reusable, tweakable UI elements out of atomic-CSS classes
module Molecular
  module_function
  # @example
  #   Button = Compound.new(bg: 'bg-blue', color: 'white')
  #   <button class="<%= Button %>">A blue button</button>
  #   <button class="<%= Button.(bg: 'bg-red') %>">A red button</button>
  #
  # @param [Hash] atoms:
  #  - values are the CSS class names that get chained
  #  - keys define the API you'll use to apply alternate classes
  #  @return [Molecular::Compound]
  def compound(atoms)
    Compound.new(atoms)
  end

  # Calling Molecular.compound returns an instance of Molecular::Compound
  class Compound
    def initialize(atoms)
      @atoms = atoms
    end

    def to_s
      @atoms.values.compact.join(' ')
    end

    def call(atoms)
      self.class.new(@atoms.merge(atoms))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
molecular-0.1.0 lib/molecular.rb