Как загрузить расширения в модуль Sass :: Script :: Functions? - PullRequest
4 голосов
/ 01 января 2012

Я пытаюсь расширить модуль Sass: Script :: Functions, в соответствии с этой рекомендацией: https://gist.github.com/481261/dd07a52829886ab1ad0875a8895f0100c4b925ab. Вопрос в том, куда мне поместить файл sass-hex.rb и нужно ли мне что-либо делать?«загрузить» расширение модуля?Я попытался поместить файл в config /, но он не загружается.Когда я иду в консоль rails и набираю Sass :: Script :: Functions :: hex, я получаю: «NoMethodError: неопределенный метод« hex »для Sass :: Script :: Functions: Module».

IЯ новичок в Rails, поэтому ответ может быть что-то очень очевидное и тривиальное.Может быть, поэтому ни на одном из сайтов, которые говорят о расширении Sass :: Script :: Functions, нет упоминания о том, как на самом деле подключить расширение к вашему коду.Это официальная документация, но она также не помогает в этом отношении: http://sass -lang.com / docs / yardoc / Sass / Script / Functions.html # добавление_custom_functions .

ОБНОВЛЕНИЕ:

Итак, я изменил определение метода с «def hex ...» на «def self.hex ...» и теперь Sass :: Script :: Functions.hex работает.Я все еще чувствую, что что-то упускаю, поскольку НИКТО нигде не говорил, что это «я».необходимо ... Или я неправильно вызываю метод в приведенном выше примере?

Кроме того, проблема в том, что метод "hex" вообще не вызывается из файла CSS, в котором я его использую.

ПОСЛЕДНЕЕ ОБНОВЛЕНИЕ:

Решением было фактически сделать то, что я делал изначально: поместите код в каталог config / (в моем случае, внутри файла compass.rb).

Есть две причины, по которым я застрял и подумал, что это не работает для меня:

  • Sass :: Script :: Functions :: hex нельзя вызвать из консоли ... Не знаю почему,но я ошибался, предполагая, что, если я правильно настрою вещи, я смогу проверить это таким образом.
  • Поскольку я пытался делать кучу вещей, у меня, вероятно, никогда не было правасочетание наличия шестнадцатеричной функции в файле config / compass.rb, ее вызова из файла .css и перезапуска сервера rails.

Реальная трата времени - я надеюсь, что это поможет другим избежатьэто ...

Ответы [ 2 ]

5 голосов
/ 14 февраля 2012

Я только что решил это, чтобы иметь возможность использовать функцию compact от Compass.Вот весь совок:

lib / sass.rb (создан новый файл)

# Compact function pulled from compass
module Sass::Script::Functions

  module CustomSassExtensions
    def compact(*args)
      sep = :comma
      if args.size == 1 && args.first.is_a?(Sass::Script::List)
        args = args.first.value
        sep = args.first.separator
      end
      Sass::Script::List.new(args.reject{|a| !a.to_bool}, sep)
    end
  end

  include CustomSassExtensions

end

config / application.rb (поместите его внутрь class Application сразу после строк с config.autoload_paths)

if config.respond_to?(:sass)
  require "#{config.root}/lib/sass.rb"
end

Дайте мне знать, сработало ли это для вас.

2 голосов
/ 01 января 2012

Я обычно делаю папку в lib с именем "sass" и в этой папке создаю sass-hex.rb (убедитесь, что эта папка находится на пути загрузки)

module Sass::Script::Functions
  module SassHex
    def hex(decimal)
      Sass::Script::String.new("%02x" % decimal)
    end
  end
  include SassHex
end

Все, что вам нужно сделать, - это файл sass-hex.rb. Я часто использую этот трюк в компасе при расширении sass.

...