ginny 0.5.4 → 0.6.0

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: 7f3d8f40f9b5af0f032e1695e7c9300556041117fcc7086e0134ced0d35804cc
4
- data.tar.gz: 18caec27a5b9e158b307e61b476006f03a56a40a73ad6bf22cd301307c74a2d8
3
+ metadata.gz: 5954674ccc9c88509fe6c907bfe4f23d13c6da96131a135c34374e7f6050f619
4
+ data.tar.gz: 31d45ba5e68259fd278950701c8caefc2799159f7dcaa265a25b2c3f19312af0
5
5
  SHA512:
6
- metadata.gz: 5222da337829e94bf2752948fc964b0cbced3469358f2c95a99b2b84fb58dea5fcd391228987307ce9a8c9ecf6646bc851ecbabbf8481705d15c16071f4a5744
7
- data.tar.gz: 2fe110d3e0a67d360c3b85ab3516062fe92d874a6c2aaea3839533c32149ee75c21081003ad5d5842a4a55deeb16d465a5343dc05378e62ebcb38ced5d31e2eb
6
+ metadata.gz: 454f12a2ebe56984619972409e81074799d2c94df3de76ce86ee2a13f105858c77c13797f9fc024e07b5c7f29e1df6e7d73f2a0f38f51c4a86474369a65724f8
7
+ data.tar.gz: 21d370801870b1223e3b470ded669a7149361228393917d1009a01166358c35aaaa19ce0b95564dd82413b4c39fd223cf6a08d165c30342d5b8fd683d3714b73
@@ -2,6 +2,14 @@
2
2
 
3
3
  <!-- ## master (unreleased) -->
4
4
 
5
+ ## 0.6.0 (2019-12-14)
6
+
7
+ ### Added
8
+
9
+ - Add `default_constructor` option for `Ginny::Class`, which will generate a method similar to [ActiveRecord::Base.create][create_method_link] for the class.
10
+
11
+ [create_method_link]: https://apidock.com/rails/ActiveRecord/Persistence/ClassMethods/create
12
+
5
13
  ## 0.5.4 (2019-12-09)
6
14
 
7
15
  ### Changed
@@ -42,7 +50,7 @@
42
50
  ### Added
43
51
 
44
52
  - Add [dry-rb/dry-inflector](https://github.com/dry-rb/dry-inflector) dependency.
45
- - Add `file_prefix` argument to `Ginny::Class` for String to prepend to the name of the generated file.
53
+ - Add `file_prefix` option to `Ginny::Class` for a string to prepend to the name of the generated file.
46
54
 
47
55
  ### Changed
48
56
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ginny (0.5.4)
4
+ ginny (0.6.0)
5
5
  coolkit (~> 0.2.2)
6
6
  dry-inflector (~> 0.2.0)
7
7
 
data/README.md CHANGED
@@ -44,6 +44,7 @@ name: Human
44
44
  description: This class models a person.
45
45
  modules: [MilkyWay, Earth]
46
46
  parent: Mammal
47
+ default_constructor: true
47
48
  attrs:
48
49
  - name: Name
49
50
  type: String
@@ -51,7 +52,6 @@ attrs:
51
52
  description: Number of years the human has been alive.
52
53
  type: Integer
53
54
  read_only: true
54
-
55
55
  ```
56
56
 
57
57
  ```shell
@@ -68,6 +68,7 @@ data = {
68
68
  description: "This class models a person.",
69
69
  modules: ["MilkyWay", "Earth"],
70
70
  parent: "Mammal",
71
+ default_constructor: true,
71
72
  attrs: [
72
73
  { name: "name", type: "String" },
73
74
  { name: "age", type: "Integer" read_only: true, description: "Number of years the human has been alive." },
@@ -90,6 +91,15 @@ module MilkyWay
90
91
  # Number of years the human has been alive.
91
92
  # @return [Integer]
92
93
  attr_reader :age
94
+
95
+ # @param params [Hash]
96
+ # @return [self]
97
+ def self.create(params = {})
98
+ h = Human.new
99
+ h.name = params[:name]
100
+ h.age = params[:age]
101
+ return h
102
+ end
93
103
  end
94
104
  end
95
105
  end
@@ -99,14 +109,17 @@ end
99
109
 
100
110
  ### `Ginny::Class`
101
111
 
102
- | Name | Type | Description |
103
- | --------------- | -------------------- | -------------------------------------------------------------- |
104
- | name (required) | `String` | Name of the class. |
105
- | description | `String` | Description of the class. [Markdown][markdown] is supported. |
106
- | body | `String` | String to write into the body of the class. |
107
- | parent | `String` | Name of a class to inherit from. (Ex: `YourNewClass < Parent`) |
108
- | modules | `Array<String>` | List of modules to declare the class inside of |
109
- | attrs | `Array<Ginny::Attr>` | An array of Attrs. |
112
+ | Name | Type | Description |
113
+ | ------------------- | -------------------- | --------------------------------------------------------------------------------------------------------------- |
114
+ | name (required) | `String` | Name of the class. |
115
+ | description | `String` | Description of the class. [Markdown][markdown] is supported. |
116
+ | body | `String` | String to write into the body of the class. |
117
+ | parent | `String` | Name of a class to inherit from. (Ex: `YourNewClass < Parent`) |
118
+ | modules | `Array<String>` | List of modules to declare the class inside of |
119
+ | default_constructor | `Boolean` | If `true`, a method similar to [ActiveRecord::Base.create][create_method_link] will be generated for the class. |
120
+ | attrs | `Array<Ginny::Attr>` | An array of Attrs. |
121
+
122
+ [create_method_link]: https://apidock.com/rails/ActiveRecord/Persistence/ClassMethods/create
110
123
 
111
124
  ### `Ginny::Attr`
112
125
 
@@ -22,6 +22,9 @@ module Ginny
22
22
  # String to write into the body of the class.
23
23
  # @return [String]
24
24
  attr_accessor :body
25
+ # If `true`, a method similar to [ActiveRecord::Base.create](https://apidock.com/rails/ActiveRecord/Persistence/ClassMethods/create) will be generated for the class.
26
+ # @return [Boolean]
27
+ attr_accessor :default_constructor
25
28
  # String to prepend to the name of the generated file.
26
29
  # @return [String]
27
30
  attr_accessor :file_prefix
@@ -31,6 +34,8 @@ module Ginny
31
34
  self.attrs = []
32
35
  self.modules = []
33
36
  self.file_prefix = ""
37
+ self.body = ""
38
+ self.default_constructor = false
34
39
  end
35
40
 
36
41
  # Constructor for a Class. Use `create`, not `new`.
@@ -46,6 +51,7 @@ module Ginny
46
51
  c.attrs = Ginny::Attr.from_array(args[:attrs]) if args[:attrs]&.is_a?(Array)
47
52
  c.body = args[:body] unless args[:body].nil?
48
53
  c.file_prefix = args[:file_prefix] || ""
54
+ c.default_constructor = args[:default_constructor]
49
55
  return c
50
56
  end
51
57
 
@@ -67,7 +73,8 @@ module Ginny
67
73
  parts << (self.description&.length&.positive? ? self.description.comment.strip : nil)
68
74
  parts << (self.parent.nil? ? "class #{self.class_name()}" : "class #{self.class_name()} < #{self.parent}")
69
75
  parts << self.render_attributes()
70
- parts << (self.body&.length&.positive? ? self.body.indent(2) : nil)
76
+ parts << self.render_body()
77
+ # parts << (self.body&.length&.positive? ? self.body.indent(2) : nil)
71
78
  parts << "end"
72
79
  if self.modules.length > 0
73
80
  body = parts.compact.join("\n").gsub(/([[:blank:]]+)$/, "")
@@ -76,6 +83,19 @@ module Ginny
76
83
  return parts.compact.join("\n").gsub(/([[:blank:]]+)$/, "")
77
84
  end
78
85
 
86
+ # @return [String,nil]
87
+ def render_body()
88
+ if self.body.length > 0
89
+ if self.default_constructor
90
+ return ("\n" + self.constructor() + "\n\n" + self.body).indent(2)
91
+ end
92
+ return self.body.indent(2)
93
+ end
94
+ # binding.pry
95
+ return "\n" + self.constructor().indent(2) if self.default_constructor
96
+ return nil
97
+ end
98
+
79
99
  # @return [String]
80
100
  def render_attributes()
81
101
  return nil unless self.attrs.length > 0
@@ -100,5 +120,19 @@ module Ginny
100
120
  return self.file_prefix + inflector.underscore(self.name) + ".rb"
101
121
  end
102
122
 
123
+ # @return [String]
124
+ def constructor()
125
+ char = self.name.chr.downcase
126
+ body = "#{char} = #{self.class_name}.new\n"
127
+ body << self.attrs.map { |a| "#{char}.#{a.name} = params[:#{a.name}]\n" }.join()
128
+ body << "return #{char}\n"
129
+ Ginny::Func.create({
130
+ name: "self.create",
131
+ return_type: "self",
132
+ params: [{ name: "params", type: "Hash", default: {} }],
133
+ body: body,
134
+ }).render()
135
+ end
136
+
103
137
  end
104
138
  end
@@ -20,10 +20,10 @@ module Ginny
20
20
  attr_accessor :default
21
21
  # If `true`, the default value will be `nil`.
22
22
  # FIXME: This is a workaround for the fact that that passing `nil` to `default` messes with conditionals. Not sure of a simpler way to do this.
23
- # @return [Boolean]
23
+ # @return [Boolean] (false)
24
24
  attr_accessor :optional
25
25
  # If `true`, the param will be generated as a [keyword argument](https://bugs.ruby-lang.org/issues/14183).
26
- # @return [Boolean]
26
+ # @return [Boolean] (false)
27
27
  attr_accessor :keyword
28
28
 
29
29
  # Constructor for a Param. Use `create`, not `new`.
@@ -1,3 +1,3 @@
1
1
  module Ginny
2
- VERSION = "0.5.4".freeze
2
+ VERSION = "0.6.0".freeze
3
3
  end
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
4
+ version: 0.6.0
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-12-10 00:00:00.000000000 Z
11
+ date: 2019-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -191,7 +191,7 @@ licenses:
191
191
  metadata:
192
192
  homepage_uri: https://github.com/tcd/ginny
193
193
  source_code_uri: https://github.com/tcd/ginny
194
- documentation_uri: https://www.rubydoc.info/gems/ginny/0.5.4
194
+ documentation_uri: https://www.rubydoc.info/gems/ginny/0.6.0
195
195
  changelog_uri: https://github.com/tcd/ginny/blob/master/CHANGELOG.md
196
196
  yard.run: yri
197
197
  post_install_message: