Sha256: 8fea83eccedd7ea0c4dc144d84636c043bcee2f32ff4c96cf5d6f9501743b7e8

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

module Rubyvis
  class Scale::Ordinal
    include Rubyvis::Scale

    def initialize(*args)
      @d=[] # domain
      @i={}
      @r=[]
      @band=0
      domain(*args)
    end
    def scale(x)
      if @i[x].nil?
        @d.push(x)
        @i[x]=@d.size-1
      end
      @r[@i[x] % @r.size]
    end
    def domain(*arguments)
      array,f=arguments[0],arguments[1]
      if(arguments.size>0)
        array= (array.is_a? Array) ? ((arguments.size>1) ? array.map(&f) : array) : arguments.dup
        @d=array.uniq
        i=pv.numerate(d)
        return self
      end
      @d
    end
    def range(*arguments)
      array, f = arguments[0],arguments[1]
      if(arguments.size>0)
        @r=(array.is_a? Array) ? ((arguments.size>1) ? array.map(&f) : array) : arguments.dup
        if @r[0].is_a? String
          @r=@r.map {|i| pv.color(i)}
        end
        self
      end
      @r
    end
    def split(min,max)
      step=(max-min).quo(domain().size)
      @r=pv.range(min+step.quo(2),max,step)
      self
    end
    def by(*arguments)
      f,dummy=arguments
      t=self
      by=lambda {t.scale(f.js_apply(self,arguments))}
      by
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rubyvis-0.1.2 lib/rubyvis/scale/ordinal.rb