Sha256: 5edda70b46883f5fec615d803c3a4aed17718a5aea7b6f109d507fdc499157c4

Contents?: true

Size: 1.06 KB

Versions: 2

Compression:

Stored size: 1.06 KB

Contents

require 'json'

module Nerpin
  module Nrpn
    class Base
      attr_reader :id, :key, :min, :max

      class << self
        def find_by_key(key)
          nrpns[key]
        end

        def nrpns
          return @nrpns if @nrpns

          data = JSON.parse(
            open(
              File.dirname(
                File.expand_path(__FILE__)
              ) + '/../../data/nrpn/%s.json' % self.name.split(/::/).last.downcase
            ).read
          )

          @nrpns = Hash[
            data.map do |k, v|
              [k.to_sym, new(v['id'], k.to_sym, v['min'], v['max'])]
            end
          ].freeze
        end
      end

      def initialize(id, key, min, max)
        @id  = id
        @key = key
        @min = min
        @max = max
      end

      def value(value)
        raise 'subclass must override this'
      end

      def value_at(scale)
        value((((min.abs + max) * scale) - min.abs).to_i)
      end

      def sample
        value(rand(min.abs + max + (min < 0 ? 2 : 1)) - min.abs - (min < 0 ? 1 : 0))
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
nerpin-0.0.2 lib/nerpin/nrpn.rb
nerpin-0.0.1 lib/nerpin/nrpn.rb