From e8672c7607a9125b867028a8e404835e613d90a2 Mon Sep 17 00:00:00 2001 From: OKURA Masafumi Date: Mon, 30 Sep 2024 16:59:00 +0900 Subject: [PATCH] feat(model): Introduce poro model plugin This model plugin would be used in serializers for PORO. It's implementation is empty but it works as expected. See spec/app/app/serializers/alba/poro_serializer.rb for details. --- lib/typelizer.rb | 1 + lib/typelizer/model_plugins/poro.rb | 13 +++++++++++++ spec/__snapshots__/AlbaPoro.ts.snap | 10 ++++++++++ spec/__snapshots__/index.ts.snap | 3 ++- spec/app/app/models/poro.rb | 9 +++++++++ spec/app/app/serializers/alba/poro_serializer.rb | 15 +++++++++++++++ 6 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 lib/typelizer/model_plugins/poro.rb create mode 100644 spec/__snapshots__/AlbaPoro.ts.snap create mode 100644 spec/app/app/models/poro.rb create mode 100644 spec/app/app/serializers/alba/poro_serializer.rb diff --git a/lib/typelizer.rb b/lib/typelizer.rb index f43cd9b..8050eb1 100644 --- a/lib/typelizer.rb +++ b/lib/typelizer.rb @@ -16,6 +16,7 @@ require_relative "typelizer/serializer_plugins/ams" require_relative "typelizer/model_plugins/active_record" +require_relative "typelizer/model_plugins/poro" require_relative "typelizer/railtie" if defined?(Rails) diff --git a/lib/typelizer/model_plugins/poro.rb b/lib/typelizer/model_plugins/poro.rb new file mode 100644 index 0000000..382774a --- /dev/null +++ b/lib/typelizer/model_plugins/poro.rb @@ -0,0 +1,13 @@ +module Typelizer + module ModelPlugins + class Poro + # We don't care about intialization + def initialize(...) + end + + def infer_types(prop) + prop + end + end + end +end diff --git a/spec/__snapshots__/AlbaPoro.ts.snap b/spec/__snapshots__/AlbaPoro.ts.snap new file mode 100644 index 0000000..56b16d0 --- /dev/null +++ b/spec/__snapshots__/AlbaPoro.ts.snap @@ -0,0 +1,10 @@ +// Typelizer digest 3c3acd1390157d9666f0f2be46bfcb1c +// +// DO NOT MODIFY: This file was automatically generated by Typelizer. + +type AlbaPoro = { + foo: unknown; + bar: string | null; +} + +export default AlbaPoro; diff --git a/spec/__snapshots__/index.ts.snap b/spec/__snapshots__/index.ts.snap index 648713e..4d3903c 100644 --- a/spec/__snapshots__/index.ts.snap +++ b/spec/__snapshots__/index.ts.snap @@ -1,9 +1,10 @@ -// Typelizer digest 57b8f7cafc55a420da0bed2b12cadf83 +// Typelizer digest b11065c38d475f7104b4d09c6ee44a31 // // DO NOT MODIFY: This file was automatically generated by Typelizer. export type { default as AlbaInline } from './AlbaInline' export type { default as AlbaMetaNil } from './AlbaMetaNil' export type { default as AlbaMeta } from './AlbaMeta' +export type { default as AlbaPoro } from './AlbaPoro' export type { default as AlbaPost } from './AlbaPost' export type { default as AlbaUserAuthor } from './AlbaUserAuthor' export type { default as AlbaUser } from './AlbaUser' diff --git a/spec/app/app/models/poro.rb b/spec/app/app/models/poro.rb new file mode 100644 index 0000000..81d8119 --- /dev/null +++ b/spec/app/app/models/poro.rb @@ -0,0 +1,9 @@ +class Poro + def foo + "This is foo method" + end + + def as_json + {foo: foo} + end +end diff --git a/spec/app/app/serializers/alba/poro_serializer.rb b/spec/app/app/serializers/alba/poro_serializer.rb new file mode 100644 index 0000000..1bad199 --- /dev/null +++ b/spec/app/app/serializers/alba/poro_serializer.rb @@ -0,0 +1,15 @@ +module Alba + class PoroSerializer + include Alba::Serializer + include Typelizer::DSL + + typelize_from :poro + + typelizer_config do |c| + # This is required + c.model_plugin = Typelizer::ModelPlugins::Poro + end + + attributes :foo, bar: :String + end +end