ginny

Generate Ruby code.


Keywords
automation, code-generation, ruby, yard
License
MIT
Install
gem install ginny -v 0.6.3

Documentation

Ginny

Gem Build Status Coverage Status Documentation GitHub

Installation

Add this line to your application's Gemfile:

gem "ginny"

And then execute:

bundle

Or install it yourself as:

gem install ginny

Usage

From the command line

# person.yml
---
name: Human
description: This class models a person.
modules: [MilkyWay, Earth]
parent: Mammal
default_constructor: true
attrs:
- name: Name
  type: String
- name: Age
  description: Number of years the human has been alive.
  type: Integer
  read_only: true
$ ginny person.yml

From Ruby code

require "ginny"

data = {
  name: "Human",
  description: "This class models a person.",
  modules: ["MilkyWay", "Earth"],
  parent: "Mammal",
  default_constructor: true,
  attrs: [
    { name: "name", type: "String" },
    { name: "age",  type: "Integer" read_only: true, description: "Number of years the human has been alive." },
  ],
}

c = Ginny::Class.create(data)
c.render()   #=> Returns the generated code as a string.
c.generate() #=> Writes the generated code to a given folder, or the current directory if no argument is passed.
# human.rb
module MilkyWay
  module Earth
    # This class models a person.
    class Human < Mammal
      # @return [String]
      attr_accessor :name
      # Number of years the human has been alive.
      # @return [Integer]
      attr_reader :age

      # @param params [Hash]
      # @return [self]
      def self.create(params = {})
        h = Human.new
        h.name = params[:name]
        h.age = params[:age]
        return h
      end
    end
  end
end

Supported Arguments

Ginny::Class

Name Type Description
name (required) String Name of the class.
description String Description of the class. [Markdown][markdown] is supported.
body String String to write into the body of the class.
parent String Name of a class to inherit from. (Ex: YourNewClass < Parent)
modules Array<String> List of modules to declare the class inside of
default_constructor Boolean If true, a method similar to ActiveRecord::Base.create will be generated for the class.
attrs Array<Ginny::Attr> An array of instance attributes.
classify_name Boolean By default, names are classified using Dry::Inflector#classify. Set this to false to disable classification and use raw name input.

Ginny::Attr

Name Type Description
name (required) String Name of the attribute.
description String Description of the attribute. Markdown is supported.
type String Type of the attribute.
default Any Default value for the attribute; set in it's Class's initialize function.
read_only Boolean If true, an attr_reader will be generated for the attribute instead of an attr_accessor.

Ginny::Func

Name Type Description
name (required) String Name of the function.
description String Description of the function. [Markdown][markdown] is supported.
return_type String Return type of the function.
body String String to write into the body of the function.
modules Array<String> List of modules to declare the function inside of
params Array<Ginny::Param> An array of Params.

Ginny::Param

Name Type Description
name (required) String Name of the param.
description String Description of the param. Markdown is supported.
type String Type of the param.
default Any Default value for the param. Set optional as true for a default nil value.
optional Boolean If true, the default value will be nil.
keyword Boolean If true, the param will be generated as a keyword argument.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/tcd/ginny.

License

The gem is available as open source under the terms of the MIT License.