pieces 0.2.3 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7161643008f10d4bbf17b26d79e932f4372f004b
4
- data.tar.gz: 2c6d081965d88f549c94de4af7b9ad2be023b191
3
+ metadata.gz: ef88dd45bb8a84d1b98ea3ec868532c80a8ddec2
4
+ data.tar.gz: d879f16096b632ce1ead38a69ff11bd45da962bc
5
5
  SHA512:
6
- metadata.gz: e7dbcb86cff8f805379f89749dc21d49a2be17ae1afc458fa8b2e681c632789db36c5abf19c15dd098d6926443fe70d7397c17b328939a9b4dd2bb8c7810eaf8
7
- data.tar.gz: 0d3e2772554880ef914e915cc1fe82674dca8f7e06c141b132cbfbfb5d4d60656ca2b7abaffa81bdd097011cf916a29a726043c611492a95ac9fbee77baf14da
6
+ metadata.gz: 4dd85e804b3d6dbc9815f24466040e568d3b271d62f5690d96ae7c09a57870e1b08a508defc562c7d7b72f765c32cced51b915d03f52a7ca7612de51989116c9
7
+ data.tar.gz: 4526624987dc7b634928bacfca58709c99998f26c093e6c7c67f3b08065da174837511894ce906652d7b4c8d769f3b8be869595749b20b369bfb00007fa4c01b
data/bin/pieces CHANGED
@@ -1,18 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'bundler/setup'
4
- require 'pieces'
4
+ require 'pieces/cli'
5
5
 
6
- case ARGV[0]
7
- when 'init'
8
- init_path = ARGV[1] || '.'
9
- Pieces::Generator.new.init(path: init_path)
10
- puts "Pieces placed in #{init_path}"
11
- when 'build'
12
- print 'Building pieces into current directory...'
13
- Pieces::Builder.new.build(path: '.')
14
- puts 'done.'
15
- else
16
- puts 'Run either `pieces init` or `pieces build`'
17
- exit(1)
18
- end
6
+ Pieces::CLI.start(ARGV)
@@ -1,7 +1,9 @@
1
- require 'pieces/version'
1
+ require 'pieces/compilers/route_compiler'
2
+ require 'pieces/compilers/style_compiler'
2
3
  require 'pieces/builder'
3
4
  require 'pieces/generator'
4
5
  require 'pieces/tilt_extension'
6
+ require 'pieces/version'
5
7
 
6
8
  module Pieces
7
9
  end
@@ -3,70 +3,46 @@ require 'yaml'
3
3
 
4
4
  module Pieces
5
5
  class Builder
6
- def build(config)
7
- Dir.chdir(config[:path]) do
8
- save_files(routes.reduce({}) { |files, (name, route)| build_route(files, name, route) })
9
- end
6
+ def self.build(config)
7
+ new(config).build
10
8
  end
11
9
 
12
- private
10
+ attr_reader :path
11
+ attr_reader :route_config
13
12
 
14
- def route_config
15
- @route_config ||= YAML.load_file('config/routes.yml')
13
+ def initialize(config)
14
+ @path = config[:path]
15
+ @route_config ||= YAML.load_file("#{path}/config/routes.yml")
16
16
  end
17
17
 
18
- def globals
19
- route_config['_global'] or {}
18
+ def build
19
+ save_files(build_files)
20
20
  end
21
21
 
22
- def routes
23
- route_config.reject { |key, _| key =~ /^_/ }
24
- end
25
-
26
- def build_route(files, name, route)
27
- route['_pieces'].reduce(files) do |files, piece|
28
- piece, data = piece.keys.first, piece.values.first
29
- data['_global'] = globals.merge(route.delete('_global') || {}).merge(data['_global'] || {})
30
-
31
- Dir["pieces/*/*.{css,scss,sass,less}"].each do |file|
32
- files['compiled.css'] = { contents: '', type: 'css', compiled: [] } unless files.has_key?('compiled.css')
33
-
34
- unless files['compiled.css'][:compiled].include?(file)
35
- files['compiled.css'][:contents] << Tilt.new(file).render
36
- files['compiled.css'][:compiled] << file
37
- end
38
- end
22
+ private
39
23
 
40
- files["#{name}.html"] = { contents: '', type: 'html' } unless files.has_key?("#{name}.html")
41
- view_model = OpenStruct.new(data['_global'].merge(data))
42
- content = Tilt.new(piece_path(piece)).render(view_model) { yield_route_pieces(data) }
43
- files["#{name}.html"][:contents] << content
24
+ def build_files
25
+ files = {}
26
+ StyleCompiler.new(path: path).compile(files)
27
+ route_compiler = RouteCompiler.new(path: path, globals: route_config['_global'])
44
28
 
45
- files
29
+ routes.reduce(files) do |files, (name, route)|
30
+ route_compiler.compile(files, name, route)
46
31
  end
47
32
  end
48
33
 
49
- def piece_path(piece)
50
- Dir["pieces/{#{piece},#{piece}/#{piece},application/#{piece}}.html.*"].first
51
- end
52
-
53
- def yield_route_pieces(parent_data)
54
- return '' unless parent_data.has_key?('_pieces')
55
-
56
- parent_data['_pieces'].reduce('') do |content, piece|
57
- piece, data = piece.keys.first, piece.values.first
58
- data['_global'] = (parent_data['_global'] || {}).merge(data['_global'] || {})
59
- view_model = OpenStruct.new(data['_global'].merge(data))
60
- content << Tilt.new(piece_path(piece)).render(view_model) { yield_route_pieces(data) }
61
- end
34
+ def routes
35
+ route_config.reject { |key, _| key =~ /^_/ }
62
36
  end
63
37
 
64
38
  def save_files(files)
65
- FileUtils.rm_rf('build')
66
- Dir.mkdir('build')
39
+ Dir.chdir(path) do
40
+ FileUtils.rm_rf('build')
41
+ Dir.mkdir('build')
67
42
 
68
- files.each do |name, file|
69
- save_file(name, file)
43
+ files.each do |name, file|
44
+ save_file(name, file)
45
+ end
70
46
  end
71
47
  end
72
48
 
@@ -0,0 +1,20 @@
1
+ require 'pieces'
2
+ require 'thor'
3
+
4
+ module Pieces
5
+ class CLI < Thor
6
+ desc 'init DIR', 'create new pieces app in DIR'
7
+ def init(path = '.')
8
+ print "Placing new pieces in #{path}... "
9
+ Pieces::Generator.init(path: path)
10
+ puts 'done.'
11
+ end
12
+
13
+ desc 'build DIR', 'build pieces in DIR'
14
+ def build(path = '.')
15
+ print "Building pieces into #{path}... "
16
+ Pieces::Builder.build(path: path)
17
+ puts 'done.'
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,42 @@
1
+ module Pieces
2
+ class RouteCompiler
3
+ attr_reader :path
4
+ attr_reader :globals
5
+
6
+ def initialize(config)
7
+ @path = config[:path] || Dir.pwd
8
+ @globals = config[:globals] || {}
9
+ end
10
+
11
+ def compile(files, name, route)
12
+ route['_pieces'].reduce(files) do |files, piece|
13
+ piece, data = piece.keys.first, piece.values.first
14
+ data['_global'] = globals.merge(route.delete('_global') || {}).merge(data['_global'] || {})
15
+
16
+ files["#{name}.html"] = { contents: '', type: 'html' } unless files.has_key?("#{name}.html")
17
+ view_model = OpenStruct.new(data['_global'].merge(data))
18
+ content = Tilt.new(piece_path(piece)).render(view_model) { yield_route_pieces(data) }
19
+ files["#{name}.html"][:contents] << content
20
+
21
+ files
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def piece_path(piece)
28
+ Dir["#{path}/pieces/{#{piece},#{piece}/#{piece},application/#{piece}}.html.*"].first
29
+ end
30
+
31
+ def yield_route_pieces(parent_data)
32
+ return '' unless parent_data.has_key?('_pieces')
33
+
34
+ parent_data['_pieces'].reduce('') do |content, piece|
35
+ piece, data = piece.keys.first, piece.values.first
36
+ data['_global'] = (parent_data['_global'] || {}).merge(data['_global'] || {})
37
+ view_model = OpenStruct.new(data['_global'].merge(data))
38
+ content << Tilt.new(piece_path(piece)).render(view_model) { yield_route_pieces(data) }
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,19 @@
1
+ module Pieces
2
+ class StyleCompiler
3
+ attr_reader :path
4
+
5
+ def initialize(config = {})
6
+ @path = config[:path] || Dir.pwd
7
+ end
8
+
9
+ def compile(files)
10
+ files['compiled.css'] = { contents: '', type: 'css' }
11
+
12
+ Dir["#{path}/pieces/*/*.{css,scss,sass,less}"].each do |file|
13
+ files['compiled.css'][:contents] << Tilt.new(file).render
14
+ end
15
+
16
+ files
17
+ end
18
+ end
19
+ end
@@ -1,13 +1,16 @@
1
1
  module Pieces
2
- class Generator
3
- def init(config)
4
- FileUtils.mkdir_p(config[:path])
2
+ module Generator
3
+ extend self
4
+
5
+ def init(config = {})
6
+ path = config[:path] || Dir.pwd
7
+ FileUtils.mkdir_p(path)
5
8
 
6
9
  Dir["#{example_path}/{config,layouts,pieces}"].each do |dir|
7
- FileUtils.cp_r(dir, config[:path])
10
+ FileUtils.cp_r(dir, path)
8
11
  end
9
12
 
10
- FileUtils.cp("#{example_path}/Gemfile", "#{config[:path]}/Gemfile")
13
+ FileUtils.cp("#{example_path}/Gemfile", "#{path}/Gemfile")
11
14
  end
12
15
 
13
16
  private
@@ -1,3 +1,3 @@
1
1
  module Pieces
2
- VERSION = '0.2.3'
2
+ VERSION = '0.2.4'
3
3
  end
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.require_paths = ['lib']
18
18
 
19
19
  spec.add_dependency 'tilt', '~> 2.0.1'
20
+ spec.add_dependency 'thor', '~> 0.19.1'
20
21
 
21
22
  spec.add_development_dependency 'bundler'
22
23
  spec.add_development_dependency 'codeclimate-test-reporter'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pieces
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luke Morton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-06 00:00:00.000000000 Z
11
+ date: 2015-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tilt
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 2.0.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.19.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.19.1
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -140,6 +154,9 @@ files:
140
154
  - examples/original/pieces/posts/posts.html.erb
141
155
  - lib/pieces.rb
142
156
  - lib/pieces/builder.rb
157
+ - lib/pieces/cli.rb
158
+ - lib/pieces/compilers/route_compiler.rb
159
+ - lib/pieces/compilers/style_compiler.rb
143
160
  - lib/pieces/generator.rb
144
161
  - lib/pieces/tilt_extension.rb
145
162
  - lib/pieces/version.rb