tree_renderer 0.0.1 → 1.0.1

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: dc6785fc4ea7811924ce0977258b93cc628f69e3
4
- data.tar.gz: 994f9a510e223d12485179181d53c65882171d1e
3
+ metadata.gz: e34039c1c00ce4efc838289475304d270b0f0cd0
4
+ data.tar.gz: 63de550492c09c8e55f1407970e831283ecb55a3
5
5
  SHA512:
6
- metadata.gz: 63d5e9c8e3a7bad6258b62d6eabc58ec58511882f780f03ba78495864b97417470da88a3dc5cfdd235a8cc70a4e454c79008ad6557ee0b1669251a8b23e8949a
7
- data.tar.gz: 34a649320d4111f3901528ac6dc355048cdf788401432b539cb3a6156a7895fe4768d87bce5fb041dbe271bf9d7f53ec8266f89dcc7c4b84d571eb7c2f71f921
6
+ metadata.gz: fb4be0010ee08383f2ff8ad20a329d740e08fd355b20d06a96d2b9dc273fd1b2d009dcc6a0217afe3694b158210d3d4f6310bff867e0449757d5a211a050bc85
7
+ data.tar.gz: 10835489bc2d9ed4216660a8f2859aa60208b80c6162540b2de5c71acfd7b0862a1f8e90e69f3306b3888c61a81badfbdc1736b45b4667d1455666bf1e12f351
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ Gemfile.lock
2
+ coverage
3
+ *.gem
data/.travis.yml ADDED
@@ -0,0 +1,16 @@
1
+ bundler_args: ""
2
+ before_install:
3
+ - "gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3"
4
+ language: ruby
5
+ rvm:
6
+ - jruby
7
+ - ruby-1.8.7
8
+ - ruby-1.9.3
9
+ - ruby-2.0.0
10
+ - ruby-2.1
11
+ - ruby-2.2
12
+ - ruby-2.3
13
+ matrix:
14
+ fast_finish: true
15
+ allow_failures:
16
+ - rvm: jruby
data/Gemfile ADDED
@@ -0,0 +1,16 @@
1
+ =begin
2
+ Copyright 2016 Michal Papis <mpapis@gmail.com>
3
+
4
+ See the file LICENSE for copying permission.
5
+ =end
6
+
7
+ source "https://rubygems.org"
8
+
9
+ gemspec
10
+
11
+ # statistics only on MRI 2.3 - avoid problems on older rubies
12
+ group :development do
13
+ gem "redcarpet"
14
+ gem "simplecov"
15
+ gem "coveralls"
16
+ end if RUBY_VERSION == "2.3.0"
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright (c) 2016 Michal Papis
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.md ADDED
@@ -0,0 +1,28 @@
1
+ [![Gem Version](https://badge.fury.io/rb/tree_renderer.png)](https://rubygems.org/gems/tree_renderer)
2
+ [![Build Status](https://secure.travis-ci.org/mpapis/tree_renderer.png?branch=master)](https://travis-ci.org/mpapis/tree_renderer)
3
+ [![Dependency Status](https://gemnasium.com/mpapis/tree_renderer.png)](https://gemnasium.com/mpapis/tree_renderer)
4
+ [![Code Climate](https://codeclimate.com/github/mpapis/tree_renderer.png)](https://codeclimate.com/github/mpapis/tree_renderer)
5
+ [![Coverage Status](https://img.shields.io/coveralls/mpapis/tree_renderer.svg)](https://coveralls.io/r/mpapis/tree_renderer?branch=master)
6
+ [![Inline docs](http://inch-ci.org/github/mpapis/tree_renderer.png)](http://inch-ci.org/github/mpapis/tree_renderer)
7
+ [![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](http://rubydoc.info/github/mpapis/tree_renderer/master/frames)
8
+ [![Github Code](http://img.shields.io/badge/github-code-blue.svg)](https://github.com/mpapis/tree_renderer)
9
+
10
+ # Tree Renderer
11
+
12
+ Render set of templates, also renders the path names.
13
+
14
+ ### Installation
15
+
16
+ gem install tree_renderer
17
+
18
+ or add to `Gemfile`:
19
+
20
+ gem "tree_renderer"
21
+
22
+ and `gem install --file`
23
+
24
+ ### Usage
25
+
26
+ TreeRenderer.new("/template/path", "/target/path", variables).save
27
+
28
+ `variables` can be either a hash, object or a binding.
@@ -0,0 +1,3 @@
1
+ # <%= name %>
2
+
3
+ <%= description %>
@@ -0,0 +1,3 @@
1
+ # <%= description %>
2
+ class <%= name.capitalize %>
3
+ end
@@ -0,0 +1,3 @@
1
+ class TreeRenderer
2
+ VERSION = "1.0.1"
3
+ end
@@ -0,0 +1,65 @@
1
+ =begin
2
+ Copyright 2016 Michal Papis <mpapis@gmail.com>
3
+
4
+ See the file LICENSE for copying permission.
5
+ =end
6
+
7
+ require "date"
8
+ require "erb"
9
+ require "fileutils"
10
+
11
+ class TreeRenderer
12
+ attr_reader :template_path, :target_path, :var_binding
13
+
14
+ def initialize(template_path, target_path, variables = {})
15
+ @template_path = template_path
16
+ @target_path = target_path
17
+ @var_binding = calculate_binding(variables)
18
+ end
19
+
20
+ def save
21
+ all_files.each{ |file| parse_and_save(file) }
22
+ end
23
+
24
+ private
25
+
26
+ def calculate_binding(variables)
27
+ case variables
28
+ when Hash
29
+ require "ostruct"
30
+ OpenStruct.new(variables).instance_eval { binding }
31
+ when Binding
32
+ variables
33
+ else
34
+ variables.instance_eval { binding }
35
+ end
36
+ end
37
+
38
+ def all_files
39
+ Dir.glob("#{template_path}/**/*", File::FNM_DOTMATCH).reject{|path| File.directory?(path) }.sort
40
+ end
41
+
42
+ def parse_and_save(file)
43
+ save_file(
44
+ transform_path(file),
45
+ parse_template(file),
46
+ )
47
+ end
48
+
49
+ def save_file(path, content)
50
+ FileUtils.mkdir_p(File.expand_path("..", path))
51
+ File.write(path, content, 0, mode: "w")
52
+ end
53
+
54
+ def transform_path(file)
55
+ render(file.sub(template_path, target_path))
56
+ end
57
+
58
+ def parse_template(path)
59
+ render(File.read(path))
60
+ end
61
+
62
+ def render(content)
63
+ ERB.new(content).result(var_binding)
64
+ end
65
+ end
@@ -0,0 +1,35 @@
1
+ =begin
2
+ Copyright 2016 Michal Papis <mpapis@gmail.com>
3
+
4
+ See the file LICENSE for copying permission.
5
+ =end
6
+
7
+ if
8
+ RUBY_VERSION == "2.3.0" # check Gemfile
9
+ then
10
+ require "coveralls"
11
+ require "simplecov"
12
+
13
+ SimpleCov.start do
14
+ formatter SimpleCov::Formatter::MultiFormatter[
15
+ SimpleCov::Formatter::HTMLFormatter,
16
+ Coveralls::SimpleCov::Formatter,
17
+ ]
18
+ command_name "Spesc Tests"
19
+ add_filter "/test/"
20
+ end
21
+
22
+ Coveralls.noisy = true unless ENV['CI']
23
+ end
24
+
25
+ require "minitest/autorun"
26
+ require "minitest/reporters"
27
+ require "tmpdir"
28
+ require "pathname"
29
+ require "fileutils"
30
+
31
+ TREE_RENDERER_TMP_DIR = Pathname(Dir.tmpdir).join("tree_renderer")
32
+
33
+ Dir['lib/**/*.rb'].each { |file| require "./#{file}" } # coverals trick for all files
34
+
35
+ Minitest::Reporters.use!
@@ -0,0 +1,140 @@
1
+ =begin
2
+ Copyright 2016 Michal Papis <mpapis@gmail.com>
3
+
4
+ See the file LICENSE for copying permission.
5
+ =end
6
+
7
+ require "minitest_helper"
8
+ require "tree_renderer"
9
+ require "tree_renderer/version"
10
+ require "ostruct"
11
+
12
+ describe TreeRenderer do
13
+ subject { TreeRenderer }
14
+
15
+ describe "#new" do
16
+ it "sets binding directly" do
17
+ example = OpenStruct.new(a: 1).instance_eval { binding }
18
+ subject.new("path1", "path2", example).var_binding.must_equal(example)
19
+ end
20
+
21
+ it "sets binding from object" do
22
+ example = OpenStruct.new(a: 1)
23
+ subject.new("path1", "path2", example).var_binding.must_be_instance_of(Binding)
24
+ end
25
+
26
+ it "sets binding from hash" do
27
+ example = {a: 1}
28
+ subject.new("path1", "path2", example).var_binding.must_be_instance_of(Binding)
29
+ end
30
+ end
31
+
32
+ describe "#save" do
33
+ after do
34
+ FileUtils.rm_rf(TREE_RENDERER_TMP_DIR)
35
+ end
36
+ it "saves a file" do
37
+ subject.new(File.expand_path("../../example_template", __FILE__), TREE_RENDERER_TMP_DIR.to_s, name: "example", description: "Example project template").save
38
+ Dir.chdir TREE_RENDERER_TMP_DIR do
39
+ Dir.glob("**/*").must_equal(%w[
40
+ README.md
41
+ lib
42
+ lib/example.rb
43
+ ])
44
+ File.read("README.md").must_equal(<<-CONTENT)
45
+ # example
46
+
47
+ Example project template
48
+ CONTENT
49
+ File.read("lib/example.rb").must_equal(<<-CONTENT)
50
+ # Example project template
51
+ class Example
52
+ end
53
+ CONTENT
54
+ end
55
+ end
56
+ end
57
+
58
+ describe "#all_files" do
59
+ it "lists all files in lib" do
60
+ lib = File.expand_path("../../lib", __FILE__)
61
+ subject.new(lib, "path2").send(:all_files).must_equal([
62
+ "#{lib}/tree_renderer.rb",
63
+ "#{lib}/tree_renderer/version.rb",
64
+ ])
65
+ end
66
+ end
67
+
68
+ describe "#save_file" do
69
+ before do
70
+ FileUtils.mkdir_p(TREE_RENDERER_TMP_DIR)
71
+ end
72
+ after do
73
+ FileUtils.rm_rf(TREE_RENDERER_TMP_DIR)
74
+ end
75
+ it "saves a file" do
76
+ test_path = TREE_RENDERER_TMP_DIR.join("save_file.txt")
77
+ content = "test\nme\n"
78
+ subject.new("path1", "path2").send(:save_file, test_path, content)
79
+ File.read(test_path).must_equal(content)
80
+ end
81
+ end
82
+
83
+ describe "#transform_path" do
84
+ it "transforms paths with erb" do
85
+ subject.new(
86
+ "/path1/bin", "/path2/lib", name: "file"
87
+ ).send(
88
+ :transform_path, "/path1/bin/some/path/<%= name %>.txt"
89
+ ).must_equal(
90
+ "/path2/lib/some/path/file.txt"
91
+ )
92
+ end
93
+ end
94
+
95
+ describe "#parse_template" do
96
+ it "loads a file" do
97
+ subject.new(
98
+ "/path1/bin", "/path2/lib", name: "file"
99
+ ).send(
100
+ :parse_template, File.expand_path("../../lib/tree_renderer/version.rb", __FILE__)
101
+ ).must_equal(<<-VERSION_FILE)
102
+ class TreeRenderer
103
+ VERSION = "#{TreeRenderer::VERSION}"
104
+ end
105
+ VERSION_FILE
106
+ end
107
+ end
108
+
109
+ describe "#render" do
110
+ it "render plain text" do
111
+ subject.new(
112
+ "/path1/bin", "/path2/lib"
113
+ ).send(
114
+ :render, "Lorem ipsum"
115
+ ).must_equal(
116
+ "Lorem ipsum"
117
+ )
118
+ end
119
+
120
+ it "render text with erb" do
121
+ subject.new(
122
+ "/path1/bin", "/path2/lib", name: "dolor"
123
+ ).send(
124
+ :render, "Lorem ipsum <%= name %>"
125
+ ).must_equal(
126
+ "Lorem ipsum dolor"
127
+ )
128
+ end
129
+
130
+ it "raises exceptions on missing variables" do
131
+ proc {
132
+ subject.new(
133
+ "/path1/bin", "/path2/lib", nil
134
+ ).send(
135
+ :render, "Lorem ipsum <%= name %>"
136
+ )
137
+ }.must_raise NameError
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- encoding: utf-8 -*-
3
+
4
+ require File.expand_path("../lib/tree_renderer/version.rb", __FILE__)
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "tree_renderer"
8
+ s.version = TreeRenderer::VERSION
9
+ s.authors = ["Michal Papis"]
10
+ s.email = ["mpapis@gmail.com"]
11
+ s.homepage = "https://github.com/mpapis/tree_renderer"
12
+ s.summary = "Render tree of ERB templates"
13
+ s.license = "Apache 2.0"
14
+ s.files = `git ls-files -z`.split("\0")
15
+ s.test_files = `git ls-files -z -- {test,spec,features}/*`.split("\0")
16
+ s.required_ruby_version = ">= 1.9.3"
17
+
18
+ s.add_development_dependency "rake", "~> 10.0"
19
+ s.add_development_dependency "guard", "~> 2.0"
20
+ s.add_development_dependency "guard-minitest", "~> 2.0"
21
+ s.add_development_dependency "minitest", "~> 4.0"
22
+ s.add_development_dependency "minitest-reporters", "~> 0"
23
+ s.add_development_dependency "simplecov", "~> 0.11"
24
+ s.add_development_dependency "coveralls", "~> 0.8"
25
+ # s.add_development_dependency("smf-gem")
26
+ end
metadata CHANGED
@@ -1,106 +1,132 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tree_renderer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michal Papis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-04 00:00:00.000000000 Z
11
+ date: 2016-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '10.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '10.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: minitest
28
+ name: guard
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '2.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '2.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: simplecov
42
+ name: guard-minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '2.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '2.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: coveralls
56
+ name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '4.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '4.0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: guard
70
+ name: minitest-reporters
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: guard-minitest
84
+ name: simplecov
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: '0.11'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: '0.11'
97
+ - !ruby/object:Gem::Dependency
98
+ name: coveralls
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.8'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.8'
97
111
  description:
98
112
  email:
99
113
  - mpapis@gmail.com
100
114
  executables: []
101
115
  extensions: []
102
116
  extra_rdoc_files: []
103
- files: []
117
+ files:
118
+ - ".gitignore"
119
+ - ".travis.yml"
120
+ - Gemfile
121
+ - LICENSE
122
+ - README.md
123
+ - example_template/README.md
124
+ - example_template/lib/<%= name %>.rb
125
+ - lib/tree_renderer.rb
126
+ - lib/tree_renderer/version.rb
127
+ - test/minitest_helper.rb
128
+ - test/tree_renderer_test.rb
129
+ - tree_renderer.gemspec
104
130
  homepage: https://github.com/mpapis/tree_renderer
105
131
  licenses:
106
132
  - Apache 2.0
@@ -121,9 +147,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
147
  version: '0'
122
148
  requirements: []
123
149
  rubyforge_project:
124
- rubygems_version: 2.5.1
150
+ rubygems_version: 2.5.2
125
151
  signing_key:
126
152
  specification_version: 4
127
153
  summary: Render tree of ERB templates
128
- test_files: []
129
- has_rdoc:
154
+ test_files:
155
+ - test/minitest_helper.rb
156
+ - test/tree_renderer_test.rb