ruby – 使用没有sass引擎的sass颜色函数

我想在没有Sass引擎的类中使用Sass颜色函数.我已经在项目中使用了sass gem,所以我认为背负的东西很简单:

class Rectangle
  include Sass::Script::Functions
  def color
    Sass::Script::Color.new([0x82,0x39,0x06])
  end
  def render
    #haml engine executed with context of self
    #so that within temlate i Could call
    #  %stop{offset: '0%',stop: {color: lighten(color)}}
  end
end

更新:请参阅上面的#render,我想从在Rectangle实例的上下文中呈现的haml模板中调用lighten(color)

但我得到一个未定义的方法assert_type错误. assert_type方法在Sass :: Script :: Functions :: EvaluationContext类中定义. (github file)

在irb玩,只是为了得到一些接近我想要的东西看起来像这样:

require 'sass'
eval_context = Sass::Script::Functions::EvaluationContext.new({})
#yes the Sass::Script::Number.new(10) is requried,a simple 10 will not work
color = eval_context.rgb(Sass::Script::Number.new(10),Sass::Script::Number.new(10),Sass::Script::Number.new(10))
eval_context.lighten(color,Sass::Script::Number.new(10))

这很疯狂 – 我错过了什么吗?

解决方法

更新

现在我更好地理解了你的问题,为什么不重写功能.

require 'sass'

class Rectangle
  include Sass::Script

  def color
    @color ||= Sass::Script::Color.new([0x82,0x06])
  end

  def lighten(ammount)
    hsl = color.hsl.dup
    hsl[2] += ammount
    @color = Sass::Script::Color.new(hue: hsl[0],saturation: hsl[1],lightness: [2])
  end
end

rec = Rectangle.new
rec.lighten(20)

老答案

你并不疯狂,你只是把错误的一部分包括在内.

代码按预期运行.请注意,我从include中删除了:: Functions.

require 'sass'

class Rectangle
  include Sass::Script

  def color
    color = Sass::Script::Color.new([0x82,0x06])
    puts color.class
  end
end

rec = Rectangle.new
rec.color

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...