playgroundbook 0.6.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -45
  3. data/lib/renderer/chapter_collator.rb +24 -1
  4. data/lib/renderer/page_parser.rb +24 -2
  5. data/lib/renderer/page_writer.rb +20 -1
  6. data/lib/renderer/playgroundbook_renderer.rb +25 -5
  7. data/lib/version.rb +1 -1
  8. metadata +2 -46
  9. data/.gitignore +0 -50
  10. data/.rspec +0 -2
  11. data/.rubocop.yml +0 -112
  12. data/.ruby-version +0 -1
  13. data/Changelog.md +0 -37
  14. data/CodeOfConduct.md +0 -50
  15. data/Community.md +0 -52
  16. data/Gemfile +0 -13
  17. data/Gemfile.lock +0 -102
  18. data/Guardfile +0 -14
  19. data/Rakefile +0 -8
  20. data/playgroundbook.gemspec +0 -21
  21. data/spec/fixtures/Starter.playgroundbook/Contents/Chapters/Chapter1.playgroundchapter/Manifest.plist +0 -15
  22. data/spec/fixtures/Starter.playgroundbook/Contents/Chapters/Chapter1.playgroundchapter/Pages/Page1.playgroundpage/Contents.swift +0 -8
  23. data/spec/fixtures/Starter.playgroundbook/Contents/Chapters/Chapter1.playgroundchapter/Pages/Page1.playgroundpage/Manifest.plist +0 -12
  24. data/spec/fixtures/Starter.playgroundbook/Contents/Chapters/Chapter1.playgroundchapter/Pages/Page2.playgroundpage/Contents.swift +0 -8
  25. data/spec/fixtures/Starter.playgroundbook/Contents/Chapters/Chapter1.playgroundchapter/Pages/Page2.playgroundpage/Manifest.plist +0 -12
  26. data/spec/fixtures/Starter.playgroundbook/Contents/Manifest.plist +0 -20
  27. data/spec/fixtures/assets/file.jpeg +0 -0
  28. data/spec/fixtures/book.yml +0 -6
  29. data/spec/fixtures/test_chapter.playground/Contents.swift +0 -17
  30. data/spec/fixtures/test_chapter.playground/contents.xcplayground +0 -4
  31. data/spec/fixtures/wrapper/destination/swift_at_artsy_1.swift +0 -200
  32. data/spec/fixtures/wrapper/source/Swift-at-Artsy.playground/Contents.swift +0 -199
  33. data/spec/fixtures/wrapper/source/Swift-at-Artsy.playground/contents.xcplayground +0 -4
  34. data/spec/fixtures/wrapper/source/swift_at_artsy_1.md +0 -183
  35. data/spec/linter/chapter_linter_spec.rb +0 -30
  36. data/spec/linter/chapter_manifest_linter_spec.rb +0 -40
  37. data/spec/linter/contents_linter_spec.rb +0 -18
  38. data/spec/linter/cutscene_page_linter_spec.rb +0 -14
  39. data/spec/linter/cutscene_page_manifest_linter_spec.rb +0 -63
  40. data/spec/linter/manfiest_linter_spec.rb +0 -71
  41. data/spec/linter/page_linter_spec.rb +0 -19
  42. data/spec/linter/page_manifest_linter_spec.rb +0 -43
  43. data/spec/linter/playgroundbook_lint_spec.rb +0 -38
  44. data/spec/linter/root_manifest_linter_spec.rb +0 -35
  45. data/spec/renderer/chapter_collator_spec.rb +0 -70
  46. data/spec/renderer/contents_manfiest_generator_spec.rb +0 -41
  47. data/spec/renderer/glossary_generator_spec.rb +0 -54
  48. data/spec/renderer/page_processor_spec.rb +0 -86
  49. data/spec/renderer/page_writer_spec.rb +0 -70
  50. data/spec/renderer/playgroundbook_renderer_spec.rb +0 -122
  51. data/spec/spec_helper.rb +0 -85
  52. data/spec/wrapper/markdown_wrapper_spec.rb +0 -90
@@ -1,86 +0,0 @@
1
- require File.expand_path("../../spec_helper", __FILE__)
2
-
3
- module Playgroundbook
4
- describe PageProcessor do
5
- let(:page_processor) { PageProcessor.new }
6
-
7
- it "removes newlines before markdown blocks" do
8
- page_contents = <<-EOS
9
- let a = 6
10
-
11
- /*:
12
- Some markdown.
13
- */
14
- EOS
15
- processed_page_contents = <<-EOS
16
- let a = 6
17
- /*:
18
- Some markdown.
19
- */
20
- EOS
21
-
22
- expect(page_processor.strip_extraneous_newlines(page_contents)).to eq(processed_page_contents)
23
- end
24
-
25
- it "removes newlines after markdown blocks" do
26
- page_contents = <<-EOS
27
- /*:
28
- Some markdown.
29
- */
30
-
31
- let a = 6
32
- EOS
33
- processed_page_contents = <<-EOS
34
- /*:
35
- Some markdown.
36
- */
37
- let a = 6
38
- EOS
39
-
40
- expect(page_processor.strip_extraneous_newlines(page_contents)).to eq(processed_page_contents)
41
- end
42
-
43
- it "removes newlines surrounding single-line markdown blocks" do
44
- page_contents = <<-EOS
45
- let a = 6
46
-
47
- //: Some markdown.
48
-
49
- let b = a
50
- EOS
51
- processed_page_contents = <<-EOS
52
- let a = 6
53
- //: Some markdown.
54
- let b = a
55
- EOS
56
-
57
- expect(page_processor.strip_extraneous_newlines(page_contents)).to eq(processed_page_contents)
58
- end
59
-
60
- it "does not strip newlines from code" do
61
- page_contents = <<-EOS
62
- let a = 6
63
-
64
- let b = a
65
- EOS
66
-
67
- expect(page_processor.strip_extraneous_newlines(page_contents)).to eq(page_contents)
68
- end
69
-
70
- it "it does not strip newlines from the markdown" do
71
- page_contents = <<-EOS
72
- /*:
73
-
74
- # Header
75
-
76
- Some markdown. The following lines are purposefull left blank.
77
-
78
-
79
-
80
- */
81
- EOS
82
-
83
- expect(page_processor.strip_extraneous_newlines(page_contents)).to eq(page_contents)
84
- end
85
- end
86
- end
@@ -1,70 +0,0 @@
1
- require File.expand_path("../../spec_helper", __FILE__)
2
-
3
- module Playgroundbook
4
- describe PageWriter do
5
- include FakeFS::SpecHelpers
6
- let(:page_writer) { PageWriter.new(page_processor, test_ui) }
7
- let(:page_processor) { double(PageProcessor) }
8
- let(:test_ui) { Cork::Board.new(silent: true) }
9
- let(:page_name) { "test page name" }
10
- let(:page_dir_name) { "test page name.playgroundpage" }
11
- let(:page_contents) { "// Some swift goes here." }
12
- let(:generated_page_contesnts) { "//#-hidden-code\nimport UIKit\n//#-end-hidden-code\n// Some swift goes here." }
13
-
14
- before do
15
- allow(page_processor).to receive(:strip_extraneous_newlines) do |page_contents|
16
- # Returns the parameter, unprocessed.
17
- page_contents
18
- end
19
- end
20
-
21
- context "with a pre-existing page directory" do
22
- before do
23
- Dir.mkdir(page_dir_name)
24
- end
25
-
26
- it "does not explode" do
27
- expect { page_writer.write_page(page_name, page_dir_name, ["UIKit"], page_contents) }.to_not raise_error
28
- end
29
- end
30
-
31
- it "calls the page processor" do
32
- expect(page_processor).to receive(:strip_extraneous_newlines)
33
- page_writer.write_page(page_name, page_dir_name, ["UIKit"], page_contents)
34
- end
35
-
36
- context "as a consequence of writing rendering" do
37
- before do
38
- page_writer.write_page(page_name, page_dir_name, ["UIKit"], page_contents)
39
- end
40
-
41
- it "creates a directory" do
42
- expect(Dir.exist?(page_dir_name)).to be_truthy
43
- end
44
-
45
- it "writes a manifest" do
46
- expect(Dir.exist?(page_dir_name)).to be_truthy
47
- end
48
-
49
- it "writes a Contents.swift file" do
50
- expect(File.exist?("#{page_dir_name}/Contents.swift")).to be_truthy
51
- end
52
-
53
- it "has correct Contents.swift contents" do
54
- expect(File.read("#{page_dir_name}/Contents.swift")).to eq(generated_page_contesnts)
55
- end
56
-
57
- context "the manifest" do
58
- let(:manifest) { get_manifest("#{page_dir_name}/#{MANIFEST_FILE_NAME}") }
59
-
60
- it "has a name" do
61
- expect(manifest["Name"]).to eq(page_name)
62
- end
63
-
64
- it "has a LiveViewMode" do
65
- expect(manifest["LiveViewMode"]).to eq("HiddenByDefault")
66
- end
67
- end
68
- end
69
- end
70
- end
@@ -1,122 +0,0 @@
1
- require File.expand_path("../../spec_helper", __FILE__)
2
-
3
- module Playgroundbook
4
- describe Renderer do
5
- include FakeFS::SpecHelpers
6
- let(:renderer) { Renderer.new(yaml_file_name, contents_manifest_generator, page_parser, chapter_collator, glossary_generator, test_ui) }
7
- let(:yaml_file_name) { "book.yml" }
8
- let(:contents_manifest_generator) { double(ContentsManifestGenerator) }
9
- let(:page_parser) { double(PageParser) }
10
- let(:chapter_collator) { double(ChapterCollator) }
11
- let(:glossary_generator) { double(GlossaryGenerator) }
12
- let(:test_ui) { Cork::Board.new(silent: true) }
13
-
14
- before do
15
- File.open(yaml_file_name, "w") do |file|
16
- file.write(test_book_metadata.to_yaml)
17
- end
18
-
19
- allow(contents_manifest_generator).to receive(:generate)
20
- allow(chapter_collator).to receive(:collate)
21
- allow(glossary_generator).to receive(:generate)
22
- end
23
-
24
- it "initializes correctly" do
25
- expect(renderer.yaml_file_name) == yaml_file_name
26
- end
27
-
28
- it "explodes when there is no playground" do
29
- expect { renderer.render }.to raise_error
30
- end
31
-
32
- context "with a playground" do
33
- before do
34
- allow(page_parser).to receive(:parse_chapter_pages)
35
- Dir.mkdir("assets")
36
- FileUtils.touch("assets/file.png")
37
- Dir.mkdir("test_chapter.playground/")
38
- File.open("test_chapter.playground/Contents.swift", "w") do |file|
39
- file.write("")
40
- end
41
- end
42
-
43
- it "creates a directory with book name" do
44
- renderer.render
45
-
46
- expect(Dir.exist?("Testing Book.playgroundbook")).to be_truthy
47
- end
48
-
49
- it "creates a resources folder" do
50
- renderer.render
51
-
52
- expect(Dir.exist?("Testing Book.playgroundbook/Contents/Resources")).to be_truthy
53
- end
54
-
55
- it "copies a resources folder contents" do
56
- renderer.render
57
-
58
- expect(File.exist?("Testing Book.playgroundbook/Contents/Resources/file.png")).to be_truthy
59
- end
60
-
61
- context "within an existing playgroundbook directory" do
62
- before do
63
- Dir.mkdir("Testing Book.playgroundbook")
64
- end
65
-
66
- it "does not explode when the directory already exists" do
67
- expect { renderer.render }.to_not raise_error
68
- end
69
-
70
- it "creates a Contents directory within the main bundle dir" do
71
- renderer.render
72
-
73
- expect(Dir.exist?("Testing Book.playgroundbook/Contents")).to be_truthy
74
- end
75
-
76
- context "within the Contents directory" do
77
- before do
78
- Dir.mkdir("Testing Book.playgroundbook/Contents")
79
- end
80
-
81
- it "does not explode when the Contents directory already exists" do
82
- expect { renderer.render }.to_not raise_error
83
- end
84
-
85
- it "renders main manifest" do
86
- expect(contents_manifest_generator).to receive(:generate)
87
-
88
- renderer.render
89
- end
90
-
91
- it "creates a Chapters directory within the Contents dir" do
92
- renderer.render
93
-
94
- expect(Dir.exist?("Testing Book.playgroundbook/Contents/Chapters")).to be_truthy
95
- end
96
-
97
- context "within the Chapters directory" do
98
- before do
99
- Dir.mkdir("Testing Book.playgroundbook/Contents/Chapters")
100
- end
101
-
102
- it "does not explode when the Chapters directory already exists" do
103
- expect { renderer.render }.to_not raise_error
104
- end
105
-
106
- it "generates each chapter" do
107
- expect(chapter_collator).to receive(:collate)
108
-
109
- renderer.render
110
- end
111
- end
112
- end
113
- end
114
-
115
- it "generates a glossary" do
116
- expect(glossary_generator).to receive(:generate)
117
-
118
- renderer.render
119
- end
120
- end
121
- end
122
- end
data/spec/spec_helper.rb DELETED
@@ -1,85 +0,0 @@
1
- require "pathname"
2
- require "cork"
3
- require "rspec"
4
- require "plist"
5
- require "fileutils"
6
- require "tmpdir"
7
- require "fakefs/spec_helpers"
8
-
9
- ROOT = Pathname.new(File.expand_path("../../", __FILE__))
10
- $LOAD_PATH.unshift((ROOT + "lib").to_s)
11
- $LOAD_PATH.unshift((ROOT + "spec").to_s)
12
-
13
- require "playgroundbook"
14
- require "linter/abstract_linter"
15
- require "linter/chapter_linter"
16
- require "linter/chapter_manifest_linter"
17
- require "linter/contents_linter"
18
- require "linter/manifest_linter"
19
- require "linter/page_linter"
20
- require "linter/page_manifest_linter"
21
- require "linter/cutscene_page_linter"
22
- require "linter/cutscene_page_manifest_linter"
23
- require "linter/root_manifest_linter"
24
-
25
- require "renderer/contents_manifest_generator"
26
- require "renderer/chapter_collator"
27
- require "renderer/page_writer"
28
- require "renderer/page_parser"
29
- require "renderer/glossary_generator"
30
- require "renderer/page_processor"
31
-
32
- RSpec.configure do |config|
33
- config.color = true
34
-
35
- config.order = :random
36
- Kernel.srand config.seed
37
- end
38
- RSpec::Expectations.configuration.on_potential_false_positives = :nothing
39
-
40
- Playgroundbook::AbstractLinter.ui = Cork::Board.new(silent: true)
41
-
42
- def test_playground_book
43
- "spec/fixtures/Starter.playgroundbook"
44
- end
45
-
46
- def test_book_metadata
47
- {
48
- "name" => "Testing Book",
49
- "chapters" => [ "name" => "test_chapter"],
50
- "identifier" => "com.ashfurrow.testing",
51
- "resources" => "assets",
52
- "cover" => "file.jpeg",
53
- "glossary" => [
54
- {
55
- "term" => "definition"
56
- }
57
- ]
58
- }
59
- end
60
-
61
- def get_manifest(file_name = Playgroundbook::ManifestFileName)
62
- Plist.parse_xml(file_name)
63
- end
64
-
65
- def test_chapter_contents
66
- <<-EOSwift
67
- import UIKit
68
-
69
- var str = "Hello, playground"
70
-
71
- func sharedFunc() {
72
- print("This should be accessible to all pages.")
73
- }
74
-
75
- //// Page 1
76
-
77
- str = "Yo, it's page 1."
78
- sharedFunc()
79
-
80
- //// Page 2
81
-
82
- str = "Page 2 awww yeah."
83
- sharedFunc()
84
- EOSwift
85
- end
@@ -1,90 +0,0 @@
1
- require File.expand_path("../../spec_helper", __FILE__)
2
-
3
- module Playgroundbook
4
- describe MarkdownWrapper do
5
-
6
- it "creates a swift file from a markdown file" do
7
- source = "spec/fixtures/wrapper/source/swift_at_artsy_1.md"
8
- destination = "spec/fixtures/wrapper/destination/swift_at_artsy_1.swift"
9
- subject = MarkdownWrapper.new(source, "Swift at Artsy")
10
- contents = File.read(source)
11
- expect(subject.swap_code_context(contents)).to eq(File.read(destination))
12
- end
13
-
14
- it "creates a playground around the file" do
15
- source = "spec/fixtures/wrapper/source/swift_at_artsy_1.md"
16
-
17
- Dir.mktmpdir do |dir|
18
- new_source = File.join(dir, File.basename(source))
19
- FileUtils.cp(source, new_source)
20
- subject = MarkdownWrapper.new(new_source, "Swift at Artsy")
21
-
22
- subject.generate
23
-
24
- playground = File.join(dir, "Swift at Artsy.playground")
25
- expect(Dir.exist?(playground)).to eq(true)
26
- expect(File.exist?(File.join(playground, "Contents.swift"))).to eq(true)
27
- expect(File.exist?(File.join(playground, "timeline.xctimeline"))).to eq(true)
28
- expect(File.exist?(File.join(playground, "contents.xcplayground"))).to eq(true)
29
- end
30
- end
31
-
32
- it "gets the image files inside the markdown doc" do
33
- source = "spec/fixtures/wrapper/source/swift_at_artsy_1.md"
34
- subject = MarkdownWrapper.new(source, "Swift at Artsy")
35
- expect(subject.get_list_of_images(subject.playground_contents)).to eq(
36
- ["img/welcome.png", "img/newplayground.png", "img/emptyplayground.png", "img/results.png"]
37
- )
38
- end
39
-
40
- it "embeds the local images inside the resources folder" do
41
- source = "spec/fixtures/wrapper/source/swift_at_artsy_1.md"
42
-
43
- Dir.mktmpdir do |dir|
44
- new_source = File.join(dir, File.basename(source))
45
- FileUtils.cp(source, new_source)
46
-
47
- # images need to be in the tmpdir relative for picking up
48
- Dir.mkdir(File.join(dir, "img"))
49
- FileUtils.cp(source, File.join(dir, "img", "welcome.png"))
50
-
51
- subject = MarkdownWrapper.new(new_source, "Swift at Artsy")
52
- subject.generate
53
-
54
- embedded_img = File.join(dir, "Swift at Artsy.playground", "Resources", "img/welcome.png")
55
- expect(File.exist?(embedded_img)).to eq(true)
56
- end
57
- end
58
-
59
- it "embeds remote images inside the resources folder, and changes the MD content to match relative url" do
60
- source = "spec/fixtures/wrapper/source/swift_at_artsy_1.md"
61
-
62
- Dir.mktmpdir do |dir|
63
- new_source = File.join(dir, File.basename(source))
64
- FileUtils.cp(source, new_source)
65
-
66
- subject = MarkdownWrapper.new(new_source, "Swift at Artsy")
67
- # Switch out a relative link to a remote one
68
- remote_image = "http://ortastuff.s3.amazonaws.com/site/images/twitter_black.png"
69
- subject.playground_contents.gsub!("img/welcome.png", remote_image)
70
-
71
- # Quacks like the value of `open`
72
- class EmptyOpen
73
- def read
74
- ""
75
- end
76
- end
77
-
78
- allow(subject).to receive(:open).and_return(EmptyOpen.new)
79
- subject.generate
80
-
81
- source_path = File.join(dir, "Swift at Artsy.playground", "Contents.swift")
82
- expect(File.read(source_path)).to include("twitter_black.png")
83
- expect(File.read(source_path)).to_not include(remote_image)
84
-
85
- embedded_img = File.join(dir, "Swift at Artsy.playground", "Resources", "twitter_black.png")
86
- expect(File.exist?(embedded_img)).to eq(true)
87
- end
88
- end
89
- end
90
- end