geny 0.1.0 → 1.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6add91eb73cf3bca67eef2bb86d8ab4e4afc06e6
4
- data.tar.gz: 60637a783f679b4a0b473e59bd92a96a94b48890
3
+ metadata.gz: 46e41ae2c77c16d67afc70f779435a8698e742b1
4
+ data.tar.gz: a8388419c14c4af33934deb9c60ea9628e447579
5
5
  SHA512:
6
- metadata.gz: 74318c4fa54b0ed4337f3e6b0fb9f4ed5700dd6f49ecc98b881869f2cd7edf025f876e2192dff3df5a51c50e8f6ffa29be0584570cd64db9dc52c116efb09f70
7
- data.tar.gz: 66f631fa5bec33843def8f4bfc57fb5f3c774a20e78d376864a3e107a5cf491460fe6691e644747e3ecd95fd7464cd48a20b488a5ba765fcf4d800535b4a7ba4
6
+ metadata.gz: 99d2a29982aeaf49a8630893e912441fafccfc279514235da13ab5d431075db6087fc7ad75c7e7eeaea774a31aadd0d52428c77a6ea33af4d559b70d1cbadf5b
7
+ data.tar.gz: 61d5ca7ae6f8efe681f0046da27523e1a4dc6f3dcfd99d36a2e7635297c5ccabeeb877c6e2f58278e42299cff59dba4e21570a60bec1f14034bd7b8c95b93a71
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- geny (0.1.0)
4
+ geny (1.0.0)
5
5
  argy (~> 0.2.2)
6
6
  pastel (~> 0.7.3)
7
7
  tty-file (~> 0.8.0)
@@ -0,0 +1,34 @@
1
+ module Geny
2
+ module Actions
3
+ # Run Geny commands from within a Geny invocation. Whoa, meta.
4
+ class Geny
5
+ # Create a new Geny
6
+ # @param registry [Registry]
7
+ def initialize(registry:)
8
+ @registry = registry
9
+ end
10
+
11
+ # Run a command with arguments
12
+ # @param name [String] name of the command
13
+ # @param argv [Array<String>] command-line arguments
14
+ #
15
+ # @example
16
+ # geny.run "rails:model", "--name", "User"
17
+ def run(name, *argv)
18
+ command = @registry.find!(name)
19
+ command.run(argv)
20
+ end
21
+
22
+ # Run a command with options
23
+ # @param name [String] name of the command
24
+ # @param options [Hash{Symbol => Object}] options for the command
25
+ #
26
+ # @example
27
+ # geny.invoke "rails:model", name: "User"
28
+ def invoke(name, **options)
29
+ command = @registry.find!(name)
30
+ command.invoke(options)
31
+ end
32
+ end
33
+ end
34
+ end
data/lib/geny/command.rb CHANGED
@@ -18,9 +18,10 @@ module Geny
18
18
  attr_reader :root
19
19
 
20
20
  # Create a new command
21
+ # @param registry [Registry] registry used to find this command
21
22
  # @param name [String] name of the command
22
23
  # @param root [String] name of the command
23
- def initialize(name:, root:)
24
+ def initialize(name:, root:, registry:)
24
25
  @name = name
25
26
  @root = root
26
27
  end
@@ -57,6 +58,9 @@ module Geny
57
58
 
58
59
  # Parse command-line options
59
60
  # @param argv [Array<String>]
61
+ # @raise [Argy::ParseError] when the arguments are invalid
62
+ # @raise [Argy::CoersionError] when the arguments cannot be coerced
63
+ # @raise [Argy::ValidationError] when required arguments are missing
60
64
  # @return [Argy::Options]
61
65
  def parse(argv)
62
66
  parser.parse(argv)
@@ -70,6 +74,7 @@ module Geny
70
74
  end
71
75
 
72
76
  # Invoke a command with options
77
+ # @raise [Argy::ValidationError] when required arguments are missing
73
78
  # @param options [Hash{Symbol => Object}]
74
79
  def invoke(**options)
75
80
  options = parser.default_values.merge(options)
@@ -1,6 +1,7 @@
1
1
  require "pastel"
2
2
  require "geny/context/base"
3
3
  require "geny/actions/ui"
4
+ require "geny/actions/geny"
4
5
  require "geny/actions/git"
5
6
  require "geny/actions/shell"
6
7
  require "geny/actions/files"
@@ -51,6 +52,11 @@ module Geny
51
52
  view: View.new(command: command, locals: locals)
52
53
  )
53
54
  end
55
+
56
+ # A utility for invoking other generators
57
+ def geny
58
+ Actions::Geny.new(registry: command.registry)
59
+ end
54
60
  end
55
61
  end
56
62
  end
data/lib/geny/registry.rb CHANGED
@@ -34,7 +34,7 @@ module Geny
34
34
  root = file.dirname
35
35
  name = root.relative_path_from(path)
36
36
  name = name.to_s.tr(File::SEPARATOR, ":")
37
- Command.new(name: name, root: root.to_s)
37
+ build(name, root.to_s)
38
38
  end
39
39
  end
40
40
 
@@ -48,7 +48,7 @@ module Geny
48
48
  load_path.each do |path|
49
49
  file = File.join(path, *name.split(":"), Command::FILENAME)
50
50
  root = File.dirname(file)
51
- return Command.new(name: name, root: root) if File.exist?(file)
51
+ return build(name, root) if File.exist?(file)
52
52
  end
53
53
 
54
54
  nil
@@ -64,6 +64,10 @@ module Geny
64
64
 
65
65
  private
66
66
 
67
+ def build(name, root)
68
+ Command.new(name: name, root: root, registry: self)
69
+ end
70
+
67
71
  def command_not_found!(name)
68
72
  raise NotFoundError, "There doesn't appear to be a generator named '#{name}'"
69
73
  end
data/lib/geny/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Geny
2
- VERSION = "0.1.0"
2
+ VERSION = "1.0.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geny
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ray Zane
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-12 00:00:00.000000000 Z
11
+ date: 2019-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: argy
@@ -148,6 +148,7 @@ files:
148
148
  - lib/generators/new/templates/generator.rb.erb
149
149
  - lib/geny.rb
150
150
  - lib/geny/actions/files.rb
151
+ - lib/geny/actions/geny.rb
151
152
  - lib/geny/actions/git.rb
152
153
  - lib/geny/actions/shell.rb
153
154
  - lib/geny/actions/templates.rb