2011-12-31 5 views
4

私はSass:Script :: Functionsモジュールを拡張しようとしています。これは、この勧告に従って:https://gist.github.com/481261/dd07a52829886ab1ad0875a8895f0100c4b925abです。問題は、どこにsass-hex.rbファイルを置くのですか?モジュール拡張モジュールをロードするために何かする必要がありますか? config /にファイルを置こうとしましたが、ロードされていないようです。レールコンソールにアクセスして、Sass :: Script :: Functions :: hexと入力すると、「NoMethodError:Sass :: Script :: Functions:Moduleのための未定義のメソッド `hex」が得られます。拡張機能をSass :: Script :: Functionsモジュールにロードするにはどうしたらいいですか?

私はRailsが新しく、答えは非常に明白で些細なものかもしれません。たぶんSass :: Script :: Functionsを拡張することについて話しているサイトのどれも、あなたのコードに拡張機能を実際に接続する方法については何の言及もありません。これは公式のドキュメントですが、この点では役に立ちません:http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html#adding_custom_functions

UPDATE:だから

、私は "DEF進..." と "DEF self.hex ..." からメソッドの定義を変更し、現在サス::スクリプト:: Functions.hexで動作します。誰も何も示唆しなかったので、私はまだ何かが欠けていると感じています。上記の例でメソッドを間違って呼び出すのですか?

また、問題は、私が使っているCSSファイルから「hex」メソッドが全く呼び出されないということです。

LAST UPDATE:(私の場合は、compass.rbファイル内)config /ディレクトリに置いてくださいコードを:

ソリューションは、実際に私が最初にやったことをやっていました。

私が捕まってしまった、それは私のために動作しませんでしたと思った2つの理由があります。

  • サスは::スクリプト::機能::進がなぜわからない...コンソールから起動することができません、私は物事を正しく整えれば、私はそれをそのようにテストすることができると仮定して間違っていた。
  • 私はたくさんのことを試していたので、おそらくconfig/compass.rbファイルの中に16進数の機能を持たせ、.cssファイルから呼び出して、そしてレールサーバーを再起動するという正しい組み合わせはなかったでしょう。

時間の本当の無駄 - 私は、これは他の人がそれを回避するのに役立ちます願っています...

答えて

2

私は通常(作る「サス」という名前のlibにフォルダを作成し、そのフォルダにSASS-hex.rbを作成必ずこのフォルダには、すべてあなたがTODOはSASSを拡張するとき、私はコンパスにこのトリックをたくさん使うSASS-hex.rbファイルが必要である必要があります

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

)ロードパス上にあります。

+0

スコット、答えに感謝します。私が見逃していることは、あなたにはっきりと聞こえるものがいくつかあると思います。a)「フォルダがロードパスにあることを確認する」方法は? b)どのファイルにsass-hex.rb 'が必要ですか? –

+0

Hey Scott、いつも '.rb'ファイルが必要ですか?それはちょっと変だけど、それをルビに含めるべきだし、関数をSassの中に呼ぶはずだから...どうしたの? –

+0

これは、私がRubyを介して修正を実装する必要があった問題の正しい方向を指摘しました。ありがとうございました! –

5

コンパスの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(右config.autoload_pathsとライン後class Application内部ところ、この内部を)

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

あなたのために働くかどうか教えてください。

+0

こんにちは、あなたの答えをありがとう!これはうまくいくように見えますが、私は別の方法で問題を解決しました。上記の私の最新の更新を参照してください。 –

関連する問題