faastruby 0.4.15 → 0.4.16
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/CHANGELOG.md +7 -0
- data/Gemfile.lock +1 -1
- data/README.md +3 -1
- data/lib/faastruby/cli.rb +13 -11
- data/lib/faastruby/cli/commands/function/new.rb +50 -41
- data/lib/faastruby/cli/template.rb +90 -0
- data/lib/faastruby/version.rb +1 -1
- data/templates/crystal/example-blank/README.md +22 -0
- data/templates/crystal/example/README.md +22 -0
- data/templates/ruby/example-blank/README.md +22 -0
- data/templates/ruby/example/README.md +22 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e1be30dd9f54e8b0c0f65e0d7fa3f579675f8fd428801e45770b3f4940ca8b2
|
4
|
+
data.tar.gz: 05d2262fd80bb23904c82157d21d51b0fa8640b2bdd0dca411d2b8547c921119
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a7a836d1f7b3e57facbd428d719d309d6649f5f65c5e6f0ed5a98170d99962f5e55055dd76164a78ed9002894b2695e1f066790f0470fdf175c0c2b0d56438e
|
7
|
+
data.tar.gz: bcaa943d337a47d2aa328b5af0abe3c3af79917f5a72b5add6b92fdd39a5064510be932c576cfb3c5a4025e64b494a6cdb75ebd5dc06f7ebaffc60b8f28da408
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.4.16 - Feb 4 2019
|
4
|
+
- Add support for function templates
|
5
|
+
- Add cli_version to `faastruby.yml`
|
6
|
+
|
7
|
+
## 0.4.15 - Feb 2 2019
|
8
|
+
- Add support for Crystal 0.27.1 and Ruby 2.6.1
|
9
|
+
|
3
10
|
## 0.4.14 - Feb 1 2019
|
4
11
|
- Ruby functions now use a spec helper from `faastruby` gem.
|
5
12
|
- Crystal functions now use the shard `faastruby-spec-helper` to assist on tests.
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
[](https://badge.fury.io/rb/faastruby)
|
2
2
|
[](https://travis-ci.org/FaaStRuby/faastruby-cli)
|
3
3
|
|
4
|
-
[
|
4
|
+
* Looking for help? [Ask a question](https://meta.stackoverflow.com/questions/ask?tags=FaaStRuby,Serverless,Ruby,FaaS).
|
5
|
+
|
6
|
+
* [Changelog](https://github.com/FaaStRuby/faastruby-cli/blob/master/CHANGELOG.md)
|
5
7
|
|
6
8
|
# faastruby-cli
|
7
9
|
|
data/lib/faastruby/cli.rb
CHANGED
@@ -5,6 +5,8 @@ require 'zip'
|
|
5
5
|
require 'colorize'
|
6
6
|
require 'faastruby/cli/commands'
|
7
7
|
require 'faastruby/cli/package'
|
8
|
+
require 'faastruby/cli/template'
|
9
|
+
require 'erb'
|
8
10
|
|
9
11
|
module FaaStRuby
|
10
12
|
FAASTRUBY_YAML = 'faastruby.yml'
|
@@ -23,22 +25,22 @@ module FaaStRuby
|
|
23
25
|
return
|
24
26
|
end
|
25
27
|
start_server(args) if command == 'server'
|
26
|
-
check_version
|
28
|
+
# check_version
|
27
29
|
check_region
|
28
30
|
error("Unknown command: #{command}") unless FaaStRuby::Command::COMMANDS.has_key?(command)
|
29
31
|
FaaStRuby::Command::COMMANDS[command].new(args).run
|
30
32
|
end
|
31
33
|
|
32
|
-
def self.check_version
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
34
|
+
# def self.check_version
|
35
|
+
# latest = RestClient.get('https://faastruby.io/gem/minimum.txt').body rescue '0.0.1'
|
36
|
+
# if Gem::Version.new(FaaStRuby::VERSION) < Gem::Version.new(latest)
|
37
|
+
# FaaStRuby.error([
|
38
|
+
# "You are using an old version of the gem. Please run 'gem update faastruby'.".red,
|
39
|
+
# "Installed version: #{FaaStRuby::VERSION}",
|
40
|
+
# "Latest version: #{latest}"
|
41
|
+
# ], color: nil)
|
42
|
+
# end
|
43
|
+
# end
|
42
44
|
|
43
45
|
def self.check_region
|
44
46
|
ENV['FAASTRUBY_REGION'] ||= DEFAULT_REGION
|
@@ -7,18 +7,25 @@ module FaaStRuby
|
|
7
7
|
@missing_args = []
|
8
8
|
FaaStRuby::CLI.error(@missing_args, color: nil) if missing_args.any?
|
9
9
|
@function_name = @args.shift
|
10
|
-
@base_dir = "./#{@function_name}"
|
11
10
|
parse_options
|
12
|
-
@
|
13
|
-
@options['template'] ||= 'example'
|
11
|
+
@base_dir ||= @function_name
|
14
12
|
@options['runtime_name'] ||= 'ruby'
|
15
13
|
@options['runtime_version'] ||= '2.5.3'
|
16
|
-
@
|
14
|
+
@options['template'] ||= FaaStRuby::Template.new(type: 'local', source: Template.gem_template_path_for('example', runtime: @options['runtime_name']))
|
17
15
|
end
|
18
16
|
|
19
17
|
def run
|
20
|
-
|
21
|
-
|
18
|
+
@options['template'].install(to: @base_dir, force: @options['force'])
|
19
|
+
faastruby_yaml = "#{@base_dir}/faastruby.yml"
|
20
|
+
if File.file?(faastruby_yaml)
|
21
|
+
@yaml_content = YAML.load(File.read(faastruby_yaml))
|
22
|
+
@yaml_content['name'] = @function_name
|
23
|
+
@options['runtime_name'], @options['runtime_version'] = @yaml_content['runtime']&.split(':')
|
24
|
+
@options['runtime_name'] ||= 'ruby'
|
25
|
+
@options['runtime_version'] ||= '2.5.3'
|
26
|
+
else
|
27
|
+
@yaml_content = yaml_for(@options['runtime_name'])
|
28
|
+
end
|
22
29
|
write_yaml
|
23
30
|
post_tasks(@options['runtime_name'])
|
24
31
|
end
|
@@ -27,9 +34,19 @@ module FaaStRuby
|
|
27
34
|
"new".light_cyan + " FUNCTION_NAME [--blank] [--force] [--runtime]" +
|
28
35
|
<<-EOS
|
29
36
|
|
30
|
-
--blank
|
31
|
-
|
32
|
-
--
|
37
|
+
--blank
|
38
|
+
Create a blank function
|
39
|
+
--force
|
40
|
+
Continue if directory already exists and overwrite files
|
41
|
+
-g
|
42
|
+
Initialize a Git repository.
|
43
|
+
--runtime
|
44
|
+
Choose the runtime. Options are: #{SUPPORTED_RUNTIMES.join(', ')}
|
45
|
+
--template TYPE(local|git|github):SOURCE
|
46
|
+
Use another function as template. Examples:
|
47
|
+
--template local:/path/to/folder
|
48
|
+
--template git:git@github.com:user/repo.git
|
49
|
+
--template github:user/repo
|
33
50
|
EOS
|
34
51
|
end
|
35
52
|
|
@@ -44,28 +61,32 @@ EOS
|
|
44
61
|
while @args.any?
|
45
62
|
option = @args.shift
|
46
63
|
case option
|
64
|
+
when '-g'
|
65
|
+
@options['git_init'] = true
|
66
|
+
when '--template'
|
67
|
+
FaaStRuby::CLI.error("Option '--template' can't be used with '--blank' or '--runtime'.".red) if @options['runtime'] || @options['blank_template']
|
68
|
+
template = @args.shift
|
69
|
+
type, source = template.split(':')
|
70
|
+
@options['template'] = FaaStRuby::Template.new(type: type, source: source)
|
47
71
|
when '--runtime'
|
72
|
+
FaaStRuby::CLI.error("Option '--template' can't be used with '--blank' or '--runtime'.".red) if @options['template']
|
48
73
|
@options['runtime'] = @args.shift
|
49
74
|
@options['runtime_name'], @options['runtime_version'] = @options['runtime'].split(':')
|
50
|
-
@options['
|
75
|
+
template_name = @options['blank_template'] ? 'example-blank' : 'example'
|
76
|
+
@options['template'] = FaaStRuby::Template.new(type: 'local', source: Template.gem_template_path_for('example', runtime: @options['runtime_name']))
|
51
77
|
FaaStRuby::CLI.error(["Unsupported runtime: #{@options['runtime']}".red, "Supported values are #{SUPPORTED_RUNTIMES.join(", ")}"], color: nil) unless SUPPORTED_RUNTIMES.include?(@options['runtime'])
|
52
78
|
when '-f', '--force'
|
53
79
|
@options['force'] = true
|
54
80
|
when '--blank'
|
55
|
-
|
81
|
+
FaaStRuby::CLI.error("Option '--template' can't be used with '--blank' or '--runtime'.".red) if @options['template']
|
82
|
+
@options['blank_template'] = true
|
83
|
+
@options['template'] = FaaStRuby::Template.new(type: 'local', source: Template.gem_template_path_for('example-blank', runtime: @options['runtime_name'] || 'ruby'))
|
56
84
|
else
|
57
85
|
FaaStRuby::CLI.error(["Unknown argument: #{option}".red, usage], color: nil)
|
58
86
|
end
|
59
87
|
end
|
60
88
|
end
|
61
89
|
|
62
|
-
def dir_exists?
|
63
|
-
return unless File.directory?(@base_dir)
|
64
|
-
print "The folder '#{@function_name}' already exists. Overwrite files? [y/N] "
|
65
|
-
response = STDIN.gets.chomp
|
66
|
-
FaaStRuby::CLI.error("Cancelled", color: nil) unless response == 'y'
|
67
|
-
end
|
68
|
-
|
69
90
|
def missing_args
|
70
91
|
if @args.empty?
|
71
92
|
@missing_args << "Missing argument: FUNCTION_NAME".red
|
@@ -74,28 +95,6 @@ EOS
|
|
74
95
|
@missing_args
|
75
96
|
end
|
76
97
|
|
77
|
-
def copy_template
|
78
|
-
source = "#{Gem::Specification.find_by_name("faastruby").gem_dir}/#{@options['template_path']}/#{@options['template']}"
|
79
|
-
FileUtils.mkdir_p(@base_dir)
|
80
|
-
FileUtils.cp_r("#{source}/.", "#{@base_dir}/")
|
81
|
-
case @options['runtime_name']
|
82
|
-
when 'ruby'
|
83
|
-
puts "+ d #{@base_dir}".green
|
84
|
-
puts "+ d #{@base_dir}/spec".green
|
85
|
-
puts "+ f #{@base_dir}/spec/handler_spec.rb".green
|
86
|
-
puts "+ f #{@base_dir}/spec/spec_helper.rb".green
|
87
|
-
puts "+ f #{@base_dir}/Gemfile".green
|
88
|
-
puts "+ f #{@base_dir}/handler.rb".green
|
89
|
-
when 'crystal'
|
90
|
-
puts "+ d #{@base_dir}".green
|
91
|
-
puts "+ d #{@base_dir}/spec".green
|
92
|
-
puts "+ f #{@base_dir}/spec/handler_spec.cr".green
|
93
|
-
puts "+ f #{@base_dir}/spec/spec_helper.cr".green
|
94
|
-
puts "+ d #{@base_dir}/src".green
|
95
|
-
puts "+ f #{@base_dir}/src/handler.cr".green
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
98
|
def yaml_for(runtime_name)
|
100
99
|
case runtime_name
|
101
100
|
when 'crystal'
|
@@ -106,6 +105,7 @@ EOS
|
|
106
105
|
test_command = 'rspec'
|
107
106
|
end
|
108
107
|
{
|
108
|
+
'cli_version' => FaaStRuby::VERSION,
|
109
109
|
'name' => @function_name,
|
110
110
|
'runtime' => @options['runtime'] || 'ruby:2.5.3',
|
111
111
|
'test_command' => test_command,
|
@@ -115,10 +115,12 @@ EOS
|
|
115
115
|
end
|
116
116
|
|
117
117
|
def write_yaml
|
118
|
-
write_file("#{@
|
118
|
+
write_file("#{@function_name}/faastruby.yml", @yaml_content.to_yaml)
|
119
119
|
end
|
120
120
|
|
121
121
|
def post_tasks(runtime_name)
|
122
|
+
update_readme
|
123
|
+
puts `git init #{@base_dir}` if @options['git_init']
|
122
124
|
case runtime_name
|
123
125
|
when 'ruby'
|
124
126
|
bundle_install
|
@@ -130,6 +132,13 @@ EOS
|
|
130
132
|
end
|
131
133
|
end
|
132
134
|
|
135
|
+
def update_readme
|
136
|
+
file_path = "#{@base_dir}/README.md"
|
137
|
+
return false unless File.file?(file_path)
|
138
|
+
readme = File.read(file_path)
|
139
|
+
File.write(file_path, ERB.new(readme).result(binding))
|
140
|
+
end
|
141
|
+
|
133
142
|
def bundle_install
|
134
143
|
spinner = spin("Installing gems...")
|
135
144
|
system("bundle install --gemfile=#{@base_dir}/Gemfile > /dev/null")
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module FaaStRuby
|
2
|
+
class Template
|
3
|
+
TYPES = ['local', 'git', 'github']
|
4
|
+
def self.gem_template_path_for(name, runtime:)
|
5
|
+
"#{Gem::Specification.find_by_name("faastruby").gem_dir}/templates/#{runtime}/#{name}"
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_accessor :type, :source, :target
|
9
|
+
def initialize(type:, source:)
|
10
|
+
FaaStRuby::CLI.error(["Unknown template type: '#{type}'. Valid types are:", TYPES], color: nil) unless TYPES.include?(type)
|
11
|
+
@type = type
|
12
|
+
@source = source
|
13
|
+
end
|
14
|
+
|
15
|
+
def install(to:, force: false)
|
16
|
+
@target = to
|
17
|
+
@force = force
|
18
|
+
FaaStRuby::CLI.error("Could not determine the target path for template '#{type}:#{source}'. Please report this bug at https://github.com/FaaStRuby/faastruby-cli/issues", color: nil) unless target
|
19
|
+
return install_from_folder(source) if local?
|
20
|
+
return install_from_git(source) if git?
|
21
|
+
return install_from_github if github?
|
22
|
+
end
|
23
|
+
|
24
|
+
def install_from_github
|
25
|
+
repo = "git@github.com:/#{source}.git"
|
26
|
+
install_from_git(repo)
|
27
|
+
end
|
28
|
+
|
29
|
+
def install_from_git(repo)
|
30
|
+
local_dir = Dir.mktmpdir
|
31
|
+
git_pull(repo, local_dir)
|
32
|
+
install_from_folder(local_dir)
|
33
|
+
ensure
|
34
|
+
FileUtils.remove_entry local_dir
|
35
|
+
end
|
36
|
+
|
37
|
+
def git_pull(repo, local_dir)
|
38
|
+
FaaStRuby::CLI.error("Could not clone repository #{repo} into #{local_dir}") unless
|
39
|
+
system("git clone #{repo} #{local_dir}")
|
40
|
+
end
|
41
|
+
|
42
|
+
def install_from_folder(folder)
|
43
|
+
# puts "installing from folder #{folder}"
|
44
|
+
if File.directory?(target)
|
45
|
+
puts "! d #{target}".yellow
|
46
|
+
else
|
47
|
+
FileUtils.mkdir_p(target)
|
48
|
+
puts "+ d #{target}".green
|
49
|
+
end
|
50
|
+
Dir.glob("**/*", base: folder).each do |entry|
|
51
|
+
full_source_path = "#{folder}/#{entry}"
|
52
|
+
full_target_path = "#{target}/#{entry}"
|
53
|
+
create_dir(full_target_path) if File.directory?(full_source_path)
|
54
|
+
copy_file(source: full_source_path, destination: full_target_path) if File.file?(full_source_path)
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
def create_dir(dir)
|
60
|
+
if File.directory?(dir)
|
61
|
+
puts "! d #{dir}".yellow
|
62
|
+
else
|
63
|
+
FileUtils.mkdir_p(dir)
|
64
|
+
puts "+ d #{dir}".green
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def copy_file(source:, destination:)
|
69
|
+
if File.file?(destination) && !@force
|
70
|
+
print "File '#{destination}' already exists. Overwrite? [y/N] "
|
71
|
+
answer = STDIN.gets.chomp
|
72
|
+
return(puts "[skipped] #{destination}") unless ['y', 'Y'].include?(answer)
|
73
|
+
end
|
74
|
+
FileUtils.cp(source, destination)
|
75
|
+
puts "+ f #{destination}".green
|
76
|
+
end
|
77
|
+
|
78
|
+
def local?
|
79
|
+
type == 'local'
|
80
|
+
end
|
81
|
+
|
82
|
+
def git?
|
83
|
+
type == 'git'
|
84
|
+
end
|
85
|
+
|
86
|
+
def github?
|
87
|
+
type == 'github'
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
data/lib/faastruby/version.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
# <%= @function_name %>
|
2
|
+
One Paragraph of function description goes here.
|
3
|
+
## Getting started
|
4
|
+
### Prerequisites
|
5
|
+
* [FaaStRuby](https://faastruby.io) version <%= FaaStRuby::VERSION %> or higher.
|
6
|
+
```
|
7
|
+
# To install
|
8
|
+
~$ gem install faastruby
|
9
|
+
|
10
|
+
# To update
|
11
|
+
~$ gem update faastruby
|
12
|
+
```
|
13
|
+
### How to deploy this function
|
14
|
+
```
|
15
|
+
~$ cd FUNCTION_FOLDER
|
16
|
+
~/FUNCTION_FOLDER$ faastruby deploy-to WORKSPACE_NAME
|
17
|
+
```
|
18
|
+
### How to use this function as a template
|
19
|
+
```
|
20
|
+
~$ faastruby new FUNCTION_NAME --template github:user/repository
|
21
|
+
```
|
22
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# <%= @function_name %>
|
2
|
+
One Paragraph of function description goes here.
|
3
|
+
## Getting started
|
4
|
+
### Prerequisites
|
5
|
+
* [FaaStRuby](https://faastruby.io) version <%= FaaStRuby::VERSION %> or higher.
|
6
|
+
```
|
7
|
+
# To install
|
8
|
+
~$ gem install faastruby
|
9
|
+
|
10
|
+
# To update
|
11
|
+
~$ gem update faastruby
|
12
|
+
```
|
13
|
+
### How to deploy this function
|
14
|
+
```
|
15
|
+
~$ cd FUNCTION_FOLDER
|
16
|
+
~/FUNCTION_FOLDER$ faastruby deploy-to WORKSPACE_NAME
|
17
|
+
```
|
18
|
+
### How to use this function as a template
|
19
|
+
```
|
20
|
+
~$ faastruby new FUNCTION_NAME --template github:user/repository
|
21
|
+
```
|
22
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# <%= @function_name %>
|
2
|
+
One Paragraph of function description goes here.
|
3
|
+
## Getting started
|
4
|
+
### Prerequisites
|
5
|
+
* [FaaStRuby](https://faastruby.io) version <%= FaaStRuby::VERSION %> or higher.
|
6
|
+
```
|
7
|
+
# To install
|
8
|
+
~$ gem install faastruby
|
9
|
+
|
10
|
+
# To update
|
11
|
+
~$ gem update faastruby
|
12
|
+
```
|
13
|
+
### How to deploy this function
|
14
|
+
```
|
15
|
+
~$ cd FUNCTION_FOLDER
|
16
|
+
~/FUNCTION_FOLDER$ faastruby deploy-to WORKSPACE_NAME
|
17
|
+
```
|
18
|
+
### How to use this function as a template
|
19
|
+
```
|
20
|
+
~$ faastruby new FUNCTION_NAME --template github:user/repository
|
21
|
+
```
|
22
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# <%= @function_name %>
|
2
|
+
One Paragraph of function description goes here.
|
3
|
+
## Getting started
|
4
|
+
### Prerequisites
|
5
|
+
* [FaaStRuby](https://faastruby.io) version <%= FaaStRuby::VERSION %> or higher.
|
6
|
+
```
|
7
|
+
# To install
|
8
|
+
~$ gem install faastruby
|
9
|
+
|
10
|
+
# To update
|
11
|
+
~$ gem update faastruby
|
12
|
+
```
|
13
|
+
### How to deploy this function
|
14
|
+
```
|
15
|
+
~$ cd FUNCTION_FOLDER
|
16
|
+
~/FUNCTION_FOLDER$ faastruby deploy-to WORKSPACE_NAME
|
17
|
+
```
|
18
|
+
### How to use this function as a template
|
19
|
+
```
|
20
|
+
~$ faastruby new FUNCTION_NAME --template github:user/repository
|
21
|
+
```
|
22
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faastruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paulo Arruda
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-02-
|
11
|
+
date: 2019-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -255,6 +255,7 @@ files:
|
|
255
255
|
- lib/faastruby/cli/commands/workspace/list.rb
|
256
256
|
- lib/faastruby/cli/credentials.rb
|
257
257
|
- lib/faastruby/cli/package.rb
|
258
|
+
- lib/faastruby/cli/template.rb
|
258
259
|
- lib/faastruby/function.rb
|
259
260
|
- lib/faastruby/server.rb
|
260
261
|
- lib/faastruby/server/concurrency_controller.rb
|
@@ -270,17 +271,21 @@ files:
|
|
270
271
|
- lib/faastruby/spec_helper.rb
|
271
272
|
- lib/faastruby/version.rb
|
272
273
|
- lib/faastruby/workspace.rb
|
274
|
+
- templates/crystal/example-blank/README.md
|
273
275
|
- templates/crystal/example-blank/spec/handler_spec.cr
|
274
276
|
- templates/crystal/example-blank/spec/spec_helper.cr
|
275
277
|
- templates/crystal/example-blank/src/handler.cr
|
278
|
+
- templates/crystal/example/README.md
|
276
279
|
- templates/crystal/example/spec/handler_spec.cr
|
277
280
|
- templates/crystal/example/spec/spec_helper.cr
|
278
281
|
- templates/crystal/example/src/handler.cr
|
279
282
|
- templates/ruby/example-blank/Gemfile
|
283
|
+
- templates/ruby/example-blank/README.md
|
280
284
|
- templates/ruby/example-blank/handler.rb
|
281
285
|
- templates/ruby/example-blank/spec/handler_spec.rb
|
282
286
|
- templates/ruby/example-blank/spec/spec_helper.rb
|
283
287
|
- templates/ruby/example/Gemfile
|
288
|
+
- templates/ruby/example/README.md
|
284
289
|
- templates/ruby/example/handler.rb
|
285
290
|
- templates/ruby/example/spec/handler_spec.rb
|
286
291
|
- templates/ruby/example/spec/spec_helper.rb
|