prow 0.1.0 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
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>