2011-12-31 3 views
4

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

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

UPDATE:

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

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

последнее обновление:

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

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

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

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

ответ

2

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

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

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

+0

Скотт, спасибо за ответ. Я думаю, что мне не хватает некоторых вещей, которые кажутся вам очевидными: а) как я могу «убедиться, что папка находится в пути загрузки» ?; b) в каком файле требуется «sass-hex.rb»? –

+0

Эй, Скотт, где вы обычно нуждаетесь в файле '.rb'? Это странно, потому что мы должны включить его в рубин и вызвать функцию внутри sass ... Как вы это делаете? –

+0

Это заставило меня указывать в правильном направлении на вопрос, который мне пришлось выполнить для исправления для Ruby, спасибо! –

5

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

Библиотека/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 

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

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

Сообщите мне, если это сработает для вас.

+0

Привет, спасибо за ваш ответ! Похоже, это может сработать, но я решил свою проблему по-другому. Смотрите мое последнее обновление выше. –

 Смежные вопросы

  • Нет связанных вопросов^_^