class CssMedia::Processor

Public Class Methods

new(params = { }) click to toggle source
# File lib/css_media/processor.rb, line 6
def initialize(params = { })
  @params = params || { }
end

Public Instance Methods

process(css, opts = { }) click to toggle source

Process `css` and return result.

Options can be:

  • `from` with input CSS file name. Will be used in error messages.

  • `to` with output CSS file name.

  • `map` with true to generate new source map or with previous map.

# File lib/css_media/processor.rb, line 16
def process(css, opts = { })
  fn = opts.fetch(:from, '').downcase
  if fn =~ /[^a-z](media[_-]only|non?[_-]media)[^a-z]/ ||
    css =~ %r{/[/*]\s*css[_-]media:?\s*(media[_-]only|non?[_-]media)[^a-z]}i
    css = send($1.gsub('-', '_'), css)
  end
  Result.new(css)
end

Private Instance Methods

filter_media(css, want_media) click to toggle source
# File lib/css_media/processor.rb, line 36
def filter_media(css, want_media)
  tree = Crass.parse(css, :preserve_comments => true)
  want = tree.select{|rule| is_comment?(rule) || is_media?(rule) == want_media}
  Crass::Parser.stringify(want)
end
is_comment?(rule) click to toggle source
# File lib/css_media/processor.rb, line 32
def is_comment?(rule)
  rule[:node] == :comment || rule[:node] == :whitespace
end
is_media?(rule) click to toggle source
# File lib/css_media/processor.rb, line 27
def is_media?(rule)
  # rule[:node] == :style_rule && rule[:selector][:value] =~ /^media\W/i
  rule[:node] == :at_rule && !!(rule[:name] =~ /media/i)
end
media_only(css) click to toggle source
# File lib/css_media/processor.rb, line 47
def media_only(css)
  filter_media(css, true)
end
no_media(css)
Alias for: non_media
non_media(css) click to toggle source
# File lib/css_media/processor.rb, line 42
def non_media(css)
  filter_media(css, false)
end
Also aliased as: no_media