Sha256: b44148fa0258f41885e373af9b2e9fbd156bca42ea758afe1468a158c20055c2

Contents?: true

Size: 1.14 KB

Versions: 6

Compression:

Stored size: 1.14 KB

Contents

module MotionPrime
  class Styles
    @@repo = {}

    def initialize(namespace = nil)
      @namespace = namespace
    end

    def style(name, options = {})
      name = "#{@namespace}_#{name}".to_sym if @namespace
      @@repo[name] ||= {}
      if parent = options.delete(:parent)
        parent ="#{@namespace}_#{parent}".to_sym if @namespace
        @@repo[name].deep_merge! self.class.for(parent)
      end
      @@repo[name].deep_merge! options
    end

    class << self
      def define(namespace = nil, &block)
        self.new(namespace).instance_eval(&block)
      end

      def for(style_names)
        style_options = {}
        Array.wrap(style_names).each do |name|
          style_options.deep_merge!(@@repo[name] || {})
        end
        style_options
      end

      def extend_and_normalize_options(options = {})
        style_options = self.for(options.delete(:styles))
        normalize_options(style_options.merge(options))
      end

      def normalize_options(options)
        options.each do |key, option|
          options[key] = option.is_a?(Proc) && key != :block ? instance_eval(&option) : option
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
motion-prime-0.1.5 motion-prime/views/styles.rb
motion-prime-0.1.4 motion-prime/views/styles.rb
motion-prime-0.1.3 motion-prime/views/styles.rb
motion-prime-0.1.2 motion-prime/views/styles.rb
motion-prime-0.1.1 motion-prime/views/styles.rb
motion-prime-0.1.0 motion-prime/views/styles.rb