lib/versionomy/conversion/parsing.rb in versionomy-0.4.1 vs lib/versionomy/conversion/parsing.rb in versionomy-0.4.2
- old
+ new
@@ -1,26 +1,26 @@
# -----------------------------------------------------------------------------
-#
+#
# Versionomy conversion base class
-#
+#
# -----------------------------------------------------------------------------
# Copyright 2008-2009 Daniel Azuma
-#
+#
# All rights reserved.
-#
+#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
-#
+#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the copyright holder, nor the names of any other
# contributors to this software, may be used to endorse or promote products
# derived from this software without specific prior written permission.
-#
+#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
@@ -33,51 +33,51 @@
# -----------------------------------------------------------------------------
;
module Versionomy
-
-
+
+
module Conversion
-
-
+
+
# A conversion strategy that relies on parsing.
# Essentially, it unparses the value and then attempts to parse it with
# the new format.
-
+
class Parsing < Base
-
-
+
+
# Create a parsing conversion.
- #
+ #
# By default, this just unparses and reparses using the default
# parse settings. In some cases, this may be enough, but you may
# wish to improve the reliability of the conversion by tweaking the
# parsing settings. To do so, pass a block to the new method, and
# call methods of Versionomy::Conversion::Parsing::Builder in that
# block.
-
+
def initialize(&block_)
if block_
builder_ = Builder.new
::Blockenspiel.invoke(block_, builder_)
@original_value_modifier = builder_._get_original_value_modifier
@string_modifier = builder_._get_string_modifier
@unparse_params_modifier = builder_._get_unparse_params_modifier
@parse_params_generator ||= builder_._get_parse_params_generator
end
end
-
-
+
+
# Returns a value equivalent to the given value in the given format.
- #
+ #
# The convert_params are passed to this conversion's customization
# blocks (if any).
- #
+ #
# Raises Versionomy::Errors::ConversionError if the conversion failed.
# Typically, this is due to a failure of the parsing or unparsing.
-
+
def convert_value(value_, format_, convert_params_=nil)
begin
convert_params_ ||= {}
if @original_value_modifier
value_ = @original_value_modifier.call(value_, convert_params_)
@@ -101,97 +101,97 @@
raise Errors::ConversionError, "Unparsing failed: #{ex_.inspect}"
rescue Errors::ParseError => ex_
raise Errors::ConversionError, "Parsing failed: #{ex_.inspect}"
end
end
-
-
+
+
# Call methods of this class in the block passed to
# Versionomy::Conversion::Parsing#new to fine-tune the behavior of
# the converter.
-
+
class Builder
-
+
include ::Blockenspiel::DSL
-
-
+
+
def initialize # :nodoc:
@original_value_modifier = nil
@string_modifier = nil
@parse_params_generator = nil
@unparse_params_modifier = nil
end
-
-
+
+
# Provide a block that generates the params used to parse the new
# value. The block should take one parameter, the convert_params
# passed to convert_value (which may be nil). It should return the
# parse params that should be used.
-
+
def to_generate_parse_params(&block_)
@parse_params_generator = block_
end
-
-
+
+
# Provide a block that can modify the params used to unparse the
# old value. The block should take two parameters: first, the
# original unparse params from the old value (which may be nil),
# and second, the convert_params passed to convert_value (which
# may also be nil). It should return the unparse params that
# should actually be used.
-
+
def to_modify_unparse_params(&block_)
@unparse_params_modifier = block_
end
-
-
+
+
# Provide a block that can modify the original value prior to it
# being unparsed. The block should take two parameters: first, the
# original value to be converted, and second, the convert_params
# passed to convert_value (which may be nil). It should return the
# value to be unparsed, which may be the same as the value
# originally passed in. This method may fail-fast by raising a
# Versionomy::Errors::ConversionError if it determines that the
# value passed in cannot be converted as is.
-
+
def to_modify_original_value(&block_)
@original_value_modifier = block_
end
-
-
+
+
# Provide a block that can modify the unparsed string prior to
# it being passed to the parser. The block should take two
# parameters: first, the string resulting from unparsing the old
# value, and second, the convert_params passed to convert_value
# (which may be nil). It should return the string to be parsed to
# get the new value.
-
+
def to_modify_string(&block_)
@string_modifier = block_
end
-
-
+
+
def _get_original_value_modifier # :nodoc:
@original_value_modifier
end
-
+
def _get_string_modifier # :nodoc:
@string_modifier
end
-
+
def _get_unparse_params_modifier # :nodoc:
@unparse_params_modifier
end
-
+
def _get_parse_params_generator # :nodoc:
@parse_params_generator
end
-
+
end
-
-
+
+
end
-
-
+
+
end
-
+
end