Skip to content

Instantly share code, notes, and snippets.

@kylemacey
Created April 21, 2020 20:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kylemacey/1848b10ba33c39322cca6775628dd933 to your computer and use it in GitHub Desktop.
Save kylemacey/1848b10ba33c39322cca6775628dd933 to your computer and use it in GitHub Desktop.
Generate RBI for a Mongoid Document
# typed: true
class Foo
include Mongoid::Document
include Mongoid::Timestamps
field :bar, type: String
end
# typed: ignore
require "parlour"
require "fileutils"
klass = Foo
klass.class_eval do
def self.extended_modules
(class << self; self end).included_modules
end
end
generator = Parlour::RbiGenerator.new
generator.root.create_class(klass.name) do |_klass|
klass.included_modules.each do |mod|
if mod.name
_klass.create_include(mod.name)
else
next
end
end
klass.extended_modules.each do |ext_mod|
if ext_mod.name
_klass.create_extend(ext_mod.name)
else
next
end
end
end
FileUtils.mkdir_p("sorbet/rbi/app/models")
File.open("sorbet/rbi/app/models/#{klass.name.underscore}.rbi", "w") { |f| f << generator.rbi }
# typed: strong
class Foo
include Mongoid::Timestamps
include Mongoid::Timestamps::Updated
include Mongoid::Timestamps::Timeless
include Mongoid::Timestamps::Created
include Mongoid::Document
include Mongoid::QueryCache::Document
include Mongoid::Touchable::InstanceMethods
include Mongoid::Composable
include Mongoid::Equality
include Mongoid::Stateful
include Mongoid::Reloadable
include Mongoid::Inspectable
include Mongoid::Evolvable
include Mongoid::Copyable
include ActiveModel::Validations::Callbacks
include Mongoid::Interceptable
include Mongoid::Validatable::Macros
include Mongoid::Validatable
include Mongoid::Traversable
include Mongoid::Threaded::Lifecycle
include Mongoid::Cacheable
include Mongoid::Shardable
include Mongoid::Serializable
include Mongoid::Selectable
include Mongoid::Scopable
include Mongoid::Association
include Mongoid::Association::Referenced::Syncable
include Mongoid::Association::Reflections
include Mongoid::Association::Macros
include Mongoid::Association::Builders
include Mongoid::Association::Depending
include Mongoid::Association::Accessors
include Mongoid::Association::Referenced::CounterCache
include Mongoid::Association::Referenced::AutoSave
include Mongoid::Association::Embedded::Cyclic
include Mongoid::Persistable
include Mongoid::Persistable::Upsertable
include Mongoid::Persistable::Updatable
include Mongoid::Persistable::Savable
include Mongoid::Positional
include Mongoid::Persistable::Unsettable
include Mongoid::Persistable::Settable
include Mongoid::Persistable::Renamable
include Mongoid::Persistable::Pushable
include Mongoid::Persistable::Pullable
include Mongoid::Persistable::Poppable
include Mongoid::Persistable::Logical
include Mongoid::Persistable::Incrementable
include Mongoid::Persistable::Destroyable
include Mongoid::Persistable::Deletable
include Mongoid::Persistable::Creatable
include Mongoid::Matchable
include Mongoid::Indexable
include Mongoid::Fields
include Mongoid::Attributes
include Mongoid::Attributes::Processing
include Mongoid::Attributes::Readonly
include Mongoid::Attributes::Nested
include Mongoid::Clients
include Mongoid::Clients::Sessions
include Mongoid::Clients::Options
include Mongoid::Clients::StorageOptions
include Mongoid::Changeable
include Mongoid::Atomic
include ActiveModel::Serializers::JSON
include ActiveModel::Serialization
include ActiveModel::Model
include ActiveModel::AttributeAssignment
include ActiveModel::ForbiddenAttributesProtection
include ActiveModel::Conversion
include ActiveModel::Validations::HelperMethods
include ActiveSupport::Callbacks
include ActiveModel::Validations
include ActiveSupport::Dependencies::ZeitwerkIntegration::RequireDependency
include ActiveSupport::ToJsonWithActiveSupportEncoder
include PP::ObjectMixin
include Mongoid::Criteria::Queryable::Extensions::Object
include Mongoid::Extensions::Object
include BSON::Object
include JSON::Ext::Generator::GeneratorMethods::Object
include ActiveSupport::Tryable
include ActiveSupport::Dependencies::Loadable
include Kernel
extend Mongoid::Timestamps::Timeless::ClassMethods
extend Mongoid::Document::ClassMethods
extend Mongoid::Findable
extend ActiveModel::Validations::Callbacks::ClassMethods
extend Mongoid::Validatable::Macros
extend Mongoid::Validatable::ClassMethods
extend Mongoid::Traversable::ClassMethods
extend Mongoid::Threaded::Lifecycle::ClassMethods
extend Mongoid::Shardable::ClassMethods
extend Forwardable
extend Mongoid::Scopable::ClassMethods
extend Mongoid::Association::Referenced::Syncable::ClassMethods
extend Mongoid::Association::Reflections::ClassMethods
extend Mongoid::Association::Macros::ClassMethods
extend Mongoid::Association::Depending::ClassMethods
extend Mongoid::Association::Referenced::CounterCache::ClassMethods
extend Mongoid::Association::Embedded::Cyclic::ClassMethods
extend Mongoid::Persistable::Destroyable::ClassMethods
extend Mongoid::Persistable::Deletable::ClassMethods
extend Mongoid::Persistable::Creatable::ClassMethods
extend Mongoid::Indexable::ClassMethods
extend Mongoid::Fields::ClassMethods
extend Mongoid::Attributes::ClassMethods
extend Mongoid::Attributes::Readonly::ClassMethods
extend Mongoid::Attributes::Nested::ClassMethods
extend Mongoid::Clients::Sessions::ClassMethods
extend Mongoid::Clients::Options::ClassMethods
extend Mongoid::Clients::StorageOptions::ClassMethods
extend Mongoid::Changeable::ClassMethods
extend ActiveModel::Conversion::ClassMethods
extend ActiveModel::Validations::HelperMethods
extend ActiveModel::Translation
extend ActiveSupport::DescendantsTracker
extend ActiveSupport::Callbacks::ClassMethods
extend ActiveModel::Callbacks
extend ActiveModel::Naming
extend ActiveModel::Validations::ClassMethods
extend Mongoid::Criteria::Queryable::Extensions::Object::ClassMethods
extend Mongoid::Extensions::Object::ClassMethods
extend Mongoid::Extensions::Module
extend Module::Concerning
extend ActiveSupport::Dependencies::ModuleConstMissing
extend ActiveSupport::Dependencies::ZeitwerkIntegration::RequireDependency
extend ActiveSupport::ToJsonWithActiveSupportEncoder
extend PP::ObjectMixin
extend Mongoid::Criteria::Queryable::Extensions::Object
extend Mongoid::Extensions::Object
extend BSON::Object
extend JSON::Ext::Generator::GeneratorMethods::Object
extend ActiveSupport::Tryable
extend ActiveSupport::Dependencies::Loadable
extend Kernel
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment