pyro 0.8.1 → 0.8.2
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/.gitignore +1 -0
- data/.travis.yml +3 -0
- data/README.md +8 -7
- data/Rakefile +0 -2
- data/bin/pyro +12 -9
- data/lib/pyro.rb +23 -18
- data/lib/pyro/assets.rb +131 -0
- data/lib/pyro/server.rb +4 -10
- data/pyro.gemspec +7 -3
- data/template/lib/index.erb +1 -1
- data/template/lib/stylesheets/style.scss +7 -0
- data/test/test_helper.rb +8 -0
- data/test/test_pyro.rb +18 -0
- metadata +28 -11
- data/lib/pyro/assets/scripts.rb +0 -47
- data/lib/pyro/assets/stylesheets.rb +0 -53
- data/lib/pyro/assets/templates.rb +0 -46
- data/template/lib/stylesheets/style.css +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6bd1bf4ed996354ed3062c91b4a02b715134ac06
|
4
|
+
data.tar.gz: b8b339877b19d8bbbd5f88bcb3ee6bee10703557
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 50a3a7a9826d8a712b9a66093a361e19c2794891d7463dcab2543139f78b7873e0d738d2e515b37d41db8cef969abd85b371da36160bd5efd5a073f1b6f9cb1c
|
7
|
+
data.tar.gz: 0380b829150a09f559f78c12f4225d7f398db8bb6ff1ccc6535b3b9d054a7c74f42931967153ef0fd6c5d94b91527c3083b4903db97251aebd0d0310424586ba
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,13 +1,15 @@
|
|
1
|
-
> **DISCLAIMER**: A lot of this is still being developed.
|
2
|
-
|
3
|
-
> Consider this readme a preview of code to come. (see: [Readme Driven Development](http://tom.preston-werner.com/2010/08/23/readme-driven-development.html))
|
4
|
-
|
5
|
-
---
|
6
|
-
|
7
1
|
# Pyro
|
8
2
|
|
9
3
|
> Build Ember.js apps with CoffeeScript and Sass... without all that damn configuration.
|
10
4
|
|
5
|
+
[](http://badge.fury.io/rb/pyro)
|
6
|
+
[](https://gemnasium.com/jarrodtaylor/pyro)
|
7
|
+
[](https://codeclimate.com/github/jarrodtaylor/pyro)
|
8
|
+
[](https://travis-ci.org/jarrodtaylor/pyro)
|
9
|
+
[](https://coveralls.io/r/jarrodtaylor/pyro?branch=master)
|
10
|
+
|
11
|
+
---
|
12
|
+
|
11
13
|
Pyro is a Ruby gem for building Ember.js apps. Under the hood, it's a build script wrapped in a web server.
|
12
14
|
|
13
15
|
## tl;dr
|
@@ -75,7 +77,6 @@ Pyro uses file extensions to determine how to compile your and link to your code
|
|
75
77
|
- CoffeeScript (.coffee)
|
76
78
|
- JavaScript (.js)
|
77
79
|
- Sass (.scss)
|
78
|
-
- Less (.less)
|
79
80
|
- CSS (.css)
|
80
81
|
- Handlebars (.hbs, .handlebars, .x-handlebars)
|
81
82
|
|
data/Rakefile
CHANGED
data/bin/pyro
CHANGED
@@ -4,31 +4,34 @@ require 'thor'
|
|
4
4
|
require 'pyro'
|
5
5
|
|
6
6
|
class PyroCLI < Thor
|
7
|
-
|
7
|
+
|
8
8
|
desc 'new NAME', 'Creats a new app'
|
9
9
|
def new(name)
|
10
10
|
FileUtils.cp_r("#{File.dirname(__FILE__)}/../template", name)
|
11
11
|
end
|
12
12
|
|
13
|
-
desc 'build', 'Builds
|
14
|
-
def build
|
15
|
-
Pyro.build
|
13
|
+
desc 'build DIR', 'Builds an app for production'
|
14
|
+
def build(dir = '.')
|
15
|
+
Pyro.build('production', false, dir)
|
16
16
|
end
|
17
17
|
|
18
|
-
desc 'serve', 'Starts a Pyro app on localhost, --fast skips asset reloading'
|
18
|
+
desc 'serve DIR', 'Starts a Pyro app on localhost, --fast skips asset reloading'
|
19
19
|
option :fast
|
20
|
-
def serve
|
20
|
+
def serve(dir = '.')
|
21
21
|
require 'pyro/server'
|
22
|
-
|
22
|
+
|
23
|
+
PyroServer.set :src_folder, dir
|
24
|
+
PyroServer.set :public_folder, "#{PyroServer.settings.src_folder}/builds/development"
|
25
|
+
|
23
26
|
if options[:fast]
|
24
27
|
PyroServer.set :fast, true
|
25
28
|
else
|
26
29
|
PyroServer.set :fast, false
|
27
30
|
end
|
28
|
-
|
31
|
+
|
29
32
|
PyroServer.run!
|
30
33
|
end
|
31
|
-
|
34
|
+
|
32
35
|
end
|
33
36
|
|
34
37
|
PyroCLI.start(ARGV)
|
data/lib/pyro.rb
CHANGED
@@ -1,33 +1,38 @@
|
|
1
1
|
require 'fileutils'
|
2
|
-
require 'pyro/assets
|
3
|
-
require 'pyro/assets/stylesheets'
|
4
|
-
require 'pyro/assets/templates'
|
2
|
+
require 'pyro/assets'
|
5
3
|
|
6
4
|
module Pyro
|
7
5
|
include Pyro::Assets
|
8
|
-
|
9
|
-
def self.build(target = 'production', fast = false)
|
10
|
-
|
6
|
+
|
7
|
+
def self.build(target = 'production', fast = false, working_dir = '.')
|
8
|
+
@timestamp = Time.now.strftime("%Y%m%d%H%M%S")
|
9
|
+
@working_dir = working_dir
|
10
|
+
|
11
|
+
unless File.exists? "#{@working_dir}/lib/index.erb"
|
11
12
|
raise 'Can\'t find an index.erb file to build.'
|
12
13
|
end
|
13
|
-
|
14
|
-
$timestamp = Time.now.strftime("%Y%m%d%H%M%S")
|
15
|
-
|
14
|
+
|
16
15
|
if target == 'development'
|
17
|
-
|
16
|
+
@build_dir = "#{@working_dir}/builds/development"
|
18
17
|
else
|
19
|
-
|
18
|
+
@build_dir = "#{@working_dir}/builds/production/#{@timestamp}"
|
20
19
|
end
|
21
|
-
|
22
|
-
FileUtils.mkdir_p(
|
23
|
-
|
20
|
+
|
21
|
+
FileUtils.mkdir_p(@build_dir)
|
22
|
+
|
24
23
|
unless fast
|
25
|
-
FileUtils.cp_r(
|
26
|
-
FileUtils.cp_r(
|
24
|
+
FileUtils.cp_r("#{@working_dir}/assets/.", @build_dir)
|
25
|
+
FileUtils.cp_r("#{@working_dir}/vendor", @build_dir)
|
26
|
+
end
|
27
|
+
|
28
|
+
File.open("#{@build_dir}/index.html", 'w+') do |index|
|
29
|
+
index.write(
|
30
|
+
ERB.new(File.read "#{@working_dir}/lib/index.erb").result(binding)
|
31
|
+
)
|
27
32
|
end
|
28
33
|
|
29
|
-
|
30
|
-
|
34
|
+
if target == 'production'
|
35
|
+
compress(@build_dir)
|
31
36
|
end
|
32
37
|
end
|
33
38
|
end
|
data/lib/pyro/assets.rb
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'coffee-script'
|
3
|
+
require 'jsmin'
|
4
|
+
require 'sass'
|
5
|
+
|
6
|
+
module Pyro
|
7
|
+
module Assets
|
8
|
+
def self.included(base)
|
9
|
+
base.extend(ClassMethods)
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
|
14
|
+
def script(*args)
|
15
|
+
tags = ''
|
16
|
+
find_files(args.first, 'js,coffee').each do |file|
|
17
|
+
tags << compile(file, 'js')
|
18
|
+
end
|
19
|
+
tags
|
20
|
+
end
|
21
|
+
|
22
|
+
def stylesheet(*args)
|
23
|
+
tags = ''
|
24
|
+
find_files(args.first, 'css,scss').each do |file|
|
25
|
+
tags << compile(file, 'css')
|
26
|
+
end
|
27
|
+
tags
|
28
|
+
end
|
29
|
+
|
30
|
+
def template(*args)
|
31
|
+
tags = ''
|
32
|
+
find_files(args.first, 'hbs,handlebars,x-handlebars').each do |file|
|
33
|
+
tags << "<script type='text/x-handlebars' data-template-name='#{parse_name(args.first, file)}'>\n"
|
34
|
+
tags << File.read(file)
|
35
|
+
tags << "\n</script>\n"
|
36
|
+
end
|
37
|
+
tags
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def find_files(args, extensions)
|
43
|
+
files = []
|
44
|
+
if args[:src]
|
45
|
+
files << "#{@working_dir}/lib/#{args[:src]}"
|
46
|
+
elsif args[:dir]
|
47
|
+
Dir.glob("#{@working_dir}/lib/#{args[:dir]}/**/*.{#{extensions}}").each do |f|
|
48
|
+
files << f
|
49
|
+
end
|
50
|
+
end
|
51
|
+
files
|
52
|
+
end
|
53
|
+
|
54
|
+
def parse_path(path)
|
55
|
+
p = {}
|
56
|
+
p[:file_name] = path.split('/').last
|
57
|
+
p[:extension] = path.split('.').last
|
58
|
+
p[:name] = p[:file_name].sub(".#{p[:extension]}", '')
|
59
|
+
p[:path] = path.sub(p[:file_name], '')
|
60
|
+
p[:build_path] = p[:path].sub('./', "#{@build_dir}/")
|
61
|
+
p[:contents] = File.read(path)
|
62
|
+
p
|
63
|
+
end
|
64
|
+
|
65
|
+
def parse_name(args, file)
|
66
|
+
if args[:name]
|
67
|
+
name = args[:name]
|
68
|
+
elsif args[:src]
|
69
|
+
name = f.split('/').last.split('.').first
|
70
|
+
elsif args[:dir]
|
71
|
+
name = file.sub("#{@working_dir}/lib/#{args[:dir]}/", '').split('.').first
|
72
|
+
else
|
73
|
+
name = 'name-not-found'
|
74
|
+
end
|
75
|
+
name
|
76
|
+
end
|
77
|
+
|
78
|
+
def generate_file(path_attrs, extension)
|
79
|
+
FileUtils.mkdir_p(path_attrs[:build_path])
|
80
|
+
File.open("#{path_attrs[:build_path]}/#{path_attrs[:name]}.#{extension}", 'w+') do |f|
|
81
|
+
f.write(path_attrs[:contents])
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def generate_link(path, extension)
|
86
|
+
path = path.sub(@working_dir, '')
|
87
|
+
case extension
|
88
|
+
when 'js'
|
89
|
+
"<script src='#{path}?#{@timestamp}' type='text/javascript'></script>"
|
90
|
+
when 'css'
|
91
|
+
"<link rel='stylesheet' href='#{path}?#{@timestamp}' type='text/css' />"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def compile(file, extension)
|
96
|
+
path_attrs = parse_path(file)
|
97
|
+
|
98
|
+
case path_attrs[:extension]
|
99
|
+
when 'coffee'
|
100
|
+
path_attrs[:contents] = CoffeeScript.compile(path_attrs[:contents])
|
101
|
+
when 'scss'
|
102
|
+
path_attrs[:contents] = Sass::Engine.new( path_attrs[:contents],
|
103
|
+
{ style: :expanded,
|
104
|
+
syntax: :scss } ).render
|
105
|
+
end
|
106
|
+
generate_file(path_attrs, extension)
|
107
|
+
|
108
|
+
generate_link(file.gsub(path_attrs[:extension], extension), extension)
|
109
|
+
end
|
110
|
+
|
111
|
+
def compress(dir)
|
112
|
+
Dir.glob("#{dir}/**/*.js").each do |file|
|
113
|
+
contents = File.read(file)
|
114
|
+
File.open(file, 'w+') do |f|
|
115
|
+
f.write(JSMin.minify(contents).strip)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
Dir.glob("#{dir}/**/*.css").each do |file|
|
120
|
+
contents = File.read(file)
|
121
|
+
File.open(file, 'w+') do |f|
|
122
|
+
f.write(Sass::Engine.new( contents, { style: :compressed,
|
123
|
+
syntax: :scss } ).render)
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
data/lib/pyro/server.rb
CHANGED
@@ -4,20 +4,14 @@ require 'erb'
|
|
4
4
|
|
5
5
|
class PyroServer < Sinatra::Base
|
6
6
|
include Pyro
|
7
|
-
|
7
|
+
|
8
8
|
set :port, 5678
|
9
9
|
set :public_folder, './builds/development'
|
10
10
|
set :fast_build, false
|
11
|
-
|
12
|
-
#helpers do
|
13
|
-
# define_method(:script) { |*args| Pyro.script public_folder, args }
|
14
|
-
# define_method(:stylesheet) { |*args| Pyro.stylesheet args }
|
15
|
-
# define_method(:template) { |*args| Pyro.template args }
|
16
|
-
#end
|
17
|
-
|
11
|
+
|
18
12
|
get '/?' do
|
19
|
-
Pyro.build('development', settings.fast_build)
|
13
|
+
Pyro.build('development', settings.fast_build, settings.src_folder)
|
20
14
|
settings.fast_build = settings.fast
|
21
|
-
File.read(
|
15
|
+
File.read("#{settings.src_folder}/builds/development/index.html")
|
22
16
|
end
|
23
17
|
end
|
data/pyro.gemspec
CHANGED
@@ -4,11 +4,13 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |gem|
|
6
6
|
gem.name = "pyro"
|
7
|
-
gem.version = "0.8.
|
7
|
+
gem.version = "0.8.2"
|
8
8
|
gem.authors = "Jarrod Taylor"
|
9
9
|
gem.email = "jarrodtaylor@icloud.com"
|
10
|
-
gem.summary = "Build Ember.js apps with CoffeeScript and Sass... without all that damn configuration."
|
11
10
|
gem.homepage = "https://github.com/jarrodtaylor/pyro"
|
11
|
+
gem .license = 'MIT'
|
12
|
+
gem.summary = "Build Ember.js apps with CoffeeScript and Sass...
|
13
|
+
without all that damn configuration."
|
12
14
|
|
13
15
|
gem.files = `git ls-files`.split($/)
|
14
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
@@ -17,9 +19,11 @@ Gem::Specification.new do |gem|
|
|
17
19
|
|
18
20
|
gem.add_dependency 'coffee-script'
|
19
21
|
gem.add_dependency 'jsmin'
|
20
|
-
gem.add_dependency '
|
22
|
+
gem.add_dependency 'minitest'
|
21
23
|
gem.add_dependency 'rake'
|
22
24
|
gem.add_dependency 'sass'
|
23
25
|
gem.add_dependency 'sinatra'
|
24
26
|
gem.add_dependency 'thor'
|
27
|
+
|
28
|
+
gem.add_development_dependency 'coveralls'
|
25
29
|
end
|
data/template/lib/index.erb
CHANGED
data/test/test_helper.rb
ADDED
data/test/test_pyro.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
class TestPyro < Minitest::Test
|
2
|
+
|
3
|
+
def test_build
|
4
|
+
Pyro.build('development', false, './template')
|
5
|
+
assert Dir.exists?('./template/builds/development')
|
6
|
+
|
7
|
+
Pyro.build('production', false, './template')
|
8
|
+
assert Dir.exists?('./template/builds/production')
|
9
|
+
|
10
|
+
FileUtils.rm_rf('./template/builds')
|
11
|
+
refute Dir.exists?('./template/builds')
|
12
|
+
|
13
|
+
assert_raises RuntimeError do
|
14
|
+
Pyro.build
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pyro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jarrod Taylor
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-08-
|
11
|
+
date: 2013-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: coffee-script
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - '>='
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: coveralls
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
description:
|
112
126
|
email: jarrodtaylor@icloud.com
|
113
127
|
executables:
|
@@ -116,30 +130,32 @@ extensions: []
|
|
116
130
|
extra_rdoc_files: []
|
117
131
|
files:
|
118
132
|
- .gitignore
|
133
|
+
- .travis.yml
|
119
134
|
- Gemfile
|
120
135
|
- LICENSE
|
121
136
|
- README.md
|
122
137
|
- Rakefile
|
123
138
|
- bin/pyro
|
124
139
|
- lib/pyro.rb
|
125
|
-
- lib/pyro/assets
|
126
|
-
- lib/pyro/assets/stylesheets.rb
|
127
|
-
- lib/pyro/assets/templates.rb
|
140
|
+
- lib/pyro/assets.rb
|
128
141
|
- lib/pyro/server.rb
|
129
142
|
- pyro.gemspec
|
130
143
|
- template/assets/img/favicon.ico
|
131
144
|
- template/lib/app.coffee
|
132
145
|
- template/lib/index.erb
|
133
146
|
- template/lib/stylesheets/normalize.css
|
134
|
-
- template/lib/stylesheets/style.
|
147
|
+
- template/lib/stylesheets/style.scss
|
135
148
|
- template/lib/templates/application.hbs
|
136
149
|
- template/lib/templates/index.hbs
|
137
150
|
- template/vendor/ember/ember-1.0.0-rc.7.js
|
138
151
|
- template/vendor/ember/ember-data-0.13.js
|
139
152
|
- template/vendor/handlebars/handlebars-1.0.0.js
|
140
153
|
- template/vendor/jquery/jquery-1.9.1.js
|
154
|
+
- test/test_helper.rb
|
155
|
+
- test/test_pyro.rb
|
141
156
|
homepage: https://github.com/jarrodtaylor/pyro
|
142
|
-
licenses:
|
157
|
+
licenses:
|
158
|
+
- MIT
|
143
159
|
metadata: {}
|
144
160
|
post_install_message:
|
145
161
|
rdoc_options: []
|
@@ -157,9 +173,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
173
|
version: '0'
|
158
174
|
requirements: []
|
159
175
|
rubyforge_project:
|
160
|
-
rubygems_version: 2.0.
|
176
|
+
rubygems_version: 2.0.3
|
161
177
|
signing_key:
|
162
178
|
specification_version: 4
|
163
179
|
summary: Build Ember.js apps with CoffeeScript and Sass... without all that damn configuration.
|
164
|
-
test_files:
|
165
|
-
|
180
|
+
test_files:
|
181
|
+
- test/test_helper.rb
|
182
|
+
- test/test_pyro.rb
|
data/lib/pyro/assets/scripts.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
require 'coffee-script'
|
3
|
-
|
4
|
-
module Pyro
|
5
|
-
module Assets
|
6
|
-
def self.included(base)
|
7
|
-
base.extend(ClassMethods)
|
8
|
-
end
|
9
|
-
|
10
|
-
module ClassMethods
|
11
|
-
|
12
|
-
def script *args
|
13
|
-
args = args.first
|
14
|
-
|
15
|
-
scripts = []
|
16
|
-
scripts << "./lib/#{args[:src]}" if args[:src]
|
17
|
-
if args[:dir]
|
18
|
-
Dir.glob("./lib/#{args[:dir]}/**/*.{js,coffee}").each do |f|
|
19
|
-
scripts << f
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
tags = ''
|
24
|
-
scripts.each do |s|
|
25
|
-
file_name = s.split('/').last
|
26
|
-
extension = s.split('.').last
|
27
|
-
name = file_name.sub(".#{extension}", '')
|
28
|
-
path = s.sub(file_name, '')
|
29
|
-
build_path = path.sub('./', "#{$build_dir}/")
|
30
|
-
FileUtils.mkdir_p(build_path)
|
31
|
-
|
32
|
-
contents = File.read(s)
|
33
|
-
contents = CoffeeScript.compile(contents) if extension == 'coffee'
|
34
|
-
|
35
|
-
File.open("#{build_path}/#{name}.js", 'w+') do |f|
|
36
|
-
f.write(contents)
|
37
|
-
end
|
38
|
-
|
39
|
-
tags << "<script src='#{s.gsub(extension, 'js')}?#{$timestamp}' type='text/javascript'></script>"
|
40
|
-
end
|
41
|
-
|
42
|
-
tags
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
require 'less'
|
3
|
-
require 'sass'
|
4
|
-
|
5
|
-
module Pyro
|
6
|
-
module Assets
|
7
|
-
def self.included(base)
|
8
|
-
base.extend(ClassMethods)
|
9
|
-
end
|
10
|
-
|
11
|
-
module ClassMethods
|
12
|
-
|
13
|
-
def stylesheet *args
|
14
|
-
args = args.first
|
15
|
-
|
16
|
-
stylesheets = []
|
17
|
-
stylesheets << "./lib/#{args[:src]}" if args[:src]
|
18
|
-
if args[:dir]
|
19
|
-
Dir.glob("./lib/#{args[:dir]}/**/*.{css,scss,less}").each do |f|
|
20
|
-
stylesheets << f
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
tags = ''
|
25
|
-
stylesheets.each do |s|
|
26
|
-
file_name = s.split('/').last
|
27
|
-
extension = s.split('.').last
|
28
|
-
name = file_name.sub(".#{extension}", '')
|
29
|
-
path = s.sub(file_name, '')
|
30
|
-
build_path = path.sub('./', "#{$build_dir}/")
|
31
|
-
FileUtils.mkdir_p(build_path)
|
32
|
-
|
33
|
-
contents = File.read(s)
|
34
|
-
case extension
|
35
|
-
when 'scss'
|
36
|
-
contents = Sass::Engine.for_file(s, { style: :expanded }).render
|
37
|
-
when 'less'
|
38
|
-
contents = Less::Parser.new.parse(contents).to_css
|
39
|
-
end
|
40
|
-
|
41
|
-
File.open("#{build_path}/#{name}.css", 'w+') do |f|
|
42
|
-
f.write(contents)
|
43
|
-
end
|
44
|
-
|
45
|
-
tags << "<link rel='stylesheet' href='#{s.gsub(extension, 'css')}?#{$timestamp}' type='text/css' />"
|
46
|
-
end
|
47
|
-
|
48
|
-
tags
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
|
3
|
-
module Pyro
|
4
|
-
module Assets
|
5
|
-
def self.included(base)
|
6
|
-
base.extend(ClassMethods)
|
7
|
-
end
|
8
|
-
|
9
|
-
module ClassMethods
|
10
|
-
|
11
|
-
def template *args
|
12
|
-
args = args.first
|
13
|
-
|
14
|
-
templates = []
|
15
|
-
templates << "./lib/#{args[:src]}" if args[:src]
|
16
|
-
if args[:dir]
|
17
|
-
Dir.glob("./lib/#{args[:dir]}/**/*.{hbs, handlebars,x-handlebars}").each do |f|
|
18
|
-
templates << f
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
tags = ''
|
23
|
-
templates.each do |t|
|
24
|
-
contents = File.read t
|
25
|
-
|
26
|
-
if args[:name]
|
27
|
-
name = args[:name]
|
28
|
-
elsif args[:src]
|
29
|
-
name = t.split('/').last.split('.').first
|
30
|
-
elsif args[:dir]
|
31
|
-
name = t.sub("./lib/#{args[:dir]}/", '').split('.').first
|
32
|
-
else
|
33
|
-
name = 'name-not-found'
|
34
|
-
end
|
35
|
-
|
36
|
-
tags << "\n<script type='text/x-handlebars' data-template-name='#{name}'>\n"
|
37
|
-
tags << contents
|
38
|
-
tags << "\n</script>\n"
|
39
|
-
end
|
40
|
-
|
41
|
-
tags
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|