Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 0 additions & 12 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,20 +84,8 @@ jobs:
ruby-version: ${{ matrix.ruby }}
bundler-cache: true

- name: Setup Code Climate test-reporter
run: |
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
chmod +x ./cc-test-reporter
./cc-test-reporter before-build

- name: Run Migrations
run: cd playground/vanilla && bin/rails db:prepare

- name: Ruby Specs
run: bin/rspec

- name: Upload code coverage to Code Climate
if: ${{ contains(github.ref, 'main') }}
run: |
export GIT_BRANCH="${GITHUB_REF/refs\/heads\//}"
./cc-test-reporter after-build -r ${{secrets.CC_TEST_REPORTER_ID}}
24 changes: 15 additions & 9 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
## Setting Up a Development Environment

1. Install [pnpm](https://pnpm.js.org/)
1. Install [pnpm](https://pnpm.io/installation)

2. Run the following commands to set up the development environment.

```
```sh
bundle install
```

```
```sh
pnpm install
```

```
```sh
pnpm migrate
```

Expand All @@ -21,20 +21,26 @@ pnpm migrate
There are a number of automated checks which run on GitHub Actions when a pull request is created.
You can run those checks on your own locally to make sure that your changes would not break the CI build.

### 1. Check the code for JavaScript style violations
### 1. Rebuild the generated files

```sh
pnpm gen
```

### 2. Check the code for JavaScript style violations

```sh
pnpm lint
```

### 2. Check the code for Ruby style violations
### 3. Check the code for Ruby style violations

```
```sh
bin/rubocop
```

### 3. Run the test suite
### 4. Run the test suite

```
```sh
bin/rspec
```
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey b379726b6fef2dadbfd614384b868746
// TypesFromSerializers CacheKey c5f5056c4fa3626c5c1908d0f1dcfe8d
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey 9111c6d881174b0013582fa6366868db
// TypesFromSerializers CacheKey acbbfcd258be7c495d2784be9b815e79
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type ComposerWithSongsSong from './ComposerWithSongs/Song'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey a69c0dbcc904740e5de89181ef4b2837
// TypesFromSerializers CacheKey b8af6beb071f45e87fe53318043f5388
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.

Expand Down
2 changes: 1 addition & 1 deletion playground/vanilla/app/frontend/types/serializers/Model.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey ed8ff6fbc986e6b666d559749c666dc5
// TypesFromSerializers CacheKey 89c74246c39a38f244b708597ef3b884
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type AnyModel from '../AnyModel'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey 58897b61d86838c60d1f12700f326896
// TypesFromSerializers CacheKey ddc921e1e92a90ea686336285fcdb369
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type AnyModel from '../../AnyModel'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey 89e5760366d01f7f21244d341e1af2d4
// TypesFromSerializers CacheKey 03a6c67042bb201dfeeab4b021db7dd5
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.

Expand Down
2 changes: 1 addition & 1 deletion playground/vanilla/app/frontend/types/serializers/Song.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey f4f9e398dc092747d13607e2bdcb0846
// TypesFromSerializers CacheKey c2c60f7c58d2fbafd49219bd8673dd15
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type Composer from './Composer'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey c2d167325e7342eba01d0a78482d6d76
// TypesFromSerializers CacheKey e6174fbd5fbf2c871782886b3b441101
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type Composer from './Composer'
Expand Down
5 changes: 4 additions & 1 deletion playground/vanilla/app/frontend/types/serializers/Video.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey 45d6b515fb6118eabbd39d586269cdd0
// TypesFromSerializers CacheKey fa77137240a406b724863f5d51e9c3e4
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.

Expand All @@ -7,6 +7,9 @@ export default interface Video {
createdAt: string | Date
title?: string
untypedFieldExample: any
/**
* YouTube ID of the video
*/
youtubeId?: string
youtubeUrl?: string
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey 4042db0fa9ebdf8668c7c5f0ec172e6d
// TypesFromSerializers CacheKey 0677102f1c3ad73d855975f0eaa09faa
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type Song from './Song'
Expand All @@ -9,6 +9,9 @@ export default interface VideoWithSong {
song: Song
title?: string
untypedFieldExample: any
/**
* YouTube ID of the video
*/
youtubeId?: string
youtubeUrl?: string
}
2 changes: 1 addition & 1 deletion playground/vanilla/app/serializers/video_serializer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ class VideoSerializer < BaseSerializer
:id,
:created_at,
:title,
:youtube_id,
youtube_id: {doc: "YouTube ID of the video"},
)

type :string, optional: true
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey b379726b6fef2dadbfd614384b868746
// TypesFromSerializers CacheKey c5f5056c4fa3626c5c1908d0f1dcfe8d
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey 9111c6d881174b0013582fa6366868db
// TypesFromSerializers CacheKey acbbfcd258be7c495d2784be9b815e79
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type ComposerWithSongsSong from './ComposerWithSongs/Song'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey a69c0dbcc904740e5de89181ef4b2837
// TypesFromSerializers CacheKey b8af6beb071f45e87fe53318043f5388
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey ed8ff6fbc986e6b666d559749c666dc5
// TypesFromSerializers CacheKey 89c74246c39a38f244b708597ef3b884
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type AnyModel from '../AnyModel'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey 58897b61d86838c60d1f12700f326896
// TypesFromSerializers CacheKey ddc921e1e92a90ea686336285fcdb369
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type AnyModel from '../../AnyModel'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey 89e5760366d01f7f21244d341e1af2d4
// TypesFromSerializers CacheKey 03a6c67042bb201dfeeab4b021db7dd5
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey f4f9e398dc092747d13607e2bdcb0846
// TypesFromSerializers CacheKey c2c60f7c58d2fbafd49219bd8673dd15
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type Composer from './Composer'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey c2d167325e7342eba01d0a78482d6d76
// TypesFromSerializers CacheKey e6174fbd5fbf2c871782886b3b441101
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type Composer from './Composer'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey 45d6b515fb6118eabbd39d586269cdd0
// TypesFromSerializers CacheKey fa77137240a406b724863f5d51e9c3e4
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.

Expand All @@ -7,6 +7,9 @@ export default interface Video {
createdAt: string | Date
title?: string
untypedFieldExample: any
/**
* YouTube ID of the video
*/
youtubeId?: string
youtubeUrl?: string
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey 4042db0fa9ebdf8668c7c5f0ec172e6d
// TypesFromSerializers CacheKey 0677102f1c3ad73d855975f0eaa09faa
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type Song from './Song'
Expand All @@ -9,6 +9,9 @@ export default interface VideoWithSong {
song: Song
title?: string
untypedFieldExample: any
/**
* YouTube ID of the video
*/
youtubeId?: string
youtubeUrl?: string
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey b379726b6fef2dadbfd614384b868746
// TypesFromSerializers CacheKey c5f5056c4fa3626c5c1908d0f1dcfe8d
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
export {}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey 9111c6d881174b0013582fa6366868db
// TypesFromSerializers CacheKey acbbfcd258be7c495d2784be9b815e79
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type ComposerWithSongsSong from './ComposerWithSongs/Song'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey a69c0dbcc904740e5de89181ef4b2837
// TypesFromSerializers CacheKey b8af6beb071f45e87fe53318043f5388
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
export {}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey ed8ff6fbc986e6b666d559749c666dc5
// TypesFromSerializers CacheKey 89c74246c39a38f244b708597ef3b884
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type AnyModel from '../AnyModel'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey 58897b61d86838c60d1f12700f326896
// TypesFromSerializers CacheKey ddc921e1e92a90ea686336285fcdb369
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type AnyModel from '../../AnyModel'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey 89e5760366d01f7f21244d341e1af2d4
// TypesFromSerializers CacheKey 03a6c67042bb201dfeeab4b021db7dd5
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
export {}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey f4f9e398dc092747d13607e2bdcb0846
// TypesFromSerializers CacheKey c2c60f7c58d2fbafd49219bd8673dd15
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type Composer from './Composer'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey c2d167325e7342eba01d0a78482d6d76
// TypesFromSerializers CacheKey e6174fbd5fbf2c871782886b3b441101
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type Composer from './Composer'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey 45d6b515fb6118eabbd39d586269cdd0
// TypesFromSerializers CacheKey fa77137240a406b724863f5d51e9c3e4
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
export {}
Expand All @@ -10,6 +10,9 @@ declare global {
createdAt: string | Date
title?: string
untypedFieldExample: any
/**
* YouTube ID of the video
*/
youtubeId?: string
youtubeUrl?: string
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// TypesFromSerializers CacheKey 4042db0fa9ebdf8668c7c5f0ec172e6d
// TypesFromSerializers CacheKey 0677102f1c3ad73d855975f0eaa09faa
//
// DO NOT MODIFY: This file was automatically generated by TypesFromSerializers.
import type Song from './Song'
Expand All @@ -11,6 +11,9 @@ declare global {
song: Song
title?: string
untypedFieldExample: any
/**
* YouTube ID of the video
*/
youtubeId?: string
youtubeUrl?: string
}
Expand Down
2 changes: 2 additions & 0 deletions types_from_serializers/lib/types_from_serializers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@
require_relative "types_from_serializers/version"
require_relative "types_from_serializers/dsl"
require_relative "types_from_serializers/railtie"

OjSerializers::Serializer::KNOWN_ATTRIBUTE_OPTIONS << :doc
18 changes: 15 additions & 3 deletions types_from_serializers/lib/types_from_serializers/generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ def ts_properties
Property.new(
name: key,
type: options[:serializer] || options[:type],
doc: options[:doc],
optional: options[:optional] || options.key?(:if),
multi: options[:association] == :many,
column_name: options.fetch(:value_from),
Expand Down Expand Up @@ -146,7 +147,7 @@ def as_typescript
indent = TypesFromSerializers.config.namespace ? 3 : 1
<<~TS.gsub(/\n$/, "")
interface #{name} {
#{" " * indent}#{properties.index_by(&:name).values.map(&:as_typescript).join("\n#{" " * indent}")}
#{" " * indent}#{properties.index_by(&:name).values.map { |property| property.as_typescript(indent) }.join("\n#{" " * indent}")}
#{" " * (indent - 1)}}
TS
end
Expand Down Expand Up @@ -182,6 +183,7 @@ def global_type?(type)
:optional,
:multi,
:column_name,
:doc,
keyword_init: true,
) do
using SerializerRefinements
Expand All @@ -206,14 +208,24 @@ def infer_type_from(columns_hash, defined_enums, ts_interface)
end
end

def as_typescript
def as_typescript(indent = 1)
type_str = if type.respond_to?(:ts_name)
type.ts_name
else
type || TypesFromSerializers.config.unknown_type
end

"#{name}#{"?" if optional}: #{type_str}#{"[]" if multi}"
comment = if doc
<<~TSDOC
/**
* #{doc.strip}
*/
TSDOC
else
""
end

"#{comment}#{name}#{"?" if optional}: #{type_str}#{"[]" if multi}".lines.join("\n#{" " * indent}")
end
end

Expand Down
Loading