2013-12-11 51 views
2

我想編寫一個Jekyll過濾器,它將一個列表作爲參數,並返回一個不包含重複元素的列表字符串。用於Jekyll的Ruby數組的液體過濾器

我的濾波代碼爲:

module Jekyll 
    module ArrayToSet 
     def array_to_set_string(arr) 
      arr.uniq.to_s 
     end 
    end 
end 

Liquid::Template.register_filter(Jekyll::ArrayToSet) 

的使用代碼

{{ [1,2,2,3] | array_to_set_string }} 

但complilation jekyll build失敗,因爲在功能上arr是NUL。

當我改變輸入參數爲字符串"[1,2,2,3]",arr是一個正常的字符串。

jekyll是否禁止過濾器的非字符串參數?

回答

1

液體不接受那樣的Ruby代碼,但它可以在Ruby對象被一些其他方法(過濾器或標籤)創建後使用。

因此,要麼創建一個方法來創建一個數組,或者接受字符串並在處理之前將它們轉換爲數組。

module Filter 
    def to_array(str) 
    str.split(',') 
    end 

    def uniq(arr) 
    arr.uniq 
    end 
end 

>> {{ '1,2,2,3' | to_array | uniq }} 
1 2 3 

你也可以把它捲成所有當然一種方法:

module Filter 
    def to_array_uniq(str) 
    str.split(',').uniq 
    end 
end 
使用兩步驟過程來創建一個數組,然後過程的

實施例