From f0095397fd8a61367d39ae76bf63fb1c48885bbc Mon Sep 17 00:00:00 2001 From: Adam Jahn Date: Fri, 8 Jul 2016 15:05:48 -0400 Subject: implement helpers and reduce test duplication --- spec/support/augeas.rb | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 spec/support/augeas.rb (limited to 'spec/support') diff --git a/spec/support/augeas.rb b/spec/support/augeas.rb new file mode 100644 index 0000000..4912e1a --- /dev/null +++ b/spec/support/augeas.rb @@ -0,0 +1,67 @@ +require "delegate" + +module Augeas + class Change + attr_reader :target, :name, :delimiter + + def initialize(target, name, value = nil, delimiter = "\"") + @target = target + @name = name + @value = value + @delimiter = delimiter + end + + def to_s + "#{action} #{delimiter}target[. = '#{target}']/#{name}#{delimiter}#{value}" + end + + def hash + [target, name, Change].hash + end + + def eql?(other) + other.is_a?(self.class) && [other.target, other.name] == [target, name] + end + + private + + def action + return "set" unless @value.nil? + "rm " + end + + def value + " #{@value}" if @value + end + end + + class ChangeSet + def initialize + @set = {} + end + + def <<(change) + @set[change] = change + end + + def to_a + changes + end + + def changes + @set.values.map(&:to_s) + end + end + + class TargetedChangeSet < DelegateClass(ChangeSet) + def initialize(target) + @target = target + super(ChangeSet.new) + end + + def with(*args) + self << Change.new(@target, *args) + self + end + end +end -- cgit v1.2.3 From 0717f95455d882875107086544477fe9e8253fa1 Mon Sep 17 00:00:00 2001 From: Adam Jahn Date: Fri, 8 Jul 2016 15:32:42 -0400 Subject: Ruby 1.8.7 doesn't preserve hash insertion order --- spec/support/augeas.rb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'spec/support') diff --git a/spec/support/augeas.rb b/spec/support/augeas.rb index 4912e1a..7548684 100644 --- a/spec/support/augeas.rb +++ b/spec/support/augeas.rb @@ -19,9 +19,10 @@ module Augeas [target, name, Change].hash end - def eql?(other) + def ==(other) other.is_a?(self.class) && [other.target, other.name] == [target, name] end + alias_method :eql?, :== private @@ -37,11 +38,12 @@ module Augeas class ChangeSet def initialize - @set = {} + @set = [] end def <<(change) - @set[change] = change + index = @set.index(change) || @set.length + @set[index] = change end def to_a @@ -49,7 +51,7 @@ module Augeas end def changes - @set.values.map(&:to_s) + @set.map(&:to_s) end end -- cgit v1.2.3