prow 0.1.0 → 0.2.4

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -1
  3. data/lib/prow/app_builder/create.rb +51 -0
  4. data/lib/prow/app_builder/style_compiler.rb +15 -0
  5. data/lib/prow/app_builder/templates/config/pages.json +11 -0
  6. data/lib/prow/app_builder/templates/config.ru +2 -0
  7. data/lib/prow/app_builder/templates/templates/layouts/default.mustache +20 -0
  8. data/lib/prow/app_builder/templates/templates/pages/index.mustache +20 -0
  9. data/lib/prow/page.rb +23 -0
  10. data/lib/prow/page_compiler.rb +5 -9
  11. data/lib/prow/page_configs.rb +7 -1
  12. data/lib/prow/pages_compiler.rb +7 -13
  13. data/lib/prow/paths.rb +27 -0
  14. data/lib/prow/silence_warnings.rb +13 -0
  15. data/lib/prow/tasks.rb +3 -0
  16. data/lib/prow/version.rb +1 -1
  17. data/lib/prow/watcher.rb +44 -0
  18. data/lib/prow.rb +12 -1
  19. data/lib/tasks/prow.rake +31 -0
  20. data/prow.gemspec +2 -0
  21. data/spec/app_builder/create_spec.rb +56 -0
  22. data/spec/page_compiler_spec.rb +8 -5
  23. data/spec/pages_compiler_spec.rb +5 -7
  24. data/spec/paths_spec.rb +57 -0
  25. data/spec/spec_helper.rb +3 -2
  26. data/spec/support/{public/.keep → fixtures/app/.gitkeep} +0 -0
  27. data/spec/support/{pages.json → fixtures/config/pages.json} +0 -0
  28. data/spec/support/fixtures/public/.keep +0 -0
  29. data/spec/support/fixtures/public/stylesheets/.gitkeep +0 -0
  30. data/spec/support/fixtures/sass/.gitkeep +0 -0
  31. data/spec/support/{templates → fixtures/templates}/layouts/default.mustache +0 -0
  32. data/spec/support/{templates → fixtures/templates}/layouts/foo.mustache +0 -0
  33. data/spec/support/{templates → fixtures/templates}/pages/bar.mustache +0 -0
  34. data/spec/support/{templates → fixtures/templates}/pages/foo.mustache +0 -0
  35. data/spec/support/{templates → fixtures/templates}/pages/index.mustache +0 -0
  36. data/spec/support/fixtures/templates/partials/header.mustache +1 -0
  37. data/spec/support/fixtures/templates/partials/temp.mustache +0 -0
  38. data/spec/support/{templates → fixtures/templates}/partials/things/it.mustache +0 -0
  39. data/spec/template_spec.rb +4 -2
  40. data/spec/templates_spec.rb +2 -2
  41. data/spec/watcher_spec.rb +59 -0
  42. metadata +75 -24
  43. data/lib/prow/default_paths.rb +0 -19
  44. data/spec/support/templates/index.mustache +0 -3
  45. data/spec/support/templates/partials/header.mustache +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d9f41da04659cd12b91b480085140b2aa08b2183
4
- data.tar.gz: 1968e6faab6709adb7f59fc9069191db2cb0879e
3
+ metadata.gz: d16c875b771c7a9017e14996b1d3d4ba6853cf91
4
+ data.tar.gz: a1e2b425d7352a81865e1ff27ab9d9cd21e5a0fa
5
5
  SHA512:
6
- metadata.gz: 77b8bd8d581e538817c8bec5821d167404524646769d8a483b146ba78030994964a87ad9bd4b41d140391221f3715d7055a35780318bcf8dbc8b5c226d6c2633
7
- data.tar.gz: 3f9cccc3e5142e43db96e7e160e25ee54d1d0baa4bf55c649dd2aae0f27642e31426217b9c0e0df58107066e0d506b9f978eaf827e651e06bd395d39eaea3d3d
6
+ metadata.gz: fe1e5cfce4d03f45e6675d79064f1a2e89625ac65d475e0eed79103ac13dba7a775a82d94ae3e639c35ec7104c0ea98f72e8b410e3200dbcb6665f7d94cdadc0
7
+ data.tar.gz: fb894f5de8cc2571798f77fab54111ba636eaa4f165a5ce5e1a19b846341edd4c8f4b2fa5e491d3870549de771f60e954f5081b7349d778315797ac26d5b790e
data/.gitignore CHANGED
@@ -21,4 +21,7 @@ tmp
21
21
  *.a
22
22
  mkmf.log
23
23
 
24
- spec/support/public
24
+ spec/support/fixtures/public
25
+ spec/support/fixtures/app
26
+ spec/support/fixtures/sass
27
+ .sass-cache
@@ -0,0 +1,51 @@
1
+ module Prow
2
+ module AppBuilder
3
+ class Create < Struct.new(:path)
4
+ def perform
5
+ copy('config.ru')
6
+ mkdir('public')
7
+ mkdir('templates')
8
+ mkdir('config')
9
+ mkdir('templates/layouts')
10
+ mkdir('templates/pages')
11
+ mkdir('templates/partials')
12
+ copy('config/pages.json')
13
+ copy_partials
14
+ mkdir('sass')
15
+ create_and_move_stylesheets
16
+ copy_pages_and_layouts
17
+ end
18
+
19
+ def copy_pages_and_layouts
20
+ copy('templates/layouts/default.mustache')
21
+ copy('templates/pages/index.mustache')
22
+ end
23
+
24
+ def copy_partials
25
+ ShipdStyle::CopyDirectory.new(app_path + "/templates/partials", "templates").perform
26
+ end
27
+
28
+ def create_and_move_stylesheets
29
+ copier = ShipdStyle::CopyStylesheets.new(app_path)
30
+ copier.perform
31
+ copier.remove_namespace
32
+ end
33
+
34
+ def mkdir(dir)
35
+ FileUtils.mkdir(app_path + "/" + dir) unless File.exist?(dir)
36
+ end
37
+
38
+ def copy(file_path)
39
+ FileUtils.cp(templates_path + "/" + file_path, app_path + "/" + file_path)
40
+ end
41
+
42
+ def templates_path
43
+ File.dirname(__FILE__) + "/templates"
44
+ end
45
+
46
+ def app_path
47
+ path || `pwd`.chomp
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,15 @@
1
+ module Prow
2
+ module AppBuilder
3
+ class StyleCompiler
4
+ attr_reader :paths
5
+
6
+ def initialize(paths = nil)
7
+ @paths = paths || Paths.new
8
+ end
9
+
10
+ def perform
11
+ `compass compile --sass-dir=#{paths.sass} --css-dir=#{paths.stylesheets}`
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ {
2
+ "pages": {
3
+ "index.html": {
4
+ "data": {
5
+ "title": "Hello from Prow",
6
+ "text_logo": "Prow by Shipd Software"
7
+ }
8
+ }
9
+ }
10
+ }
11
+
@@ -0,0 +1,2 @@
1
+ require 'vienna'
2
+ run Vienna
@@ -0,0 +1,20 @@
1
+ <!DOCTYPE HTML>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Prow >> {{title}}</title>
6
+ <link href="/favicon.ico" rel="shortcut icon" type="image/ico">
7
+ <meta name="viewport" content="initial-scale=1">
8
+
9
+ <link rel="stylesheet" href="/stylesheets/all.css">
10
+ <link href='http://fonts.googleapis.com/css?family=Port+Lligat+Slab' rel='stylesheet' type='text/css'>
11
+ </head>
12
+ <body>
13
+ <div id="page" class="row">
14
+ {{> header}}
15
+ {{> body}}
16
+ </div>
17
+ </body>
18
+ </html>
19
+
20
+
@@ -0,0 +1,20 @@
1
+ <div class='inner'>
2
+ <h1>Hello from Prow</h1>
3
+
4
+ <p>
5
+ Whether you are building a one-page app or a static website,
6
+ Prow is your go-to tool for local development.
7
+ </p>
8
+
9
+ <h4>Getting Started</h4>
10
+ <p>
11
+ Congratulations! You have already successfully created a Prow app, and run it!
12
+ Now it's time to start adding your own content.
13
+ </p>
14
+ <ul class='list-style'>
15
+ <li>Replace this page with one of your own</li>
16
+ <li>Add new pages</li>
17
+ <li>Change the CSS by modifying files in the sass directory</li>
18
+ </ul>
19
+ </div>
20
+
data/lib/prow/page.rb ADDED
@@ -0,0 +1,23 @@
1
+ module Prow
2
+ class Page < Struct.new(:config_array)
3
+ def file_name
4
+ config_array.first
5
+ end
6
+
7
+ def config
8
+ config_array.last
9
+ end
10
+
11
+ def layout
12
+ config['layout'] || 'default'
13
+ end
14
+
15
+ def data
16
+ config['data'] || {}
17
+ end
18
+
19
+ def name
20
+ file_name.split('.').first
21
+ end
22
+ end
23
+ end
@@ -1,5 +1,5 @@
1
1
  module Prow
2
- class PageCompiler < Struct.new(:name, :config, :templates, :compile_dir)
2
+ class PageCompiler < Struct.new(:page, :templates, :compile_dir)
3
3
  def compile
4
4
  File.open(path, 'w+') do |f|
5
5
  f.write(render)
@@ -10,24 +10,20 @@ module Prow
10
10
  return @renderer if defined?(@renderer)
11
11
  @renderer = Renderer.new
12
12
  @renderer.templates = templates
13
- @renderer.page_name = name.split('.').first
13
+ @renderer.page_name = page.name
14
14
  @renderer
15
15
  end
16
16
 
17
17
  def render
18
- renderer.render(layout.content, data)
18
+ renderer.render(layout.content, page.data)
19
19
  end
20
20
 
21
21
  def layout
22
- templates.layout(config['layout'] || 'default')
23
- end
24
-
25
- def data
26
- config['data'] || {}
22
+ templates.layout(page.layout)
27
23
  end
28
24
 
29
25
  def path
30
- compile_dir + "/" + name
26
+ compile_dir + "/" + page.file_name
31
27
  end
32
28
  end
33
29
  end
@@ -6,8 +6,14 @@ module Prow
6
6
  JSON.parse(File.read(path))
7
7
  end
8
8
 
9
+ def pages_array
10
+ load['pages'] || []
11
+ end
12
+
9
13
  def collection
10
- @collection ||= load['pages'] || []
14
+ @collection ||= pages_array.map do |config|
15
+ Page.new(config)
16
+ end
11
17
  end
12
18
 
13
19
  def_delegators :collection, :each, :size
@@ -1,29 +1,23 @@
1
1
  module Prow
2
2
  class PagesCompiler
3
- attr_reader :config_path, :templates_path, :compile_path
3
+ attr_reader :paths
4
4
 
5
- def initialize(config_path=nil, templates_path=nil, compile_path=nil)
6
- @config_path = config_path || default_paths.config_path
7
- @templates_path = templates_path || default_paths.templates_path
8
- @compile_path = compile_path || default_paths.compile_path
5
+ def initialize(paths=nil)
6
+ @paths = paths || Paths.new
9
7
  end
10
8
 
11
9
  def compile
12
- page_configs.each do |page_name, page_config|
13
- PageCompiler.new(page_name, page_config, templates, compile_path).compile
10
+ page_configs.each do |page|
11
+ PageCompiler.new(page, templates, paths.compile).compile
14
12
  end
15
13
  end
16
14
 
17
15
  def page_configs
18
- @page_configs ||= PageConfigs.new(config_path)
16
+ @page_configs ||= PageConfigs.new(paths.pages_config)
19
17
  end
20
18
 
21
19
  def templates
22
- @templates ||= Templates.new(templates_path)
23
- end
24
-
25
- def default_paths
26
- @default_paths ||= DefaultPaths.new
20
+ @templates ||= Templates.new(paths.templates)
27
21
  end
28
22
  end
29
23
  end
data/lib/prow/paths.rb ADDED
@@ -0,0 +1,27 @@
1
+ module Prow
2
+ class Paths < Struct.new(:source_path, :compile_path)
3
+ def source
4
+ source_path || `pwd`.chomp
5
+ end
6
+
7
+ def compile
8
+ compile_path || source + "/public"
9
+ end
10
+
11
+ [:templates, :sass, :config].each do |path|
12
+ define_method(path) { composite_path(source, path) }
13
+ end
14
+
15
+ def pages_config
16
+ config + "/pages.json"
17
+ end
18
+
19
+ def stylesheets
20
+ composite_path(compile, "/stylesheets")
21
+ end
22
+
23
+ def composite_path(start_path, end_path)
24
+ "#{start_path}/#{end_path}"
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,13 @@
1
+ def silence_warnings(&block)
2
+ verbose_level = $VERBOSE
3
+ debug_level = $DEBUG
4
+ $VERBOSE = nil
5
+ $DEBUG = nil
6
+
7
+ result = block.call
8
+
9
+ $VERBOSE = verbose_level
10
+ $DEBUG = debug_level
11
+
12
+ result
13
+ end
data/lib/prow/tasks.rb ADDED
@@ -0,0 +1,3 @@
1
+ require 'prow'
2
+
3
+ load "#{File.dirname(__FILE__)}/../tasks/prow.rake"
data/lib/prow/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Prow
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.4"
3
3
  end
@@ -0,0 +1,44 @@
1
+ module Prow
2
+ class Watcher
3
+ attr_reader :paths
4
+
5
+ def initialize(paths=nil)
6
+ @paths = paths || Paths.new
7
+ end
8
+
9
+ def start
10
+ watch_all
11
+ end
12
+
13
+ def stop
14
+ template_listener.stop
15
+ end
16
+
17
+ def watch_all
18
+ silence_warnings do
19
+ template_listener.start
20
+ sass_listener.start
21
+ end
22
+ end
23
+
24
+ def template_listener
25
+ @template_listener ||= Listen.to(paths.templates) do
26
+ compile_pages
27
+ end
28
+ end
29
+
30
+ def sass_listener
31
+ @sass_listener ||= Listen.to(paths.sass) do
32
+ compile_stylesheets
33
+ end
34
+ end
35
+
36
+ def compile_pages
37
+ Prow::PagesCompiler.new(paths).compile
38
+ end
39
+
40
+ def compile_stylesheets
41
+ Prow::AppBuilder::StyleCompiler.new(paths).perform
42
+ end
43
+ end
44
+ end
data/lib/prow.rb CHANGED
@@ -1,13 +1,24 @@
1
1
  require 'json'
2
2
  require 'forwardable'
3
+ require 'fileutils'
3
4
 
5
+ require 'shipd_style'
4
6
  require 'mustache'
7
+ require 'listen'
8
+
9
+ require "prow/silence_warnings"
5
10
 
6
11
  require "prow/version"
7
- require "prow/default_paths"
12
+ require "prow/paths"
13
+ require "prow/page"
8
14
  require "prow/page_configs"
9
15
  require "prow/template"
10
16
  require "prow/templates"
11
17
  require "prow/renderer"
12
18
  require "prow/page_compiler"
13
19
  require "prow/pages_compiler"
20
+
21
+ require "prow/app_builder/create"
22
+ require "prow/app_builder/style_compiler"
23
+
24
+ require "prow/watcher"
@@ -0,0 +1,31 @@
1
+ namespace :prow do
2
+ desc "Copies over all the files needed for a Prow Application"
3
+ task :create do
4
+ Prow::AppBuilder::Create.new.perform
5
+ Prow::PagesCompiler.new.compile
6
+ Prow::AppBuilder::StyleCompiler.new.perform
7
+ end
8
+
9
+ namespace :compile do
10
+ desc "Complile all the mustache to ruby using the pages.json file"
11
+ task :html do
12
+ Prow::PagesCompiler.new.compile
13
+ end
14
+
15
+ desc "Uses compass to compile all the styles sheets in the sass directory"
16
+ task :css do
17
+ Prow::AppBuilder::StyleCompiler.new.perform
18
+ end
19
+ end
20
+
21
+ desc "Compile html and css"
22
+ task :compile do
23
+ Prow::PagesCompiler.new.compile
24
+ Prow::AppBuilder::StyleCompiler.new.perform
25
+ end
26
+
27
+ desc "Runs the app"
28
+ task :run do
29
+ `rackup`
30
+ end
31
+ end
data/prow.gemspec CHANGED
@@ -30,6 +30,8 @@ Gem::Specification.new do |spec|
30
30
 
31
31
  spec.add_dependency "shipd_style"
32
32
  spec.add_dependency "mustache"
33
+ spec.add_dependency "vienna"
34
+ spec.add_dependency "listen"
33
35
 
34
36
  spec.add_development_dependency "bundler", "~> 1.6"
35
37
  spec.add_development_dependency "rspec"
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Prow::AppBuilder::Create do
4
+ let(:creator) { Prow::AppBuilder::Create.new(app_path) }
5
+ let(:app_path) { File.dirname(__FILE__) + "/../support/fixtures/app" }
6
+ let(:app_templates_path) { File.dirname(__FILE__) + "/../../lib/prow/app_builder/templates" }
7
+
8
+ before { `rm -rf #{app_path}/*` }
9
+
10
+ it "should copy the config.ru file" do
11
+ creator.perform
12
+ expect(File.exist?(app_path + "/config.ru")).to be(true)
13
+ expect(File.read(app_path + "/config.ru")).to eq(File.read(app_templates_path + "/config.ru"))
14
+ end
15
+
16
+ it "should make the public directory" do
17
+ creator.perform
18
+ expect(File.exist?(app_path + "/public")).to be(true)
19
+ end
20
+
21
+ it "should make the templates directory with each of its expected subdirectories" do
22
+ creator.perform
23
+ expect(File.exist?(app_path + "/templates")).to be(true)
24
+ expect(File.exist?(app_path + "/templates/layouts")).to be(true)
25
+ expect(File.exist?(app_path + "/templates/pages")).to be(true)
26
+ expect(File.exist?(app_path + "/templates/partials")).to be(true)
27
+ end
28
+
29
+ it "should copy the pages.json file" do
30
+ creator.perform
31
+ expect(File.exist?(app_path + "/config/pages.json")).to be(true)
32
+ expect(File.read(app_path + "/config/pages.json")).to eq(File.read(app_templates_path + "/config/pages.json"))
33
+ end
34
+
35
+ it "adds a sample layout and home page" do
36
+ creator.perform
37
+ expect(File.exist?(app_path + "/templates/layouts/default.mustache")).to be(true)
38
+ expect(File.exist?(app_path + "/templates/pages/index.mustache")).to be(true)
39
+ end
40
+
41
+ it "copies over shipd style sass sheets" do
42
+ creator.perform
43
+ expect(File.exist?(app_path + "/sass/mobile")).to be(true)
44
+ end
45
+
46
+ it "renames the base style sheets to not include shipd" do
47
+ creator.perform
48
+ expect(File.exist?(app_path + "/sass/shipd-mobile.scss")).not_to be(true)
49
+ expect(File.exist?(app_path + "/sass/mobile.scss")).to be(true)
50
+ end
51
+
52
+ it "copies over partial templates from shipd_style" do
53
+ creator.perform
54
+ expect(File.exist?(app_path + "/templates/partials/carousel.mustache")).to be(true)
55
+ end
56
+ end
@@ -1,13 +1,16 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Prow::PageCompiler do
4
- let(:compiler) { Prow::PageCompiler.new(name, config, templates, compile_dir) }
5
- let(:full_configs) { JSON.parse(File.read(File.dirname(__FILE__) + "/support/pages.json"))['pages'] }
4
+ let(:compiler) { Prow::PageCompiler.new(page, templates, compile_dir) }
5
+ let(:page) { Prow::Page.new([name, config]) }
6
+ let(:paths) { Prow::Paths.new(File.dirname(__FILE__) + "/support/fixtures") }
7
+
8
+ let(:full_configs) { JSON.parse(File.read(paths.pages_config))['pages'] }
6
9
  let(:config) { full_configs[name]}
7
10
  let(:name) { 'index.html' }
8
- let(:templates) { Prow::Templates.new(File.dirname(__FILE__) + "/support/templates") }
9
- let(:compile_dir) { File.dirname(__FILE__) + "/support/public" }
10
- let(:file_path) { File.dirname(__FILE__) + "/support/public/index.html" }
11
+ let(:templates) { Prow::Templates.new(paths.templates) }
12
+ let(:compile_dir) { paths.compile }
13
+ let(:file_path) { paths.compile + "/index.html" }
11
14
 
12
15
  before { File.delete(file_path) if File.exist?(file_path) }
13
16
 
@@ -1,21 +1,19 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  RSpec.describe Prow::PagesCompiler do
4
- let(:pages) { Prow::PagesCompiler.new(config_path, templates_path, public_path) }
5
- let(:config_path) { File.dirname(__FILE__) + "/support/pages.json" }
6
- let(:templates_path) { File.dirname(__FILE__) + "/support/templates" }
7
- let(:public_path) { File.dirname(__FILE__) + "/support/public" }
4
+ let(:pages) { Prow::PagesCompiler.new(paths) }
5
+ let(:paths) { Prow::Paths.new(File.dirname(__FILE__) + "/support/fixtures") }
8
6
 
9
7
  describe '#compile' do
10
8
  before { pages.compile }
11
9
 
12
10
  it "compiles entries in pages.json" do
13
- expect(File.exist?(public_path + "/index.html")).to be(true)
14
- expect(File.exist?(public_path + "/foo.html")).to be(true)
11
+ expect(File.exist?(paths.compile + "/index.html")).to be(true)
12
+ expect(File.exist?(paths.compile + "/foo.html")).to be(true)
15
13
  end
16
14
 
17
15
  it "does not compile pages that are not included in pages.json" do
18
- expect(File.exist?(public_path + "/bar.html")).to be(false)
16
+ expect(File.exist?(paths.compile + "/bar.html")).to be(false)
19
17
  end
20
18
  end
21
19
  end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Prow::Paths do
4
+ let(:paths) { Prow::Paths.new }
5
+ let(:source_path) { `pwd`.chomp }
6
+
7
+ context 'when initialized with no paths' do
8
+ it "uses pwd for the source directory" do
9
+ expect(paths.source).to eq(`pwd`.chomp)
10
+ end
11
+
12
+ it "uses public in pwd in the compile directory" do
13
+ expect(paths.compile).to eq(paths.source + "/public")
14
+ end
15
+ end
16
+
17
+ context 'when initialized with a source path' do
18
+ let(:source_path) { File.dirname(__FILE__) + "/support" }
19
+ let(:paths) { Prow::Paths.new(source_path) }
20
+
21
+ it "uses that for the source_directory" do
22
+ expect(paths.source).to eq(source_path)
23
+ end
24
+
25
+ it "uses the source path to construct a compile path" do
26
+ expect(paths.compile).to eq(source_path + "/public")
27
+ end
28
+ end
29
+
30
+ context 'when both paths are initialized' do
31
+ let(:compile_path) { File.dirname(__FILE__) + "/support/public" }
32
+ let(:paths) { Prow::Paths.new(source_path, compile_path) }
33
+
34
+ it "uses what it is given" do
35
+ expect(paths.source).to eq(source_path)
36
+ expect(paths.compile).to eq(compile_path)
37
+ end
38
+ end
39
+
40
+ describe 'composite paths' do
41
+ it "constructs a templates path from the source directory" do
42
+ expect(paths.templates).to eq(source_path + "/templates")
43
+ end
44
+
45
+ it "contructs a sass path from the source directory" do
46
+ expect(paths.sass). to eq(source_path + "/sass")
47
+ end
48
+
49
+ it "constructs a configuration directory from the source" do
50
+ expect(paths.config). to eq(source_path + "/config")
51
+ end
52
+
53
+ it "constructs a pages_config from the config path" do
54
+ expect(paths.pages_config).to eq(source_path + "/config/pages.json")
55
+ end
56
+ end
57
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,9 @@
1
1
  require_relative "../lib/prow"
2
-
3
- #require 'nokogiri'
2
+ $VERBOSE = nil # to silence warnings from Celluloid
4
3
 
5
4
  RSpec.configure do |config|
5
+ #config.full_backtrace = true
6
+
6
7
  config.expect_with :rspec do |expectations|
7
8
  expectations.include_chain_clauses_in_custom_matcher_descriptions = true
8
9
  end
File without changes
File without changes
File without changes
@@ -0,0 +1 @@
1
+ Hello Header World
@@ -3,14 +3,16 @@ require 'spec_helper'
3
3
  RSpec.describe Prow::Template do
4
4
  let(:template) { Prow::Template.new(path, templates_path) }
5
5
  let(:path) { templates_path + "/layouts/default.mustache" }
6
- let(:templates_path) { File.dirname(__FILE__) + "/support/templates" }
6
+ let(:templates_path) { File.dirname(__FILE__) + "/support/fixtures/templates" }
7
7
 
8
8
  it "derives the type from the first directory name" do
9
9
  expect(template.type).to eq("layouts")
10
10
  end
11
11
 
12
12
  it "returns lazy the template content" do
13
- expect(template.instance_variable_get('@content')).to eq(nil)
13
+ silence_warnings do
14
+ expect(template.instance_variable_get('@content')).to eq(nil)
15
+ end
14
16
  expect(template.content).to eq(File.read(path))
15
17
  expect(template.instance_variable_get('@content')).not_to eq(nil)
16
18
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  RSpec.describe Prow::Templates do
4
4
  let(:templates) { Prow::Templates.new(templates_path) }
5
- let(:templates_path) { File.dirname(__FILE__) + "/support/templates" }
5
+ let(:templates_path) { File.dirname(__FILE__) + "/support/fixtures/templates" }
6
6
 
7
7
  describe '#layout' do
8
8
  it "returns layouts via name" do
@@ -29,7 +29,7 @@ RSpec.describe Prow::Templates do
29
29
 
30
30
  describe '#partials' do
31
31
  it "returns all of the partials" do
32
- expect(templates.partials.size).to eq(2)
32
+ expect(templates.partials.size).to be > 2
33
33
  expect(templates.partials.map(&:name)).to include("things/it", "header")
34
34
  end
35
35
  end
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ describe Prow::Watcher do
4
+ let(:runner) { Prow::Watcher.new(paths) }
5
+ let(:paths) { Prow::Paths.new(File.dirname(__FILE__) + "/support/fixtures" )}
6
+
7
+ before do
8
+ # create some initial content
9
+ Prow::PagesCompiler.new(paths).compile
10
+ end
11
+
12
+ after do
13
+ runner.stop
14
+ end
15
+
16
+ describe '#start' do
17
+ context 'when templates change' do
18
+ after do
19
+ File.open(header_template_path, 'w') do |f|
20
+ f.write(original_header_content)
21
+ end
22
+ end
23
+
24
+ let(:header_template_path) { paths.templates + "/partials/header.mustache" }
25
+ let(:new_header_content) { "Yo, header!" }
26
+ let(:original_header_content) { "Hello Header World\n" }
27
+
28
+ it "regenerates pages" do
29
+ runner.start
30
+ File.open(header_template_path, 'w') do |f|
31
+ f.write(new_header_content)
32
+ end
33
+ sleep 1
34
+ expect(File.read(paths.compile + "/index.html")).to include(new_header_content)
35
+ end
36
+ end
37
+
38
+ context 'when the pages.json changes' do
39
+ it "regenerates pages"
40
+ end
41
+
42
+ context 'when sass files change' do
43
+ let(:scss_path) { paths.sass + "/foo.scss" }
44
+ let(:stylesheet_path) { paths.compile + "/stylesheets/foo.css" }
45
+
46
+ before do
47
+ File.delete(scss_path) if File.exist?(scss_path)
48
+ File.delete(stylesheet_path) if File.exist?(stylesheet_path)
49
+ end
50
+
51
+ it "watches sass files and regenerates stylesheets" do
52
+ runner.start
53
+ File.open(scss_path, 'w') {|f| f.write("body {background: red;}") }
54
+ sleep 1
55
+ expect(File.exist?(stylesheet_path)).to be(true)
56
+ end
57
+ end
58
+ end
59
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kane Baccigalupi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-13 00:00:00.000000000 Z
11
+ date: 2015-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: shipd_style
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: vienna
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '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'
55
+ - !ruby/object:Gem::Dependency
56
+ name: listen
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: bundler
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -101,30 +129,47 @@ files:
101
129
  - README.md
102
130
  - Rakefile
103
131
  - lib/prow.rb
104
- - lib/prow/default_paths.rb
132
+ - lib/prow/app_builder/create.rb
133
+ - lib/prow/app_builder/style_compiler.rb
134
+ - lib/prow/app_builder/templates/config.ru
135
+ - lib/prow/app_builder/templates/config/pages.json
136
+ - lib/prow/app_builder/templates/templates/layouts/default.mustache
137
+ - lib/prow/app_builder/templates/templates/pages/index.mustache
138
+ - lib/prow/page.rb
105
139
  - lib/prow/page_compiler.rb
106
140
  - lib/prow/page_configs.rb
107
141
  - lib/prow/pages_compiler.rb
142
+ - lib/prow/paths.rb
108
143
  - lib/prow/renderer.rb
144
+ - lib/prow/silence_warnings.rb
145
+ - lib/prow/tasks.rb
109
146
  - lib/prow/template.rb
110
147
  - lib/prow/templates.rb
111
148
  - lib/prow/version.rb
149
+ - lib/prow/watcher.rb
150
+ - lib/tasks/prow.rake
112
151
  - prow.gemspec
152
+ - spec/app_builder/create_spec.rb
113
153
  - spec/page_compiler_spec.rb
114
154
  - spec/pages_compiler_spec.rb
155
+ - spec/paths_spec.rb
115
156
  - spec/spec_helper.rb
116
- - spec/support/pages.json
117
- - spec/support/public/.keep
118
- - spec/support/templates/index.mustache
119
- - spec/support/templates/layouts/default.mustache
120
- - spec/support/templates/layouts/foo.mustache
121
- - spec/support/templates/pages/bar.mustache
122
- - spec/support/templates/pages/foo.mustache
123
- - spec/support/templates/pages/index.mustache
124
- - spec/support/templates/partials/header.mustache
125
- - spec/support/templates/partials/things/it.mustache
157
+ - spec/support/fixtures/app/.gitkeep
158
+ - spec/support/fixtures/config/pages.json
159
+ - spec/support/fixtures/public/.keep
160
+ - spec/support/fixtures/public/stylesheets/.gitkeep
161
+ - spec/support/fixtures/sass/.gitkeep
162
+ - spec/support/fixtures/templates/layouts/default.mustache
163
+ - spec/support/fixtures/templates/layouts/foo.mustache
164
+ - spec/support/fixtures/templates/pages/bar.mustache
165
+ - spec/support/fixtures/templates/pages/foo.mustache
166
+ - spec/support/fixtures/templates/pages/index.mustache
167
+ - spec/support/fixtures/templates/partials/header.mustache
168
+ - spec/support/fixtures/templates/partials/temp.mustache
169
+ - spec/support/fixtures/templates/partials/things/it.mustache
126
170
  - spec/template_spec.rb
127
171
  - spec/templates_spec.rb
172
+ - spec/watcher_spec.rb
128
173
  homepage: https://github.com/shipd/prow
129
174
  licenses:
130
175
  - MIT
@@ -145,23 +190,29 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
190
  version: '0'
146
191
  requirements: []
147
192
  rubyforge_project:
148
- rubygems_version: 2.2.2
193
+ rubygems_version: 2.4.3
149
194
  signing_key:
150
195
  specification_version: 4
151
196
  summary: Prow is a front end development framework, that can also server static websites
152
197
  test_files:
198
+ - spec/app_builder/create_spec.rb
153
199
  - spec/page_compiler_spec.rb
154
200
  - spec/pages_compiler_spec.rb
201
+ - spec/paths_spec.rb
155
202
  - spec/spec_helper.rb
156
- - spec/support/pages.json
157
- - spec/support/public/.keep
158
- - spec/support/templates/index.mustache
159
- - spec/support/templates/layouts/default.mustache
160
- - spec/support/templates/layouts/foo.mustache
161
- - spec/support/templates/pages/bar.mustache
162
- - spec/support/templates/pages/foo.mustache
163
- - spec/support/templates/pages/index.mustache
164
- - spec/support/templates/partials/header.mustache
165
- - spec/support/templates/partials/things/it.mustache
203
+ - spec/support/fixtures/app/.gitkeep
204
+ - spec/support/fixtures/config/pages.json
205
+ - spec/support/fixtures/public/.keep
206
+ - spec/support/fixtures/public/stylesheets/.gitkeep
207
+ - spec/support/fixtures/sass/.gitkeep
208
+ - spec/support/fixtures/templates/layouts/default.mustache
209
+ - spec/support/fixtures/templates/layouts/foo.mustache
210
+ - spec/support/fixtures/templates/pages/bar.mustache
211
+ - spec/support/fixtures/templates/pages/foo.mustache
212
+ - spec/support/fixtures/templates/pages/index.mustache
213
+ - spec/support/fixtures/templates/partials/header.mustache
214
+ - spec/support/fixtures/templates/partials/temp.mustache
215
+ - spec/support/fixtures/templates/partials/things/it.mustache
166
216
  - spec/template_spec.rb
167
217
  - spec/templates_spec.rb
218
+ - spec/watcher_spec.rb
@@ -1,19 +0,0 @@
1
- module Prow
2
- class DefaultPaths
3
- def base_path
4
- File.dirname(__FILE__) + "/.."
5
- end
6
-
7
- def config_path
8
- "#{base_path}/pages.json"
9
- end
10
-
11
- def templates_path
12
- "#{base_path}/templates"
13
- end
14
-
15
- def compiled_path
16
- "#{base_path}/public"
17
- end
18
- end
19
- end
@@ -1,3 +0,0 @@
1
- <h4>Hello, home page!</h4>
2
- {{data_sample}}
3
- {{> thingy/it}}
@@ -1 +0,0 @@
1
- <div id='header'>Hello Header World</div>