dropdown 0.8.1

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.
Files changed (64) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +23 -0
  3. data/.travis.yml +4 -0
  4. data/Gemfile +3 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +194 -0
  7. data/Rakefile +41 -0
  8. data/dropdown.gemspec +37 -0
  9. data/lib/dropdown.rb +23 -0
  10. data/lib/dropdown/blog.rb +23 -0
  11. data/lib/dropdown/configuration.rb +12 -0
  12. data/lib/dropdown/constants.rb +4 -0
  13. data/lib/dropdown/dropbox.rb +1 -0
  14. data/lib/dropdown/dropbox/session.rb +18 -0
  15. data/lib/dropdown/errors.rb +4 -0
  16. data/lib/dropdown/inflector.rb +11 -0
  17. data/lib/dropdown/iterators.rb +3 -0
  18. data/lib/dropdown/iterators/dropbox_iterator.rb +31 -0
  19. data/lib/dropdown/iterators/file_iterator.rb +18 -0
  20. data/lib/dropdown/iterators/iterator_factory.rb +12 -0
  21. data/lib/dropdown/markdown_renderer.rb +21 -0
  22. data/lib/dropdown/output_stores.rb +3 -0
  23. data/lib/dropdown/output_stores/dropbox_store.rb +24 -0
  24. data/lib/dropdown/output_stores/file_store.rb +23 -0
  25. data/lib/dropdown/output_stores/output_store_factory.rb +12 -0
  26. data/lib/dropdown/parsers/excerpt_extractor.rb +38 -0
  27. data/lib/dropdown/parsers/metadata_parser.rb +30 -0
  28. data/lib/dropdown/parsers/parser.rb +12 -0
  29. data/lib/dropdown/post.rb +48 -0
  30. data/lib/dropdown/processor.rb +39 -0
  31. data/lib/dropdown/readers.rb +3 -0
  32. data/lib/dropdown/readers/dropbox_reader.rb +32 -0
  33. data/lib/dropdown/readers/file_reader.rb +13 -0
  34. data/lib/dropdown/readers/reader_factory.rb +12 -0
  35. data/lib/dropdown/renderer_factory.rb +10 -0
  36. data/lib/dropdown/version.rb +3 -0
  37. data/spec/dropdown/blog_spec.rb +62 -0
  38. data/spec/dropdown/configuration_spec.rb +12 -0
  39. data/spec/dropdown/dropbox/session_spec.rb +26 -0
  40. data/spec/dropdown/inflector_spec.rb +18 -0
  41. data/spec/dropdown/iterators/dropbox_iterator_spec.rb +53 -0
  42. data/spec/dropdown/iterators/file_iterator_spec.rb +43 -0
  43. data/spec/dropdown/iterators/iterator_factory_spec.rb +10 -0
  44. data/spec/dropdown/markdown_renderer_spec.rb +31 -0
  45. data/spec/dropdown/output_stores/dropbox_store_spec.rb +46 -0
  46. data/spec/dropdown/output_stores/file_store_spec.rb +31 -0
  47. data/spec/dropdown/output_stores/output_store_factory_spec.rb +9 -0
  48. data/spec/dropdown/parsers/excerpt_extractor_spec.rb +54 -0
  49. data/spec/dropdown/parsers/metadata_parser_spec.rb +35 -0
  50. data/spec/dropdown/parsers/parser_spec.rb +26 -0
  51. data/spec/dropdown/post_spec.rb +66 -0
  52. data/spec/dropdown/processor_spec.rb +80 -0
  53. data/spec/dropdown/readers/dropbox_reader_spec.rb +43 -0
  54. data/spec/dropdown/readers/file_reader_spec.rb +30 -0
  55. data/spec/dropdown/readers/reader_factory_spec.rb +9 -0
  56. data/spec/dropdown/renderer_factory_spec.rb +18 -0
  57. data/spec/dropdown_spec.rb +13 -0
  58. data/spec/features/processing_a_markdown_directory_spec.rb +60 -0
  59. data/spec/fixtures/blog/my-trip-to-africa.md +10 -0
  60. data/spec/fixtures/processed/my-trip-to-africa.html +16 -0
  61. data/spec/fixtures/sample_post.md +8 -0
  62. data/spec/spec_helper.rb +3 -0
  63. data/spec/support/dummy_dropbox.rb +63 -0
  64. metadata +278 -0
@@ -0,0 +1,80 @@
1
+ require_relative '../spec_helper'
2
+ require_relative '../../lib/dropdown'
3
+
4
+ describe Dropdown::Processor do
5
+ describe '#process' do
6
+ let(:iterator) { double }
7
+ subject { Dropdown::Processor.new }
8
+
9
+ it 'loops through each file in a source directory' do
10
+ subject.markdown_iterator = iterator
11
+
12
+ iterator.should_receive(:each).once
13
+
14
+ subject.process
15
+ end
16
+
17
+ describe '#storage' do
18
+ before do
19
+ subject.source = 'blah'
20
+ subject.storage = :dropbox
21
+ end
22
+
23
+ it 'creates the appropriate instance of the reader' do
24
+ subject.reader.should be_a Dropdown::Readers::DropboxReader
25
+ end
26
+
27
+ it 'creates the appropriate instance of the iterator' do
28
+ subject.markdown_iterator.should be_a Dropdown::Iterators::DropboxIterator
29
+ end
30
+
31
+ it 'creates the appropriate instance of the output store' do
32
+ subject.output_store.should be_a Dropdown::OutputStores::DropboxStore
33
+ end
34
+ end
35
+
36
+ context 'with some files' do
37
+ class FakeRenderer
38
+ attr_accessor :reader
39
+ def initialize(file_path); end
40
+ end
41
+
42
+ let(:files) { [double, double] }
43
+ let(:store) { double }
44
+
45
+ before do
46
+ iterator.should_receive(:each).and_yield(files[0]).and_yield(files[1])
47
+ subject.markdown_iterator = iterator
48
+ subject.renderer = :fake_renderer
49
+ FakeRenderer.any_instance.stub(:output_filename)
50
+ end
51
+
52
+ it 'loops through each file and renders HTML' do
53
+ store.as_null_object
54
+ subject.output_store = store
55
+
56
+ render_count = 0
57
+ FakeRenderer.any_instance.stub(:render) { render_count += 1 }
58
+ subject.process
59
+ render_count.should == 2
60
+ end
61
+
62
+ it 'stores the rendered file' do
63
+ FakeRenderer.any_instance.stub(:render)
64
+ subject.output_store = store
65
+
66
+ store.should_receive(:save).exactly(files.count).times
67
+ subject.process
68
+ end
69
+ end
70
+ end
71
+
72
+ describe 'defaults' do
73
+ let(:configuration) { Dropdown::Configuration.new }
74
+ subject { Dropdown::Processor.new }
75
+
76
+ it 'should initialize with the configuration defaults' do
77
+ subject.renderer.should == configuration.renderer
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,43 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative '../../support/dummy_dropbox'
3
+ require_relative '../../../lib/dropdown'
4
+ require_relative '../../../lib/dropdown/readers/dropbox_reader'
5
+
6
+ describe Dropdown::Readers::DropboxReader do
7
+ include DummyDropbox
8
+
9
+ let(:access_token) { 'blah' }
10
+ let(:path) { 'blog/stuff.md' }
11
+ let(:contents) { "This is *great*, yo" }
12
+ subject { Dropdown::Readers::DropboxReader.new }
13
+
14
+ before do
15
+ Dropdown.configure { |c| c.dropbox_access_token = access_token }
16
+ stub_dropbox_put_file access_token, path, contents, true
17
+ end
18
+ after { remove_stubbed_dropbox_files }
19
+
20
+ describe '#read' do
21
+ it 'returns the contents of the file' do
22
+ stub_dropbox_get_file access_token, path
23
+ subject.read(path).should == contents
24
+ end
25
+ end
26
+
27
+ describe '#find_html_files' do
28
+ let(:source_directory) { 'blog' }
29
+ let(:contents) do
30
+ [{id_dir: false, path: "#{source_directory}/file1.html"},
31
+ {id_dir: false, path: "#{source_directory}/file1.txt"},
32
+ {id_dir: false, path: "#{source_directory}/file2.html"}]
33
+ end
34
+
35
+ before do
36
+ stub_dropbox_metadata access_token, source_directory, contents
37
+ end
38
+
39
+ it 'returns all of the html files within a directory' do
40
+ subject.find_html_files(source_directory).length.should == 2
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,30 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative '../../../lib/dropdown/readers/file_reader'
3
+
4
+ describe Dropdown::Readers::FileReader do
5
+ let(:contents) { "This is *great*, yo" }
6
+ subject { Dropdown::Readers::FileReader.new }
7
+
8
+ before do
9
+ @file = Tempfile.new(['markdown', '.md'])
10
+ @file.write contents
11
+ @file.close
12
+ end
13
+ after { @file.unlink }
14
+
15
+ describe '#read' do
16
+ it 'returns the contents of the file' do
17
+ subject.read(@file.path).should == contents
18
+ end
19
+ end
20
+
21
+ describe '#find_html_files' do
22
+ let(:current_directory) { File.expand_path File.dirname(__FILE__) }
23
+ let(:source_directory) { File.join current_directory, '../fixtures/processed' }
24
+
25
+ it 'returns all of the html files within a directory' do
26
+ html_files = Dir[File.join(source_directory, '**', '*')]
27
+ subject.find_html_files(source_directory).length.should == html_files.length
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,9 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative '../../../lib/dropdown/readers'
3
+
4
+ describe Dropdown::Readers::ReaderFactory do
5
+ it 'creates a reader with a type' do
6
+ reader = Dropdown::Readers::ReaderFactory.create :dropbox
7
+ reader.should be_a Dropdown::Readers::DropboxReader
8
+ end
9
+ end
@@ -0,0 +1,18 @@
1
+ require_relative '../spec_helper'
2
+ require_relative '../../lib/dropdown/renderer_factory'
3
+
4
+ describe Dropdown::RendererFactory do
5
+ class FakeRenderer
6
+ attr_reader :file
7
+ def initialize(file)
8
+ @file = file
9
+ end
10
+ end
11
+
12
+ it 'creates a renderer with a type and a file' do
13
+ file = double
14
+ renderer = Dropdown::RendererFactory.create :fake_renderer, file
15
+ renderer.should be_an_instance_of FakeRenderer
16
+ renderer.file.should == file
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ require_relative 'spec_helper'
2
+ require_relative '../lib/dropdown'
3
+
4
+ describe Dropdown do
5
+ describe '.configure' do
6
+ it 'sets values' do
7
+ Dropdown.configure do |c|
8
+ c.renderer = :blah
9
+ end
10
+ Dropdown.configuration.renderer.should == :blah
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,60 @@
1
+ require_relative '../spec_helper'
2
+ require_relative '../support/dummy_dropbox'
3
+ require_relative '../../lib/dropdown'
4
+
5
+ describe 'Processing a directory of markdown files' do
6
+ subject { Dropdown::Processor.new }
7
+
8
+ context 'in a local directory' do
9
+
10
+ let(:current_directory) { File.expand_path File.dirname(__FILE__) }
11
+ let(:blog_directory) { File.join current_directory, '../fixtures/blog' }
12
+ let(:html_directory) { File.join(blog_directory, 'html') }
13
+
14
+ after { FileUtils.rm_rf("#{html_directory}") }
15
+
16
+ it 'generates the html files for the markdown files' do
17
+ subject.source = blog_directory
18
+ subject.output_store = Dropdown::OutputStores::FileStore.new(html_directory)
19
+ subject.reader = Dropdown::Readers::FileReader.new
20
+ subject.markdown_iterator = Dropdown::Iterators::FileIterator.new(blog_directory)
21
+ subject.renderer = :markdown_renderer
22
+ subject.process
23
+
24
+ html_files = Dir[File.join(html_directory, '**', '*')]
25
+ html_files.length.should be > 0
26
+ end
27
+
28
+ end
29
+
30
+ context 'for a Dropbox directory' do
31
+ include DummyDropbox
32
+
33
+ let(:access_token) { 'blah' }
34
+ let(:blog_directory) { 'blog' }
35
+ let(:html_directory) { 'blog/processed' }
36
+
37
+ before { Dropdown.configure { |c| c.dropbox_access_token = access_token } }
38
+ after { remove_stubbed_dropbox_files }
39
+
40
+ it 'generates the html files for the markdown files' do
41
+ markdown_file = "#{blog_directory}/my-trip-to-africa.md"
42
+ html_file = "#{html_directory}/my-trip-to-africa.html"
43
+ contents = "THIS HAS BEEN PROCESSED"
44
+ stub_dropbox_metadata access_token, blog_directory, [{is_dir: false, path: markdown_file}]
45
+
46
+ stub_dropbox_put_file access_token, html_file, contents, true
47
+ stub_dropbox_get_file access_token, markdown_file
48
+
49
+ subject.source = blog_directory
50
+ subject.output_store = Dropdown::OutputStores::DropboxStore.new(html_directory)
51
+ subject.markdown_iterator = Dropdown::Iterators::DropboxIterator.new(blog_directory)
52
+ subject.reader = Dropdown::Readers::DropboxReader.new
53
+ subject.renderer = :markdown_renderer
54
+ subject.process
55
+
56
+ output_file = stubbed_dropbox_pathname(html_file)
57
+ File.exists?(output_file).should be_true
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,10 @@
1
+ I had so much fun on my trip to **Africa**.
2
+
3
+ Here is just a list of things that I have accomplished:
4
+
5
+ * Rode on an elephant
6
+ * Touched s snake
7
+ * Did some shopping
8
+ * Ate some great food
9
+
10
+ It was a really good time.
@@ -0,0 +1,16 @@
1
+ <!-- Title: My trip to Africa -->
2
+ <!-- Author: Jane Goodall -->
3
+ <!-- Date: 4/4/1989 -->
4
+
5
+ <p>I had so much fun on my trip to <strong>Africa</strong>.</p>
6
+
7
+ <p>Here is just a list of things that I have accomplished:</p>
8
+
9
+ <ul>
10
+ <li>Rode on an elephant</li>
11
+ <li>Touched a snake</li>
12
+ <li>Did some shopping</li>
13
+ <li>Ate some great food</li>
14
+ </ul>
15
+
16
+ <p>It was a really good time.</p>
@@ -0,0 +1,8 @@
1
+ Title: Deep Throat Exposed!
2
+ Author: Bob Woodward
3
+ Date: 4/4/1974
4
+
5
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut volutpat molestie
6
+ condimentum. Vestibulum malesuada, lorem sit amet euismod pellentesque, tellus
7
+ felis varius enim, id tincidunt leo odio aliquet ante. Maecenas metus lorem,
8
+ pretium vitae auctor sed, blandit id quam.
@@ -0,0 +1,3 @@
1
+ require 'coveralls'
2
+
3
+ Coveralls.wear!
@@ -0,0 +1,63 @@
1
+ require 'fakeweb'
2
+
3
+ module DummyDropbox
4
+ class << self
5
+ attr_accessor :dropbox_base_path
6
+ end
7
+
8
+ def self.included(base)
9
+ FakeWeb.allow_net_connect = false
10
+ @dropbox_base_path = File.join Dir.tmpdir, 'dropbox'
11
+ end
12
+
13
+ def stub_dropbox_token(key, secret, access_token, uid="12345")
14
+ body = { access_token: access_token, token_type: "bearer", uid: uid }
15
+
16
+ FakeWeb.register_uri(:post, "https://#{key}:#{secret}@api.dropbox.com/1/oauth2/token",
17
+ :status => 200,
18
+ :body => body.to_json)
19
+ end
20
+
21
+ def stub_dropbox_metadata(access_token, directory, contents)
22
+ body = { contents: contents }
23
+
24
+ FakeWeb.register_uri(:get, "https://api.dropbox.com/1/metadata/auto/#{directory}?file_limit=25000&include_deleted=false&list=true",
25
+ :authorization => "Bearer #{access_token}",
26
+ :status => 200,
27
+ :body => body.to_json)
28
+ end
29
+
30
+ def stub_dropbox_get_file(access_token, path)
31
+ contents = File.read(stubbed_dropbox_path(path)) if File.exist?(stubbed_dropbox_path(path))
32
+ FakeWeb.register_uri(:get, "https://api-content.dropbox.com/1/files/auto/#{path}?",
33
+ :body => contents)
34
+ end
35
+
36
+ def stub_dropbox_put_file(access_token, path, contents, overwrite=false)
37
+ body = {
38
+ size: "#{contents.length / 100}KB",
39
+ bytes: contents.length,
40
+ is_dir: false,
41
+ path: path
42
+ }
43
+
44
+ FakeWeb.register_uri(:put, "https://api-content.dropbox.com/1/files_put/auto/#{path}?overwrite=#{overwrite}",
45
+ :status => 200,
46
+ :content_type => "application/octet-stream",
47
+ :body => body.to_json)
48
+ FileUtils.mkdir_p(stubbed_dropbox_pathname(path).dirname)
49
+ File.open(stubbed_dropbox_path(path), 'w+') { |f| f.write contents }
50
+ end
51
+
52
+ def stubbed_dropbox_pathname(path)
53
+ Pathname.new stubbed_dropbox_path(path)
54
+ end
55
+
56
+ def stubbed_dropbox_path(path)
57
+ File.join DummyDropbox.dropbox_base_path, path
58
+ end
59
+
60
+ def remove_stubbed_dropbox_files
61
+ FileUtils.rm_rf DummyDropbox.dropbox_base_path
62
+ end
63
+ end
metadata ADDED
@@ -0,0 +1,278 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dropdown
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.1
5
+ platform: ruby
6
+ authors:
7
+ - Jamie Wright
8
+ - Keith Thompson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-09-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: '1.3'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: '1.3'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: dotenv
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: launchy
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: redcarpet
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: nokogiri
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ! '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: dropbox-sdk
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ! '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: coveralls
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rspec
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ! '>='
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ! '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: fakeweb
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ! '>='
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ description: ! "\n A simple blog engine that reads blog posts
155
+ from a Dropbox source.\n Rake tasks will convert any blog
156
+ post from Markdown to HTML and \n store them back into Dropbox
157
+ for the Blog objects to read.\n "
158
+ email:
159
+ - jamie@brilliantfantastic.com
160
+ - keith@brilliantfantastic.com
161
+ executables: []
162
+ extensions: []
163
+ extra_rdoc_files: []
164
+ files:
165
+ - .gitignore
166
+ - .travis.yml
167
+ - Gemfile
168
+ - LICENSE.txt
169
+ - README.md
170
+ - Rakefile
171
+ - dropdown.gemspec
172
+ - lib/dropdown.rb
173
+ - lib/dropdown/blog.rb
174
+ - lib/dropdown/configuration.rb
175
+ - lib/dropdown/constants.rb
176
+ - lib/dropdown/dropbox.rb
177
+ - lib/dropdown/dropbox/session.rb
178
+ - lib/dropdown/errors.rb
179
+ - lib/dropdown/inflector.rb
180
+ - lib/dropdown/iterators.rb
181
+ - lib/dropdown/iterators/dropbox_iterator.rb
182
+ - lib/dropdown/iterators/file_iterator.rb
183
+ - lib/dropdown/iterators/iterator_factory.rb
184
+ - lib/dropdown/markdown_renderer.rb
185
+ - lib/dropdown/output_stores.rb
186
+ - lib/dropdown/output_stores/dropbox_store.rb
187
+ - lib/dropdown/output_stores/file_store.rb
188
+ - lib/dropdown/output_stores/output_store_factory.rb
189
+ - lib/dropdown/parsers/excerpt_extractor.rb
190
+ - lib/dropdown/parsers/metadata_parser.rb
191
+ - lib/dropdown/parsers/parser.rb
192
+ - lib/dropdown/post.rb
193
+ - lib/dropdown/processor.rb
194
+ - lib/dropdown/readers.rb
195
+ - lib/dropdown/readers/dropbox_reader.rb
196
+ - lib/dropdown/readers/file_reader.rb
197
+ - lib/dropdown/readers/reader_factory.rb
198
+ - lib/dropdown/renderer_factory.rb
199
+ - lib/dropdown/version.rb
200
+ - spec/dropdown/blog_spec.rb
201
+ - spec/dropdown/configuration_spec.rb
202
+ - spec/dropdown/dropbox/session_spec.rb
203
+ - spec/dropdown/inflector_spec.rb
204
+ - spec/dropdown/iterators/dropbox_iterator_spec.rb
205
+ - spec/dropdown/iterators/file_iterator_spec.rb
206
+ - spec/dropdown/iterators/iterator_factory_spec.rb
207
+ - spec/dropdown/markdown_renderer_spec.rb
208
+ - spec/dropdown/output_stores/dropbox_store_spec.rb
209
+ - spec/dropdown/output_stores/file_store_spec.rb
210
+ - spec/dropdown/output_stores/output_store_factory_spec.rb
211
+ - spec/dropdown/parsers/excerpt_extractor_spec.rb
212
+ - spec/dropdown/parsers/metadata_parser_spec.rb
213
+ - spec/dropdown/parsers/parser_spec.rb
214
+ - spec/dropdown/post_spec.rb
215
+ - spec/dropdown/processor_spec.rb
216
+ - spec/dropdown/readers/dropbox_reader_spec.rb
217
+ - spec/dropdown/readers/file_reader_spec.rb
218
+ - spec/dropdown/readers/reader_factory_spec.rb
219
+ - spec/dropdown/renderer_factory_spec.rb
220
+ - spec/dropdown_spec.rb
221
+ - spec/features/processing_a_markdown_directory_spec.rb
222
+ - spec/fixtures/blog/my-trip-to-africa.md
223
+ - spec/fixtures/processed/my-trip-to-africa.html
224
+ - spec/fixtures/sample_post.md
225
+ - spec/spec_helper.rb
226
+ - spec/support/dummy_dropbox.rb
227
+ homepage: http://github.com/brilliantfantastic/dropdown
228
+ licenses:
229
+ - MIT
230
+ metadata: {}
231
+ post_install_message:
232
+ rdoc_options: []
233
+ require_paths:
234
+ - lib
235
+ required_ruby_version: !ruby/object:Gem::Requirement
236
+ requirements:
237
+ - - ! '>='
238
+ - !ruby/object:Gem::Version
239
+ version: '0'
240
+ required_rubygems_version: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - ! '>='
243
+ - !ruby/object:Gem::Version
244
+ version: '0'
245
+ requirements: []
246
+ rubyforge_project:
247
+ rubygems_version: 2.1.0
248
+ signing_key:
249
+ specification_version: 4
250
+ summary: Markdown blog engine in Dropbox
251
+ test_files:
252
+ - spec/dropdown/blog_spec.rb
253
+ - spec/dropdown/configuration_spec.rb
254
+ - spec/dropdown/dropbox/session_spec.rb
255
+ - spec/dropdown/inflector_spec.rb
256
+ - spec/dropdown/iterators/dropbox_iterator_spec.rb
257
+ - spec/dropdown/iterators/file_iterator_spec.rb
258
+ - spec/dropdown/iterators/iterator_factory_spec.rb
259
+ - spec/dropdown/markdown_renderer_spec.rb
260
+ - spec/dropdown/output_stores/dropbox_store_spec.rb
261
+ - spec/dropdown/output_stores/file_store_spec.rb
262
+ - spec/dropdown/output_stores/output_store_factory_spec.rb
263
+ - spec/dropdown/parsers/excerpt_extractor_spec.rb
264
+ - spec/dropdown/parsers/metadata_parser_spec.rb
265
+ - spec/dropdown/parsers/parser_spec.rb
266
+ - spec/dropdown/post_spec.rb
267
+ - spec/dropdown/processor_spec.rb
268
+ - spec/dropdown/readers/dropbox_reader_spec.rb
269
+ - spec/dropdown/readers/file_reader_spec.rb
270
+ - spec/dropdown/readers/reader_factory_spec.rb
271
+ - spec/dropdown/renderer_factory_spec.rb
272
+ - spec/dropdown_spec.rb
273
+ - spec/features/processing_a_markdown_directory_spec.rb
274
+ - spec/fixtures/blog/my-trip-to-africa.md
275
+ - spec/fixtures/processed/my-trip-to-africa.html
276
+ - spec/fixtures/sample_post.md
277
+ - spec/spec_helper.rb
278
+ - spec/support/dummy_dropbox.rb