lono 7.1.0 → 7.2.0

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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +3 -1
  3. data/.cody/acceptance.sh +2 -0
  4. data/.cody/buildspec.yml +3 -0
  5. data/.cody/project.rb +1 -1
  6. data/CHANGELOG.md +5 -0
  7. data/lib/lono/cli.rb +12 -0
  8. data/lib/lono/configset/combiner.rb +1 -1
  9. data/lib/lono/configset/meta/dsl.rb +1 -1
  10. data/lib/lono/configset/preparer.rb +5 -5
  11. data/lib/lono/configset/register/base.rb +2 -1
  12. data/lib/lono/configset/register/dsl.rb +2 -3
  13. data/lib/lono/configset/resolver.rb +1 -0
  14. data/lib/lono/extension.rb +9 -0
  15. data/lib/lono/extension/helper.rb +13 -0
  16. data/lib/lono/extension/list.rb +39 -0
  17. data/lib/lono/extension/new.rb +72 -0
  18. data/lib/lono/extensions.rb +18 -0
  19. data/lib/lono/extensions/dsl.rb +11 -0
  20. data/lib/lono/extensions/loader.rb +32 -0
  21. data/lib/lono/extensions/preparer.rb +23 -0
  22. data/lib/lono/extensions/register.rb +15 -0
  23. data/lib/lono/finder/base.rb +3 -3
  24. data/lib/lono/finder/extension.rb +11 -0
  25. data/lib/lono/help/user_data.md +0 -1
  26. data/lib/lono/jade.rb +24 -17
  27. data/lib/lono/jade/circular.rb +1 -1
  28. data/lib/lono/{configset/materializer/jade.rb → jade/materializer.rb} +3 -3
  29. data/lib/lono/{configset → jade}/materializer/final.rb +1 -1
  30. data/lib/lono/{configset → jade}/materializer/gems_builder.rb +3 -3
  31. data/lib/lono/{configset → jade}/materializer/source.rb +1 -1
  32. data/lib/lono/jade/registry.rb +55 -0
  33. data/lib/lono/template/context.rb +1 -2
  34. data/lib/lono/template/context/loader.rb +19 -13
  35. data/lib/lono/template/context/loader/load_files.rb +24 -0
  36. data/lib/lono/template/helper.rb +0 -42
  37. data/lib/lono/template/strategy/common/helpers.rb +44 -0
  38. data/lib/lono/template/strategy/dsl.rb +3 -8
  39. data/lib/lono/template/strategy/dsl/builder.rb +12 -17
  40. data/lib/lono/template/strategy/dsl/builder/helpers.rb +2 -0
  41. data/lib/lono/template/strategy/dsl/builder/helpers/file_helper.rb +2 -2
  42. data/lib/lono/template/strategy/dsl/builder/syntax.rb +2 -1
  43. data/lib/lono/template/strategy/dsl/builder/syntax/extend_with.rb +9 -0
  44. data/lib/lono/template/strategy/dsl/builder/{section/extensions.rb → syntax/parameter_group.rb} +2 -2
  45. data/lib/lono/version.rb +1 -1
  46. data/lib/templates/extension/%extension_name%.gemspec.tt +45 -0
  47. data/lib/templates/extension/.gitignore +17 -0
  48. data/lib/templates/extension/.rspec +3 -0
  49. data/lib/templates/extension/CHANGELOG.md +7 -0
  50. data/lib/templates/extension/Gemfile.tt +4 -0
  51. data/lib/templates/extension/Rakefile.tt +9 -0
  52. data/lib/templates/extension/lib/%extension_name%.rb.tt +5 -0
  53. data/lib/templates/extension/lib/%extension_name%/helpers/mappings.rb.tt +24 -0
  54. data/lib/templates/extension/lib/%extension_name%/helpers/outputs.rb.tt +7 -0
  55. data/lib/templates/extension/lib/%extension_name%/helpers/parameters.rb.tt +10 -0
  56. data/lib/templates/extension/lib/%extension_name%/helpers/resources/resource.rb.tt +4 -0
  57. data/lib/templates/extension/lib/%extension_name%/helpers/variables.rb.tt +6 -0
  58. data/lib/templates/extension/lib/%extension_name%/version.rb.tt +3 -0
  59. data/lib/templates/extension/spec/spec_helper.rb.tt +29 -0
  60. data/lono.gemspec +1 -0
  61. metadata +49 -8
  62. data/lib/lono/configset/registry.rb +0 -34
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c82050fbf233130f2fda69d2bc32fe20d8887a1d32658875522cc11a8cc3df6
4
- data.tar.gz: 0e5a9f4657820d9104410ba5b35c3c2383a2967c5b3145f03ea9927a4413eb12
3
+ metadata.gz: f556c131b651401e05e951dfd499f98bbcfb01e8e3dc912e2b4d3ec128068f93
4
+ data.tar.gz: fbc95989d2f2b84cdd8be923c91e05cb002a987050990e932f4355b8689eb058
5
5
  SHA512:
6
- metadata.gz: 4fa72e2ed20267512962e1b4ff0cab8962186fd8bb0b1be9a07e478577aaeedae7ec4cded6e1bee7c1c77bffe1a93ad126e3a60601ff0fe1381fea30ccb15fb8
7
- data.tar.gz: e0388dd38dbbae9483088d07bb630585b779b167f3cdae4f36b861e72cc5c24a8ba39797fabb4296da8550d73b1277459645a1972564f9e4baffee40d08d51b7
6
+ metadata.gz: 6f26e2d765057d328e0c92888c7063a5e849770787928910c0e437a342260fd6e06a11e0d83688d37ab32fb4b22c4c04ccfbed452adecd19c7c7a51e77e333db
7
+ data.tar.gz: 801b6151a8a7635b94db55937bb387d00dabff728f3dd49a681201752b7a18664fae0508fdaf38d9e64ef9b53af89fe6437cf82f4f7a7417dad0728c817210bc
data/.circleci/config.yml CHANGED
@@ -7,7 +7,7 @@ jobs:
7
7
  build:
8
8
  docker:
9
9
  # specify the version you desire here
10
- - image: circleci/ruby:2.5.0-node-browsers
10
+ - image: circleci/ruby:2.6.5-node-browsers
11
11
 
12
12
  # Specify service dependencies here if necessary
13
13
  # CircleCI maintains a library of pre-built images
@@ -35,6 +35,8 @@ jobs:
35
35
  - run:
36
36
  name: install dependencies
37
37
  command: |
38
+ gem install bundler
39
+ gem update --system
38
40
  bundle install --jobs=4 --retry=3 --path vendor/bundle
39
41
 
40
42
  - save_cache:
data/.cody/acceptance.sh CHANGED
@@ -1,5 +1,7 @@
1
1
  #!/bin/bash
2
2
 
3
+ gem install bundler # upgrade bundler
4
+
3
5
  set -exu
4
6
 
5
7
  git config --global user.email "tonguerooo@gmail.com"
data/.cody/buildspec.yml CHANGED
@@ -1,6 +1,9 @@
1
1
  version: 0.2
2
2
 
3
3
  phases:
4
+ install:
5
+ runtime-versions:
6
+ ruby: 2.6
4
7
  build:
5
8
  commands:
6
9
  - .cody/acceptance.sh
data/.cody/project.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  github_url("https://github.com/tongueroo/lono")
2
- linux_image("aws/codebuild/ruby:2.5.3-1.7.0")
2
+ linux_image("aws/codebuild/amazonlinux2-x86_64-standard:2.0")
3
3
  triggers(
4
4
  webhook: true,
5
5
  filter_groups: [[{type: "EVENT", pattern: "PUSH"}]]
data/CHANGELOG.md CHANGED
@@ -3,6 +3,11 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
5
5
 
6
+ ## [7.2.0]
7
+ - #48 fix codebuild and circleci
8
+ - #49 lono extensions
9
+ - #50 lono extensions docs
10
+
6
11
  ## [7.1.0]
7
12
  - #42 introduce configset dsl
8
13
  - #43 improve layering behavior
data/lib/lono/cli.rb CHANGED
@@ -23,6 +23,14 @@ module Lono
23
23
  Configset::List.new(options.merge(blueprint: blueprint)).run
24
24
  end
25
25
 
26
+ desc "extensions [BLUEPRINT]", "Lists extensions"
27
+ long_desc Help.text(:extensions)
28
+ opts.source
29
+ opts.stack
30
+ def extensions(blueprint=nil)
31
+ Extension::List.new(options.merge(blueprint: blueprint)).run
32
+ end
33
+
26
34
  desc "generate BLUEPRINT", "Generate both CloudFormation templates and parameters files."
27
35
  long_desc Help.text(:generate)
28
36
  option :quiet, type: :boolean, desc: "silence the output"
@@ -124,6 +132,10 @@ module Lono
124
132
  long_desc Help.text(:configset)
125
133
  subcommand "configset", Configset
126
134
 
135
+ desc "extension SUBCOMMAND", "extension subcommands"
136
+ long_desc Help.text(:extension)
137
+ subcommand "extension", Extension
138
+
127
139
  desc "param SUBCOMMAND", "param subcommands"
128
140
  long_desc Help.text(:param)
129
141
  subcommand "param", Param
@@ -55,7 +55,7 @@ class Lono::Configset
55
55
  next unless init
56
56
 
57
57
  data = {
58
- registry: Lono::Configset::Registry.new(["#{logical_id}OriginalConfigset"], resource: logical_id),
58
+ registry: Lono::Jade::Registry.new(["#{logical_id}OriginalConfigset"], resource: logical_id),
59
59
  metdata_configset: attributes["Metadata"]
60
60
  }
61
61
  configsets << data
@@ -2,7 +2,7 @@ class Lono::Configset::Meta
2
2
  module Dsl
3
3
  def depends_on(*args)
4
4
  options = args.last.is_a?(Hash) ? args.pop : {}
5
- registry = Lono::Configset::Registry.new(args, options)
5
+ registry = Lono::Jade::Registry.new(args, options)
6
6
  registry.depends_on = args.first
7
7
  registry.parent = @jade
8
8
  already_has = @jade.depends_ons.detect { |d| d.name == registry.name && d.args == registry.args }
@@ -10,7 +10,7 @@ class Lono::Configset
10
10
 
11
11
  def run
12
12
  register
13
- resolve_dependencies
13
+ resolve_dependencies # also calls jade.materialize
14
14
  register_dependencies
15
15
  materialize
16
16
  validate_all! # run after final materializer
@@ -23,8 +23,8 @@ class Lono::Configset
23
23
  end
24
24
 
25
25
  def resolve_dependencies
26
- jades = Lono::Jade.tracked # at this point only top-level
27
- @resolver.resolve(jades)
26
+ jades = Lono::Jade::Registry.tracked_configsets # at this point only top-level
27
+ @resolver.resolve(jades) # also calls jade.materialize
28
28
  end
29
29
 
30
30
  def register_dependencies
@@ -32,8 +32,8 @@ class Lono::Configset
32
32
  end
33
33
 
34
34
  def materialize
35
- jades = Lono::Jade.downloaded
36
- Materializer::Final.new.build(jades)
35
+ jades = Lono::Jade::Registry.downloaded_configsets
36
+ Lono::Jade::Materializer::Final.new.build(jades)
37
37
  end
38
38
 
39
39
  def validate_all!
@@ -18,7 +18,8 @@ module Lono::Configset::Register
18
18
 
19
19
  def jadify
20
20
  self.class.configsets.each do |registry|
21
- Lono::Jade.new(registry.name, jade_type, registry)
21
+ jade = Lono::Jade.new(registry.name, jade_type, registry)
22
+ Lono::Jade::Registry.tracked_configsets << jade
22
23
  end
23
24
  end
24
25
 
@@ -1,8 +1,7 @@
1
1
  module Lono::Configset::Register
2
2
  module Dsl
3
- def configset(*args)
4
- options = args.last.is_a?(Hash) ? args.pop : {}
5
- registry = Lono::Configset::Registry.new(args, options)
3
+ def configset(*args, **options)
4
+ registry = Lono::Jade::Registry.register_configset(args, options)
6
5
  self.class.append(registry)
7
6
  store_for_validation(registry)
8
7
  end
@@ -7,6 +7,7 @@ class Lono::Configset
7
7
  @@resolving_message_shown = false
8
8
  def resolve(*unresolved)
9
9
  unresolved.flatten! # initially only top-level
10
+ unresolved.uniq! { |jade| jade.name }
10
11
  puts "Resolving dependencies..." if !@@resolving_message_shown && !unresolved.empty?
11
12
  puts "Resolving #{unresolved.map(&:name)}" if ENV['LONO_DEBUG_CONFIGSET']
12
13
 
@@ -0,0 +1,9 @@
1
+ module Lono
2
+ class Extension < Command
3
+ long_desc Help.text("extension/new")
4
+ New.cli_options.each do |args|
5
+ option(*args)
6
+ end
7
+ register(New, "new", "new NAME", "Generates new lono extension.")
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ class Lono::Extension
2
+ module Helper
3
+ extend Memoist
4
+
5
+ def extension_class_name
6
+ extension_underscore_name.camelize
7
+ end
8
+
9
+ def extension_underscore_name
10
+ extension_name.underscore
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,39 @@
1
+ require 'cli-format'
2
+
3
+ class Lono::Extension
4
+ class List
5
+ def initialize(options={})
6
+ @options = options
7
+ @stack, @blueprint, @template, @param = Lono::Conventions.new(options).values
8
+ end
9
+
10
+ def run
11
+ if @blueprint
12
+ blueprint_configsets
13
+ else
14
+ project_configsets
15
+ end
16
+ end
17
+
18
+ def blueprint_configsets
19
+ Lono::Extensions::Preparer.new(@options).run # register and materialize gems
20
+ tracked_extension_names = Lono::Jade::Registry.tracked_extensions.map(&:name)
21
+
22
+ finder = Lono::Finder::Extension.new
23
+ jadespecs = finder.find_all
24
+
25
+ presenter = CliFormat::Presenter.new(@options)
26
+ presenter.header = %w[Name Path Type]
27
+ jadespecs.each do |j|
28
+ if tracked_extension_names.include?(j.name)
29
+ presenter.rows << [j.name, j.root, j.source_type]
30
+ end
31
+ end
32
+ presenter.show
33
+ end
34
+
35
+ def project_configsets
36
+ Lono::Finder::Extension.list(filter_materialized: true, message: "Project extensions:")
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,72 @@
1
+ class Lono::Extension
2
+ class New < Lono::Sequence
3
+ include Lono::Blueprint::Helper # for user_info
4
+ include Lono::Extension::Helper
5
+
6
+ argument :extension_name
7
+
8
+ def self.source_root
9
+ templates = File.expand_path("../../templates", File.dirname(__FILE__))
10
+ "#{templates}/extension"
11
+ end
12
+
13
+ def self.cli_options
14
+ [
15
+ [:force, type: :boolean, desc: "Bypass overwrite are you sure prompt for existing files."],
16
+ ]
17
+ end
18
+
19
+ cli_options.each do |args|
20
+ class_option(*args)
21
+ end
22
+
23
+ # for specs
24
+ def set_cwd
25
+ @cwd = ENV['LONO_TEST'] ? File.dirname(Lono.root) : "#{Dir.pwd}/app/extensions"
26
+ end
27
+
28
+ def create_project
29
+ puts "=> Creating new extension called #{extension_name}."
30
+ directory ".", "#{@cwd}/#{extension_name}", options
31
+ end
32
+
33
+ def create_license
34
+ return unless ENV['LONO_LICENSE_FILE']
35
+ copy_file ENV['LONO_LICENSE_FILE'], "#{@cwd}/#{extension_name}/LICENSE.txt"
36
+ end
37
+
38
+ # After this commands are executed with the newly created project
39
+ def set_destination_root
40
+ destination_root = "#{@cwd}/#{extension_name}"
41
+ self.destination_root = destination_root
42
+ @old_dir = Dir.pwd # for reset_current_dir
43
+ FileUtils.cd(self.destination_root)
44
+ end
45
+
46
+ def welcome_message
47
+ puts <<~EOL
48
+ #{"="*64}
49
+ Congrats 🎉 You have successfully created a lono extension.
50
+
51
+ Cd into your extension and check things out.
52
+
53
+ cd #{extension_name}
54
+
55
+ More info: https://lono.cloud/docs/extensions
56
+
57
+ EOL
58
+ end
59
+
60
+ def tree
61
+ tree_installed = system("type tree > /dev/null")
62
+ return unless tree_installed
63
+
64
+ structure = `tree .`
65
+ puts <<~EOL
66
+ Here is the structure of your extension:
67
+
68
+ #{structure}
69
+ EOL
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,18 @@
1
+ module Lono
2
+ class Extensions
3
+ include Dsl
4
+ include Lono::Template::Evaluate
5
+
6
+ def initialize(template_path)
7
+ @template_path = template_path
8
+ end
9
+
10
+ def evaluate
11
+ evaluate_template_path(@template_path) # handle extend_with
12
+ end
13
+
14
+ # The extend_with methods are used in file as the normal DSL evaluation.
15
+ # We use method_missing so we dont have to redefine all the normal methods of the DSL.
16
+ def method_missing(name, *args, &block); end
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ class Lono::Extensions
2
+ module Dsl
3
+ def extend_with(*args, **options)
4
+ register_extension_helper(args, options)
5
+ end
6
+
7
+ def register_extension_helper(args, options={})
8
+ Lono::Jade::Registry.register_extension(args, options)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,32 @@
1
+ class Lono::Extensions
2
+ class Loader < Lono::AbstractBase
3
+ include Lono::Template::Context::Loader::LoadFiles
4
+
5
+ def run
6
+ Lono::Jade::Registry.tracked_extensions.each do |registry|
7
+ load_extension_helpers(registry)
8
+ end
9
+ end
10
+
11
+ def load_extension_helpers(registry)
12
+ root = find_root(registry)
13
+ helpers_path = "#{root}/lib/#{registry.name}/helpers"
14
+ load_files(helpers_path)
15
+ end
16
+
17
+ #
18
+ # 1. vendor/extensions
19
+ # 2. normal gem
20
+ # 3. materialized gem
21
+ #
22
+ def find_root(registry)
23
+ jadespec = finder.find(registry.name)
24
+ jadespec.root
25
+ end
26
+
27
+ def finder
28
+ Lono::Finder::Extension.new
29
+ end
30
+ memoize :finder
31
+ end
32
+ end
@@ -0,0 +1,23 @@
1
+ class Lono::Extensions
2
+ class Preparer < Lono::AbstractBase
3
+ def initialize(options={})
4
+ super
5
+ @register = Register.new(options)
6
+ @loader = Loader.new(options)
7
+ end
8
+
9
+ def run
10
+ @register.run
11
+ materialize
12
+ # no need to validate because bundler will fail to install extension earlier and is a form of "validation already"
13
+ @loader.run
14
+ end
15
+
16
+ def materialize
17
+ Lono::Jade::Registry.tracked_extensions.each do |registry|
18
+ jade = Lono::Jade.new(registry.name, "extension", registry)
19
+ jade.materialize
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,15 @@
1
+ class Lono::Extensions
2
+ class Register < Lono::AbstractBase
3
+ include Lono::Configset::EvaluateFile
4
+
5
+ def run
6
+ register_extensions # evaluates extend_with
7
+ end
8
+
9
+ # register_extensions and evaluate extend_with methods earlier than load_context so project helpers can override extensions
10
+ def register_extensions
11
+ template_path = "#{Lono.config.templates_path}/#{@template}.rb"
12
+ Lono::Extensions.new(template_path).evaluate # registers extensions
13
+ end
14
+ end
15
+ end
@@ -24,7 +24,6 @@ module Lono::Finder
24
24
  end
25
25
  end
26
26
 
27
- # overridden in finder/blueprint/configset.rb
28
27
  def local
29
28
  project + vendor + gems
30
29
  end
@@ -43,7 +42,7 @@ module Lono::Finder
43
42
  components(gem_roots, "gem")
44
43
  end
45
44
 
46
- # Folders that each materialized gems to tmp/configsets
45
+ # Folders that each materialized gems to tmp/jades
47
46
  def materialized
48
47
  components(materialized_gem_roots, "materialized")
49
48
  end
@@ -114,8 +113,9 @@ module Lono::Finder
114
113
  memoize :gem_roots
115
114
 
116
115
  def materialized_gem_roots
117
- gemfile_lock = "#{Lono.root}/tmp/configsets/Gemfile.lock"
116
+ gemfile_lock = "#{Lono.root}/tmp/jades/Gemfile.lock"
118
117
  return [] unless File.exist?(gemfile_lock)
118
+
119
119
  parser = Bundler::LockfileParser.new(Bundler.read_file(gemfile_lock))
120
120
  specs = parser.specs
121
121
  # __materialize__ only exists in Gem::LazySpecification and not in Gem::Specification