verto 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bfde45c8eb00cd3302f89417e1302b90e2fd41a2fd49a5c402c6e29ec2e46fdf
4
- data.tar.gz: d6822ed93c979646fc7c0064b39310a1a180ae632a92ea53b2a7b7841503c138
3
+ metadata.gz: ec5d303284b7d17001dacb3f3daa72ba1d47601dffb325790e61ec941f2f2b84
4
+ data.tar.gz: f078471b8bb4cb5243cfdb5748332a7582a8d26f3da17a19d6b3777757b8a2d0
5
5
  SHA512:
6
- metadata.gz: f93afd8ec28cfcf7a6183d82570da5e5636f23ffd1387c111de3bbbbddae2db114b7022207a953f47e45020f6069024a1cdeffca419aec6fe0ca0d923583fc78
7
- data.tar.gz: c07c60169151793d64806ae93851aabd649233f2d8364fe1aba2e896a57c89054dfd634d37b69554f934219420964f76ae3b932504b7964a2f3c14b9aeb8fe57
6
+ metadata.gz: 21e6d0f0e89edcb6f0ec6b2892ad0a8c71d81623f602daacc9103b2d51508c570273e05151e0143f2e7915678faa4e598eab10efd369058041bf892112fdc38b
7
+ data.tar.gz: 534cc6aecfd85f5e027d0fd6e31dcfe4b41e88c33aedff39b5f66919826005a8bab6ced748fc70471086a9b4eabadf6ebde208b591b2d08b633a482e548730b2
@@ -1,3 +1,6 @@
1
+ ## 0.10.0 - 14/10/2020
2
+ * [FEATURE] Adds update_changelog in DSL
3
+
1
4
  ## 0.9.0 - 08/08/2020
2
5
  * [FEATURE] Custom Default Pre-Release Identifier
3
6
 
@@ -1,10 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- verto (0.9.0)
4
+ verto (0.10.0)
5
5
  dry-auto_inject (~> 0.7)
6
6
  dry-configurable (~> 0.8)
7
7
  dry-container (~> 0.7)
8
+ mustache (~> 1.1.1)
8
9
  thor (~> 1.0.1)
9
10
  vseries (~> 0.2)
10
11
 
@@ -12,7 +13,7 @@ GEM
12
13
  remote: https://rubygems.org/
13
14
  specs:
14
15
  byebug (11.1.1)
15
- concurrent-ruby (1.1.6)
16
+ concurrent-ruby (1.1.7)
16
17
  diff-lcs (1.3)
17
18
  docile (1.3.2)
18
19
  dry-auto_inject (0.7.0)
@@ -27,6 +28,7 @@ GEM
27
28
  dry-core (0.4.9)
28
29
  concurrent-ruby (~> 1.0)
29
30
  dry-equalizer (0.3.0)
31
+ mustache (1.1.1)
30
32
  rake (13.0.1)
31
33
  rspec (3.9.0)
32
34
  rspec-core (~> 3.9.0)
data/README.md CHANGED
@@ -32,20 +32,20 @@ You don't need to install verto in your machine, you can run verto via the docke
32
32
  To use verto in the same way that you use any other cli, you can set an alias in your `.bashrc`, `.zshrc`, etc:
33
33
 
34
34
  ```shell
35
- alias verto='docker run -v $(pwd):/usr/src/project -it catks/verto:0.9.0'
35
+ alias verto='docker run -v $(pwd):/usr/src/project -it catks/verto:0.10.0'
36
36
  ```
37
37
 
38
38
  If you want you can share your git configuration and known_hosts with:
39
39
 
40
40
  ```shell
41
- alias verto='docker run -v ~/.gitconfig:/etc/gitconfig -v $(pwd):/usr/src/project -v $HOME/.ssh/known_hosts:/root/.ssh/known_hosts -it catks/verto:0.9.0'
41
+ alias verto='docker run -v ~/.gitconfig:/etc/gitconfig -v $(pwd):/usr/src/project -v $HOME/.ssh/known_hosts:/root/.ssh/known_hosts -it catks/verto:0.10.0'
42
42
 
43
43
  ```
44
44
 
45
45
  You can also use your ssh keys, know_hosts and git config with verto container (for git push):
46
46
 
47
47
  ```shell
48
- alias verto='docker run -v ~/.gitconfig:/etc/gitconfig -v $(pwd):/usr/src/project -v $HOME/.ssh/known_hosts:/root/.ssh/known_hosts -v $HOME/.ssh/id_rsa:/root/.ssh/id_rsa -e SSH_PRIVATE_KEY=/root/.ssh/id_rsa -it catks/verto:0.9.0'
48
+ alias verto='docker run -v ~/.gitconfig:/etc/gitconfig -v $(pwd):/usr/src/project -v $HOME/.ssh/known_hosts:/root/.ssh/known_hosts -v $HOME/.ssh/id_rsa:/root/.ssh/id_rsa -e SSH_PRIVATE_KEY=/root/.ssh/id_rsa -it catks/verto:0.10.0'
49
49
 
50
50
  ```
51
51
 
@@ -85,13 +85,29 @@ You can create a new Vertofile with `verto init` or following the next example:
85
85
  ```ruby
86
86
  # Vertofile
87
87
 
88
- verto_version '0.9.0'
88
+ verto_version '0.10.0'
89
89
 
90
90
  config {
91
91
  # version.prefix = 'v' # Adds a version_prefix
92
92
  # pre_release.default_identifier = 'alpha' } # Defaults to 'rc'
93
93
  git.pull_before_tag_creation = true # Pull Changes before tag creation
94
94
  git.push_after_tag_creation = true # Push changes after tag creation
95
+
96
+ ## CHANGELOG FORMAT
97
+ ## Verto uses Mustache template rendering to render changelog updates, the default value is:
98
+ ##
99
+ ## ## {{new_version}} - #{Time.now.strftime('%d/%m/%Y')}
100
+ ## {{#version_changes}}
101
+ ## * {{.}}
102
+ ## {{/version_changes}}
103
+ ##
104
+ ## A custom format can be specified, eg:
105
+ # changelog.format = <<~CHANGELOG
106
+ # ## {{new_version}}
107
+ # {{#version_changes}}
108
+ # * {{.}}
109
+ # {{/version_changes}}
110
+ # CHANGELOG
95
111
  }
96
112
 
97
113
  context(branch('master')) {
@@ -100,20 +116,11 @@ context(branch('master')) {
100
116
  }
101
117
 
102
118
  before_tag_creation {
103
- version_changes = sh(
104
- %q#git log --oneline --decorate | grep -B 100 -m 1 "tag:" | grep "pull request" | awk '{print $1}' | xargs git show --format='%b' | grep -v Approved | grep -v "^$" | grep -E "^[[:space:]]*\[.*\]" | sed 's/^[[:space:]]*\(.*\)/ * \1/'#, output: false
105
- ).output
106
-
107
- puts "---------------------------"
108
- version_changes = "## #{new_version} - #{Time.now.strftime('%d/%m/%Y')}\n#{version_changes}\n"
109
- exit unless confirm("Create new Realease?\n" \
110
- "---------------------------\n" \
111
- "#{version_changes}" \
112
- "---------------------------\n"
119
+ update_changelog(
120
+ with: :merged_pull_requests_with_bracketed_labels, # Optional, defines the strategy to retrive the changes, default: :merged_pull_requests_with_bracketed_labels
121
+ confirmation: true, # Optional, asks for confirmation before updating the changelog, default: true
122
+ filename: 'CHANGELOG.md' # Optional, defines the filename of the CHANGELOG file, default: 'CHANGELOG.md'
113
123
  )
114
-
115
- # CHANGELOG
116
- file('CHANGELOG.md').prepend(version_changes)
117
124
  git('add CHANGELOG.md')
118
125
 
119
126
  # Uncomment to update the version in other files, like package.json
data/Vertofile CHANGED
@@ -1,4 +1,4 @@
1
- verto_version '0.7.0'
1
+ verto_version '0.10.0'
2
2
 
3
3
  config {
4
4
  version.prefix = 'v' # Adds a version_prefix
@@ -12,22 +12,7 @@ context(branch('master')) {
12
12
  }
13
13
 
14
14
  before_tag_creation {
15
- version_changes = ""
16
- bitbucket_changes = sh(
17
- %q#git log --oneline --decorate | grep -B 100 -m 1 "tag:" | grep "pull request" | awk '{print $1}' | xargs git show --format='%b' | grep -v Approved | grep -v "^$" | grep -E "^[[:space:]]*\[.*\]" | sed 's/^[[:space:]]*\(.*\)/ * \1/'#, output: false
18
- ).output
19
- version_changes = bitbucket_changes
20
-
21
- puts "---------------------------"
22
- version_changes = "## #{new_version} - #{Time.now.strftime('%d/%m/%Y')}\n#{version_changes}\n"
23
- exit unless confirm("Create new Realease?\n" \
24
- "---------------------------\n" \
25
- "#{version_changes}" \
26
- "---------------------------\n"
27
- )
28
-
29
- # CHANGELOG
30
- file('CHANGELOG.md').prepend(version_changes)
15
+ update_changelog
31
16
  git!('add CHANGELOG.md')
32
17
 
33
18
  file('lib/verto/version.rb').replace(latest_version.to_s, new_version.to_s)
@@ -37,7 +22,9 @@ context(branch('master')) {
37
22
  git!('add README.md')
38
23
 
39
24
  file('lib/verto/utils/templates/Vertofile').replace(latest_version.to_s, new_version.to_s)
40
- git!('add lib/verto/utils/templates/Vertofile')
25
+ file('Vertofile').replace(latest_version.to_s, new_version.to_s)
26
+
27
+ git!('add Vertofile lib/verto/utils/templates/Vertofile')
41
28
 
42
29
  sh!('bundle install')
43
30
  sh!('rake install')
@@ -46,4 +33,3 @@ context(branch('master')) {
46
33
  git!('commit -m "Bumps Version"')
47
34
  }
48
35
  }
49
-
@@ -0,0 +1,8 @@
1
+ djin_version: '0.6.0'
2
+
3
+ tasks:
4
+ release:
5
+ local:
6
+ run:
7
+ - verto tag up {{args}}
8
+ - bundle exec rake release
@@ -3,6 +3,7 @@ require "dry-container"
3
3
  require "dry-configurable"
4
4
  require "dry-auto_inject"
5
5
  require "vseries"
6
+ require "mustache"
6
7
  require "pathname"
7
8
 
8
9
  require "verto/version"
@@ -37,6 +38,16 @@ module Verto
37
38
  setting :push_after_tag_creation, false
38
39
  end
39
40
 
41
+ setting :changelog do
42
+ setting :format,
43
+ <<~CHANGELOG
44
+ ## {{new_version}} - #{Time.now.strftime('%d/%m/%Y')}
45
+ {{#version_changes}}
46
+ * {{.}}
47
+ {{/version_changes}}
48
+ CHANGELOG
49
+ end
50
+
40
51
  setting :hooks, []
41
52
  setting :command_options, CommandOptions.new
42
53
 
@@ -55,6 +66,7 @@ module Verto
55
66
  @container ||= Dry::Container.new.tap do |container|
56
67
  container.register('system_command_executor') { SystemCommandExecutor.new }
57
68
  container.register('system_command_executor_without_output') { SystemCommandExecutor.new(stdout: nil, stderr: nil) }
69
+ container.register('cli_helpers') { CliHelpers }
58
70
 
59
71
  container.register('tag_repository') { TagRepository.new }
60
72
 
@@ -72,6 +84,10 @@ module Verto
72
84
  container.namespace('project') do
73
85
  register('path') { Verto.config.project.path }
74
86
  end
87
+
88
+ container.namespace('changelog') do
89
+ register('format') { Verto.config.changelog.format }
90
+ end
75
91
  end
76
92
  end
77
93
 
@@ -86,17 +102,28 @@ module Verto
86
102
  def self.stderr
87
103
  Verto.container.resolve('stderr')
88
104
  end
105
+
106
+ def self.current_moment
107
+ @current_moment
108
+ end
109
+
110
+ def self.current_moment=(moment)
111
+ @current_moment = moment
112
+ end
89
113
  end
90
114
 
91
115
  require "verto/utils/semantic_version.rb"
92
116
  require "verto/utils/system_command_executor"
93
117
  require "verto/utils/tag_filter"
94
118
  require "verto/utils/template"
119
+ require "verto/utils/cli_helpers"
120
+ require "verto/utils/strict_hash"
95
121
  require "verto/dsl"
96
122
  require "verto/dsl/syntax"
97
123
  require "verto/dsl/interpreter"
98
124
  require "verto/dsl/hook"
99
125
  require "verto/dsl/file"
126
+ require "verto/dsl/update_changelog"
100
127
  require "verto/dsl/built_in_hooks"
101
128
  require "verto/commands/base_command"
102
129
  require "verto/commands/tag_command"
@@ -24,7 +24,10 @@ module Verto
24
24
  moments_to_call.each do |moment|
25
25
  Verto.config.hooks
26
26
  .select { |hook| hook.moment == moment.to_sym }
27
- .each { |hook| hook.call(with_attributes: with_attributes) }
27
+ .each do |hook|
28
+ Verto.current_moment = hook.moment
29
+ hook.call(with_attributes: with_attributes)
30
+ end
28
31
  end
29
32
  end
30
33
  end
@@ -100,6 +100,18 @@ module Verto
100
100
  Verto.config.hooks << Hook.new(moment: 'before_tag_creation', &block)
101
101
  end
102
102
 
103
+ def update_changelog(with: :merged_pull_requests_with_bracketed_labels, confirmation: true, filename: 'CHANGELOG.md')
104
+ permitted_moments = %w[before_tag_creation after_tag_up]
105
+ unless permitted_moments.include? Verto.current_moment.to_s
106
+ raise ExitError, 'update_changelog is only supported in before_tag_creation or after_command_tag_up'
107
+ end
108
+
109
+ UpdateChangelog.new.call(with: with,
110
+ new_version: new_version,
111
+ confirmation: confirmation,
112
+ filename: filename)
113
+ end
114
+
103
115
  def file(filepath)
104
116
  DSL::File.new(filepath)
105
117
  end
@@ -108,8 +120,9 @@ module Verto
108
120
  ENV[environment_name]
109
121
  end
110
122
 
123
+ # TODO: Use delegator
111
124
  def confirm(text)
112
- shell_basic.yes?("#{text} (y/n)")
125
+ CliHelpers.confirm(text)
113
126
  end
114
127
 
115
128
  def error(text)
@@ -128,16 +141,12 @@ module Verto
128
141
  @executors ||= {
129
142
  from_config: Verto::SystemCommandExecutor.new,
130
143
  true => Verto::SystemCommandExecutor.new(stdout: $stdout, stderr: $stderr),
131
- false => Verto::SystemCommandExecutor.new(stdout: nil, stderr: nil),
144
+ false => Verto::SystemCommandExecutor.new(stdout: nil, stderr: nil)
132
145
  }
133
146
 
134
147
  @executors[output]
135
148
  end
136
149
 
137
- def shell_basic
138
- @shell_basic ||= Thor::Shell::Basic.new
139
- end
140
-
141
150
  def stderr
142
151
  Verto.stderr
143
152
  end
@@ -0,0 +1,56 @@
1
+ module Verto
2
+ module DSL
3
+ class UpdateChangelog
4
+ include Verto.import[:cli_helpers, :stdout,
5
+ executor: 'system_command_executor_without_output', changelog_format: 'changelog.format']
6
+
7
+ InvalidChangelogSource = Class.new(Verto::ExitError)
8
+
9
+ SOURCES = StrictHash.new(
10
+ {
11
+ merged_pull_requests_with_bracketed_labels: lambda do |executor|
12
+ executor.run(
13
+ %q#git log --oneline --decorate | grep -B 100 -m 1 "tag:" | grep "pull request" | awk '{print $1}' | xargs git show --format='%b' | grep -v Approved | grep -v "^$" | grep -E "^[[:space:]]*\[.*\]"#
14
+ ).output.split('\n').map(&:strip)
15
+ end
16
+ },
17
+ default_proc: ->(hash, _) { raise InvalidChangelogSource, "Invalid CHANGELOG Source, avaliable options: '#{hash.keys.join(',')}'" }
18
+ )
19
+
20
+ def call(new_version:, confirmation: true, filename: 'CHANGELOG.md', with: :merged_pull_requests_with_bracketed_labels)
21
+ verify_file_presence!(filename)
22
+
23
+ stdout.puts separator
24
+ changelog_changes = format_changes(new_version, version_changes(with))
25
+
26
+ exit if confirmation && !cli_helpers.confirm("Create new Realease?\n" \
27
+ "#{separator}\n" \
28
+ "#{changelog_changes}" \
29
+ "#{separator}\n")
30
+ update_file(filename, changelog_changes)
31
+ end
32
+
33
+ private
34
+
35
+ def verify_file_presence!(filename)
36
+ raise Verto::ExitError, "changelog file '#{filename}' doesnt exist" unless Verto.project_path.join(filename).exist?
37
+ end
38
+
39
+ def version_changes(with)
40
+ SOURCES[with].call(executor)
41
+ end
42
+
43
+ def update_file(filename, changelog_changes)
44
+ DSL::File.new(filename).prepend(changelog_changes)
45
+ end
46
+
47
+ def format_changes(new_version, version_changes)
48
+ Mustache.render(changelog_format, { new_version: new_version, version_changes: version_changes }) + "\n"
49
+ end
50
+
51
+ def separator
52
+ '---------------------------'
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,13 @@
1
+ module CliHelpers
2
+ class << self
3
+ def confirm(text)
4
+ shell_basic.yes?("#{text} (y/n)")
5
+ end
6
+
7
+ private
8
+
9
+ def shell_basic
10
+ @shell_basic ||= Thor::Shell::Basic.new
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ class StrictHash < Hash
2
+ def initialize(hash, default_proc: nil)
3
+ super()
4
+ self.default_proc = default_proc if default_proc
5
+ merge!(hash)
6
+ end
7
+ end
@@ -1,4 +1,4 @@
1
- verto_version '0.9.0'
1
+ verto_version '0.10.0'
2
2
 
3
3
  config {
4
4
  # version.prefix = 'v' # Adds a version_prefix
@@ -6,32 +6,35 @@ config {
6
6
  # project.path = "#{project_path}" # Configures a custom project path
7
7
  # git.pull_before_tag_creation = true # Pull Changes before tag creation
8
8
  # git.push_after_tag_creation = true # Push changes after tag creation
9
+
10
+ ## CHANGELOG FORMAT
11
+ ## Verto uses Mustache template rendering to render changelog updates, the default value is:
12
+ ##
13
+ ## ## {{new_version}} - #{Time.now.strftime('%d/%m/%Y')}
14
+ ## {{#version_changes}}
15
+ ## * {{.}}
16
+ ## {{/version_changes}}
17
+ ##
18
+ ## A custom format can be specified, eg:
19
+ # changelog.format = <<~CHANGELOG
20
+ # ## {{new_version}}
21
+ # {{#version_changes}}
22
+ # * {{.}}
23
+ # {{/version_changes}}
24
+ # CHANGELOG}
9
25
  }
10
26
 
11
27
  context(branch('master')) {
12
28
  before_command_tag_up {
13
- git!('pull origin master')
14
29
  command_options.add(filter: 'release_only')
15
30
  }
16
31
 
17
32
  before_tag_creation{
18
- version_changes = ""
19
- # Uncomment to get Merged PRs Titles as changes to add in CHANGELOG.
20
- # version_changes = sh(
21
- # %q#git log --oneline --decorate | grep -B 100 -m 1 "tag:" | grep "pull request" | awk '{print $1}' | xargs git show --format='%b' | grep -v Approved | grep -v "^$" | grep -E "^[[:space:]]*\[.*\]" | sed 's/^[[:space:]]*\(.*\)/ * \1/'#, output: false
22
- # ).output
23
-
24
- puts "---------------------------"
25
- version_changes = "## #{new_version} - #{Time.now.strftime('%d/%m/%Y')}\n#{version_changes}\n"
26
- exit unless confirm("Create new Realease?\n" \
27
- "---------------------------\n" \
28
- "#{version_changes}" \
29
- "---------------------------\n"
30
- )
31
-
32
- # CHANGELOG
33
- file('CHANGELOG.md').prepend(version_changes)
34
- git('add CHANGELOG.md')
33
+ # Uncomment to update CHANGELOG file
34
+ # update_changelog(with: :merged_pull_requests_with_bracketed_labels,
35
+ # confirmation: true,
36
+ # filename: 'CHANGELOG.md')
37
+ # git('add CHANGELOG.md')
35
38
 
36
39
  # Uncomment to update the version in other files, like package.json
37
40
  # file('package.json').replace(/"(\d+)\.(\d+)\.(\d+)(-?.*)"/, %Q{"#{new_version}"})
@@ -39,11 +42,6 @@ context(branch('master')) {
39
42
 
40
43
  git('commit -m "Updates CHANGELOG"')
41
44
  }
42
-
43
- after_command_tag_up {
44
- git('push --tags')
45
- git('push origin master')
46
- }
47
45
  }
48
46
 
49
47
  # Uncomment to get a specific pre_release proccess, like a staging or qa branch
@@ -60,8 +58,7 @@ context(branch('master')) {
60
58
  # }
61
59
 
62
60
  # after_command_tag_up {
63
- # git('push --tags')
64
- # git('push origin staging')
61
+ # sh('some command')
65
62
  # }
66
63
  #}
67
64
 
@@ -1,3 +1,3 @@
1
1
  module Verto
2
- VERSION = "0.9.0"
2
+ VERSION = "0.10.0"
3
3
  end
@@ -31,6 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.add_dependency "dry-container", "~> 0.7"
32
32
  spec.add_dependency "dry-auto_inject", "~> 0.7"
33
33
  spec.add_dependency "vseries", "~> 0.2"
34
+ spec.add_dependency "mustache", "~> 1.1.1"
34
35
 
35
36
  spec.add_development_dependency "byebug"
36
37
  spec.add_development_dependency "bundler", "~> 2.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: verto
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Atkinson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-08-08 00:00:00.000000000 Z
11
+ date: 2021-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.2'
83
+ - !ruby/object:Gem::Dependency
84
+ name: mustache
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.1.1
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 1.1.1
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: byebug
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -172,6 +186,7 @@ files:
172
186
  - Vertofile
173
187
  - bin/console
174
188
  - bin/setup
189
+ - djin.yml
175
190
  - docker-entrypoint.sh
176
191
  - exe/verto
177
192
  - lib/verto.rb
@@ -184,9 +199,12 @@ files:
184
199
  - lib/verto/dsl/hook.rb
185
200
  - lib/verto/dsl/interpreter.rb
186
201
  - lib/verto/dsl/syntax.rb
202
+ - lib/verto/dsl/update_changelog.rb
187
203
  - lib/verto/repositories/tag_repository.rb
204
+ - lib/verto/utils/cli_helpers.rb
188
205
  - lib/verto/utils/command_options.rb
189
206
  - lib/verto/utils/semantic_version.rb
207
+ - lib/verto/utils/strict_hash.rb
190
208
  - lib/verto/utils/system_command_executor.rb
191
209
  - lib/verto/utils/tag_filter.rb
192
210
  - lib/verto/utils/template.rb