Skip to content
This repository has been archived by the owner on Jan 2, 2025. It is now read-only.

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
euglena1215 committed Jun 11, 2024
1 parent 1861941 commit cae594b
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 18 deletions.
50 changes: 40 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,35 +1,65 @@
# RbsInlineData

TODO: Delete this and the text below, and describe your gem

Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/rbs_inline_data`. To experiment with that code, run `bin/console` for an interactive prompt.
`rbs_inline_data` gem is a tool for generating RBS files corresponding to `Data.define` in the [rbs-inline](https://github.com/soutaro/rbs-inline) syntax.
This gem is intended to be used together with [rbs-inline](https://github.com/soutaro/rbs-inline).

Here is an example of how to use it:

```rb
class User
Address = Data.define(
:city, #:: String
:street, #:: String
)
end
```

This generates the following RBS file:

```rbs
class User::Address
extend Data::_DataClass
attr_reader city: String
attr_reader street: String
def self.new: (*untyped) -> ::User::Address
| (**untyped) -> ::User::Address
| ...
end
```

## Installation

TODO: Replace `UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG` with your gem name right after releasing it to RubyGems.org. Please do not do it earlier due to security reasons. Alternatively, replace this section with instructions to install your gem from git if you don't plan to release to RubyGems.org.

Install the gem and add to the application's Gemfile by executing:

$ bundle add UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
$ bundle add rbs_inline_data --require=false

If bundler is not being used to manage dependencies, install the gem by executing:

$ gem install UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
$ gem install rbs_inline_data

## Usage

TODO: Write usage instructions here
To generate RBS files, run the following command:

# Print generated RBS files
$ bundle exec rbs-inline-data lib

# Save generated RBS files under sig/generated/data
$ bundle exec rbs-inline-data lib --output


## Development

After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.

Run `rake rbs:setup` to prepare for type checking. Since this project includes implementations using `Data.define`, you can also verify the operation of `rbs-inline-data`.

To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/rbs_inline_data. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/rbs_inline_data/blob/main/CODE_OF_CONDUCT.md).
Bug reports and pull requests are welcome on GitHub at https://github.com/euglena1215/rbs_inline_data. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/euglena1215/rbs_inline_data/blob/main/CODE_OF_CONDUCT.md).

## Code of Conduct

Everyone interacting in the RbsInlineData project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/rbs_inline_data/blob/main/CODE_OF_CONDUCT.md).
Everyone interacting in the RbsInlineData project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/euglena1215/rbs_inline_data/blob/main/CODE_OF_CONDUCT.md).
10 changes: 3 additions & 7 deletions lib/rbs_inline_data/writer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,8 @@ def write(output_path)

#:: (Array[RbsInlineData::Parser::TypedDefinition]) -> String
def build_rbs(definitions)
rbs_text = ""
definitions.each do |definition|
source = <<~RBS
definitions.map do |definition|
<<~RBS
class #{definition.class_name}
extend Data::_DataClass
#{definition.fields.map { |field| "attr_reader #{field.field_name}: #{field.type}" }.join("\n ")}
Expand All @@ -41,10 +40,7 @@ def self.new: (*untyped) -> ::#{definition.class_name}
| ...
end
RBS

rbs_text += "#{source}\n"
end
rbs_text
end.join("\n")
end
end
end
1 change: 0 additions & 1 deletion sig/generated/data/lib/rbs_inline_data/parser.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,3 @@ class RbsInlineData::Parser::TypedField
| (**untyped) -> ::RbsInlineData::Parser::TypedField
| ...
end

0 comments on commit cae594b

Please sign in to comment.