dsl_compose 1.13.1 → 1.14.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
  SHA256:
3
- metadata.gz: 9ca102e9e28dc1732f0a6c14282bdfc6b0cbc3edddc8b76864921c8d5a295ec0
4
- data.tar.gz: 349941451a9954f29938fb91b0324662b306d215ce725e68faa00d25937b883d
3
+ metadata.gz: 8fe38926f435f6f7978468bb08e0b91ebbd6962d5863032a7cb49095856c3c50
4
+ data.tar.gz: c4523746ddbef25e5c64e8b47ea624393d6efa25f0c6b795a0d69ea7910d2683
5
5
  SHA512:
6
- metadata.gz: '002348ac24e6f8bf513478702c6c08368fb1ee8c788ad8a893d7a848e41103ee6208e5e24f260e0be79eb069700047d408b0c51e51ea3b861bccf55fe2312882'
7
- data.tar.gz: 14431a1691709376eb73196c5c7280a7d0ec451d4eb58a3e8ffa3bc43bb6cf26f4433b8f4d6fb488db57d9be06bbcf4f974e5175719d44766a1247271ea76e34
6
+ metadata.gz: ef54cc72949be0609a9bd1feacad07b202c90b183f6be89c6494c19a95944639ccc0cba3986375a16234803aa96f4e90721abc2308fa75e20ace407504bfedce
7
+ data.tar.gz: 4143b1a1d0d84597da9fa29ef745a9ca0002fc4bc6107a9206b700453f511cdc1e7a0bc6eea16af69e169cc3c220ff43bbbdd5b8603df58704bcc9d51fa5d58b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.14.0](https://github.com/craigulliott/dsl_compose/compare/v1.13.1...v1.14.0) (2023-07-19)
4
+
5
+
6
+ ### Features
7
+
8
+ * Parsers can push notes back to the DSLs to explain how each DSL is being used. These notes can be used in generated documentation. ([#39](https://github.com/craigulliott/dsl_compose/issues/39)) ([053fa50](https://github.com/craigulliott/dsl_compose/commit/053fa50bcbc2180b2f788b5a3bba11576804f206))
9
+
3
10
  ## [1.13.1](https://github.com/craigulliott/dsl_compose/compare/v1.13.0...v1.13.1) (2023-07-19)
4
11
 
5
12
 
@@ -120,7 +120,7 @@ module DSLCompose
120
120
  raise DescriptionAlreadyExistsError, "The description has already been set"
121
121
  end
122
122
 
123
- @description = description
123
+ @description = FixHeredocIndentation.fix_heredoc_indentation description
124
124
  end
125
125
 
126
126
  # Returns `true` if this DSL has a description, else false.
@@ -76,7 +76,7 @@ module DSLCompose
76
76
  raise DescriptionAlreadyExistsError, "The description has already been set"
77
77
  end
78
78
 
79
- @description = description
79
+ @description = FixHeredocIndentation.fix_heredoc_indentation description
80
80
  end
81
81
 
82
82
  # Returns `true` if this DSL has a description, else false.
@@ -82,7 +82,7 @@ module DSLCompose
82
82
  raise DescriptionAlreadyExistsError, "The DSL description has already been set"
83
83
  end
84
84
 
85
- @description = description
85
+ @description = FixHeredocIndentation.fix_heredoc_indentation description
86
86
  end
87
87
 
88
88
  # Returns `true` if this DSL has a description, else false.
@@ -0,0 +1,23 @@
1
+ module DSLCompose
2
+ # A small helper to fix indentation and clean up whitespace in
3
+ # strings which were created with rubys heredoc syntax.
4
+ module FixHeredocIndentation
5
+ # This method is used to fix the indentation of heredoc strings.
6
+ # It will remove the leading whitespace from each line of the string
7
+ # and remove the leading newline from the string.
8
+ def self.fix_heredoc_indentation string
9
+ # replace all tabs with spaces
10
+ string = string.gsub(/\t/, " ")
11
+ # remove empty lines from the start of the string
12
+ string = string.gsub(/\A( *\n)+/, "")
13
+ # remove empty lines from the end of the string
14
+ string = string.gsub(/( *\n)+\Z/, "")
15
+ # removes the number of leading spaces on the first line, from
16
+ # all the other lines
17
+ string = string.gsub(/^#{string[/\A */]}/, "")
18
+ # collapse lines which are next to each other onto the same line
19
+ # because they are really the same paragraph
20
+ string.gsub(/([^ \n])\n([^ \n])/, '\1 \2')
21
+ end
22
+ end
23
+ end
@@ -22,6 +22,19 @@ module DSLCompose
22
22
  arguments: @arguments.to_h
23
23
  }
24
24
  end
25
+
26
+ # the parser can provide usage notes for how this dsl is being used, these are used to
27
+ # generate documentation
28
+ def add_parser_usage_note note
29
+ @parser_usage_notes ||= []
30
+ @parser_usage_notes << DSLCompose::FixHeredocIndentation.fix_heredoc_indentation(note)
31
+ end
32
+
33
+ # return the list of notes which describe how the parsers are using this DSL
34
+ def parser_usage_notes
35
+ @parser_usage_notes ||= []
36
+ @parser_usage_notes
37
+ end
25
38
  end
26
39
  end
27
40
  end
@@ -36,6 +36,19 @@ module DSLCompose
36
36
  end
37
37
  end
38
38
 
39
+ # the parser can provide usage notes for how this dsl is being used, these are used to
40
+ # generate documentation
41
+ def add_parser_usage_note note
42
+ @parser_usage_notes ||= []
43
+ @parser_usage_notes << DSLCompose::FixHeredocIndentation.fix_heredoc_indentation(note)
44
+ end
45
+
46
+ # return the list of notes which describe how the parsers are using this DSL
47
+ def parser_usage_notes
48
+ @parser_usage_notes ||= []
49
+ @parser_usage_notes
50
+ end
51
+
39
52
  private
40
53
 
41
54
  # catch and process any method calls within the DSL block
@@ -13,6 +13,21 @@ module DSLCompose
13
13
  @executions = []
14
14
  end
15
15
 
16
+ # the parser can provide usage notes for how this dsl is being used, these are used to
17
+ # generate documentation
18
+ def add_parser_usage_note child_class, note
19
+ @parser_usage_notes ||= {}
20
+ @parser_usage_notes[child_class] ||= []
21
+ @parser_usage_notes[child_class] << DSLCompose::FixHeredocIndentation.fix_heredoc_indentation(note)
22
+ end
23
+
24
+ # return the list of notes which describe how the parsers are using this DSL
25
+ def parser_usage_notes child_class
26
+ @parser_usage_notes ||= {}
27
+ @parser_usage_notes[child_class] ||= []
28
+ @parser_usage_notes[child_class]
29
+ end
30
+
16
31
  # Execute/process a dynamically defined DSL on a class.
17
32
  # `klass` is the class in which the DSL is being used, not
18
33
  # the class in which the DSL was defined.
@@ -83,11 +83,22 @@ module DSLCompose
83
83
  end
84
84
  end
85
85
 
86
+ # set the method_call in an instance variable so that method calls to `description`
87
+ # from within the block will have access to it
88
+ @method_call = method_call
89
+
86
90
  # yeild the block in the context of this class
87
91
  instance_exec(**args, &block)
88
92
  end
89
93
  end
90
94
  end
95
+
96
+ # takes a description of what this parser does and stores it against the DSL definition
97
+ # of the current @child_class, this is used to generate documentation for what the parser
98
+ # has done with the DSL
99
+ def description description
100
+ @method_call.add_parser_usage_note description
101
+ end
91
102
  end
92
103
  end
93
104
  end
@@ -108,6 +108,13 @@ module DSLCompose
108
108
  def for_method method_names, &block
109
109
  ForMethodParser.new(@base_class, @child_class, @dsl_execution, method_names, &block)
110
110
  end
111
+
112
+ # takes a description of what this parser does and stores it against the DSL definition
113
+ # of the current @child_class, this is used to generate documentation for what the parser
114
+ # has done with the DSL
115
+ def description description
116
+ @dsl_execution.add_parser_usage_note description
117
+ end
111
118
  end
112
119
  end
113
120
  end
@@ -121,6 +121,13 @@ module DSLCompose
121
121
  def for_dsl_or_inherited_dsl dsl_names, &block
122
122
  for_dsl dsl_names, on_current_class: true, on_ancestor_class: true, &block
123
123
  end
124
+
125
+ # takes a description of what this parser does and stores it against the DSL definition
126
+ # of the current @child_class, this is used to generate documentation for what the parser
127
+ # has done with the DSL
128
+ def description description
129
+ @base_class.dsls.add_parser_usage_note @child_class, description
130
+ end
124
131
  end
125
132
  end
126
133
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DSLCompose
4
- VERSION = "1.13.1"
4
+ VERSION = "1.14.0"
5
5
  end
data/lib/dsl_compose.rb CHANGED
@@ -45,6 +45,8 @@ require "dsl_compose/composer"
45
45
 
46
46
  require "dsl_compose/class_coerce"
47
47
 
48
+ require "dsl_compose/fix_heredoc_indentation"
49
+
48
50
  require "dsl_compose/shared_configuration"
49
51
 
50
52
  require "dsl_compose/dsls"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dsl_compose
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.13.1
4
+ version: 1.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Craig Ulliott
@@ -62,6 +62,7 @@ files:
62
62
  - lib/dsl_compose/dsl/dsl_method/interpreter.rb
63
63
  - lib/dsl_compose/dsl/interpreter.rb
64
64
  - lib/dsl_compose/dsls.rb
65
+ - lib/dsl_compose/fix_heredoc_indentation.rb
65
66
  - lib/dsl_compose/interpreter.rb
66
67
  - lib/dsl_compose/interpreter/execution.rb
67
68
  - lib/dsl_compose/interpreter/execution/arguments.rb