ecrire 0.25.0 → 0.25.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 +4 -4
- data/Gemfile +0 -1
- data/Rakefile +2 -2
- data/lib/ecrire/app/assets/stylesheets/admin/editor/content.css.scss +9 -1
- data/lib/ecrire/app/models/admin/post.rb +1 -3
- data/lib/ecrire/markdown/document.rb +42 -0
- data/lib/ecrire/markdown/node.rb +21 -0
- data/lib/ecrire/markdown/nodes/code_block.rb +30 -0
- data/lib/ecrire/markdown/nodes/heading.rb +15 -0
- data/lib/ecrire/markdown/nodes/image.rb +14 -0
- data/lib/ecrire/markdown/nodes/ordered_list.rb +18 -0
- data/lib/ecrire/markdown/nodes/unordered_list.rb +19 -0
- data/lib/ecrire/markdown/parsers/base.rb +26 -0
- data/lib/ecrire/markdown/parsers/code.rb +41 -0
- data/lib/ecrire/markdown/parsers/heading.rb +19 -0
- data/lib/ecrire/markdown/parsers/image.rb +19 -0
- data/lib/ecrire/markdown/parsers/link.rb +12 -0
- data/lib/ecrire/markdown/parsers/list.rb +33 -0
- data/lib/ecrire/markdown/parsers/word.rb +16 -0
- data/lib/ecrire/markdown/parsers.rb +13 -0
- data/lib/ecrire/markdown.rb +13 -0
- data/lib/ecrire/theme/template/Gemfile +1 -2
- data/lib/ecrire/theme/template/controllers/tags_controller.rb +8 -0
- data/lib/ecrire/theme/template/secrets.yml +11 -0
- data/lib/ecrire/version.rb +1 -1
- data/lib/ecrire.rb +1 -0
- data/test/markdown/markdown_test.rb +70 -0
- data/test/test_task.rb +9 -5
- metadata +22 -4
- data/test/initializations/engine_test.rb +0 -47
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ddb1f62d91da888fa8d3e778817290f95823bf3
|
4
|
+
data.tar.gz: 9864c0c4b7fc697559320e651a61ede2476ffe64
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 81a906e8665478f1503329e9359d6b550a3c2357a0eb68996b4c7dfe83ae3839b5cbf85ce4dc1fd7bfffd350e9c76a6dce4ad12a0a49d16f8e36fd356db54634
|
7
|
+
data.tar.gz: 9cc81279330504df52d6014af8b9da6f336579c8ec600c4359a771f4f2e1da05d165d8d6adbb79844fdc220452e1fff0c77ff6ade26c33e08c0eaf51b45a35dd
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -16,7 +16,7 @@ namespace :database do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
namespace :test do
|
19
|
-
['editor', 'onboarding', 'theme'].each do |name|
|
19
|
+
['markdown', 'editor', 'onboarding', 'theme'].each do |name|
|
20
20
|
task = Ecrire::TestTask.new(name) do |t|
|
21
21
|
t.theme = Dir.pwd + "/test/#{name}/theme"
|
22
22
|
t.libs << "test"
|
@@ -28,7 +28,7 @@ namespace :test do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
task :test do
|
31
|
-
%w(test:editor test:onboarding test:theme).each do |name|
|
31
|
+
%w(test:markdown test:editor test:onboarding test:theme).each do |name|
|
32
32
|
Rake::Task[name].invoke
|
33
33
|
end
|
34
34
|
end
|
@@ -31,13 +31,21 @@ body.edit.posts > main > section {
|
|
31
31
|
font-size: 1.2em;
|
32
32
|
}
|
33
33
|
|
34
|
-
|
34
|
+
|
35
|
+
& > ul > li, & > ol > li, h1, h2, h3, h4, h5, h6 {
|
35
36
|
white-space: pre-wrap;
|
36
37
|
min-height: 1.6em;
|
37
38
|
line-height: 1.6em;
|
38
39
|
margin: 0.3em 0;
|
39
40
|
}
|
40
41
|
|
42
|
+
& > p, & > ol, & > ul, & > figure {
|
43
|
+
white-space: pre-wrap;
|
44
|
+
min-height: 1.6em;
|
45
|
+
line-height: 1.6em;
|
46
|
+
margin: 1.8em 0;
|
47
|
+
}
|
48
|
+
|
41
49
|
& > ul, & > ol {
|
42
50
|
margin-left: 2em;
|
43
51
|
}
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'kramdown'
|
2
|
-
|
3
1
|
module Admin
|
4
2
|
class Post < ::Post
|
5
3
|
|
@@ -36,7 +34,7 @@ module Admin
|
|
36
34
|
private
|
37
35
|
|
38
36
|
def compile!
|
39
|
-
self.compiled_content =
|
37
|
+
self.compiled_content = Ecrire::Markdown.parse(self.content).to_html
|
40
38
|
end
|
41
39
|
|
42
40
|
def excerptize!
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'ecrire/markdown/parsers'
|
2
|
+
require 'ecrire/markdown/node'
|
3
|
+
|
4
|
+
module Ecrire::Markdown
|
5
|
+
class Document
|
6
|
+
|
7
|
+
attr_reader :nodes
|
8
|
+
|
9
|
+
def initialize(content)
|
10
|
+
@nodes = content.lines.map do |text|
|
11
|
+
Node.new(text.chomp)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def parsers
|
16
|
+
[
|
17
|
+
Ecrire::Markdown::Parsers::Code,
|
18
|
+
Ecrire::Markdown::Parsers::Heading,
|
19
|
+
Ecrire::Markdown::Parsers::Image,
|
20
|
+
Ecrire::Markdown::Parsers::List,
|
21
|
+
Ecrire::Markdown::Parsers::Word,
|
22
|
+
Ecrire::Markdown::Parsers::Link
|
23
|
+
]
|
24
|
+
end
|
25
|
+
|
26
|
+
def parse!
|
27
|
+
parsers.each do |parser|
|
28
|
+
parser.parse!(self)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_html
|
33
|
+
@nodes.map do |node|
|
34
|
+
if node.instance_of?(Ecrire::Markdown::Node)
|
35
|
+
"<p>#{node.to_s}</p>"
|
36
|
+
else
|
37
|
+
node.to_s
|
38
|
+
end
|
39
|
+
end.join
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Ecrire::Markdown
|
2
|
+
module Nodes
|
3
|
+
autoload :Image, 'ecrire/markdown/nodes/image'
|
4
|
+
autoload :UnorderedList, 'ecrire/markdown/nodes/unordered_list'
|
5
|
+
autoload :OrderedList, 'ecrire/markdown/nodes/ordered_list'
|
6
|
+
autoload :CodeBlock, 'ecrire/markdown/nodes/code_block'
|
7
|
+
autoload :Heading, 'ecrire/markdown/nodes/heading'
|
8
|
+
end
|
9
|
+
|
10
|
+
class Node
|
11
|
+
attr_accessor :content
|
12
|
+
|
13
|
+
def initialize(content)
|
14
|
+
@content = content || String.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_s
|
18
|
+
@content
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'active_support/core_ext/string'
|
2
|
+
|
3
|
+
module Ecrire::Markdown
|
4
|
+
module Nodes
|
5
|
+
class CodeBlock < Node
|
6
|
+
def initialize(language, title, nodes)
|
7
|
+
@content = ERB::Util.html_escape(nodes.join("\n"))
|
8
|
+
@title = title
|
9
|
+
@language = language
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_s
|
13
|
+
str = "<pre>"
|
14
|
+
str << "<header>#{@title}</header>"
|
15
|
+
|
16
|
+
str << "<code"
|
17
|
+
|
18
|
+
unless @language.nil?
|
19
|
+
str << " class='language-#{@language}'>"
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
str << @content
|
24
|
+
str << "</code></pre>"
|
25
|
+
str
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Ecrire::Markdown
|
2
|
+
module Nodes
|
3
|
+
class OrderedList < Node
|
4
|
+
|
5
|
+
def initialize(text)
|
6
|
+
@content = "<li>#{text}</li>"
|
7
|
+
end
|
8
|
+
|
9
|
+
def append(text)
|
10
|
+
@content << "<li>#{text}</li>"
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_s
|
14
|
+
"<ol>#{@content}</ol>"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Ecrire::Markdown
|
2
|
+
module Nodes
|
3
|
+
class UnorderedList < Node
|
4
|
+
|
5
|
+
def initialize(text)
|
6
|
+
@content = "<li>#{text}</li>"
|
7
|
+
end
|
8
|
+
|
9
|
+
def append(text)
|
10
|
+
@content << "<li>#{text}</li>"
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_s
|
14
|
+
"<ul>#{@content}</ul>"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Ecrire::Markdown::Parsers
|
2
|
+
class Base
|
3
|
+
class << self
|
4
|
+
private :new
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.parse!(document)
|
8
|
+
i = 0
|
9
|
+
while !document.nodes[i].nil? do
|
10
|
+
node = new(document, document.nodes[i], i).parse!
|
11
|
+
i = document.nodes.index(node) + 1
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(document, node, index)
|
16
|
+
@document = document
|
17
|
+
@node = node
|
18
|
+
@index = index
|
19
|
+
end
|
20
|
+
|
21
|
+
def parse!
|
22
|
+
return @node
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Ecrire::Markdown::Parsers
|
2
|
+
class Code < Base
|
3
|
+
OPENING_TAG = /^((~{3,})([a-z]+)?)( (.*))?$/i
|
4
|
+
|
5
|
+
def parse!
|
6
|
+
|
7
|
+
unless @node.instance_of?(Ecrire::Markdown::Node)
|
8
|
+
return @node
|
9
|
+
end
|
10
|
+
|
11
|
+
if match = OPENING_TAG.match(@node.content)
|
12
|
+
count = match[2].size
|
13
|
+
language = match[3]
|
14
|
+
title = match[5]
|
15
|
+
nodes = extract_code_nodes!(count)
|
16
|
+
@node = Ecrire::Markdown::Nodes::CodeBlock.new(language, title, nodes)
|
17
|
+
@document.nodes[@index] = @node
|
18
|
+
end
|
19
|
+
return @node
|
20
|
+
end
|
21
|
+
|
22
|
+
def extract_code_nodes!(count)
|
23
|
+
regex = Regexp.new("^(~{#{count}}$)")
|
24
|
+
found_closing_tag = false
|
25
|
+
i = @index + 1
|
26
|
+
nodes = []
|
27
|
+
|
28
|
+
while !found_closing_tag
|
29
|
+
break if @document.nodes[i].nil?
|
30
|
+
node = @document.nodes.delete_at(i)
|
31
|
+
if regex.match(node.content)
|
32
|
+
found_closing_tag = true
|
33
|
+
else
|
34
|
+
nodes.push node
|
35
|
+
end
|
36
|
+
end
|
37
|
+
nodes
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Ecrire::Markdown::Parsers
|
2
|
+
class Heading < Base
|
3
|
+
RULE = /^(\#{1,6} )(.+)/i
|
4
|
+
|
5
|
+
def parse!
|
6
|
+
|
7
|
+
unless @node.instance_of?(Ecrire::Markdown::Node)
|
8
|
+
return @node
|
9
|
+
end
|
10
|
+
|
11
|
+
if match = RULE.match(@node.content)
|
12
|
+
size = match[1].length - 1
|
13
|
+
@node = Ecrire::Markdown::Nodes::Heading.new(size, match[2])
|
14
|
+
@document.nodes[@index] = @node
|
15
|
+
end
|
16
|
+
return @node
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Ecrire::Markdown::Parsers
|
2
|
+
class Image < Base
|
3
|
+
RULE = /^(!{1}\[([^\]]+)\])(\(([^\s]+)?\))$/i
|
4
|
+
|
5
|
+
def parse!
|
6
|
+
|
7
|
+
unless @node.instance_of?(Ecrire::Markdown::Node)
|
8
|
+
return @node
|
9
|
+
end
|
10
|
+
|
11
|
+
if match = RULE.match(@node.content)
|
12
|
+
@node = Ecrire::Markdown::Nodes::Image.new(match[2], match[4])
|
13
|
+
@document.nodes[@index] = @node
|
14
|
+
end
|
15
|
+
return @node
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Ecrire::Markdown::Parsers
|
2
|
+
class Link < Base
|
3
|
+
RULE = /!{0}(\[([^\]]+)\])(\(([^\)]+)\))/i
|
4
|
+
|
5
|
+
def parse!
|
6
|
+
while match = RULE.match(@node.content) do
|
7
|
+
@node.content.gsub! match[0], "<a href='#{match[4]}'>#{match[2]}</a>"
|
8
|
+
end
|
9
|
+
return @node
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Ecrire::Markdown::Parsers
|
2
|
+
class List < Base
|
3
|
+
UL = /^(-\s)(.+)?$/i
|
4
|
+
OL = /^(\d+\.\s)(.+)?$/i
|
5
|
+
|
6
|
+
def parse!
|
7
|
+
|
8
|
+
unless @node.instance_of?(Ecrire::Markdown::Node)
|
9
|
+
return @node
|
10
|
+
end
|
11
|
+
|
12
|
+
if match = UL.match(@node.content)
|
13
|
+
list! match, Ecrire::Markdown::Nodes::UnorderedList
|
14
|
+
elsif match = OL.match(@node.content)
|
15
|
+
list! match, Ecrire::Markdown::Nodes::OrderedList
|
16
|
+
end
|
17
|
+
return @node
|
18
|
+
end
|
19
|
+
|
20
|
+
def list!(match, tag)
|
21
|
+
previous_node = @document.nodes[@index - 1]
|
22
|
+
if previous_node.nil? || !previous_node.instance_of?(tag)
|
23
|
+
@node = tag.new(match[2])
|
24
|
+
@document.nodes[@index] = @node
|
25
|
+
else
|
26
|
+
@index -= 1
|
27
|
+
@document.nodes.delete(@node)
|
28
|
+
previous_node.append(match[2])
|
29
|
+
@node = previous_node
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Ecrire::Markdown::Parsers
|
2
|
+
class Word < Base
|
3
|
+
RULE = /((\*{1,2})([^\*]+)(\*{1,2}))/i
|
4
|
+
|
5
|
+
def parse!
|
6
|
+
while match = RULE.match(@node.content) do
|
7
|
+
if match[2].length == 1
|
8
|
+
@node.content.gsub! match[0], "<em>#{match[3]}</em>"
|
9
|
+
elsif match[2].length == 2
|
10
|
+
@node.content.gsub! match[0], "<strong>#{match[3]}</strong>"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
return @node
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Ecrire
|
2
|
+
module Markdown
|
3
|
+
module Parsers
|
4
|
+
autoload :Base, 'ecrire/markdown/parsers/base'
|
5
|
+
autoload :Word, 'ecrire/markdown/parsers/word'
|
6
|
+
autoload :List, 'ecrire/markdown/parsers/list'
|
7
|
+
autoload :Image, 'ecrire/markdown/parsers/image'
|
8
|
+
autoload :Code, 'ecrire/markdown/parsers/code'
|
9
|
+
autoload :Heading, 'ecrire/markdown/parsers/heading'
|
10
|
+
autoload :Link, 'ecrire/markdown/parsers/link'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem 'ecrire',
|
3
|
+
gem 'ecrire', git: 'https://github.com/pothibo/ecrire'
|
4
4
|
|
5
5
|
group :required do
|
6
6
|
gem 'rails', '~> 4.2'
|
@@ -11,7 +11,6 @@ group :required do
|
|
11
11
|
gem 's3', '~> 0.3'
|
12
12
|
gem 'pg', '~> 0.17'
|
13
13
|
gem 'kaminari', '~> 0.15'
|
14
|
-
gem 'kramdown', '~> 1.5'
|
15
14
|
|
16
15
|
gem 'sprockets-rails', '~> 2.1'
|
17
16
|
gem 'sass-rails', '~> 4.0', '>= 4.0.3'
|
@@ -0,0 +1,11 @@
|
|
1
|
+
---
|
2
|
+
development: &1
|
3
|
+
adapter: postgresql
|
4
|
+
database: ecrire
|
5
|
+
user: pothibo
|
6
|
+
password: 3dbdbc10bdf7bd7d8ad7b6dbcf4bb26c
|
7
|
+
encoding: utf8
|
8
|
+
secret_key: 43fce5ef5993544ba39821911080adfa
|
9
|
+
secret_key_base: 43fce5ef5993544ba39821911080adfa
|
10
|
+
test: *1
|
11
|
+
production: *1
|
data/lib/ecrire/version.rb
CHANGED
data/lib/ecrire.rb
CHANGED
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'ecrire/markdown'
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
|
5
|
+
class MarkdownTest < Minitest::Test
|
6
|
+
|
7
|
+
def test_paragraph
|
8
|
+
document = Ecrire::Markdown.parse("Hello world!\nThis is nice.")
|
9
|
+
assert_equal '<p>Hello world!</p><p>This is nice.</p>', document.to_html
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_header
|
13
|
+
document = Ecrire::Markdown.parse('# test')
|
14
|
+
assert_equal "<h1>test</h1>", document.to_html
|
15
|
+
|
16
|
+
document = Ecrire::Markdown.parse('## test and *some*')
|
17
|
+
assert_equal "<h2>test and <em>some</em></h2>", document.to_html
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_italic
|
21
|
+
document = Ecrire::Markdown.parse('*test*')
|
22
|
+
assert_equal "<p><em>test</em></p>", document.to_html
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_bold
|
26
|
+
document = Ecrire::Markdown.parse('**test**')
|
27
|
+
assert_equal "<p><strong>test</strong></p>", document.to_html
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_bold_and_italic
|
31
|
+
document = Ecrire::Markdown.parse('***bold and italic***')
|
32
|
+
assert_equal "<p><em><strong>bold and italic</strong></em></p>", document.to_html
|
33
|
+
|
34
|
+
document = Ecrire::Markdown.parse('**bold** and *italic*')
|
35
|
+
assert_equal "<p><strong>bold</strong> and <em>italic</em></p>", document.to_html
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_code_blocks
|
39
|
+
document = Ecrire::Markdown.parse("~~~ruby\n# A comment\nRails.application\n~~~")
|
40
|
+
assert_equal "<pre><header></header><code class='language-ruby'># A comment\nRails.application</code></pre>", document.to_html
|
41
|
+
|
42
|
+
document = Ecrire::Markdown.parse("~~~ruby a title\n# A comment\nRails.application\n~~~")
|
43
|
+
assert_equal "<pre><header>a title</header><code class='language-ruby'># A comment\nRails.application</code></pre>", document.to_html
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_unordered_list
|
47
|
+
document = Ecrire::Markdown.parse("- ruby\n- Go")
|
48
|
+
assert_equal '<ul><li>ruby</li><li>Go</li></ul>', document.to_html
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_ordered_list
|
52
|
+
document = Ecrire::Markdown.parse("1. Ruby\n2. **Go**")
|
53
|
+
assert_equal '<ol><li>Ruby</li><li><strong>Go</strong></li></ol>', document.to_html
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_lists
|
57
|
+
document = Ecrire::Markdown.parse("1. Ruby\n2. **Go**\n- Test\n- 123")
|
58
|
+
assert_equal '<ol><li>Ruby</li><li><strong>Go</strong></li></ol><ul><li>Test</li><li>123</li></ul>', document.to_html
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_image
|
62
|
+
document = Ecrire::Markdown.parse('')
|
63
|
+
assert_equal "<figure><img src='http://bla.com' /><figcaption>An Image</figcaption></figure>", document.to_html
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_link
|
67
|
+
document = Ecrire::Markdown.parse('[A link](http://bla.com)')
|
68
|
+
assert_equal "<p><a href='http://bla.com'>A link</a></p>", document.to_html
|
69
|
+
end
|
70
|
+
end
|
data/test/test_task.rb
CHANGED
@@ -7,12 +7,16 @@ class Ecrire::TestTask < Rake::TestTask
|
|
7
7
|
desc @description
|
8
8
|
task @name do
|
9
9
|
Rake::FileUtilsExt.verbose(@verbose) do
|
10
|
-
args =
|
11
|
-
"#{ruby_opts_string} #{run_code} "
|
12
|
-
"#{file_list_string} #{option_list}"
|
13
|
-
|
10
|
+
args = [
|
11
|
+
"#{ruby_opts_string} #{run_code} ",
|
12
|
+
"#{file_list_string} #{option_list}"
|
13
|
+
]
|
14
14
|
|
15
|
-
|
15
|
+
if File.exists?(theme)
|
16
|
+
args << theme
|
17
|
+
end
|
18
|
+
|
19
|
+
ruby args.join do |ok, status|
|
16
20
|
if !ok && status.respond_to?(:signaled?) && status.signaled?
|
17
21
|
raise SignalException.new(status.termsig)
|
18
22
|
elsif !ok
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ecrire
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.25.
|
4
|
+
version: 0.25.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pier-Olivier Thibault
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Blog engine on Rails
|
14
14
|
email: pothibo@gmail.com
|
@@ -191,6 +191,22 @@ files:
|
|
191
191
|
- lib/ecrire/locales/admin/partials/en.yml
|
192
192
|
- lib/ecrire/locales/admin/posts/en.yml
|
193
193
|
- lib/ecrire/locales/en.yml
|
194
|
+
- lib/ecrire/markdown.rb
|
195
|
+
- lib/ecrire/markdown/document.rb
|
196
|
+
- lib/ecrire/markdown/node.rb
|
197
|
+
- lib/ecrire/markdown/nodes/code_block.rb
|
198
|
+
- lib/ecrire/markdown/nodes/heading.rb
|
199
|
+
- lib/ecrire/markdown/nodes/image.rb
|
200
|
+
- lib/ecrire/markdown/nodes/ordered_list.rb
|
201
|
+
- lib/ecrire/markdown/nodes/unordered_list.rb
|
202
|
+
- lib/ecrire/markdown/parsers.rb
|
203
|
+
- lib/ecrire/markdown/parsers/base.rb
|
204
|
+
- lib/ecrire/markdown/parsers/code.rb
|
205
|
+
- lib/ecrire/markdown/parsers/heading.rb
|
206
|
+
- lib/ecrire/markdown/parsers/image.rb
|
207
|
+
- lib/ecrire/markdown/parsers/link.rb
|
208
|
+
- lib/ecrire/markdown/parsers/list.rb
|
209
|
+
- lib/ecrire/markdown/parsers/word.rb
|
194
210
|
- lib/ecrire/onboarding/assets/images/.keep
|
195
211
|
- lib/ecrire/onboarding/assets/images/background.png
|
196
212
|
- lib/ecrire/onboarding/assets/images/github-logo.png
|
@@ -233,8 +249,10 @@ files:
|
|
233
249
|
- lib/ecrire/theme/template/assets/stylesheets/theme.css.scss
|
234
250
|
- lib/ecrire/theme/template/config.ru
|
235
251
|
- lib/ecrire/theme/template/controllers/posts_controller.rb
|
252
|
+
- lib/ecrire/theme/template/controllers/tags_controller.rb
|
236
253
|
- lib/ecrire/theme/template/helpers/blog_helper.rb
|
237
254
|
- lib/ecrire/theme/template/routes.rb
|
255
|
+
- lib/ecrire/theme/template/secrets.yml
|
238
256
|
- lib/ecrire/theme/template/views/layouts/application.html.erb
|
239
257
|
- lib/ecrire/theme/template/views/posts/_post.html.erb
|
240
258
|
- lib/ecrire/theme/template/views/posts/index.html.erb
|
@@ -273,7 +291,7 @@ files:
|
|
273
291
|
- test/fixtures/tags.yml
|
274
292
|
- test/fixtures/titles.yml
|
275
293
|
- test/fixtures/users.yml
|
276
|
-
- test/
|
294
|
+
- test/markdown/markdown_test.rb
|
277
295
|
- test/onboarding/controllers/databases_controller_test.rb
|
278
296
|
- test/onboarding/controllers/onboarding_controller_test.rb
|
279
297
|
- test/onboarding/controllers/users_controller_test.rb
|
@@ -308,7 +326,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
308
326
|
version: '0'
|
309
327
|
requirements: []
|
310
328
|
rubyforge_project:
|
311
|
-
rubygems_version: 2.
|
329
|
+
rubygems_version: 2.2.2
|
312
330
|
signing_key:
|
313
331
|
specification_version: 4
|
314
332
|
summary: Blog engine
|
@@ -1,47 +0,0 @@
|
|
1
|
-
class RailtieTest < ActiveSupport::TestCase
|
2
|
-
include ActiveSupport::Testing::Isolation
|
3
|
-
|
4
|
-
def teardown
|
5
|
-
Object.send(:remove_const, :Ecrire)
|
6
|
-
end
|
7
|
-
|
8
|
-
test 'Ecrire onboards by default' do
|
9
|
-
require 'ecrire'
|
10
|
-
Ecrire::Application.initialize!
|
11
|
-
assert defined?(Ecrire::Onboarding::Engine)
|
12
|
-
assert !defined?(Ecrire::Theme::Engine)
|
13
|
-
end
|
14
|
-
|
15
|
-
test 'load the normal railtie if a secrets.yml can be found' do
|
16
|
-
Dir.chdir 'test/themes/onboarding' do
|
17
|
-
|
18
|
-
require 'ecrire'
|
19
|
-
Ecrire::Application.initialize!
|
20
|
-
|
21
|
-
assert defined?(Ecrire::Onboarding::Engine)
|
22
|
-
assert !defined?(Ecrire::Theme::Engine)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
test 'configured completely if a connection to the database can be made' do
|
27
|
-
Dir.chdir 'test/themes/template' do
|
28
|
-
|
29
|
-
run_in_isolation do
|
30
|
-
require 'ecrire'
|
31
|
-
Ecrire::Application.initialize!
|
32
|
-
::User.first_or_create!(email: 'test@test.ca', password: 123456)
|
33
|
-
end
|
34
|
-
|
35
|
-
require 'ecrire'
|
36
|
-
Ecrire::Application.initialize!
|
37
|
-
|
38
|
-
assert !defined?(Ecrire::Onboarding::Engine)
|
39
|
-
assert defined?(Ecrire::Theme::Engine)
|
40
|
-
# Need to destroy the user here because parallelization is fubar'ed
|
41
|
-
# and it's the most stable way I found it.
|
42
|
-
# All other options seemed to introduce racing conditions.
|
43
|
-
User.destroy_all
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|