Sha256: e5406e14762d454ac833fc4982b1e2be19511fb5fe19ebdde21290623003daeb

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

module Gecko
  module Pusher
    module Channel
      class Number < Base

        def push(*args)
          options = extract_options(args)
          data = {item: extract_values(args)}
          data[:type] = options[:type] unless options[:type].nil?
          data[:absolute] = options[:absolute] unless options[:absolute].nil?
          _push(data)
        end

        protected

          def extract_values(args)
            values = if just_values?(args)
                       args.map {|arg| {value: arg}}
                     elsif values_and_descriptions?(args)
                       args.each_slice(2).map {|arg| 
                         {value: arg.first, text: arg.last}
                       }
                     end
          end

          def just_values?(args)
            (args.length == 1 || args.length == 2) &&
              args.all? {|arg| arg.is_a?(Integer)}
          end

          def values_and_descriptions?(args)
            (args.length == 2 || args.length == 4) &&
              args[0].is_a?(Integer) && args[1].is_a?(String) &&
              args[2].is_a?(Integer) && args[3].is_a?(String)
          end

          def extract_options(args)
            args.last.is_a?(Hash) ? args.pop : {}
          end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gecko-pusher-0.0.3 lib/gecko-pusher/channel/number.rb