Sha256: 380c686710226d7b85ba5b5f0e3f2d61ef107ac9f57bbfed9c9d0fcee372d5e6

Contents?: true

Size: 1.02 KB

Versions: 36

Compression:

Stored size: 1.02 KB

Contents

module QuickTravel
  module PriceChanges
    class PriceChangeTree < PriceChange
      attr_reader :root, :children

      def initialize(attrs = {})
        super(attrs)
        @root     = PriceChange.new(attrs['root'])
        @children = attrs.fetch('children', []).map do |child_attrs|
          PriceChangeTree.new(child_attrs)
        end
      end

      def price_change_on(id, type = 'Reservation')
        return @root if applied_on?(id, type)
        find_and_return_on_children { |child| child.price_change_on(id, type) }
      end

      def total_price_change_on(id, type = 'Reservation')
        return self if applied_on?(id, type)
        find_and_return_on_children { |child| child.total_price_change_on(id, type) }
      end

      def roots
        [@root] + @children.flat_map(&:roots)
      end

      private

      def find_and_return_on_children(&block)
        @children.each do |child|
          result = block.call(child)
          return result unless result.nil?
        end
        nil
      end
    end
  end
end

Version data entries

36 entries across 36 versions & 1 rubygems

Version Path
quicktravel_client-4.7.0 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-4.6.0 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-4.5.0 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-4.4.0 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-4.3.2 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-4.3.1 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-4.3.0 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-4.2.0 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-4.1.0 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-4.0.0 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-3.9.0 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-3.8.1 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-3.8.0 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-3.7.0 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-3.6.1 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-3.6.0 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-3.5.0 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-3.4.0 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-3.3.0 lib/quick_travel/price_changes/price_change_tree.rb
quicktravel_client-3.2.0 lib/quick_travel/price_changes/price_change_tree.rb