如何加载Sass :: Script :: Functions模块的扩展?

时间:2011-12-31 20:23:50

标签: ruby-on-rails sass compass-sass

我正在尝试扩展Sass:Script :: Functions模块,根据此建议:https://gist.github.com/481261/dd07a52829886ab1ad0875a8895f0100c4b925ab。问题是,我在哪里放置sass-hex.rb文件,我是否必须做任何事情来“加载”模块扩展?我尝试将文件放在config /中,但似乎没有加载。当我进入rails控制台并输入Sass :: Script :: Functions :: hex时,我得到:“NoMethodError:未定义的方法`hex'用于Sass :: Script :: Functions:Module”。

我是Rails的新手,所以答案可能是非常明显和微不足道的。也许这就是为什么所有谈论扩展Sass :: Script :: Functions的网站都没有提到如何将扩展实际连接到代码中。这是官方文档,但在这方面它没有帮助:http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html#adding_custom_functions

更新:

所以,我将方法的定义从“def hex ...”更改为“def self.hex ...”,现在Sass :: Script :: Functions.hex正常工作。我仍然觉得我错过了一些东西,正如NOBODY所建议的那样,“自我”。需要......或者我在上面的例子中错误地调用了这个方法?

另外,问题是我使用的CSS文件根本没有调用“hex”方法。

最后更新:

解决方案实际上是做我最初做的事情:将代码放在config /目录中(在我的情况下,在compass.rb文件中)。

有两个原因我被困住了,并认为它对我不起作用:

  • Sass :: Script :: Functions :: hex不能从控制台调用...不确定为什么,但我认为如果我正确装配,我就错了,我将能够以这种方式进行测试
  • 由于我来回尝试一堆东西,我可能从来没有正确组合在config / compass.rb文件中使用hex函数,从.css文件调用它,并重新启动rails服务器

真正浪费时间 - 我希望这有助于其他人避免它...

2 个答案:

答案 0 :(得分:5)

我刚刚解决了这个问题,以便能够使用Compass中的compact函数。这是整个独家新闻:

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后面{/ 1}}

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

让我知道它是否适合你。

答案 1 :(得分:2)

我通常在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

所有你应该有todo需要sass-hex.rb文件我在扩展sass时会在罗盘中使用这个技巧。