Sha256: 5b9dff468d8371ab41bca89a8f736ec56b9df1818af09e01b0d856c6f07d4a5e

Contents?: true

Size: 1.16 KB

Versions: 13

Compression:

Stored size: 1.16 KB

Contents

module G5K
  module Parsing
    class UnsupportedFormat < StandardError; end
    class Parser      
      @@parsers = []
      def self.add(*parsers)
        parsers.each{ |parser| 
          parser.dependencies
          @@parsers << parser
        }
        self
      end
      def self.select(parser_format)
        raise UnsupportedFormat, "The format cannot be nil." if parser_format.nil?
        parsers = @@parsers.select{|parser| parser.supported_formats.include?(parser_format.to_sym)}
        if parsers.empty?
          raise UnsupportedFormat, "No parser found for '#{parser_format}' format."
        else
          parsers.first
        end
      end
      def self.available_parsers; @@parsers; end
    end

    class JSONParser
      def self.dependencies
        require 'json'
      end      
      def self.supported_formats
        [:json]
      end
      def self.dump(object, options = {:format => :pretty})
        case options[:format]
        when :pretty
          JSON.pretty_generate object
        else
          object.to_json
        end
      end
      def self.load(object)
        JSON.parse(object)
      end
    end

    # Parser.add(JSONParser)
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
cryx-g5k-0.1.0 lib/g5k/parsing/parser.rb
cryx-g5k-0.2.0 lib/g5k/parsing/parser.rb
cryx-g5k-0.2.1 lib/g5k/parsing/parser.rb
cryx-g5k-0.2.10 lib/g5k/parsing/parser.rb
cryx-g5k-0.2.11 lib/g5k/parsing/parser.rb
cryx-g5k-0.2.2 lib/g5k/parsing/parser.rb
cryx-g5k-0.2.3 lib/g5k/parsing/parser.rb
cryx-g5k-0.2.4 lib/g5k/parsing/parser.rb
cryx-g5k-0.2.5 lib/g5k/parsing/parser.rb
cryx-g5k-0.2.6 lib/g5k/parsing/parser.rb
cryx-g5k-0.2.7 lib/g5k/parsing/parser.rb
cryx-g5k-0.2.8 lib/g5k/parsing/parser.rb
cryx-g5k-0.2.9 lib/g5k/parsing/parser.rb