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.
- checksums.yaml +15 -0
- data/.gitignore +23 -0
- data/.travis.yml +4 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +22 -0
- data/README.md +194 -0
- data/Rakefile +41 -0
- data/dropdown.gemspec +37 -0
- data/lib/dropdown.rb +23 -0
- data/lib/dropdown/blog.rb +23 -0
- data/lib/dropdown/configuration.rb +12 -0
- data/lib/dropdown/constants.rb +4 -0
- data/lib/dropdown/dropbox.rb +1 -0
- data/lib/dropdown/dropbox/session.rb +18 -0
- data/lib/dropdown/errors.rb +4 -0
- data/lib/dropdown/inflector.rb +11 -0
- data/lib/dropdown/iterators.rb +3 -0
- data/lib/dropdown/iterators/dropbox_iterator.rb +31 -0
- data/lib/dropdown/iterators/file_iterator.rb +18 -0
- data/lib/dropdown/iterators/iterator_factory.rb +12 -0
- data/lib/dropdown/markdown_renderer.rb +21 -0
- data/lib/dropdown/output_stores.rb +3 -0
- data/lib/dropdown/output_stores/dropbox_store.rb +24 -0
- data/lib/dropdown/output_stores/file_store.rb +23 -0
- data/lib/dropdown/output_stores/output_store_factory.rb +12 -0
- data/lib/dropdown/parsers/excerpt_extractor.rb +38 -0
- data/lib/dropdown/parsers/metadata_parser.rb +30 -0
- data/lib/dropdown/parsers/parser.rb +12 -0
- data/lib/dropdown/post.rb +48 -0
- data/lib/dropdown/processor.rb +39 -0
- data/lib/dropdown/readers.rb +3 -0
- data/lib/dropdown/readers/dropbox_reader.rb +32 -0
- data/lib/dropdown/readers/file_reader.rb +13 -0
- data/lib/dropdown/readers/reader_factory.rb +12 -0
- data/lib/dropdown/renderer_factory.rb +10 -0
- data/lib/dropdown/version.rb +3 -0
- data/spec/dropdown/blog_spec.rb +62 -0
- data/spec/dropdown/configuration_spec.rb +12 -0
- data/spec/dropdown/dropbox/session_spec.rb +26 -0
- data/spec/dropdown/inflector_spec.rb +18 -0
- data/spec/dropdown/iterators/dropbox_iterator_spec.rb +53 -0
- data/spec/dropdown/iterators/file_iterator_spec.rb +43 -0
- data/spec/dropdown/iterators/iterator_factory_spec.rb +10 -0
- data/spec/dropdown/markdown_renderer_spec.rb +31 -0
- data/spec/dropdown/output_stores/dropbox_store_spec.rb +46 -0
- data/spec/dropdown/output_stores/file_store_spec.rb +31 -0
- data/spec/dropdown/output_stores/output_store_factory_spec.rb +9 -0
- data/spec/dropdown/parsers/excerpt_extractor_spec.rb +54 -0
- data/spec/dropdown/parsers/metadata_parser_spec.rb +35 -0
- data/spec/dropdown/parsers/parser_spec.rb +26 -0
- data/spec/dropdown/post_spec.rb +66 -0
- data/spec/dropdown/processor_spec.rb +80 -0
- data/spec/dropdown/readers/dropbox_reader_spec.rb +43 -0
- data/spec/dropdown/readers/file_reader_spec.rb +30 -0
- data/spec/dropdown/readers/reader_factory_spec.rb +9 -0
- data/spec/dropdown/renderer_factory_spec.rb +18 -0
- data/spec/dropdown_spec.rb +13 -0
- data/spec/features/processing_a_markdown_directory_spec.rb +60 -0
- data/spec/fixtures/blog/my-trip-to-africa.md +10 -0
- data/spec/fixtures/processed/my-trip-to-africa.html +16 -0
- data/spec/fixtures/sample_post.md +8 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/support/dummy_dropbox.rb +63 -0
- 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,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.
|
data/spec/spec_helper.rb
ADDED
@@ -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
|