ginny 0.5.0 → 0.5.2
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 +4 -4
- data/.rubocop.yml +90 -53
- data/CHANGELOG.md +23 -0
- data/Gemfile.lock +3 -1
- data/README.md +11 -9
- data/ginny.gemspec +1 -0
- data/lib/ginny.rb +3 -0
- data/lib/ginny/load.rb +1 -1
- data/lib/ginny/models/attr.rb +2 -0
- data/lib/ginny/models/class.rb +7 -3
- data/lib/ginny/models/func.rb +3 -1
- data/lib/ginny/models/param.rb +4 -2
- data/lib/ginny/version.rb +1 -1
- data/schema/ginny.json +146 -0
- data/schema/ginny.schema.yml +107 -0
- metadata +19 -6
- data/lib/ginny/string/comment.rb +0 -19
- data/lib/ginny/string/indent.rb +0 -52
- data/lib/ginny/symbolize.rb +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d25c4e9649691bd4bebc48a0875e7ae5db2f91b46a67111ee567b86e08e2a87d
|
4
|
+
data.tar.gz: 8baa17b48c0ec91e1654ce02261675a4ee9e64ac71a03e8c7212d813adf964e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02a0a34e5148d8aab2f35eed3b4d01fe521883f3c3281ef4a02bd29b8e7dc341e7a444bace053719f2abe2e00b8001c022b1ea9011045e8f5645d9ae11bcb0ef
|
7
|
+
data.tar.gz: 4595b6f9d30cd39f980fc1b997c0b8157b576e18ae0b94a277592c08b5347dc05090aca474f4881f39287799919099eec7a8013064a7f025c55aed6c49597f1c
|
data/.rubocop.yml
CHANGED
@@ -11,7 +11,7 @@ Style/DocumentationMethod:
|
|
11
11
|
Exclude:
|
12
12
|
- 'test/**/*.rb'
|
13
13
|
|
14
|
-
|
14
|
+
Style/SingleLineMethods:
|
15
15
|
Exclude:
|
16
16
|
- 'test/**/*.rb'
|
17
17
|
|
@@ -19,60 +19,67 @@ Layout/EmptyLinesAroundClassBody:
|
|
19
19
|
Lint/Debugger:
|
20
20
|
Enabled: true
|
21
21
|
|
22
|
+
# ==============================================================================
|
23
|
+
# Layout
|
24
|
+
# ==============================================================================
|
25
|
+
|
22
26
|
Metrics/LineLength:
|
23
27
|
Max: 150
|
24
28
|
|
25
|
-
|
26
|
-
EnforcedStyle: double_quotes
|
27
|
-
|
28
|
-
Style/FrozenStringLiteralComment:
|
29
|
+
Layout/EmptyLineAfterGuardClause:
|
29
30
|
Enabled: false
|
30
31
|
|
31
|
-
|
32
|
+
Layout/EmptyLinesAroundModuleBody:
|
32
33
|
Enabled: false
|
33
34
|
|
34
|
-
|
35
|
-
Style/BracesAroundHashParameters:
|
35
|
+
Layout/EmptyLinesAroundClassBody:
|
36
36
|
Enabled: false
|
37
37
|
|
38
|
-
Layout/
|
39
|
-
|
40
|
-
|
41
|
-
Layout/IndentFirstArrayElement:
|
42
|
-
EnforcedStyle: consistent
|
38
|
+
Layout/EmptyLinesAroundBlockBody:
|
39
|
+
Enabled: false
|
43
40
|
|
44
41
|
# https://unix.stackexchange.com/a/18789
|
45
42
|
Layout/TrailingBlankLines:
|
46
43
|
EnforcedStyle: final_newline
|
47
44
|
|
48
|
-
|
49
|
-
|
45
|
+
# ==============================================================================
|
46
|
+
# Strings
|
47
|
+
# ==============================================================================
|
50
48
|
|
51
|
-
Style/
|
52
|
-
|
49
|
+
Style/StringLiterals:
|
50
|
+
EnforcedStyle: double_quotes
|
53
51
|
|
54
|
-
Style/
|
55
|
-
|
52
|
+
Style/FrozenStringLiteralComment:
|
53
|
+
Enabled: false
|
56
54
|
|
57
|
-
|
55
|
+
Naming/HeredocDelimiterNaming:
|
58
56
|
Enabled: false
|
59
57
|
|
60
|
-
|
58
|
+
# ==============================================================================
|
59
|
+
# Numbers
|
60
|
+
# ==============================================================================
|
61
|
+
|
62
|
+
Style/ZeroLengthPredicate:
|
61
63
|
Enabled: false
|
62
64
|
|
63
|
-
Style/
|
65
|
+
Style/NumericPredicate:
|
64
66
|
Enabled: false
|
65
67
|
|
66
|
-
|
67
|
-
|
68
|
+
Naming/VariableNumber:
|
69
|
+
EnforcedStyle: snake_case
|
70
|
+
|
71
|
+
# ==============================================================================
|
72
|
+
# Braces, Brackets, & Parens
|
73
|
+
# ==============================================================================
|
74
|
+
|
75
|
+
Style/DefWithParentheses:
|
68
76
|
Enabled: false
|
69
77
|
|
70
|
-
|
71
|
-
Style/RedundantSelf:
|
78
|
+
Style/MethodCallWithoutArgsParentheses:
|
72
79
|
Enabled: false
|
73
80
|
|
74
|
-
#
|
75
|
-
Style/
|
81
|
+
# Only use braces if the function expects a hash argument. [different in Ruby 2.7+](https://blog.saeloun.com/2019/10/07/ruby-2-7-keyword-arguments-redesign.html)
|
82
|
+
Style/BracesAroundHashParameters:
|
76
83
|
Enabled: false
|
77
84
|
|
78
85
|
Style/WordArray:
|
@@ -81,58 +88,88 @@ Style/WordArray:
|
|
81
88
|
Style/SymbolArray:
|
82
89
|
EnforcedStyle: brackets
|
83
90
|
|
84
|
-
#
|
85
|
-
|
86
|
-
|
87
|
-
# EnforcedStyle: assign_to_condition
|
88
|
-
Enabled: false
|
91
|
+
# ==============================================================================
|
92
|
+
# Trailing Commas
|
93
|
+
# ==============================================================================
|
89
94
|
|
90
|
-
|
91
|
-
|
95
|
+
Style/TrailingCommaInArguments:
|
96
|
+
EnforcedStyleForMultiline: comma
|
92
97
|
|
93
|
-
|
94
|
-
|
98
|
+
Style/TrailingCommaInArrayLiteral:
|
99
|
+
EnforcedStyleForMultiline: comma
|
95
100
|
|
96
|
-
|
101
|
+
Style/TrailingCommaInHashLiteral:
|
102
|
+
EnforcedStyleForMultiline: comma
|
103
|
+
|
104
|
+
# ==============================================================================
|
105
|
+
# Fewer lines doesn't mean better code
|
106
|
+
# ==============================================================================
|
107
|
+
|
108
|
+
Metrics/ModuleLength:
|
97
109
|
Enabled: false
|
98
110
|
|
99
111
|
Metrics/ClassLength:
|
100
112
|
Enabled: false
|
101
113
|
|
102
|
-
Metrics/
|
114
|
+
Metrics/MethodLength:
|
103
115
|
Enabled: false
|
104
116
|
|
105
|
-
Metrics/
|
117
|
+
Metrics/BlockLength:
|
106
118
|
Enabled: false
|
107
119
|
|
108
|
-
|
120
|
+
# ==============================================================================
|
121
|
+
# Names
|
122
|
+
# ==============================================================================
|
123
|
+
|
124
|
+
# Everything else is snake case, numbers should be too.
|
125
|
+
Naming/VariableNumber:
|
126
|
+
EnforcedStyle: snake_case
|
127
|
+
|
128
|
+
# ==============================================================================
|
129
|
+
# Unsorted
|
130
|
+
# ==============================================================================
|
131
|
+
|
132
|
+
# Default value (special_inside_parentheses) is ridiculous.
|
133
|
+
# Look for yourself: https://www.rubydoc.info/gems/rubocop/0.69.0/RuboCop/Cop/Layout/IndentFirstHashElement
|
134
|
+
Layout/IndentFirstHashElement:
|
135
|
+
EnforcedStyle: consistent
|
136
|
+
|
137
|
+
# Default value (special_inside_parentheses) is ridiculous.
|
138
|
+
# Look for yourself: https://www.rubydoc.info/gems/rubocop/0.69.0/RuboCop/Cop/Layout/IndentFirstArrayElement
|
139
|
+
Layout/IndentFirstArrayElement:
|
140
|
+
EnforcedStyle: consistent
|
141
|
+
|
142
|
+
Layout/AlignHash:
|
109
143
|
Enabled: false
|
110
144
|
|
111
|
-
|
145
|
+
# Explicit, not redundant
|
146
|
+
Style/RedundantReturn:
|
112
147
|
Enabled: false
|
113
148
|
|
114
|
-
|
149
|
+
# Explicit, not redundant
|
150
|
+
Style/RedundantSelf:
|
115
151
|
Enabled: false
|
116
152
|
|
117
|
-
|
153
|
+
# `x&.y&.[](:argument)` isn't what I'd call "readable".
|
154
|
+
# https://stackoverflow.com/questions/34794697/using-with-the-safe-navigation-operator-in-ruby
|
155
|
+
Style/SafeNavigation:
|
118
156
|
Enabled: false
|
119
157
|
|
120
|
-
|
158
|
+
# TODO: File issue to ignore enums when using `EnforcedStyle: assign_inside_condition`.
|
159
|
+
Style/ConditionalAssignment:
|
121
160
|
Enabled: false
|
122
161
|
|
123
|
-
|
162
|
+
Lint/HandleExceptions:
|
163
|
+
AllowComments: true
|
164
|
+
|
165
|
+
Metrics/AbcSize:
|
124
166
|
Enabled: false
|
125
167
|
|
126
|
-
|
168
|
+
Metrics/CyclomaticComplexity:
|
127
169
|
Enabled: false
|
128
170
|
|
129
|
-
|
171
|
+
Metrics/PerceivedComplexity:
|
130
172
|
Enabled: false
|
131
173
|
|
132
174
|
Style/CommentedKeyword:
|
133
175
|
Enabled: False
|
134
|
-
|
135
|
-
Naming/VariableNumber:
|
136
|
-
EnforcedStyle: snake_case
|
137
|
-
|
138
|
-
# [1]: https://medium.com/@nikgraf/why-you-should-enforce-dangling-commas-for-multiline-statements-d034c98e36f8
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,29 @@
|
|
2
2
|
|
3
3
|
<!-- ## master (unreleased) -->
|
4
4
|
|
5
|
+
## 0.5.2 (2019-12-09)
|
6
|
+
|
7
|
+
### Added
|
8
|
+
|
9
|
+
- Improved doc comments for various functions.
|
10
|
+
- Add `Ginny::INDENT` constant.
|
11
|
+
|
12
|
+
### Changed
|
13
|
+
|
14
|
+
- Make sure not to remove newlines when trimming trailing whitespace before calls to render.
|
15
|
+
|
16
|
+
## 0.5.1 (2019-12-03)
|
17
|
+
|
18
|
+
### Added
|
19
|
+
|
20
|
+
- JSON Schema definition for Ginny definition files.
|
21
|
+
|
22
|
+
### Changed
|
23
|
+
|
24
|
+
- Update badges in readme.
|
25
|
+
- Add [tcd/coolkit](https://github.com/tcd/coolkit) dependency.
|
26
|
+
- Extracted `String.indent`, `String.comment`, and `symbolize_keys` into their own gem for reuse.
|
27
|
+
|
5
28
|
## 0.5.0 (2019-11-28)
|
6
29
|
|
7
30
|
### Added
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ginny (0.5.
|
4
|
+
ginny (0.5.2)
|
5
|
+
coolkit (~> 0.2.2)
|
5
6
|
dry-inflector (~> 0.2.0)
|
6
7
|
|
7
8
|
GEM
|
@@ -10,6 +11,7 @@ GEM
|
|
10
11
|
ansi (1.5.0)
|
11
12
|
builder (3.2.3)
|
12
13
|
coderay (1.1.2)
|
14
|
+
coolkit (0.2.2)
|
13
15
|
coveralls (0.8.23)
|
14
16
|
json (>= 1.8, < 3)
|
15
17
|
simplecov (~> 0.16.1)
|
data/README.md
CHANGED
@@ -1,15 +1,17 @@
|
|
1
1
|
# Ginny
|
2
2
|
|
3
|
+
[][rubygems]
|
4
|
+
[][travis-ci]
|
5
|
+
[][coveralls-ci]
|
6
|
+
[][rubydoc-gem]
|
7
|
+
[][license]
|
8
|
+
|
9
|
+
[rubygems]: https://rubygems.org/gems/ginny
|
10
|
+
[travis-ci]: https://travis-ci.org/tcd/ginny
|
11
|
+
[coveralls-ci]: https://coveralls.io/github/tcd/ginny?branch=master
|
12
|
+
[rubydoc-gem]: https://www.rubydoc.info/gems/ginny/0.5.0
|
13
|
+
[license]: https://github.com/tcd/ginny/blob/master/LICENSE.txt
|
3
14
|
|
4
|
-
[](https://travis-ci.org/tcd/gql)
|
5
|
-
[](https://coveralls.io/github/tcd/ginny?branch=master)
|
6
|
-
[](https://rubydoc.org/github/tcd/ginny/master)
|
7
|
-
[](https://github.com/tcd/ginny/blob/master/LICENSE.txt)
|
8
|
-
|
9
|
-
[](https://rubygems.org/gems/ginny) [[1]][gem link 1] [[2]][gem link 2]
|
10
|
-
|
11
|
-
[gem link 1]: https://help.rubygems.org/discussions/problems/37131-gem-push-name-too-close-to-typo-protected-gem
|
12
|
-
[gem link 2]: https://github.com/rubygems/rubygems.org/issues/2058
|
13
15
|
|
14
16
|
## Installation
|
15
17
|
|
data/ginny.gemspec
CHANGED
data/lib/ginny.rb
CHANGED
data/lib/ginny/load.rb
CHANGED
@@ -9,7 +9,7 @@ module Ginny
|
|
9
9
|
# @param path [String]
|
10
10
|
# @return [Hash<Symbol>]
|
11
11
|
def self.load_yaml(path)
|
12
|
-
return
|
12
|
+
return Coolkit.symbolize_keys(YAML.load_file(File.expand_path(path)))
|
13
13
|
end
|
14
14
|
|
15
15
|
# Load data from a JSON file.
|
data/lib/ginny/models/attr.rb
CHANGED
data/lib/ginny/models/class.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require "dry/inflector"
|
2
2
|
|
3
3
|
module Ginny
|
4
|
-
# Used to generate a [class](https://ruby-doc.org/core-2.6.5/Class.html)
|
4
|
+
# Used to generate a [class](https://ruby-doc.org/core-2.6.5/Class.html).
|
5
5
|
class Class
|
6
6
|
|
7
7
|
# Name of the class.
|
@@ -49,6 +49,8 @@ module Ginny
|
|
49
49
|
return c
|
50
50
|
end
|
51
51
|
|
52
|
+
# Write generated code out to a file.
|
53
|
+
#
|
52
54
|
# @param folder [String]
|
53
55
|
# @return [String]
|
54
56
|
def generate(folder = ".")
|
@@ -57,6 +59,8 @@ module Ginny
|
|
57
59
|
return path
|
58
60
|
end
|
59
61
|
|
62
|
+
# Return generated code as a string.
|
63
|
+
#
|
60
64
|
# @return [String]
|
61
65
|
def render()
|
62
66
|
parts = []
|
@@ -66,10 +70,10 @@ module Ginny
|
|
66
70
|
parts << (self.body&.length&.positive? ? self.body.indent(2) : nil)
|
67
71
|
parts << "end"
|
68
72
|
if self.modules.length > 0
|
69
|
-
body = parts.compact.join("\n").gsub(
|
73
|
+
body = parts.compact.join("\n").gsub(/(\s+)$/, "")
|
70
74
|
return Ginny.mod(body, self.modules)
|
71
75
|
end
|
72
|
-
return parts.compact.join("\n").gsub(
|
76
|
+
return parts.compact.join("\n").gsub(/(\s+)$/, "")
|
73
77
|
end
|
74
78
|
|
75
79
|
# @return [String]
|
data/lib/ginny/models/func.rb
CHANGED
@@ -45,6 +45,8 @@ module Ginny
|
|
45
45
|
return f
|
46
46
|
end
|
47
47
|
|
48
|
+
# Return generated code as a string.
|
49
|
+
#
|
48
50
|
# @return [String]
|
49
51
|
def render()
|
50
52
|
# return self.render_compact() if self.body.nil? && self.params.length == 0
|
@@ -56,7 +58,7 @@ module Ginny
|
|
56
58
|
parts << self.body.indent(2) unless self.body.nil?
|
57
59
|
parts << "end"
|
58
60
|
|
59
|
-
body = parts.compact.join("\n").gsub(
|
61
|
+
body = parts.compact.join("\n").gsub(/(\s+)$/, "")
|
60
62
|
|
61
63
|
return Ginny.mod(body, self.modules) if self.modules.length > 0
|
62
64
|
return body
|
data/lib/ginny/models/param.rb
CHANGED
@@ -11,10 +11,10 @@ module Ginny
|
|
11
11
|
# Description of the param. [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) is supported.
|
12
12
|
# @return [String]
|
13
13
|
attr_accessor :description
|
14
|
-
# [Type](https://rubydoc.info/gems/yard/file/docs/GettingStarted.md#Declaring_Types) of the
|
14
|
+
# [Type](https://rubydoc.info/gems/yard/file/docs/GettingStarted.md#Declaring_Types) of the param.
|
15
15
|
# @return [String]
|
16
16
|
attr_accessor :type
|
17
|
-
# Default value for the
|
17
|
+
# Default value for the param.
|
18
18
|
# Set `optional` as `true` for a default `nil` value.
|
19
19
|
# @return [String]
|
20
20
|
attr_accessor :default
|
@@ -53,6 +53,8 @@ module Ginny
|
|
53
53
|
return array.map { |p| self.create(p) }
|
54
54
|
end
|
55
55
|
|
56
|
+
# Return generated code as a string.
|
57
|
+
#
|
56
58
|
# @return [String]
|
57
59
|
def render
|
58
60
|
parts = []
|
data/lib/ginny/version.rb
CHANGED
data/schema/ginny.json
ADDED
@@ -0,0 +1,146 @@
|
|
1
|
+
{
|
2
|
+
"$id": "https://github.com/tcd/ginny/blob/master/schema/ginny.json",
|
3
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
4
|
+
"title": "Files used by `Ginny` to generate ruby code.",
|
5
|
+
"type": "object",
|
6
|
+
"definitions": {
|
7
|
+
"class": {
|
8
|
+
"description": "Used to generate a [class](https://ruby-doc.org/core-2.6.5/Class.html).",
|
9
|
+
"type": "object",
|
10
|
+
"required": [
|
11
|
+
"name"
|
12
|
+
],
|
13
|
+
"properties": {
|
14
|
+
"name": {
|
15
|
+
"description": "Name of the class.",
|
16
|
+
"type": "string"
|
17
|
+
},
|
18
|
+
"description": {
|
19
|
+
"description": "Description of the class. [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) is supported.",
|
20
|
+
"type": "string"
|
21
|
+
},
|
22
|
+
"parent": {
|
23
|
+
"description": "Name of a class to inherit from. (Ex: `YourNewClass < Parent`)",
|
24
|
+
"type": "string"
|
25
|
+
},
|
26
|
+
"modules": {
|
27
|
+
"description": "List of modules to declare the class inside.",
|
28
|
+
"type": "string"
|
29
|
+
},
|
30
|
+
"attrs": {
|
31
|
+
"description": "An array of `Ginny::Attr`s.",
|
32
|
+
"type": "array",
|
33
|
+
"items": {
|
34
|
+
"$ref": "#/definitions/attr"
|
35
|
+
}
|
36
|
+
},
|
37
|
+
"body": {
|
38
|
+
"description": "String to write into the body of the class.",
|
39
|
+
"type": "string"
|
40
|
+
},
|
41
|
+
"file_prefix": {
|
42
|
+
"description": "String to prepend to the name of the generated file.",
|
43
|
+
"type": "string"
|
44
|
+
}
|
45
|
+
}
|
46
|
+
},
|
47
|
+
"attr": {
|
48
|
+
"description": "Used to generate an instance variable with getters/setters.",
|
49
|
+
"type": "object",
|
50
|
+
"required": [
|
51
|
+
"name"
|
52
|
+
],
|
53
|
+
"properties": {
|
54
|
+
"name": {
|
55
|
+
"description": "Name of the attribute.",
|
56
|
+
"type": "string"
|
57
|
+
},
|
58
|
+
"description": {
|
59
|
+
"description": "Description of the attribute. [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) is supported.",
|
60
|
+
"type": "string"
|
61
|
+
},
|
62
|
+
"type": {
|
63
|
+
"description": "[Type](https://rubydoc.info/gems/yard/file/docs/GettingStarted.md#Declaring_Types) of the attribute.",
|
64
|
+
"type": "string"
|
65
|
+
},
|
66
|
+
"default": {
|
67
|
+
"description": "Default value for the attribute; set in it's Class's `initialize` function.",
|
68
|
+
"type": "string"
|
69
|
+
},
|
70
|
+
"read_only": {
|
71
|
+
"description": "If `true`, an `attr_reader` will be generated for the attribute instead of an `attr_accessor`.",
|
72
|
+
"type": "boolean"
|
73
|
+
}
|
74
|
+
}
|
75
|
+
},
|
76
|
+
"func": {
|
77
|
+
"description": "Used to generate a [method](https://ruby-doc.org/core-2.6.5/doc/syntax/methods_rdoc.html).",
|
78
|
+
"type": "object",
|
79
|
+
"required": [
|
80
|
+
"name"
|
81
|
+
],
|
82
|
+
"properties": {
|
83
|
+
"name": {
|
84
|
+
"description": "Name of the function.",
|
85
|
+
"type": "string"
|
86
|
+
},
|
87
|
+
"description": {
|
88
|
+
"description": "Description of the function. [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) is supported.",
|
89
|
+
"type": "string"
|
90
|
+
},
|
91
|
+
"return_type": {
|
92
|
+
"description": "Return [type](https://rubydoc.info/gems/yard/file/docs/GettingStarted.md#Declaring_Types) of the function.",
|
93
|
+
"type": "string"
|
94
|
+
},
|
95
|
+
"body": {
|
96
|
+
"description": "String to write into the body of the function.",
|
97
|
+
"type": "string"
|
98
|
+
},
|
99
|
+
"modules": {
|
100
|
+
"description": "List of modules to declare the function inside of.",
|
101
|
+
"type": "string"
|
102
|
+
},
|
103
|
+
"params": {
|
104
|
+
"description": "An array of `Ginny::Param`s.",
|
105
|
+
"type": "array",
|
106
|
+
"items": {
|
107
|
+
"$ref": "#/definitions/param"
|
108
|
+
}
|
109
|
+
}
|
110
|
+
}
|
111
|
+
},
|
112
|
+
"param": {
|
113
|
+
"description": "Used to generate a function [parameter](https://ruby-doc.org/core-2.6.5/doc/syntax/methods_rdoc.html#label-Arguments).",
|
114
|
+
"type": "object",
|
115
|
+
"required": [
|
116
|
+
"name"
|
117
|
+
],
|
118
|
+
"properties": {
|
119
|
+
"name": {
|
120
|
+
"description": "Name of the param.",
|
121
|
+
"type": "string"
|
122
|
+
},
|
123
|
+
"description": {
|
124
|
+
"description": "Description of the param. [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) is supported.",
|
125
|
+
"type": "string"
|
126
|
+
},
|
127
|
+
"type": {
|
128
|
+
"description": "[Type](https://rubydoc.info/gems/yard/file/docs/GettingStarted.md#Declaring_Types) of the param.",
|
129
|
+
"type": "string"
|
130
|
+
},
|
131
|
+
"default": {
|
132
|
+
"description": "Default value for the Param. Set `optional` as `true` for a default `nil` value.",
|
133
|
+
"type": "string"
|
134
|
+
},
|
135
|
+
"optional": {
|
136
|
+
"description": "If `true`, the default value will be `nil`.",
|
137
|
+
"type": "boolean"
|
138
|
+
},
|
139
|
+
"keyword": {
|
140
|
+
"description": "If `true`, the param will be generated as a [keyword argument](https://bugs.ruby-lang.org/issues/14183).",
|
141
|
+
"type": "boolean"
|
142
|
+
}
|
143
|
+
}
|
144
|
+
}
|
145
|
+
}
|
146
|
+
}
|
@@ -0,0 +1,107 @@
|
|
1
|
+
---
|
2
|
+
"$id": https://github.com/tcd/ginny/blob/master/schema/ginny.json
|
3
|
+
"$schema": http://json-schema.org/draft-07/schema#
|
4
|
+
title: Files used by `Ginny` to generate ruby code.
|
5
|
+
type: object
|
6
|
+
|
7
|
+
definitions:
|
8
|
+
|
9
|
+
class:
|
10
|
+
description: Used to generate a [class](https://ruby-doc.org/core-2.6.5/Class.html).
|
11
|
+
type: object
|
12
|
+
required: [name]
|
13
|
+
properties:
|
14
|
+
name:
|
15
|
+
description: Name of the class.
|
16
|
+
type: string
|
17
|
+
description:
|
18
|
+
description: Description of the class. [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) is supported.
|
19
|
+
type: string
|
20
|
+
parent:
|
21
|
+
description: "Name of a class to inherit from. (Ex: `YourNewClass < Parent`)"
|
22
|
+
type: string
|
23
|
+
modules:
|
24
|
+
description: List of modules to declare the class inside.
|
25
|
+
type: string
|
26
|
+
attrs:
|
27
|
+
description: An array of `Ginny::Attr`s.
|
28
|
+
type: array
|
29
|
+
items:
|
30
|
+
"$ref": "#/definitions/attr"
|
31
|
+
body:
|
32
|
+
description: String to write into the body of the class.
|
33
|
+
type: string
|
34
|
+
file_prefix:
|
35
|
+
description: String to prepend to the name of the generated file.
|
36
|
+
type: string
|
37
|
+
|
38
|
+
attr:
|
39
|
+
description: Used to generate an instance variable with getters/setters.
|
40
|
+
type: object
|
41
|
+
required: [name]
|
42
|
+
properties:
|
43
|
+
name:
|
44
|
+
description: Name of the attribute.
|
45
|
+
type: string
|
46
|
+
description:
|
47
|
+
description: Description of the attribute. [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) is supported.
|
48
|
+
type: string
|
49
|
+
type:
|
50
|
+
description: "[Type](https://rubydoc.info/gems/yard/file/docs/GettingStarted.md#Declaring_Types) of the attribute."
|
51
|
+
type: string
|
52
|
+
default:
|
53
|
+
description: Default value for the attribute; set in it's Class's `initialize` function.
|
54
|
+
type: string
|
55
|
+
read_only:
|
56
|
+
description: If `true`, an `attr_reader` will be generated for the attribute instead of an `attr_accessor`.
|
57
|
+
type: boolean
|
58
|
+
|
59
|
+
func:
|
60
|
+
description: Used to generate a [method](https://ruby-doc.org/core-2.6.5/doc/syntax/methods_rdoc.html).
|
61
|
+
type: object
|
62
|
+
required: [name]
|
63
|
+
properties:
|
64
|
+
name:
|
65
|
+
description: Name of the function.
|
66
|
+
type: string
|
67
|
+
description:
|
68
|
+
description: Description of the function. [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) is supported.
|
69
|
+
type: string
|
70
|
+
return_type:
|
71
|
+
description: Return [type](https://rubydoc.info/gems/yard/file/docs/GettingStarted.md#Declaring_Types) of the function.
|
72
|
+
type: string
|
73
|
+
body:
|
74
|
+
description: String to write into the body of the function.
|
75
|
+
type: string
|
76
|
+
modules:
|
77
|
+
description: List of modules to declare the function inside of.
|
78
|
+
type: string
|
79
|
+
params:
|
80
|
+
description: An array of `Ginny::Param`s.
|
81
|
+
type: array
|
82
|
+
items:
|
83
|
+
"$ref": "#/definitions/param"
|
84
|
+
|
85
|
+
param:
|
86
|
+
description: Used to generate a function [parameter](https://ruby-doc.org/core-2.6.5/doc/syntax/methods_rdoc.html#label-Arguments).
|
87
|
+
type: object
|
88
|
+
required: [name]
|
89
|
+
properties:
|
90
|
+
name:
|
91
|
+
description: Name of the param.
|
92
|
+
type: string
|
93
|
+
description:
|
94
|
+
description: Description of the param. [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) is supported.
|
95
|
+
type: string
|
96
|
+
type:
|
97
|
+
description: "[Type](https://rubydoc.info/gems/yard/file/docs/GettingStarted.md#Declaring_Types) of the param."
|
98
|
+
type: string
|
99
|
+
default:
|
100
|
+
description: Default value for the Param. Set `optional` as `true` for a default `nil` value.
|
101
|
+
type: string
|
102
|
+
optional:
|
103
|
+
description: If `true`, the default value will be `nil`.
|
104
|
+
type: boolean
|
105
|
+
keyword:
|
106
|
+
description: If `true`, the param will be generated as a [keyword argument](https://bugs.ruby-lang.org/issues/14183).
|
107
|
+
type: boolean
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ginny
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Clay Dunston
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-12-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: coolkit
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 0.2.2
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 0.2.2
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: dry-inflector
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -168,17 +182,16 @@ files:
|
|
168
182
|
- lib/ginny/models/class.rb
|
169
183
|
- lib/ginny/models/func.rb
|
170
184
|
- lib/ginny/models/param.rb
|
171
|
-
- lib/ginny/string/comment.rb
|
172
|
-
- lib/ginny/string/indent.rb
|
173
|
-
- lib/ginny/symbolize.rb
|
174
185
|
- lib/ginny/version.rb
|
186
|
+
- schema/ginny.json
|
187
|
+
- schema/ginny.schema.yml
|
175
188
|
homepage: https://github.com/tcd/ginny
|
176
189
|
licenses:
|
177
190
|
- MIT
|
178
191
|
metadata:
|
179
192
|
homepage_uri: https://github.com/tcd/ginny
|
180
193
|
source_code_uri: https://github.com/tcd/ginny
|
181
|
-
documentation_uri: https://www.rubydoc.info/gems/ginny/0.5.
|
194
|
+
documentation_uri: https://www.rubydoc.info/gems/ginny/0.5.2
|
182
195
|
changelog_uri: https://github.com/tcd/ginny/blob/master/CHANGELOG.md
|
183
196
|
yard.run: yri
|
184
197
|
post_install_message:
|
data/lib/ginny/string/comment.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
# Monkeypatch some convenience methods in to the String class.
|
2
|
-
class String
|
3
|
-
# Adds a comment string (`"# "`) after every newline in a string.
|
4
|
-
#
|
5
|
-
# @param indent_empty_lines [Boolean]
|
6
|
-
# @return [void]
|
7
|
-
def comment!(indent_empty_lines = true)
|
8
|
-
re = indent_empty_lines ? /^/ : /^(?!$)/
|
9
|
-
gsub!(re, "# ")
|
10
|
-
end
|
11
|
-
|
12
|
-
# Returns a copy of a string with a comment (`"# "`) after every newline in a string.
|
13
|
-
#
|
14
|
-
# @param indent_empty_lines [Boolean]
|
15
|
-
# @return [String]
|
16
|
-
def comment(indent_empty_lines = true)
|
17
|
-
dup.tap { |s| s.comment!(indent_empty_lines) }
|
18
|
-
end
|
19
|
-
end
|
data/lib/ginny/string/indent.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
# Monkeypatch some convenience methods in to the String class.
|
2
|
-
class String
|
3
|
-
|
4
|
-
# def titleize2(string)
|
5
|
-
# words = self.split(" ")
|
6
|
-
# skips = ["and", "of", "the", "in", "to", "over", "an", "a"]
|
7
|
-
# words.each do |word|
|
8
|
-
# if word == words[0] || !skips.include?(word)
|
9
|
-
# element.capitalize!
|
10
|
-
# end
|
11
|
-
# end
|
12
|
-
# answer = array.join(" ")
|
13
|
-
# return answer
|
14
|
-
# end
|
15
|
-
|
16
|
-
# Same as {indent}, except it indents the receiver in-place.
|
17
|
-
#
|
18
|
-
# Returns the indented string, or `nil` if there was nothing to indent.
|
19
|
-
#
|
20
|
-
# @param amount [Integer] The level of indentation to add.
|
21
|
-
# @param indent_string [String] Defaults to tab if a tab is present in the string, and `" "` otherwise.
|
22
|
-
# @param indent_empty_lines [Boolean]
|
23
|
-
#
|
24
|
-
# @return [void]
|
25
|
-
def indent!(amount, indent_string = nil, indent_empty_lines = false)
|
26
|
-
indent_string = indent_string || self[/^[ \t]/] || " "
|
27
|
-
re = indent_empty_lines ? /^/ : /^(?!$)/
|
28
|
-
gsub!(re, indent_string * amount)
|
29
|
-
end
|
30
|
-
|
31
|
-
# Indents the lines in the receiver.
|
32
|
-
#
|
33
|
-
# The second argument, `indent_string`, specifies which indent string to
|
34
|
-
# use. The default is `nil`, which tells the method to make a guess by
|
35
|
-
# peeking at the first indented line, and fallback to a space if there is
|
36
|
-
# none.
|
37
|
-
#
|
38
|
-
# While `indent_string` is typically one space or tab, it may be any string.
|
39
|
-
#
|
40
|
-
# The third argument, `indent_empty_lines`, is a flag that says whether
|
41
|
-
# empty lines should be indented. Default is `false`.
|
42
|
-
#
|
43
|
-
# @param amount [Integer] The level of indentation to add.
|
44
|
-
# @param indent_string [String] Defaults to tab if a tab is present in the string, and `" "` otherwise.
|
45
|
-
# @param indent_empty_lines [Boolean]
|
46
|
-
#
|
47
|
-
# @return [String]
|
48
|
-
def indent(amount, indent_string = nil, indent_empty_lines = false)
|
49
|
-
dup.tap { |s| s.indent!(amount, indent_string, indent_empty_lines) }
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
data/lib/ginny/symbolize.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
module Ginny
|
2
|
-
# Recursively convert keys in a Hash or Array to symbols.
|
3
|
-
#
|
4
|
-
# See:
|
5
|
-
# - [original code](https://avdi.codes/recursively-symbolize-keys/)
|
6
|
-
# - [array support](https://gist.github.com/neektza/8585746)
|
7
|
-
#
|
8
|
-
# @param arg [Hash,Array]
|
9
|
-
# @return [Hash,Array]
|
10
|
-
def self.symbolize_keys(arg)
|
11
|
-
if arg.is_a?(Hash)
|
12
|
-
arg.inject({}) do |result, (key, value)|
|
13
|
-
new_key = case key
|
14
|
-
when String then key.to_sym()
|
15
|
-
else key
|
16
|
-
end
|
17
|
-
new_value = case value
|
18
|
-
when Hash then symbolize_keys(value)
|
19
|
-
when Array then symbolize_keys(value)
|
20
|
-
else value
|
21
|
-
end
|
22
|
-
result[new_key] = new_value
|
23
|
-
result
|
24
|
-
end
|
25
|
-
elsif arg.is_a?(Array)
|
26
|
-
arg.map { |e| symbolize_keys(e) }
|
27
|
-
else
|
28
|
-
arg
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|