auto_pilot 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/test/helper.rb ADDED
@@ -0,0 +1,62 @@
1
+ ENV['RACK_ENV'] = 'test'
2
+
3
+ require 'pry'
4
+
5
+ require 'simplecov'
6
+ SimpleCov.start
7
+
8
+ require 'rubygems'
9
+ require 'minitest/autorun'
10
+
11
+ require_relative '../lib/auto_pilot'
12
+
13
+ # require 'codeclimate-test-reporter'
14
+ # CodeClimate::TestReporter.start
15
+
16
+ # NOTE: squelch log output for tests unless debug set
17
+ unless ENV['DEBUG']
18
+ module AutoPilot
19
+ class Log
20
+ class << self
21
+ def colorize(*args); end
22
+ def out(*args); end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ # NOTE: set fixed date for file writes
28
+ module AutoPilot
29
+ module TemplateHelper
30
+ def file_name(post_title)
31
+ prefix = '2015-03-11'
32
+ suffix = post_title.gsub(' ', '-').downcase.strip
33
+ "#{prefix}-#{suffix}"
34
+ end
35
+ end
36
+ end
37
+
38
+ # NOTE: stub out answer collection for api tests
39
+ module AutoPilot
40
+ class API
41
+ def answer_double
42
+ OpenStruct.new({
43
+ score: 1,
44
+ answer_id: 123,
45
+ question_id: 123
46
+ })
47
+ end
48
+
49
+ def answer_response(*args)
50
+ # [{:answer_id=>123, :question_id=>123}]
51
+ OpenStruct.new( {
52
+ data: [ OpenStruct.new({
53
+ answers: [answer_double]
54
+ })]
55
+ })
56
+ end
57
+ end
58
+ end
59
+
60
+ require_relative 'support/common'
61
+
62
+ MiniTest.autorun
@@ -0,0 +1,29 @@
1
+ def configure
2
+ AutoPilot.configure do |config|
3
+ config.user = 'foo'
4
+ config.format = [:md, :html]
5
+ config.folder = 'test/stackoverflow'
6
+ config.disable_front_matter = false
7
+ config.max_pages = 3
8
+ config.key = nil
9
+ config.throttle = 3
10
+ end
11
+ end
12
+
13
+ def load_fixture_and_parse
14
+ `rm -rf test/stackoverflow`
15
+ question_id = 28_956_301
16
+ answer_id = 28_956_353
17
+ doc = load_html_fixture
18
+ parsed_doc = AutoPilot::DocumentParser.new(doc, question_id, answer_id)
19
+ [parsed_doc]
20
+ end
21
+
22
+
23
+ def load_html_fixture
24
+ @fixture ||= File.read(File.open("#{Dir.pwd}/test/fixtures/so_page.html", 'r'))
25
+ end
26
+
27
+ # def load_api_user
28
+ # @fixture ||= File.read(File.open("#{Dir.pwd}/test/fixtures/so_api_user.json", 'r'))
29
+ # end
data/test/test_api.rb ADDED
@@ -0,0 +1,31 @@
1
+ require_relative 'helper'
2
+ require 'webmock/minitest'
3
+ class TestAPI < MiniTest::Test
4
+ describe 'api' do
5
+ def setup
6
+ configure
7
+ AutoPilot.configuration.key = 'some_key'
8
+ @subject = AutoPilot::API.new
9
+ stub_request(:get, /api.stackexchange.com/i).to_return(:status => 200, :body => {}.to_s, :headers => {})
10
+ end
11
+
12
+ it '#user' do
13
+ assert_equal @subject.user, 'foo'
14
+ end
15
+ it '#options' do
16
+ assert_equal @subject.options, {}
17
+ end
18
+ it '#answers' do
19
+ assert_equal @subject.answers, []
20
+ end
21
+ it '#throttle' do
22
+ assert_equal @subject.throttle, nil
23
+ end
24
+ it '#pages' do
25
+ assert_equal @subject.pages, [1,2,3]
26
+ end
27
+ it '#get_answers' do
28
+ assert_equal @subject.get_answers, [{:answer_id=>123, :question_id=>123}]
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,39 @@
1
+ require_relative 'helper'
2
+ require 'webmock/minitest'
3
+ class TestAutoPilot < MiniTest::Test
4
+ def setup; configure; end
5
+
6
+ describe '.page_with_my_answer' do
7
+ it 'returns url' do
8
+ url = ::AutoPilot.page_with_my_answer(123)
9
+ assert_equal url, 'http://stackoverflow.com/questions/123/'
10
+ end
11
+ end
12
+
13
+ describe '.write_files' do
14
+ it 'creates html + md files' do
15
+ configure
16
+ parsed_docs = load_fixture_and_parse
17
+ ::AutoPilot.write_files(parsed_docs)
18
+ assert(File.exist? './test/stackoverflow/2015-03-11-refactoring-an-each-loop.md')
19
+ assert(File.exist? './test/stackoverflow/2015-03-11-refactoring-an-each-loop.html')
20
+ end
21
+ end
22
+
23
+ describe '.get_api_answers' do
24
+ class AutoPilot::API
25
+ def get_answers; [{ answer_id: 123, question_id: 123 }]; end
26
+ end
27
+ before do
28
+ configure
29
+ stub_request(:any, /api.stackexchange.com/i).to_return(status: 200, body: {}.to_s, headers: {})
30
+ stub_request(:any, 'http://stackoverflow.com/questions/123/').to_return(status: 200, body: '', headers: {})
31
+ end
32
+ it 'returns parsed documents' do
33
+ expected = ::AutoPilot.get_api_answers
34
+ assert_kind_of(Array, expected)
35
+ assert_equal(expected[0].answer_id, 123)
36
+ assert_equal(expected[0].question_id, 123)
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,26 @@
1
+ require_relative 'helper'
2
+
3
+ class TestConfigure < MiniTest::Test
4
+ def setup
5
+ configure
6
+ @subject = AutoPilot
7
+ end
8
+
9
+ def test_configuration
10
+ @subject.configure do |config|
11
+ config.foo = 'bar'
12
+ end
13
+ assert_equal @subject.configuration.foo, 'bar'
14
+
15
+ assert_equal @subject.configuration.user, 'foo'
16
+ assert_equal @subject.configuration.format, [:md, :html]
17
+ assert_equal @subject.configuration.folder, 'test/stackoverflow'
18
+ assert_equal @subject.configuration.disable_front_matter, false
19
+ assert_equal @subject.configuration.max_pages, 3
20
+ assert_equal @subject.configuration.key, nil
21
+ assert_equal @subject.configuration.throttle, 3
22
+ # assert_equal @subject.keys, []
23
+ # assert_equal @subject.to_hash, []
24
+ # assert_equal @subject.update({ foo: 'baz'}), []
25
+ end
26
+ end
@@ -0,0 +1,34 @@
1
+ require_relative 'helper'
2
+ require 'webmock/minitest'
3
+ class TestRequest < MiniTest::Test
4
+ describe '.fetch' do
5
+ describe 'success' do
6
+ before do
7
+ configure
8
+ stub_request(:get, 'http://www.example.com/')
9
+ .to_return(status: 200, body: load_html_fixture, headers: {})
10
+ @subject = AutoPilot::Request
11
+ end
12
+
13
+ def test_fetch
14
+ response = @subject.fetch('http://www.example.com')
15
+ refute_empty response
16
+ assert_equal HTTParty::Response, response.class
17
+ end
18
+ end
19
+ describe 'invalid' do
20
+ before do
21
+ configure
22
+ stub_request(:get, 'http://www.example.com/')
23
+ .to_return(status: 404, body: load_html_fixture, headers: {})
24
+ @subject = AutoPilot::Request
25
+ end
26
+
27
+ def test_fetch
28
+ response = @subject.fetch('http://www.example.com')
29
+ refute_empty response
30
+ assert_equal HTTParty::Response, response.class
31
+ end
32
+ end
33
+ end
34
+ end
metadata ADDED
@@ -0,0 +1,195 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: auto_pilot
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Luke Fender
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.6.3.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.6.3.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: httparty
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.11.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.11.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: reverse_markdown
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.7.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.7.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: ruby-stackoverflow
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.0.3
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.0.3
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.7'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.7'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 10.3.2
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 10.3.2
97
+ - !ruby/object:Gem::Dependency
98
+ name: minitest
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 5.4.1
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 5.4.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: webmock
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 1.18.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 1.18.0
125
+ description: convert your stackoverflow to a github blog
126
+ email:
127
+ - lfender6445@gmail.com
128
+ executables:
129
+ - autopilot
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - ".gitignore"
134
+ - ".travis.yml"
135
+ - Gemfile
136
+ - Gemfile.lock
137
+ - LICENSE.txt
138
+ - README.md
139
+ - Rakefile
140
+ - auto_pilot.gemspec
141
+ - bin/autopilot
142
+ - lib/auto_pilot.rb
143
+ - lib/auto_pilot/api.rb
144
+ - lib/auto_pilot/configure.rb
145
+ - lib/auto_pilot/document_parser.rb
146
+ - lib/auto_pilot/html_converter.rb
147
+ - lib/auto_pilot/markdown_converter.rb
148
+ - lib/auto_pilot/request.rb
149
+ - lib/auto_pilot/template_helper.rb
150
+ - lib/auto_pilot/templates/auto_pilot_config.rb
151
+ - lib/auto_pilot/url_formatter.rb
152
+ - lib/auto_pilot/util/log.rb
153
+ - lib/auto_pilot/util/version.rb
154
+ - lib/core/string.rb
155
+ - test/fixtures/so_api_user.json
156
+ - test/fixtures/so_page.html
157
+ - test/helper.rb
158
+ - test/support/common.rb
159
+ - test/test_api.rb
160
+ - test/test_autopilot.rb
161
+ - test/test_configure.rb
162
+ - test/test_request.rb
163
+ homepage: ''
164
+ licenses:
165
+ - MIT
166
+ metadata: {}
167
+ post_install_message:
168
+ rdoc_options: []
169
+ require_paths:
170
+ - lib
171
+ required_ruby_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ required_rubygems_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ requirements: []
182
+ rubyforge_project:
183
+ rubygems_version: 2.4.5
184
+ signing_key:
185
+ specification_version: 4
186
+ summary: convert your stackoverflow to a github blog
187
+ test_files:
188
+ - test/fixtures/so_api_user.json
189
+ - test/fixtures/so_page.html
190
+ - test/helper.rb
191
+ - test/support/common.rb
192
+ - test/test_api.rb
193
+ - test/test_autopilot.rb
194
+ - test/test_configure.rb
195
+ - test/test_request.rb