parlour 0.5.1 → 0.5.2

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: a2325cc0c8641efdbbf3499b4751f7e10dae39ee7823acb1a9588212711d9ceb
4
- data.tar.gz: da88da407877745bb1f4265d0b90964881a2ef44bbd52566952dd18de467585c
3
+ metadata.gz: dd7b82a40507591cd3793427e52978d215cc70c12b94b1c80fa40909fe73f194
4
+ data.tar.gz: e2408f44d246e5090ab375a9ab5bba9bc733496f8d8b647576f6733d9aeeb48d
5
5
  SHA512:
6
- metadata.gz: 12438efd38d62b16d90f93186014b666950ff178bf00c5522575b00f9222baad9ebc8b7c507df2618833b9a04c5b3fcf8542670600e29ddfb254addb167ad282
7
- data.tar.gz: fae177ea2bede03f5e27264bfaa9b5064ac6685860b5a708a5370aa749278d34bebe06c12cd37580b6c26a1e1ff4f95c69d71ae2f56767cc30fd5901679ae453
6
+ metadata.gz: bbb37ea0acb6091856f17d7a03cabf1c5b642e2571e47729e4232cda58da81da7dcc9477fe4f6d849f72afda6cc20f7c07310f44290079e1eded985719574a94
7
+ data.tar.gz: 5803b1fb765174873b3e8f45667b81da60d438d9209ee23d8fb860d391c02b1a6e1fabed9eb6cab14ec5f1d90bf6a37a78ba8edac887a0419ef1efd44f778afa
data/CHANGELOG.md CHANGED
@@ -3,6 +3,21 @@ All notable changes to this project will be documented in this file.
3
3
 
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
5
5
 
6
+ ## [0.5.2] - 2019-07-24
7
+ ### Added
8
+ - Added the `Namespace#create_includes` and `Namespace#create_extends` methods
9
+ to add multiple `include` and `extend` calls at once.
10
+
11
+ ### Changed
12
+ - Signatures for some methods using keyword parameters have been altered such
13
+ that those keywords are required. Previously, these parameters defaulted to
14
+ `nil`, and the Sorbet runtime would fail an assertion if they weren't present.
15
+
16
+ ### Fixed
17
+ - Fixed some incorrect documentation for the `Namespace` methods `path` and
18
+ `create_constant`.
19
+ - Fixed a Sorbet signature for `Method#describe` which was causing an exception.
20
+
6
21
  ## [0.5.1] - 2019-07-21
7
22
  ### Added
8
23
  - Added the `Namespace#path` method for plugins to use.
data/README.md CHANGED
@@ -151,6 +151,7 @@ plugins:
151
151
  _Have you written an awesome Parlour plugin? Please submit a PR to add it to this list!_
152
152
 
153
153
  - [Sord](https://github.com/AaronC81/sord) - Generate RBIs from YARD documentation
154
+ - [parlour-datamapper](https://github.com/AaronC81/parlour-datamapper) - Simple plugin for generating DataMapper model types
154
155
 
155
156
 
156
157
  ## Contributing
@@ -33,14 +33,19 @@ module Parlour
33
33
  #
34
34
  # @param plugins [Array<Plugin>] An array of {Plugin} instances.
35
35
  # @param generator [RbiGenerator] The {RbiGenerator} to run the plugins on.
36
+ # @param allow_failure [Boolean] Whether to keep running plugins if a plugin
37
+ # throws an exception. If false, the exception is re-raised when caught.
36
38
  # @return [void]
37
- def self.run_plugins(plugins, generator)
39
+ def self.run_plugins(plugins, generator, allow_failure: true)
38
40
  plugins.each do |plugin|
39
- puts "=== #{plugin.class.name}"
40
- generator.current_plugin = plugin
41
- plugin.generate(generator.root)
42
- rescue Exception => e
43
- puts "!!! This plugin threw an exception: #{e}"
41
+ begin
42
+ puts "=== #{plugin.class.name}"
43
+ generator.current_plugin = plugin
44
+ plugin.generate(generator.root)
45
+ rescue Exception => e
46
+ raise e unless allow_failure
47
+ puts "!!! This plugin threw an exception: #{e}"
48
+ end
44
49
  end
45
50
  end
46
51
 
@@ -185,7 +185,7 @@ module Parlour
185
185
  # We don't need to change anything! We only merge identical methods
186
186
  end
187
187
 
188
- sig { override.returns(String) }
188
+ sig { implementation.returns(String) }
189
189
  # Returns a human-readable brief string description of this method.
190
190
  #
191
191
  # @return [String]
@@ -79,12 +79,12 @@ module Parlour
79
79
  )
80
80
  end
81
81
 
82
+ sig { params(object: T.untyped, block: T.proc.params(x: Namespace).void).void }
82
83
  # Given a Class or Module object, generates all classes and modules in the
83
84
  # path to that object, then executes the given block on the last
84
85
  # {Namespace}. This should only be executed on the root namespace.
85
86
  # @param [Class, Module] object
86
87
  # @param block A block which the new {Namespace} yields itself to.
87
- sig { params(object: T.untyped, block: T.proc.params(x: Namespace).void).void }
88
88
  def path(object, &block)
89
89
  raise 'only call #path on root' if is_a?(ClassNamespace) || is_a?(ModuleNamespace)
90
90
 
@@ -130,7 +130,7 @@ module Parlour
130
130
 
131
131
  sig do
132
132
  params(
133
- name: T.nilable(String),
133
+ name: String,
134
134
  superclass: T.nilable(String),
135
135
  abstract: T::Boolean,
136
136
  block: T.nilable(T.proc.params(x: ClassNamespace).void)
@@ -152,8 +152,7 @@ module Parlour
152
152
  # @param abstract [Boolean] A boolean indicating whether this class is abstract.
153
153
  # @param block A block which the new instance yields itself to.
154
154
  # @return [ClassNamespace]
155
- def create_class(name: nil, superclass: nil, abstract: false, &block)
156
- name = T.must(name)
155
+ def create_class(name:, superclass: nil, abstract: false, &block)
157
156
  new_class = ClassNamespace.new(generator, name, superclass, abstract, &block)
158
157
  move_next_comments(new_class)
159
158
  children << new_class
@@ -162,7 +161,7 @@ module Parlour
162
161
 
163
162
  sig do
164
163
  params(
165
- name: T.nilable(String),
164
+ name: String,
166
165
  interface: T::Boolean,
167
166
  block: T.nilable(T.proc.params(x: ClassNamespace).void)
168
167
  ).returns(ModuleNamespace)
@@ -182,8 +181,7 @@ module Parlour
182
181
  # interface.
183
182
  # @param block A block which the new instance yields itself to.
184
183
  # @return [ModuleNamespace]
185
- def create_module(name: nil, interface: false, &block)
186
- name = T.must(name)
184
+ def create_module(name:, interface: false, &block)
187
185
  new_module = ModuleNamespace.new(generator, name, interface, &block)
188
186
  move_next_comments(new_module)
189
187
  children << new_module
@@ -192,7 +190,7 @@ module Parlour
192
190
 
193
191
  sig do
194
192
  params(
195
- name: T.nilable(String),
193
+ name: String,
196
194
  parameters: T.nilable(T::Array[Parameter]),
197
195
  return_type: T.nilable(String),
198
196
  returns: T.nilable(String),
@@ -223,8 +221,7 @@ module Parlour
223
221
  # it is defined using +self.+.
224
222
  # @param block A block which the new instance yields itself to.
225
223
  # @return [Method]
226
- def create_method(name: nil, parameters: nil, return_type: nil, returns: nil, abstract: false, implementation: false, override: false, overridable: false, class_method: false, &block)
227
- name = T.must(name)
224
+ def create_method(name:, parameters: nil, return_type: nil, returns: nil, abstract: false, implementation: false, override: false, overridable: false, class_method: false, &block)
228
225
  parameters = parameters || []
229
226
  raise 'cannot specify both return_type: and returns:' if return_type && returns
230
227
  return_type ||= returns
@@ -269,10 +266,7 @@ module Parlour
269
266
  # +"String"+ or +"T.untyped"+.
270
267
  # @param block A block which the new instance yields itself to.
271
268
  # @return [RbiGenerator::Attribute]
272
- def create_attribute(name: nil, kind: nil, type: nil, &block)
273
- name = T.must(name)
274
- kind = T.must(kind)
275
- type = T.must(type)
269
+ def create_attribute(name:, kind:, type:, &block)
276
270
  new_attribute = RbiGenerator::Attribute.new(
277
271
  generator,
278
272
  name,
@@ -293,7 +287,7 @@ module Parlour
293
287
  # +"String"+ or +"T.untyped"+.
294
288
  # @param block A block which the new instance yields itself to.
295
289
  # @return [RbiGenerator::Attribute]
296
- def create_attr_reader(name: nil, type: nil, &block)
290
+ def create_attr_reader(name:, type:, &block)
297
291
  create_attribute(name: name, kind: :reader, type: type, &block)
298
292
  end
299
293
 
@@ -304,7 +298,7 @@ module Parlour
304
298
  # +"String"+ or +"T.untyped"+.
305
299
  # @param block A block which the new instance yields itself to.
306
300
  # @return [RbiGenerator::Attribute]
307
- def create_attr_writer(name: nil, type: nil, &block)
301
+ def create_attr_writer(name:, type:, &block)
308
302
  create_attribute(name: name, kind: :writer, type: type, &block)
309
303
  end
310
304
 
@@ -315,7 +309,7 @@ module Parlour
315
309
  # +"String"+ or +"T.untyped"+.
316
310
  # @param block A block which the new instance yields itself to.
317
311
  # @return [RbiGenerator::Attribute]
318
- def create_attr_accessor(name: nil, type: nil, &block)
312
+ def create_attr_accessor(name:, type:, &block)
319
313
  create_attribute(name: name, kind: :accessor, type: type, &block)
320
314
  end
321
315
 
@@ -325,8 +319,7 @@ module Parlour
325
319
  # @param code [String] The code to insert.
326
320
  # @param block A block which the new instance yields itself to.
327
321
  # @return [RbiGenerator::Arbitrary]
328
- def create_arbitrary(code: nil, &block)
329
- code = T.must(code)
322
+ def create_arbitrary(code:, &block)
330
323
  new_arbitrary = RbiGenerator::Arbitrary.new(
331
324
  generator,
332
325
  code: code,
@@ -347,8 +340,7 @@ module Parlour
347
340
  # +"MyModule"+.
348
341
  # @param block A block which the new instance yields itself to.
349
342
  # @return [RbiGenerator::Extend]
350
- def create_extend(name: nil, &block)
351
- name = T.must(name)
343
+ def create_extend(name:, &block)
352
344
  new_extend = RbiGenerator::Extend.new(
353
345
  generator,
354
346
  name: name,
@@ -359,18 +351,33 @@ module Parlour
359
351
  new_extend
360
352
  end
361
353
 
354
+ sig { params(extendables: T::Array[String]).returns(T::Array[Extend]) }
355
+ # Adds new +extend+s to this namespace.
356
+ #
357
+ # @example Add +extend+s to a class.
358
+ # class.create_extends(['Foo', 'Bar'])
359
+ #
360
+ # @param [Array<String>] extendables An array of names for whatever is being extended.
361
+ # @return [Array<RbiGenerator::Extend>]
362
+ def create_extends(extendables)
363
+ returned_extendables = []
364
+ extendables.each do |extendable|
365
+ returned_extendables << create_extend(name: extendable)
366
+ end
367
+ returned_extendables
368
+ end
369
+
362
370
  sig { params(name: String, block: T.nilable(T.proc.params(x: Include).void)).returns(Include) }
363
371
  # Adds a new +include+ to this namespace.
364
372
  #
365
373
  # @example Add an +include+ to a class.
366
- # class.create_include(name: 'IncludableClass') #=> include IncludableClass
374
+ # class.create_include(name: 'IncludableClass') #=> include IncludableClass
367
375
  #
368
- # @param object [String] A code string for what is included, for example
376
+ # @param [String] name A code string for what is included, for example
369
377
  # +"Enumerable"+.
370
378
  # @param block A block which the new instance yields itself to.
371
379
  # @return [RbiGenerator::Include]
372
- def create_include(name: nil, &block)
373
- name = T.must(name)
380
+ def create_include(name:, &block)
374
381
  new_include = RbiGenerator::Include.new(
375
382
  generator,
376
383
  name: name,
@@ -381,19 +388,33 @@ module Parlour
381
388
  new_include
382
389
  end
383
390
 
391
+ sig { params(includables: T::Array[String]).returns(T::Array[Include]) }
392
+ # Adds new +include+s to this namespace.
393
+ #
394
+ # @example Add +include+s to a class.
395
+ # class.create_includes(['Foo', 'Bar'])
396
+ #
397
+ # @param [Array<String>] includables An array of names for whatever is being included.
398
+ # @return [Array<RbiGenerator::Include>]
399
+ def create_includes(includables)
400
+ returned_includables = []
401
+ includables.each do |includable|
402
+ returned_includables << create_include(name: includable)
403
+ end
404
+ returned_includables
405
+ end
406
+
384
407
  sig { params(name: String, value: String, block: T.nilable(T.proc.params(x: Constant).void)).returns(Constant) }
385
408
  # Adds a new constant definition to this namespace.
386
409
  #
387
410
  # @example Add an +Elem+ constant to the class.
388
- # class.create_include(name: 'IncludableClass') #=> Elem = String
411
+ # class.create_constant(name: 'Elem', value: 'String') #=> Elem = String
389
412
  #
390
413
  # @param name [String] The name of the constant.
391
414
  # @param value [String] The value of the constant, as a Ruby code string.
392
415
  # @param block A block which the new instance yields itself to.
393
416
  # @return [RbiGenerator::Constant]
394
- def create_constant(name: nil, value: nil, &block)
395
- name = T.must(name)
396
- value = T.must(value)
417
+ def create_constant(name:, value:, &block)
397
418
  new_constant = RbiGenerator::Constant.new(
398
419
  generator,
399
420
  name: name,
@@ -1,5 +1,5 @@
1
1
  # typed: strong
2
2
  module Parlour
3
3
  # The library version.
4
- VERSION = '0.5.1'
4
+ VERSION = '0.5.2'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parlour
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Christiansen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-20 00:00:00.000000000 Z
11
+ date: 2019-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sorbet-runtime