resync 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +4 -0
- data/CHANGES.md +4 -0
- data/README.md +3 -1
- data/lib/resync/shared/base_change_index.rb +1 -1
- data/lib/resync/shared/base_change_list.rb +1 -1
- data/lib/resync/shared/base_resource_list.rb +4 -4
- data/lib/resync/version.rb +1 -1
- data/lib/resync/xml.rb +16 -21
- data/resync.gemspec +1 -0
- data/spec/spec_helper.rb +6 -1
- metadata +16 -5
- data/lib/resync/util/indexable_lazy.rb +0 -18
- data/spec/unit/resync/util/indexable_lazy_spec.rb +0 -133
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: caaf4841db1483e0ee12a97a0c8feda2860ff307
         | 
| 4 | 
            +
              data.tar.gz: 9042ffbe49a75096c1c8dca81aba9928180ba692
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 5d39cab4a6c3fc47078d1a8d5f9bcad996f82f07d11ca6906d801679e42452d64baeaf63c9c4e20d839618f00ddb6d15e4848f7993e9193bf1bcd2c309b5de27
         | 
| 7 | 
            +
              data.tar.gz: c5f5cbc3479c46d519e0adfce8b7663e3fcd00a18775895059ab33c408b41ab9aca9138961e5a29a46a36701b17b0657cfc307a99c9204118cfefc3c4cfd5924
         | 
    
        data/.travis.yml
    CHANGED
    
    
    
        data/CHANGES.md
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -1,4 +1,5 @@ | |
| 1 | 
            -
            # resync
         | 
| 1 | 
            +
            # resync [](https://travis-ci.org/dmolesUC3/resync) [](https://codeclimate.com/github/dmolesUC3/resync) [](http://inch-ci.org/github/dmolesUC3/resync)
         | 
| 2 | 
            +
             | 
| 2 3 |  | 
| 3 4 | 
             
            A Ruby gem for working with the [ResourceSync](http://www.openarchives.org/rs/1.0/resourcesync) web synchronization framework.
         | 
| 4 5 |  | 
| @@ -90,3 +91,4 @@ When reading a ResourceSync document from XML and writing it back out, `<rs:ln>` | |
| 90 91 | 
             
            #### Namespace weirdness
         | 
| 91 92 |  | 
| 92 93 | 
             
            The [XML::Mapping](https://github.com/multi-io/xml-mapping) library `resync` uses doesn't support namespaces, so namespace handling in `resync` is a bit hacky. In particular, you may see strange behavior when using `<rs:ln>`, `<rs:md>`, `<url>`, or `<sitemap>` tags outside the context of a `<urlset>`/`<sitemapindex>`.
         | 
| 94 | 
            +
             | 
| @@ -12,7 +12,7 @@ module Resync | |
| 12 12 | 
             
                # @param in_range [Range<Time>] the range of times to filter by
         | 
| 13 13 | 
             
                # @param strict [Boolean] +true+ if resources without +from_time+ or +until_time+ should be
         | 
| 14 14 | 
             
                #   excluded, +false+ if they should be included.
         | 
| 15 | 
            -
                # @return [ | 
| 15 | 
            +
                # @return [Array<Resource>] those change lists whose +from_time+ *or* +until_time+
         | 
| 16 16 | 
             
                #   falls within +in_range+
         | 
| 17 17 | 
             
                def change_lists(in_range:, strict: true)
         | 
| 18 18 | 
             
                  resources.select do |r|
         | 
| @@ -6,7 +6,7 @@ module Resync | |
| 6 6 | 
             
                # Filters the list of changes by change type, modification time, or both.
         | 
| 7 7 | 
             
                # @param of_type [Types::Change] the change type
         | 
| 8 8 | 
             
                # @param in_range [Range<Time>] the range of modification times
         | 
| 9 | 
            -
                # @return [ | 
| 9 | 
            +
                # @return [Array<Resource>] the matching changes, or all changes
         | 
| 10 10 | 
             
                #   if neither +of_type+ nor +in_range+ is specified.
         | 
| 11 11 | 
             
                def changes(of_type: nil, in_range: nil)
         | 
| 12 12 | 
             
                  resources.select do |r|
         | 
| @@ -9,7 +9,7 @@ module Resync | |
| 9 9 | 
             
              # they represent (e.g. +resourcelist+, +changelist+).
         | 
| 10 10 | 
             
              #
         | 
| 11 11 | 
             
              # @!attribute [r] resources
         | 
| 12 | 
            -
              #   @return [ | 
| 12 | 
            +
              #   @return [Array<Resource>] the +<url>+ or +<sitemap>+ elements contained in this list.
         | 
| 13 13 | 
             
              class BaseResourceList < Augmented
         | 
| 14 14 | 
             
                include ::XML::Mapping
         | 
| 15 15 |  | 
| @@ -40,7 +40,7 @@ module Resync | |
| 40 40 |  | 
| 41 41 | 
             
                # Sets the +resources+ list. +nil+ is treated as an empty list.
         | 
| 42 42 | 
             
                def resources=(value)
         | 
| 43 | 
            -
                  @resources =  | 
| 43 | 
            +
                  @resources = value || []
         | 
| 44 44 | 
             
                end
         | 
| 45 45 |  | 
| 46 46 | 
             
                # Sets the metadata.
         | 
| @@ -61,7 +61,7 @@ module Resync | |
| 61 61 |  | 
| 62 62 | 
             
                # Finds resources with the specified capability.
         | 
| 63 63 | 
             
                # @param capability [String] the capability.
         | 
| 64 | 
            -
                # @return [ | 
| 64 | 
            +
                # @return [Array<Resource>] those resources having that capability, or an empty array if none exist.
         | 
| 65 65 | 
             
                def resources_for(capability:)
         | 
| 66 66 | 
             
                  resources.select { |r| r.capability == capability }
         | 
| 67 67 | 
             
                end
         | 
| @@ -80,7 +80,7 @@ module Resync | |
| 80 80 | 
             
                # @param time_range [Range[Time]] the range of acceptable times (inclusive or exclusive)
         | 
| 81 81 | 
             
                # @param time_attr [Symbol] the time type to filter on: +:modified_time+, +:at_time+,
         | 
| 82 82 | 
             
                #   +:completed_time+, +:from_time+ or +:until_time+
         | 
| 83 | 
            -
                # @return [ | 
| 83 | 
            +
                # @return [Array<Resource>] a lazy enumeration of the resources within the specified range.
         | 
| 84 84 | 
             
                def resources_in(time_range:, time_attr:)
         | 
| 85 85 | 
             
                  resources.select { |r| time_range.cover?(r.send(time_attr)) }
         | 
| 86 86 | 
             
                end
         | 
    
        data/lib/resync/version.rb
    CHANGED
    
    
    
        data/lib/resync/xml.rb
    CHANGED
    
    | @@ -1,6 +1,7 @@ | |
| 1 1 | 
             
            require 'uri'
         | 
| 2 2 | 
             
            require 'time'
         | 
| 3 3 | 
             
            require 'xml/mapping'
         | 
| 4 | 
            +
            require_relative 'types'
         | 
| 4 5 |  | 
| 5 6 | 
             
            module Resync
         | 
| 6 7 | 
             
              # Helper methods and modules related to reading and writing XML.
         | 
| @@ -106,10 +107,9 @@ module Resync | |
| 106 107 | 
             
                ::XML::Mapping.add_node_class UriNode
         | 
| 107 108 |  | 
| 108 109 | 
             
                # ------------------------------------------------------------
         | 
| 109 | 
            -
                # Resync::Types | 
| 110 | 
            +
                # Resync::Types
         | 
| 110 111 |  | 
| 111 | 
            -
                 | 
| 112 | 
            -
                class ChangeNode < ::XML::Mapping::SingleAttributeNode
         | 
| 112 | 
            +
                class EnumNode < ::XML::Mapping::SingleAttributeNode
         | 
| 113 113 | 
             
                  def initialize(*args)
         | 
| 114 114 | 
             
                    path, *args = super(*args)
         | 
| 115 115 | 
             
                    @path = ::XML::XXPath.new(path)
         | 
| @@ -118,7 +118,8 @@ module Resync | |
| 118 118 |  | 
| 119 119 | 
             
                  # Implements +::XML::Mapping::SingleAttributeNode#extract_attr_value+.
         | 
| 120 120 | 
             
                  def extract_attr_value(xml)
         | 
| 121 | 
            -
                     | 
| 121 | 
            +
                    enum_class = self.class::ENUM_CLASS
         | 
| 122 | 
            +
                    enum_class.parse(default_when_xpath_err { @path.first(xml).text })
         | 
| 122 123 | 
             
                  end
         | 
| 123 124 |  | 
| 124 125 | 
             
                  # Implements +::XML::Mapping::SingleAttributeNode#set_attr_value+.
         | 
| @@ -127,28 +128,22 @@ module Resync | |
| 127 128 | 
             
                  end
         | 
| 128 129 | 
             
                end
         | 
| 129 130 |  | 
| 131 | 
            +
                # ------------------------------------------------------------
         | 
| 132 | 
            +
                # Resync::Types::Change
         | 
| 133 | 
            +
             | 
| 134 | 
            +
                # Maps +Resync::Types::Change+ values.
         | 
| 135 | 
            +
                class ChangeNode < EnumNode
         | 
| 136 | 
            +
                  ENUM_CLASS = Resync::Types::Change
         | 
| 137 | 
            +
                end
         | 
| 138 | 
            +
             | 
| 130 139 | 
             
                ::XML::Mapping.add_node_class ChangeNode
         | 
| 131 140 |  | 
| 132 141 | 
             
                # ------------------------------------------------------------
         | 
| 133 142 | 
             
                # Resync::Types::Changefreq
         | 
| 134 143 |  | 
| 135 | 
            -
                # Maps +Resync::Types:: | 
| 136 | 
            -
                class ChangefreqNode <  | 
| 137 | 
            -
                   | 
| 138 | 
            -
                    path, *args = super(*args)
         | 
| 139 | 
            -
                    @path = ::XML::XXPath.new(path)
         | 
| 140 | 
            -
                    args
         | 
| 141 | 
            -
                  end
         | 
| 142 | 
            -
             | 
| 143 | 
            -
                  # Implements +::XML::Mapping::SingleAttributeNode#extract_attr_value+.
         | 
| 144 | 
            -
                  def extract_attr_value(xml)
         | 
| 145 | 
            -
                    Resync::Types::ChangeFrequency.parse(default_when_xpath_err { @path.first(xml).text })
         | 
| 146 | 
            -
                  end
         | 
| 147 | 
            -
             | 
| 148 | 
            -
                  # Implements +::XML::Mapping::SingleAttributeNode#set_attr_value+.
         | 
| 149 | 
            -
                  def set_attr_value(xml, value)
         | 
| 150 | 
            -
                    @path.first(xml, ensure_created: true).text = value.to_s
         | 
| 151 | 
            -
                  end
         | 
| 144 | 
            +
                # Maps +Resync::Types::ChangeFrequency+ values.
         | 
| 145 | 
            +
                class ChangefreqNode < EnumNode
         | 
| 146 | 
            +
                  ENUM_CLASS = Resync::Types::ChangeFrequency
         | 
| 152 147 | 
             
                end
         | 
| 153 148 |  | 
| 154 149 | 
             
                ::XML::Mapping.add_node_class ChangefreqNode
         | 
    
        data/resync.gemspec
    CHANGED
    
    | @@ -33,4 +33,5 @@ Gem::Specification.new do |spec| | |
| 33 33 | 
             
              spec.add_development_dependency 'simplecov', '~> 0.9.2'
         | 
| 34 34 | 
             
              spec.add_development_dependency 'simplecov-console', '~> 0.2.0'
         | 
| 35 35 | 
             
              spec.add_development_dependency 'yard', '~> 0.8'
         | 
| 36 | 
            +
              spec.add_development_dependency 'codeclimate-test-reporter'
         | 
| 36 37 | 
             
            end
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -1,7 +1,12 @@ | |
| 1 1 | 
             
            # ------------------------------------------------------------
         | 
| 2 | 
            -
            # SimpleCov setup
         | 
| 2 | 
            +
            # SimpleCov/CodeClimate setup
         | 
| 3 3 |  | 
| 4 4 | 
             
            if ENV['COVERAGE']
         | 
| 5 | 
            +
              if ENV['CODECLIMATE_REPO_TOKEN']
         | 
| 6 | 
            +
                require 'codeclimate-test-reporter'
         | 
| 7 | 
            +
                CodeClimate::TestReporter.start
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 5 10 | 
             
              require 'simplecov'
         | 
| 6 11 | 
             
              require 'simplecov-console'
         | 
| 7 12 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: resync
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - David Moles
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015-06- | 
| 11 | 
            +
            date: 2015-06-19 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: mime-types
         | 
| @@ -150,6 +150,20 @@ dependencies: | |
| 150 150 | 
             
                - - "~>"
         | 
| 151 151 | 
             
                  - !ruby/object:Gem::Version
         | 
| 152 152 | 
             
                    version: '0.8'
         | 
| 153 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 154 | 
            +
              name: codeclimate-test-reporter
         | 
| 155 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 156 | 
            +
                requirements:
         | 
| 157 | 
            +
                - - ">="
         | 
| 158 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 159 | 
            +
                    version: '0'
         | 
| 160 | 
            +
              type: :development
         | 
| 161 | 
            +
              prerelease: false
         | 
| 162 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 163 | 
            +
                requirements:
         | 
| 164 | 
            +
                - - ">="
         | 
| 165 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 166 | 
            +
                    version: '0'
         | 
| 153 167 | 
             
            description: A Ruby gem for working with the ResourceSync web synchronization framework
         | 
| 154 168 | 
             
            email:
         | 
| 155 169 | 
             
            - david.moles@ucop.edu
         | 
| @@ -194,7 +208,6 @@ files: | |
| 194 208 | 
             
            - lib/resync/types/change.rb
         | 
| 195 209 | 
             
            - lib/resync/types/change_frequency.rb
         | 
| 196 210 | 
             
            - lib/resync/util.rb
         | 
| 197 | 
            -
            - lib/resync/util/indexable_lazy.rb
         | 
| 198 211 | 
             
            - lib/resync/version.rb
         | 
| 199 212 | 
             
            - lib/resync/xml.rb
         | 
| 200 213 | 
             
            - lib/resync/xml_parser.rb
         | 
| @@ -262,7 +275,6 @@ files: | |
| 262 275 | 
             
            - spec/unit/resync/shared/sorted_list_examples.rb
         | 
| 263 276 | 
             
            - spec/unit/resync/shared/uri_field_examples.rb
         | 
| 264 277 | 
             
            - spec/unit/resync/source_description_spec.rb
         | 
| 265 | 
            -
            - spec/unit/resync/util/indexable_lazy_spec.rb
         | 
| 266 278 | 
             
            - spec/unit/resync/xml/timenode_spec.rb
         | 
| 267 279 | 
             
            - spec/unit/resync/xml/xml_spec.rb
         | 
| 268 280 | 
             
            - spec/unit/resync/xml_parser_spec.rb
         | 
| @@ -354,7 +366,6 @@ test_files: | |
| 354 366 | 
             
            - spec/unit/resync/shared/sorted_list_examples.rb
         | 
| 355 367 | 
             
            - spec/unit/resync/shared/uri_field_examples.rb
         | 
| 356 368 | 
             
            - spec/unit/resync/source_description_spec.rb
         | 
| 357 | 
            -
            - spec/unit/resync/util/indexable_lazy_spec.rb
         | 
| 358 369 | 
             
            - spec/unit/resync/xml/timenode_spec.rb
         | 
| 359 370 | 
             
            - spec/unit/resync/xml/xml_spec.rb
         | 
| 360 371 | 
             
            - spec/unit/resync/xml_parser_spec.rb
         | 
| @@ -1,133 +0,0 @@ | |
| 1 | 
            -
            require 'spec_helper'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Resync
         | 
| 4 | 
            -
              module Util
         | 
| 5 | 
            -
                describe IndexableLazy do
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                  before(:each) do
         | 
| 8 | 
            -
                    @size = 3
         | 
| 9 | 
            -
                    @array = Array.new(@size) { instance_double(Object) }
         | 
| 10 | 
            -
                    @lazy = IndexableLazy.new(@array)
         | 
| 11 | 
            -
                  end
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                  describe '#size' do
         | 
| 14 | 
            -
                    it 'returns the size of the underlying array' do
         | 
| 15 | 
            -
                      expect(@lazy.size).to eq(@size)
         | 
| 16 | 
            -
                    end
         | 
| 17 | 
            -
                  end
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                  describe '#[]' do
         | 
| 20 | 
            -
                    it 'is lazy' do
         | 
| 21 | 
            -
                      expect(@array[0]).to receive(:to_s).and_return('0')
         | 
| 22 | 
            -
                      expect(@array[1]).to receive(:to_s).and_return('1')
         | 
| 23 | 
            -
                      expect(@array[2]).not_to receive(:to_s)
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                      (0...@lazy.size).each do |i|
         | 
| 26 | 
            -
                        expect(@lazy[i]).to eq(@array[i])
         | 
| 27 | 
            -
                        break if @lazy[i].to_s == '1'
         | 
| 28 | 
            -
                      end
         | 
| 29 | 
            -
                    end
         | 
| 30 | 
            -
                  end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                  describe '#each' do
         | 
| 33 | 
            -
                    it 'is lazy' do
         | 
| 34 | 
            -
                      expect(@array[0]).to receive(:to_s).and_return('0')
         | 
| 35 | 
            -
                      expect(@array[1]).to receive(:to_s).and_return('1')
         | 
| 36 | 
            -
                      expect(@array[2]).not_to receive(:to_s)
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                      @lazy.each do |v|
         | 
| 39 | 
            -
                        break if v.to_s == '1'
         | 
| 40 | 
            -
                      end
         | 
| 41 | 
            -
                    end
         | 
| 42 | 
            -
                  end
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                  describe '#each_with_index' do
         | 
| 45 | 
            -
                    it 'is lazy' do
         | 
| 46 | 
            -
                      expect(@array[0]).to receive(:to_s).and_return('0')
         | 
| 47 | 
            -
                      expect(@array[1]).to receive(:to_s).and_return('1')
         | 
| 48 | 
            -
                      expect(@array[2]).not_to receive(:to_s)
         | 
| 49 | 
            -
             | 
| 50 | 
            -
                      @lazy.each_with_index do |v, i|
         | 
| 51 | 
            -
                        break if v.to_s == '1' || i > 1
         | 
| 52 | 
            -
                      end
         | 
| 53 | 
            -
                    end
         | 
| 54 | 
            -
                  end
         | 
| 55 | 
            -
             | 
| 56 | 
            -
                  describe '#each_with_object' do
         | 
| 57 | 
            -
                    it 'is lazy' do
         | 
| 58 | 
            -
                      expect(@array[0]).to receive(:to_s).and_return('0')
         | 
| 59 | 
            -
                      expect(@array[1]).to receive(:to_s).and_return('1')
         | 
| 60 | 
            -
                      expect(@array[2]).not_to receive(:to_s)
         | 
| 61 | 
            -
             | 
| 62 | 
            -
                      acc = []
         | 
| 63 | 
            -
                      @lazy.each_with_object(acc) do |v, obj|
         | 
| 64 | 
            -
                        obj << v.to_s
         | 
| 65 | 
            -
                        break if obj[-1] == '1'
         | 
| 66 | 
            -
                      end
         | 
| 67 | 
            -
                      expect(acc).to eq(%w(0 1))
         | 
| 68 | 
            -
                    end
         | 
| 69 | 
            -
                  end
         | 
| 70 | 
            -
             | 
| 71 | 
            -
                  describe '#find' do
         | 
| 72 | 
            -
                    it 'is lazy' do
         | 
| 73 | 
            -
                      expect(@array[0]).to receive(:to_s).and_return('0')
         | 
| 74 | 
            -
                      expect(@array[1]).to receive(:to_s).and_return('1')
         | 
| 75 | 
            -
                      expect(@array[2]).not_to receive(:to_s)
         | 
| 76 | 
            -
             | 
| 77 | 
            -
                      expect(@lazy.find { |v| v.to_s == '1' }).to be(@array[1])
         | 
| 78 | 
            -
                    end
         | 
| 79 | 
            -
                  end
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                  describe '#find_index' do
         | 
| 82 | 
            -
                    it 'is lazy' do
         | 
| 83 | 
            -
                      expect(@array[0]).to receive(:to_s).and_return('0')
         | 
| 84 | 
            -
                      expect(@array[1]).to receive(:to_s).and_return('1')
         | 
| 85 | 
            -
                      expect(@array[2]).not_to receive(:to_s)
         | 
| 86 | 
            -
             | 
| 87 | 
            -
                      expect(@lazy.find_index { |v| v.to_s == '1' }).to eq(1)
         | 
| 88 | 
            -
                    end
         | 
| 89 | 
            -
                  end
         | 
| 90 | 
            -
             | 
| 91 | 
            -
                  describe '#take_while' do
         | 
| 92 | 
            -
                    it 'is lazy' do
         | 
| 93 | 
            -
                      expect(@array[0]).to receive(:to_s).and_return('0')
         | 
| 94 | 
            -
                      expect(@array[1]).to receive(:to_s).and_return('1')
         | 
| 95 | 
            -
                      expect(@array[2]).not_to receive(:to_s)
         | 
| 96 | 
            -
             | 
| 97 | 
            -
                      expect(@lazy.take_while { |v| v.to_s == '0' }.to_a).to eq([@array[0]])
         | 
| 98 | 
            -
                    end
         | 
| 99 | 
            -
                  end
         | 
| 100 | 
            -
             | 
| 101 | 
            -
                  describe '#map' do
         | 
| 102 | 
            -
                    it 'is lazy' do
         | 
| 103 | 
            -
                      expect(@array[0]).to receive(:to_s).and_return('0')
         | 
| 104 | 
            -
                      expect(@array[1]).to receive(:to_s).and_return('1')
         | 
| 105 | 
            -
                      expect(@array[2]).not_to receive(:to_s)
         | 
| 106 | 
            -
             | 
| 107 | 
            -
                      mapped = @lazy.map(&:to_s)
         | 
| 108 | 
            -
                      expect(mapped.take(2).to_a).to eq(%w(0 1))
         | 
| 109 | 
            -
                    end
         | 
| 110 | 
            -
                  end
         | 
| 111 | 
            -
             | 
| 112 | 
            -
                  describe '#take' do
         | 
| 113 | 
            -
                    it 'is lazy' do
         | 
| 114 | 
            -
                      expect(@array[0]).to receive(:to_s).and_return('0')
         | 
| 115 | 
            -
                      expect(@array[1]).to receive(:to_s).and_return('1')
         | 
| 116 | 
            -
                      expect(@array[2]).not_to receive(:to_s)
         | 
| 117 | 
            -
             | 
| 118 | 
            -
                      expect(@lazy.take(2).map(&:to_s).to_a).to eq(%w(0 1))
         | 
| 119 | 
            -
                    end
         | 
| 120 | 
            -
                  end
         | 
| 121 | 
            -
             | 
| 122 | 
            -
                  describe '#select' do
         | 
| 123 | 
            -
                    it 'is lazy' do
         | 
| 124 | 
            -
                      expect(@array[0]).not_to receive(:to_s)
         | 
| 125 | 
            -
                      expect(@array[1]).not_to receive(:to_s)
         | 
| 126 | 
            -
                      expect(@array[2]).not_to receive(:to_s)
         | 
| 127 | 
            -
             | 
| 128 | 
            -
                      @lazy.select(&:to_s)
         | 
| 129 | 
            -
                    end
         | 
| 130 | 
            -
                  end
         | 
| 131 | 
            -
                end
         | 
| 132 | 
            -
              end
         | 
| 133 | 
            -
            end
         |