right_scraper 3.2.6 → 5.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +7 -0
  2. data/lib/right_scraper.rb +16 -34
  3. data/lib/right_scraper/builders.rb +32 -0
  4. data/lib/right_scraper/builders/base.rb +19 -20
  5. data/lib/right_scraper/builders/filesystem.rb +8 -6
  6. data/lib/right_scraper/builders/union.rb +4 -1
  7. data/lib/right_scraper/loggers.rb +31 -0
  8. data/lib/right_scraper/loggers/base.rb +113 -0
  9. data/lib/right_scraper/loggers/default.rb +98 -0
  10. data/lib/right_scraper/{scraper.rb → main.rb} +53 -9
  11. data/lib/right_scraper/processes.rb +33 -0
  12. data/lib/right_scraper/processes/shell.rb +227 -0
  13. data/lib/right_scraper/processes/{ssh.rb → ssh_agent.rb} +4 -0
  14. data/lib/right_scraper/processes/svn_client.rb +117 -0
  15. data/lib/right_scraper/processes/warden.rb +358 -0
  16. data/lib/right_scraper/registered_base.rb +154 -0
  17. data/lib/right_scraper/repositories.rb +33 -0
  18. data/lib/right_scraper/repositories/base.rb +271 -232
  19. data/lib/right_scraper/repositories/download.rb +8 -6
  20. data/lib/right_scraper/repositories/git.rb +8 -9
  21. data/lib/right_scraper/repositories/svn.rb +8 -8
  22. data/lib/right_scraper/resources.rb +32 -0
  23. data/lib/right_scraper/resources/base.rb +5 -1
  24. data/lib/right_scraper/resources/cookbook.rb +34 -27
  25. data/lib/right_scraper/resources/workflow.rb +27 -28
  26. data/lib/right_scraper/retrievers.rb +34 -0
  27. data/lib/right_scraper/retrievers/base.rb +80 -84
  28. data/lib/right_scraper/retrievers/checkout_base.rb +178 -0
  29. data/lib/right_scraper/retrievers/download.rb +125 -117
  30. data/lib/right_scraper/retrievers/git.rb +377 -223
  31. data/lib/right_scraper/retrievers/svn.rb +102 -62
  32. data/lib/right_scraper/scanners.rb +37 -0
  33. data/lib/right_scraper/scanners/base.rb +77 -80
  34. data/lib/right_scraper/scanners/cookbook_manifest.rb +31 -30
  35. data/lib/right_scraper/scanners/cookbook_metadata.rb +380 -35
  36. data/lib/right_scraper/scanners/cookbook_s3_upload.rb +56 -53
  37. data/lib/right_scraper/scanners/union.rb +61 -58
  38. data/lib/right_scraper/scanners/workflow_manifest.rb +55 -54
  39. data/lib/right_scraper/scanners/workflow_metadata.rb +41 -39
  40. data/lib/right_scraper/scanners/workflow_s3_upload.rb +59 -55
  41. data/lib/right_scraper/scrapers.rb +32 -0
  42. data/lib/right_scraper/scrapers/base.rb +217 -205
  43. data/lib/right_scraper/scrapers/cookbook.rb +42 -40
  44. data/lib/right_scraper/scrapers/workflow.rb +57 -58
  45. data/lib/right_scraper/version.rb +3 -0
  46. data/right_scraper.gemspec +12 -16
  47. metadata +57 -163
  48. data/Gemfile +0 -15
  49. data/Rakefile +0 -89
  50. data/lib/right_scraper/logger.rb +0 -107
  51. data/lib/right_scraper/loggers/noisy.rb +0 -85
  52. data/lib/right_scraper/repositories/mock.rb +0 -70
  53. data/lib/right_scraper/retrievers/checkout.rb +0 -79
  54. data/lib/right_scraper/scraper_logger.rb +0 -66
  55. data/lib/right_scraper/svn_client.rb +0 -164
  56. data/right_scraper.rconf +0 -13
  57. data/spec/builder_spec.rb +0 -50
  58. data/spec/cookbook_helper.rb +0 -73
  59. data/spec/cookbook_manifest_spec.rb +0 -93
  60. data/spec/cookbook_s3_upload_spec.rb +0 -159
  61. data/spec/download/download_retriever_spec.rb +0 -118
  62. data/spec/download/download_retriever_spec_helper.rb +0 -72
  63. data/spec/download/download_spec.rb +0 -128
  64. data/spec/download/multi_dir_spec.rb +0 -106
  65. data/spec/download/multi_dir_spec_helper.rb +0 -40
  66. data/spec/git/cookbook_spec.rb +0 -165
  67. data/spec/git/demokey +0 -27
  68. data/spec/git/demokey.pub +0 -1
  69. data/spec/git/password_key +0 -30
  70. data/spec/git/password_key.pub +0 -1
  71. data/spec/git/repository_spec.rb +0 -110
  72. data/spec/git/retriever_spec.rb +0 -553
  73. data/spec/git/retriever_spec_helper.rb +0 -112
  74. data/spec/git/scraper_spec.rb +0 -151
  75. data/spec/git/ssh_spec.rb +0 -174
  76. data/spec/git/url_spec.rb +0 -103
  77. data/spec/logger_spec.rb +0 -185
  78. data/spec/repository_spec.rb +0 -111
  79. data/spec/retriever_spec_helper.rb +0 -146
  80. data/spec/scanner_spec.rb +0 -61
  81. data/spec/scraper_helper.rb +0 -88
  82. data/spec/scraper_spec.rb +0 -147
  83. data/spec/spec_helper.rb +0 -185
  84. data/spec/svn/cookbook_spec.rb +0 -96
  85. data/spec/svn/multi_svn_spec.rb +0 -64
  86. data/spec/svn/multi_svn_spec_helper.rb +0 -40
  87. data/spec/svn/repository_spec.rb +0 -72
  88. data/spec/svn/retriever_spec.rb +0 -266
  89. data/spec/svn/scraper_spec.rb +0 -90
  90. data/spec/svn/svn_retriever_spec_helper.rb +0 -90
  91. data/spec/svn/url_spec.rb +0 -47
  92. data/spec/url_spec.rb +0 -164
data/spec/logger_spec.rb DELETED
@@ -1,185 +0,0 @@
1
- #--
2
- # Copyright: Copyright (c) 2010-2011 RightScale, Inc.
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining
5
- # a copy of this software and associated documentation files (the
6
- # 'Software'), to deal in the Software without restriction, including
7
- # without limitation the rights to use, copy, modify, merge, publish,
8
- # distribute, sublicense, and/or sell copies of the Software, and to
9
- # permit persons to whom the Software is furnished to do so, subject to
10
- # the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be
13
- # included in all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
16
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
- # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
- # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20
- # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21
- # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
- #++
23
-
24
- require 'stringio'
25
- require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
26
- require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'right_scraper', 'loggers', 'noisy'))
27
-
28
- describe RightScraper::Logger do
29
- before(:each) do
30
- @stream = StringIO.new()
31
- @logger = RightScraper::Logger.new(@stream)
32
- @logger.level = Logger::WARN
33
- end
34
-
35
- after(:each) do
36
- @logger.close
37
- end
38
-
39
- def match_log_entry(entry, type, message)
40
- shortform, longform = case type
41
- when Logger::DEBUG then ["D", "DEBUG"]
42
- when Logger::INFO then ["I", "INFO"]
43
- when Logger::WARN then ["W", "WARN"]
44
- when Logger::ERROR then ["E", "ERROR"]
45
- when Logger::FATAL then ["F", "FATAL"]
46
- when Logger::FATAL then ["U", "UNKNOWN"]
47
- end
48
- datestamp = /[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}/
49
- timestamp = /[[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2}.[[:digit:]]+/
50
- datetimestamp = /#{datestamp}T#{timestamp}/
51
- entry.should =~ %r{^#{shortform}, \[#{datetimestamp} \#[[:digit:]]+\] #{longform} -- : #{message}\n$}
52
- end
53
-
54
- it 'should log to the stream' do
55
- @logger.debug("foo")
56
- @logger.info("first")
57
- @logger.error("baz")
58
- @logger.fatal("quux")
59
- @stream.rewind
60
- match_log_entry(@stream.readline, Logger::ERROR, "baz")
61
- match_log_entry(@stream.readline, Logger::FATAL, "quux")
62
- @stream.eof?.should be_true
63
- end
64
-
65
- it 'should note errors properly' do
66
- @logger.note_error(Exception.new("foo!"), :baz)
67
- match_log_entry(@stream.string, Logger::ERROR, "Saw foo! during baz")
68
- end
69
-
70
- it 'should note errors with an explanation properly' do
71
- @logger.note_error(Exception.new("foo!"), :baz, "an explanation")
72
- match_log_entry(@stream.string, Logger::ERROR, "Saw foo! during baz: an explanation")
73
- end
74
-
75
- it 'should pass values through the block' do
76
- result = @logger.operation(:passthrough) { 4 }
77
- result.should == 4
78
- end
79
- end
80
-
81
- describe RightScraper::Loggers::NoisyLogger do
82
- before(:each) do
83
- @stream = StringIO.new()
84
- @logger = RightScraper::Loggers::NoisyLogger.new(@stream)
85
- end
86
-
87
- after(:each) do
88
- @logger.close
89
- end
90
-
91
- def match_log_entry(entry, type, message)
92
- shortform, longform = case type
93
- when Logger::DEBUG then ["D", "DEBUG"]
94
- when Logger::INFO then ["I", "INFO"]
95
- when Logger::WARN then ["W", "WARN"]
96
- when Logger::ERROR then ["E", "ERROR"]
97
- when Logger::FATAL then ["F", "FATAL"]
98
- when Logger::FATAL then ["U", "UNKNOWN"]
99
- end
100
- datestamp = /[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}/
101
- timestamp = /[[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2}.[[:digit:]]+/
102
- datetimestamp = /#{datestamp}T#{timestamp}/
103
- entry.should =~ %r{^#{shortform}, \[#{datetimestamp} \#[[:digit:]]+\] #{longform} -- : #{message}\n$}
104
- end
105
-
106
- context 'with the level set to WARN' do
107
- before(:each) do
108
- @logger.level = Logger::WARN
109
- end
110
-
111
- it 'should not log operations' do
112
- @logger.operation(:foo) do
113
- @logger.operation(:bar) do
114
- end
115
- end
116
- @stream.string.should == ""
117
- end
118
-
119
- it 'should note errors with context' do
120
- begin
121
- @logger.operation(:foo) do
122
- @logger.operation(:bar, "blah") do
123
- @logger.note_error("an exception", :note, "bar")
124
- end
125
- end
126
- rescue
127
- end
128
- @stream.rewind
129
- match_log_entry(@stream.readline, Logger::ERROR, "Saw an exception during note: bar in bar: blah in foo")
130
- @stream.eof?.should be_true
131
- end
132
-
133
- it 'should note errors when the level is set to WARN and an exception occurs' do
134
- begin
135
- @logger.operation(:foo) do
136
- @logger.operation(:bar, "blah") do
137
- raise "foo"
138
- end
139
- end
140
- rescue
141
- end
142
- @stream.rewind
143
- match_log_entry(@stream.readline, Logger::ERROR, "Saw foo during bar: blah in foo")
144
- @stream.eof?.should be_true
145
- end
146
- end
147
-
148
- context 'with the level set to DEBUG' do
149
- before(:each) do
150
- @logger.level = Logger::DEBUG
151
- end
152
-
153
- it 'should log begin/commit' do
154
- @logger.operation(:foo) do
155
- @logger.operation(:bar, "blah") do
156
- end
157
- end
158
- @stream.rewind
159
- match_log_entry(@stream.readline, Logger::DEBUG, "> begin foo")
160
- match_log_entry(@stream.readline, Logger::DEBUG, ">> begin bar: blah")
161
- match_log_entry(@stream.readline, Logger::DEBUG, ">> commit bar: blah")
162
- match_log_entry(@stream.readline, Logger::DEBUG, "> commit foo")
163
- @stream.eof?.should be_true
164
- end
165
-
166
- it 'should log begin/abort when an exception occurs' do
167
- @logger.level = Logger::DEBUG
168
- begin
169
- @logger.operation(:foo) do
170
- @logger.operation(:bar, "blah") do
171
- raise "foo"
172
- end
173
- end
174
- rescue
175
- end
176
- @stream.rewind
177
- match_log_entry(@stream.readline, Logger::DEBUG, "> begin foo")
178
- match_log_entry(@stream.readline, Logger::DEBUG, ">> begin bar: blah")
179
- match_log_entry(@stream.readline, Logger::ERROR, "Saw foo during bar: blah in foo")
180
- match_log_entry(@stream.readline, Logger::DEBUG, ">> abort bar: blah")
181
- match_log_entry(@stream.readline, Logger::DEBUG, "> abort foo")
182
- @stream.eof?.should be_true
183
- end
184
- end
185
- end
@@ -1,111 +0,0 @@
1
- #--
2
- # Copyright: Copyright (c) 2010-2011 RightScale, Inc.
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining
5
- # a copy of this software and associated documentation files (the
6
- # 'Software'), to deal in the Software without restriction, including
7
- # without limitation the rights to use, copy, modify, merge, publish,
8
- # distribute, sublicense, and/or sell copies of the Software, and to
9
- # permit persons to whom the Software is furnished to do so, subject to
10
- # the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be
13
- # included in all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
16
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
- # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
- # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20
- # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21
- # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
- #++
23
-
24
- require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
25
- require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'right_scraper', 'repositories', 'mock'))
26
-
27
- describe RightScraper::Repositories::Base do
28
- include RightScraper::SpecHelpers::DevelopmentModeEnvironment
29
-
30
- context 'with a repository type that doesn\'t exist' do
31
- it 'should throw a comprehensible error when you try to create it' do
32
- lambda {
33
- RightScraper::Repositories::Base.from_hash(:display_name => 'display_name',
34
- :repo_type => :nonexistent,
35
- :url => 'url',
36
- :tag => 'tag',
37
- :first_credential => 'first_credential',
38
- :second_credential => 'second_credential')
39
- }.should raise_error(/Can't understand how to make nonexistent repos/)
40
- end
41
- end
42
-
43
- context 'with a mock repository' do
44
- before(:each) do
45
- @repo = RightScraper::Repositories::Base.from_hash(:display_name => 'display_name',
46
- :repo_type => :mock,
47
- :url => 'url',
48
- :tag => 'tag',
49
- :first_credential => 'first_credential',
50
- :second_credential => 'second_credential')
51
- end
52
-
53
- it 'should be initializable from a hash' do
54
- @repo.should be_kind_of(RightScraper::Repositories::Base)
55
- @repo.display_name.should == 'display_name'
56
- @repo.repo_type.should == :mock
57
- @repo.url.should == 'url'
58
- @repo.tag.should == 'tag'
59
- @repo.first_credential.should == 'first_credential'
60
- @repo.second_credential.should == 'second_credential'
61
- end
62
-
63
- it 'should know the SHA-1 of its root location' do
64
- @repo.repository_hash.should ==
65
- Digest::SHA1.hexdigest("1\000mock\000url")
66
- end
67
-
68
- it 'should know the SHA-1 of the identifier for this specific checkout' do
69
- @repo.checkout_hash.should ==
70
- Digest::SHA1.hexdigest("1\000mock\000url")
71
- end
72
- end
73
- end
74
-
75
- describe RightScraper::Repositories::Download do
76
- include RightScraper::SpecHelpers::DevelopmentModeEnvironment
77
-
78
- before(:each) do
79
- @repo = RightScraper::Repositories::Base.from_hash(:display_name => 'test repo',
80
- :repo_type => :download,
81
- :url => "http://foo.bar.baz.quux/%20CBLAH",
82
- :tag => "412530982323",
83
- :first_credential => "foo:b/ar",
84
- :second_credential => "foo@bar")
85
- end
86
-
87
- it 'should have a tag' do
88
- @repo.tag.should == '412530982323'
89
- end
90
-
91
- it 'should include the tag in the checkout hash' do
92
- @repo.checkout_hash.should_not == @repo.repository_hash
93
- oldhash = @repo.checkout_hash
94
- @repo.tag = "42398"
95
- @repo.checkout_hash.should_not == oldhash
96
- end
97
-
98
- it 'should have the same repository hash with or without credentials' do
99
- initial_hash = @repo.repository_hash
100
- @repo.first_credential = nil
101
- @repo.second_credential = nil
102
- @repo.repository_hash.should == initial_hash
103
- end
104
-
105
- it 'should have the same checkout hash with or without credentials' do
106
- initial_hash = @repo.checkout_hash
107
- @repo.first_credential = nil
108
- @repo.second_credential = nil
109
- @repo.checkout_hash.should == initial_hash
110
- end
111
- end
@@ -1,146 +0,0 @@
1
- #--
2
- # Copyright: Copyright (c) 2010-2011 RightScale, Inc.
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining
5
- # a copy of this software and associated documentation files (the
6
- # 'Software'), to deal in the Software without restriction, including
7
- # without limitation the rights to use, copy, modify, merge, publish,
8
- # distribute, sublicense, and/or sell copies of the Software, and to
9
- # permit persons to whom the Software is furnished to do so, subject to
10
- # the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be
13
- # included in all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
16
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
- # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
- # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20
- # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21
- # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
- #++
23
-
24
- require 'digest/sha1'
25
- require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
26
- require 'tmpdir'
27
-
28
- module RightScraper
29
-
30
- # Base class for all scrapers spec helpers
31
- # Define helper methods used to manage repositories using each
32
- # source control software
33
- class RetrieverSpecHelper
34
-
35
- include SpecHelpers
36
-
37
- def initialize
38
- @tmpdir = Dir.mktmpdir
39
- FileUtils.mkdir(repo_path)
40
- @repo_content = [ { 'folder1' => [ 'file2', 'file3' ] },
41
- { 'folder2' => [ { 'folder3' => [ 'file4' ] } ] },
42
- 'file1' ]
43
- end
44
-
45
- def close
46
- FileUtils.remove_entry_secure @tmpdir
47
- end
48
-
49
- # Path to test repository
50
- #
51
- # === Return
52
- # repo_path(String):: Path to test repository
53
- def repo_path
54
- File.join(@tmpdir, "repository")
55
- end
56
-
57
- # Default test repo content
58
- #
59
- # === Return
60
- # content(String):: Default test repo content
61
- attr_reader :repo_content
62
-
63
- def manifest
64
- hash = {}
65
- scan(@repo_content, hash, nil)
66
- hash['metadata.json'] = Digest::MD5.hexdigest(@repo_content.to_json + "\n")
67
- hash
68
- end
69
-
70
- def scan(contents, hash, position)
71
- contents.each do |object|
72
- if object.instance_of?(Hash)
73
- object.each do |key, value|
74
- relative_position = position ? File.join(position, key) : key
75
- scan(value, hash, relative_position)
76
- end
77
- else
78
- relative_position = position ? File.join(position, object) : object
79
- hash[relative_position] = Digest::MD5.hexdigest(object + "\n")
80
- end
81
- end
82
- end
83
- private :scan
84
-
85
- # Test branch content
86
- #
87
- # === Return
88
- # content(String):: Branch content
89
- def branch_content
90
- content = [ { 'branch_folder' => [ 'bfile1', 'bfile2' ] }, 'bfile3' ]
91
- end
92
-
93
- # Additional content used to test incremental updates
94
- #
95
- # === Return
96
- # content(String):: Additional content
97
- def additional_content
98
- content = [ { 'additional_folder' => [ 'afile1', 'afile2' ] }, 'afile3' ]
99
- end
100
-
101
- # Commit any non-commited changes of given directory
102
- #
103
- # === Parameters
104
- # repo_path(String):: Path to directory where commit should be created
105
- # commit_message(String):: Optional, commit message
106
- #
107
- # === Raise
108
- # Exception:: If commit command fails
109
- def commit_content(repo_path, commit_message='Initial commit')
110
- raise 'Not implemented'
111
- end
112
-
113
- # Create a branch in given repository
114
- # Optionally adds a new commit with given file layout
115
- # Switch to branch so that next call to 'create_file_layout' will act
116
- # on given branch
117
- #
118
- # === Parameters
119
- # branch(String):: Name of branch that should be created
120
- # new_content(Hash):: Layout of files to be added to branch as a single commit
121
- #
122
- # === Return
123
- # true:: Always return true
124
- #
125
- # === Raise
126
- # Exception:: If branch command fails
127
- def setup_branch(branch, new_content=nil)
128
- raise 'Not implemented'
129
- end
130
-
131
- # Commit id for commit in test repo
132
- # i.e. git sha or svn rev
133
- #
134
- # === Parameters
135
- # index_from_last(Integer):: Commit whose id should be returned:
136
- # - 0 means last commit
137
- # - 1 means 1 before last
138
- # - etc.
139
- #
140
- # === Return
141
- # commit_id(String):: Corresponding commit id
142
- def commit_id(index_from_last=0)
143
- raise 'Not implemented'
144
- end
145
- end
146
- end
data/spec/scanner_spec.rb DELETED
@@ -1,61 +0,0 @@
1
- #--
2
- # Copyright: Copyright (c) 2010-2011 RightScale, Inc.
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining
5
- # a copy of this software and associated documentation files (the
6
- # 'Software'), to deal in the Software without restriction, including
7
- # without limitation the rights to use, copy, modify, merge, publish,
8
- # distribute, sublicense, and/or sell copies of the Software, and to
9
- # permit persons to whom the Software is furnished to do so, subject to
10
- # the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be
13
- # included in all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
16
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
- # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
- # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20
- # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21
- # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
- #++
23
-
24
- require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
25
- require File.expand_path(File.join(File.dirname(__FILE__), 'download', 'download_retriever_spec_helper'))
26
-
27
- describe RightScraper::Scanners::Base do
28
- include RightScraper::SpecHelpers::DevelopmentModeEnvironment
29
-
30
- before(:each) do
31
- @helper = RightScraper::DownloadRetrieverSpecHelper.new
32
- @repo = @helper.repo
33
- end
34
-
35
- after(:each) do
36
- @helper.close
37
- end
38
-
39
- it 'should be called correctly' do
40
- scanner = flexmock("scanner")
41
- scanner.should_receive(:new).with(Hash).once.and_return(scanner)
42
- scanner.should_receive(:begin).with(RightScraper::Resources::Cookbook).once
43
- scanner.should_receive(:notice_dir).with(nil).once.and_return(true)
44
- scanner.should_receive(:notice).with("file1", Proc).once
45
- scanner.should_receive(:notice_dir).with("folder1").once.and_return(true)
46
- scanner.should_receive(:notice).with("folder1/file2", Proc).once
47
- scanner.should_receive(:notice).with("folder1/file3", Proc).once
48
- scanner.should_receive(:notice_dir).with("folder2").once.and_return(false)
49
- scanner.should_receive(:notice).with("metadata.json", Proc).once
50
- scanner.should_receive(:end).with(RightScraper::Resources::Cookbook).once
51
- scanner.should_receive(:finish).with().once
52
-
53
- @scraper = RightScraper::Scrapers::Base.scraper(:repo_dir => @helper.download_repo_path,
54
- :kind => :cookbook,
55
- :scanners => [scanner],
56
- :repository => @repo)
57
- @scraper.next_resource.should_not be_nil
58
- @scraper.next_resource.should be_nil
59
- @scraper.close
60
- end
61
- end