lono 2.1.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/README.md +16 -284
  4. data/lib/lono.rb +6 -0
  5. data/lib/lono/cfn.rb +5 -0
  6. data/lib/lono/cfn/base.rb +86 -9
  7. data/lib/lono/cfn/create.rb +27 -2
  8. data/lib/lono/cfn/help.rb +12 -12
  9. data/lib/lono/cfn/preview.rb +12 -11
  10. data/lib/lono/cfn/update.rb +3 -2
  11. data/lib/lono/default/settings.yml +13 -0
  12. data/lib/lono/env.rb +11 -0
  13. data/lib/lono/param.rb +1 -1
  14. data/lib/lono/param/generator.rb +144 -22
  15. data/lib/lono/settings.rb +28 -0
  16. data/lib/lono/template.rb +13 -2
  17. data/lib/lono/template/aws_services.rb +7 -0
  18. data/lib/lono/template/dsl.rb +24 -33
  19. data/lib/lono/template/helpers.rb +144 -0
  20. data/lib/lono/template/template.rb +69 -68
  21. data/lib/lono/template/upload.rb +75 -0
  22. data/lib/lono/version.rb +1 -1
  23. data/lib/starter_projects/json_project/config/{lono.rb → templates/base/blog.rb} +3 -3
  24. data/lib/starter_projects/{yaml_project/config/lono/api.rb → json_project/config/templates/base/stacks.rb} +9 -9
  25. data/lib/starter_projects/json_project/templates/{db.json.erb → db.json} +1 -1
  26. data/lib/starter_projects/json_project/templates/partial/{host_record.json.erb → host_record.json} +0 -0
  27. data/lib/starter_projects/json_project/templates/partial/{server.json.erb → server.json} +2 -2
  28. data/lib/starter_projects/json_project/templates/user_data/{app.sh.erb → app.sh} +0 -0
  29. data/lib/starter_projects/json_project/templates/user_data/{db.sh.erb → db.sh} +0 -0
  30. data/lib/starter_projects/json_project/templates/user_data/{db2.sh.erb → db2.sh} +0 -0
  31. data/lib/starter_projects/json_project/templates/user_data/{ruby_script.rb.erb → ruby_script.rb} +0 -0
  32. data/lib/starter_projects/json_project/templates/{web.json.erb → web.json} +2 -2
  33. data/lib/starter_projects/yaml_project/config/{lono.rb → templates/base/blog.rb} +4 -8
  34. data/lib/starter_projects/{json_project/config/lono/api.rb → yaml_project/config/templates/base/stacks.rb} +11 -13
  35. data/lib/starter_projects/yaml_project/config/templates/prod/stacks.rb +1 -0
  36. data/lib/starter_projects/yaml_project/config/templates/stag/stacks.rb +1 -0
  37. data/lib/starter_projects/yaml_project/config/variables/base/variables.rb +4 -0
  38. data/lib/starter_projects/yaml_project/config/variables/prod/variables.rb +1 -0
  39. data/lib/starter_projects/yaml_project/config/variables/stag/variables.rb +1 -0
  40. data/lib/starter_projects/yaml_project/helpers/my_custom_helper.rb +17 -0
  41. data/lib/starter_projects/yaml_project/params/{api-web-prod.txt → base/api-web-prod.txt} +0 -0
  42. data/lib/starter_projects/yaml_project/params/{example.txt → base/example.txt} +0 -0
  43. data/lib/starter_projects/yaml_project/params/prod/example.txt +1 -0
  44. data/lib/starter_projects/yaml_project/params/stag/example.txt +1 -0
  45. data/lib/starter_projects/yaml_project/templates/{db.yml.erb → db.yml} +1 -1
  46. data/lib/starter_projects/yaml_project/templates/{example.yml.erb → example.yml} +0 -0
  47. data/lib/starter_projects/yaml_project/templates/partial/{host_record.yml.erb → host_record.yml} +0 -0
  48. data/lib/starter_projects/yaml_project/templates/partial/{server.yml.erb → server.yml} +0 -0
  49. data/lib/starter_projects/yaml_project/templates/partial/user_data/{bootstrap.sh.erb → bootstrap.sh} +0 -0
  50. data/lib/starter_projects/yaml_project/templates/{web.yml.erb → web.yml} +2 -2
  51. data/lono.gemspec +1 -0
  52. data/spec/fixtures/params/baseonly/params/base/network.txt +1 -0
  53. data/spec/fixtures/params/envonly/params/prod/network.txt +1 -0
  54. data/spec/fixtures/params/overlay/params/base/network.txt +1 -0
  55. data/spec/fixtures/params/overlay/params/prod/network.txt +1 -0
  56. data/spec/lib/lono/new_spec.rb +1 -1
  57. data/spec/lib/lono/param/generator_spec.rb +34 -0
  58. data/spec/lib/lono/template/dsl_spec.rb +1 -1
  59. data/spec/lib/lono/template_spec.rb +5 -0
  60. metadata +60 -22
@@ -1,3 +1,3 @@
1
1
  module Lono
2
- VERSION = "2.1.0"
2
+ VERSION = "3.0.0"
3
3
  end
@@ -1,6 +1,6 @@
1
- template "blog-web-prod.json" do
2
- app,role,env = name.sub('.json','').split('-')
3
- source "web.json.erb"
1
+ template "blog-web-prod" do
2
+ app,role,env = name.split('-')
3
+ source "web"
4
4
  variables(
5
5
  env: env,
6
6
  app: app,
@@ -1,5 +1,5 @@
1
- template "api-web-prod.yml" do
2
- source "web.yml.erb"
1
+ template "api-web-prod" do
2
+ source "web"
3
3
  variables(
4
4
  ami: "ami-123",
5
5
  instance_type: "t2.small",
@@ -16,8 +16,8 @@ template "api-web-prod.yml" do
16
16
  )
17
17
  end
18
18
 
19
- template "api-worker-prod.yml" do
20
- source "web.yml.erb"
19
+ template "api-worker-prod" do
20
+ source "web"
21
21
  variables(
22
22
  ami: "ami-123",
23
23
  instance_type: "t2.small",
@@ -30,13 +30,13 @@ template "api-worker-prod.yml" do
30
30
  min_size: "6",
31
31
  down_adjustment: "-3",
32
32
  up_adjustment: "3",
33
- user_data_script: "ruby_script.rb.erb",
33
+ user_data_script: "ruby_script.rb",
34
34
  ssl_cert: "arn:aws:iam::12345:server-certificate/wildcard"
35
35
  )
36
36
  end
37
37
 
38
- template "api-redis-prod.yml" do
39
- source "db.yml.erb"
38
+ template "api-redis-prod" do
39
+ source "db"
40
40
  variables(
41
41
  ami: "ami-456",
42
42
  instance_type: "t2.small",
@@ -46,8 +46,8 @@ template "api-redis-prod.yml" do
46
46
  )
47
47
  end
48
48
 
49
- template "parent/db-stack.yml" do
50
- source "db.yml.erb"
49
+ template "parent/db-stack" do
50
+ source "db"
51
51
  variables(
52
52
  ami: "ami-456",
53
53
  instance_type: "t2.small",
@@ -207,6 +207,6 @@
207
207
  "WaitHandle": {
208
208
  "Type": "AWS::CloudFormation::WaitConditionHandle"
209
209
  },
210
- <%= partial("server.json.erb") %>
210
+ <%= partial("server") %>
211
211
  }
212
212
  }
@@ -34,8 +34,8 @@
34
34
  "Fn::Join": [
35
35
  "",
36
36
  [
37
- <%= user_data('db.sh.erb', vartest: 'foo') %>,
38
- <%= user_data('db2.sh.erb') %>
37
+ <%= user_data('db.sh', vartest: 'foo') %>,
38
+ <%= user_data('db2.sh') %>
39
39
  ]
40
40
  ]
41
41
  }
@@ -179,7 +179,7 @@
179
179
  },
180
180
  "Type": "AWS::CloudWatch::Alarm"
181
181
  },
182
- <%= partial("host_record.json.erb", domain: "mydomain.com") %>
182
+ <%= partial("host_record", domain: "mydomain.com") %>
183
183
  "LaunchConfig": {
184
184
  "Properties": {
185
185
  "BlockDeviceMappings": [
@@ -235,7 +235,7 @@
235
235
  "Fn::Join": [
236
236
  "",
237
237
  [
238
- <% script = @user_data_script || 'app.sh.erb' %>
238
+ <% script = @user_data_script || 'app.sh' %>
239
239
  <%= user_data(script) %>
240
240
  ]
241
241
  ]
@@ -1,15 +1,10 @@
1
- template "example.yml" do
2
- source "example.yml.erb"
3
- end
4
-
5
- template "blog-web-prod.yml" do
6
- app,role,env = name.sub('.yml','').split('-')
7
- source "web.yml.erb"
1
+ template "blog-web-prod" do
2
+ app,role,env = name.split('-')
3
+ source "web"
8
4
  variables(
9
5
  env: env,
10
6
  app: app,
11
7
  role: role,
12
- ami: "ami-4836a428", # us-west-2
13
8
  instance_type: "t2.small",
14
9
  port: "80",
15
10
  high_threshold: "35",
@@ -22,3 +17,4 @@ template "blog-web-prod.yml" do
22
17
  up_adjustment: "2"
23
18
  )
24
19
  end
20
+
@@ -1,7 +1,8 @@
1
- template "api-web-prod.json" do
2
- source "web.json.erb"
1
+ template "example"
2
+
3
+ template "api-web-prod" do
4
+ source "web"
3
5
  variables(
4
- ami: "ami-123",
5
6
  instance_type: "t2.small",
6
7
  port: "80",
7
8
  high_threshold: "15",
@@ -16,10 +17,9 @@ template "api-web-prod.json" do
16
17
  )
17
18
  end
18
19
 
19
- template "api-worker-prod.json" do
20
- source "web.json.erb"
20
+ template "api-worker-prod" do
21
+ source "web"
21
22
  variables(
22
- ami: "ami-123",
23
23
  instance_type: "t2.small",
24
24
  port: "80",
25
25
  high_threshold: "15",
@@ -30,15 +30,14 @@ template "api-worker-prod.json" do
30
30
  min_size: "6",
31
31
  down_adjustment: "-3",
32
32
  up_adjustment: "3",
33
- user_data_script: "ruby_script.rb.erb",
33
+ user_data_script: "ruby_script.rb",
34
34
  ssl_cert: "arn:aws:iam::12345:server-certificate/wildcard"
35
35
  )
36
36
  end
37
37
 
38
- template "api-redis-prod.json" do
39
- source "db.json.erb"
38
+ template "api-redis-prod" do
39
+ source "db"
40
40
  variables(
41
- ami: "ami-456",
42
41
  instance_type: "t2.small",
43
42
  port: "80",
44
43
  volume_size: "20",
@@ -46,10 +45,9 @@ template "api-redis-prod.json" do
46
45
  )
47
46
  end
48
47
 
49
- template "parent/db-stack.json" do
50
- source "db.json.erb"
48
+ template "parent/db-stack" do
49
+ source "db"
51
50
  variables(
52
- ami: "ami-456",
53
51
  instance_type: "t2.small",
54
52
  port: "80",
55
53
  volume_size: "20",
@@ -0,0 +1 @@
1
+ # resources that only exist in the prod environment
@@ -0,0 +1 @@
1
+ # resources that only exist in the stag environment
@@ -0,0 +1,4 @@
1
+ @ami = "ami-123"
2
+ @base_only = "base-only-test"
3
+ @prod_override = "overridden-by-whats-in-prod"
4
+ @stag_override = "overridden-by-whats-in-stag"
@@ -0,0 +1 @@
1
+ @prod_override = "prod-override-test"
@@ -0,0 +1 @@
1
+ @stag_override = "stag-override-test"
@@ -0,0 +1,17 @@
1
+ # File must be name in underscore casing and the module name must be named in
2
+ # CamelizeCasing. The file must also end in _helper.rb by convention.
3
+ # More info http://lono.cloud/docs/helpers
4
+ # Custom Helpers are loaed into the same scope as built-in lono helpers and are
5
+ # treated a first class citizens. They have access to all the same methods
6
+ # and instance variable as the built-in lono helpers.
7
+ module MyCustomHelper
8
+ # This example helper method checks if the file path exists and fails gracefully
9
+ # the built-in partial fails hard.
10
+ def shared_partial(name, options={}, indent=0)
11
+ partial_name = "shared/#{name}.yml.erb"
12
+ if partial_exist?(partial_name) # partial_exist? is built-in lono helper
13
+ result << partial(partial_name, {}, indent: indent)
14
+ result.join("\n")
15
+ end
16
+ end
17
+ end
@@ -0,0 +1 @@
1
+ InstanceType=m4.large
@@ -0,0 +1 @@
1
+ InstanceType=m4.small
@@ -145,4 +145,4 @@ Resources:
145
145
  Type: AWS::CloudFormation::WaitCondition
146
146
  WaitHandle:
147
147
  Type: AWS::CloudFormation::WaitConditionHandle
148
- <%= partial("server.yml.erb") %>
148
+ <%= partial("server") %>
@@ -105,7 +105,7 @@ Resources:
105
105
  Statistic: Average
106
106
  Threshold: '<%= @low_threshold %>'
107
107
  Type: AWS::CloudWatch::Alarm
108
- <%= partial("host_record.yml.erb", domain: "mydomain.net") %>
108
+ <%= partial("host_record", domain: "mydomain.net") %>
109
109
  LaunchConfig:
110
110
  Properties:
111
111
  BlockDeviceMappings:
@@ -124,7 +124,7 @@ Resources:
124
124
  - Ref: ServiceSecurityGroup
125
125
  UserData:
126
126
  Fn::Base64: !Sub | # No more Fn::Join needed
127
- <%= partial("user_data/bootstrap.sh.erb", {}, indent: 10) %>
127
+ <%= partial("user_data/bootstrap.sh", {}, indent: 10) %>
128
128
  Type: AWS::AutoScaling::LaunchConfiguration
129
129
  ServiceSecurityGroup:
130
130
  Properties:
@@ -27,6 +27,7 @@ Gem::Specification.new do |gem|
27
27
  gem.add_dependency "colorize"
28
28
  gem.add_dependency "hashie"
29
29
  gem.add_dependency "aws-sdk"
30
+ gem.add_dependency "activesupport"
30
31
  # gem.add_dependency "plissken" # dependency for vendor/lono-params
31
32
  # using the vendor fork version: https://github.com/tongueroo/plissken
32
33
  # until https://github.com/futurechimp/plissken/pull/6 gets merged
@@ -30,7 +30,7 @@ describe Lono::New do
30
30
  end
31
31
  end
32
32
 
33
- context "yaml starter project" do
33
+ context "yml starter project" do
34
34
  before(:each) do
35
35
  new_project = Lono::New.new(
36
36
  force: true,
@@ -0,0 +1,34 @@
1
+ require_relative "../../../spec_helper"
2
+
3
+ describe Lono::Param::Generator do
4
+ def generate(project_root)
5
+ param = Lono::Param::Generator.new("network",
6
+ project_root: project_root,
7
+ mute: true
8
+ )
9
+ json = param.generate
10
+ data = JSON.load(json)
11
+ param_value = data.first["ParameterValue"]
12
+ end
13
+
14
+ context "overlay params" do
15
+ it "should combine params" do
16
+ param_value = generate("spec/fixtures/params/overlay")
17
+ expect(param_value).to eq "2"
18
+ end
19
+ end
20
+
21
+ context "only base param" do
22
+ it "should generate prod param from base param" do
23
+ param_value = generate("spec/fixtures/params/baseonly")
24
+ expect(param_value).to eq "foo"
25
+ end
26
+ end
27
+
28
+ context "only env param" do
29
+ it "should generate prod param from env param" do
30
+ param_value = generate("spec/fixtures/params/envonly")
31
+ expect(param_value).to eq "bar"
32
+ end
33
+ end
34
+ end
@@ -48,7 +48,7 @@ describe Lono::Template::DSL do
48
48
  )
49
49
  dsl.evaluate_templates # run the dependent instance_eval and load_subfoler so @templates is assigned
50
50
  detected_format = dsl.detect_format
51
- expect(detected_format).to eq 'yaml'
51
+ expect(detected_format).to eq 'yml'
52
52
  end
53
53
  end
54
54
 
@@ -27,5 +27,10 @@ describe Lono do
27
27
  out = execute("./bin/lono template generate -c --project-root #{@project_root}")
28
28
  expect(out).to match /Generating CloudFormation templates/
29
29
  end
30
+
31
+ it "should generate templates" do
32
+ out = execute("./bin/lono template upload --project-root #{@project_root} --noop")
33
+ expect(out).to match /Templates uploaded to s3/
34
+ end
30
35
  end
31
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lono
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-20 00:00:00.000000000 Z
11
+ date: 2017-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: activesupport
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: byebug
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -244,51 +258,70 @@ files:
244
258
  - lib/lono/clean.rb
245
259
  - lib/lono/cli.rb
246
260
  - lib/lono/command.rb
261
+ - lib/lono/default/settings.yml
262
+ - lib/lono/env.rb
247
263
  - lib/lono/help.rb
248
264
  - lib/lono/new.rb
249
265
  - lib/lono/param.rb
250
266
  - lib/lono/param/generator.rb
251
267
  - lib/lono/param/help.rb
252
268
  - lib/lono/project_checker.rb
269
+ - lib/lono/settings.rb
253
270
  - lib/lono/template.rb
271
+ - lib/lono/template/aws_services.rb
254
272
  - lib/lono/template/bashify.rb
255
273
  - lib/lono/template/dsl.rb
256
274
  - lib/lono/template/help.rb
275
+ - lib/lono/template/helpers.rb
257
276
  - lib/lono/template/template.rb
277
+ - lib/lono/template/upload.rb
258
278
  - lib/lono/version.rb
259
279
  - lib/starter_projects/json_project/Gemfile
260
280
  - lib/starter_projects/json_project/Guardfile
261
- - lib/starter_projects/json_project/config/lono.rb
262
- - lib/starter_projects/json_project/config/lono/api.rb
281
+ - lib/starter_projects/json_project/config/templates/base/blog.rb
282
+ - lib/starter_projects/json_project/config/templates/base/stacks.rb
263
283
  - lib/starter_projects/json_project/params/api-web-prod.txt
264
- - lib/starter_projects/json_project/templates/db.json.erb
265
- - lib/starter_projects/json_project/templates/partial/host_record.json.erb
266
- - lib/starter_projects/json_project/templates/partial/server.json.erb
267
- - lib/starter_projects/json_project/templates/user_data/app.sh.erb
268
- - lib/starter_projects/json_project/templates/user_data/db.sh.erb
269
- - lib/starter_projects/json_project/templates/user_data/db2.sh.erb
270
- - lib/starter_projects/json_project/templates/user_data/ruby_script.rb.erb
271
- - lib/starter_projects/json_project/templates/web.json.erb
284
+ - lib/starter_projects/json_project/templates/db.json
285
+ - lib/starter_projects/json_project/templates/partial/host_record.json
286
+ - lib/starter_projects/json_project/templates/partial/server.json
287
+ - lib/starter_projects/json_project/templates/user_data/app.sh
288
+ - lib/starter_projects/json_project/templates/user_data/db.sh
289
+ - lib/starter_projects/json_project/templates/user_data/db2.sh
290
+ - lib/starter_projects/json_project/templates/user_data/ruby_script.rb
291
+ - lib/starter_projects/json_project/templates/web.json
272
292
  - lib/starter_projects/yaml_project/Gemfile
273
293
  - lib/starter_projects/yaml_project/Guardfile
274
- - lib/starter_projects/yaml_project/config/lono.rb
275
- - lib/starter_projects/yaml_project/config/lono/api.rb
276
- - lib/starter_projects/yaml_project/params/api-web-prod.txt
277
- - lib/starter_projects/yaml_project/params/example.txt
278
- - lib/starter_projects/yaml_project/templates/db.yml.erb
279
- - lib/starter_projects/yaml_project/templates/example.yml.erb
280
- - lib/starter_projects/yaml_project/templates/partial/host_record.yml.erb
281
- - lib/starter_projects/yaml_project/templates/partial/server.yml.erb
282
- - lib/starter_projects/yaml_project/templates/partial/user_data/bootstrap.sh.erb
283
- - lib/starter_projects/yaml_project/templates/web.yml.erb
294
+ - lib/starter_projects/yaml_project/config/templates/base/blog.rb
295
+ - lib/starter_projects/yaml_project/config/templates/base/stacks.rb
296
+ - lib/starter_projects/yaml_project/config/templates/prod/stacks.rb
297
+ - lib/starter_projects/yaml_project/config/templates/stag/stacks.rb
298
+ - lib/starter_projects/yaml_project/config/variables/base/variables.rb
299
+ - lib/starter_projects/yaml_project/config/variables/prod/variables.rb
300
+ - lib/starter_projects/yaml_project/config/variables/stag/variables.rb
301
+ - lib/starter_projects/yaml_project/helpers/my_custom_helper.rb
302
+ - lib/starter_projects/yaml_project/params/base/api-web-prod.txt
303
+ - lib/starter_projects/yaml_project/params/base/example.txt
304
+ - lib/starter_projects/yaml_project/params/prod/example.txt
305
+ - lib/starter_projects/yaml_project/params/stag/example.txt
306
+ - lib/starter_projects/yaml_project/templates/db.yml
307
+ - lib/starter_projects/yaml_project/templates/example.yml
308
+ - lib/starter_projects/yaml_project/templates/partial/host_record.yml
309
+ - lib/starter_projects/yaml_project/templates/partial/server.yml
310
+ - lib/starter_projects/yaml_project/templates/partial/user_data/bootstrap.sh
311
+ - lib/starter_projects/yaml_project/templates/web.yml
284
312
  - lono.gemspec
285
313
  - spec/fixtures/cfn.json
286
314
  - spec/fixtures/my_project/config/lono.rb
287
315
  - spec/fixtures/my_project/params/my-stack.txt
288
316
  - spec/fixtures/my_project/templates/.gitkeep
289
317
  - spec/fixtures/my_project/templates/my-stack.yml.erb
318
+ - spec/fixtures/params/baseonly/params/base/network.txt
319
+ - spec/fixtures/params/envonly/params/prod/network.txt
320
+ - spec/fixtures/params/overlay/params/base/network.txt
321
+ - spec/fixtures/params/overlay/params/prod/network.txt
290
322
  - spec/lib/lono/cfn_spec.rb
291
323
  - spec/lib/lono/new_spec.rb
324
+ - spec/lib/lono/param/generator_spec.rb
292
325
  - spec/lib/lono/param_spec.rb
293
326
  - spec/lib/lono/template/dsl_spec.rb
294
327
  - spec/lib/lono/template/template_spec.rb
@@ -339,8 +372,13 @@ test_files:
339
372
  - spec/fixtures/my_project/params/my-stack.txt
340
373
  - spec/fixtures/my_project/templates/.gitkeep
341
374
  - spec/fixtures/my_project/templates/my-stack.yml.erb
375
+ - spec/fixtures/params/baseonly/params/base/network.txt
376
+ - spec/fixtures/params/envonly/params/prod/network.txt
377
+ - spec/fixtures/params/overlay/params/base/network.txt
378
+ - spec/fixtures/params/overlay/params/prod/network.txt
342
379
  - spec/lib/lono/cfn_spec.rb
343
380
  - spec/lib/lono/new_spec.rb
381
+ - spec/lib/lono/param/generator_spec.rb
344
382
  - spec/lib/lono/param_spec.rb
345
383
  - spec/lib/lono/template/dsl_spec.rb
346
384
  - spec/lib/lono/template/template_spec.rb