serializable_meta

package module
v0.0.0-...-5fd8542 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 10, 2018 License: MIT Imports: 9 Imported by: 17

README

Serializable Meta

Serializable Meta allows the developer to specify, for a given model, a custom serialization model along with field mappings. This mechanism thus allows one model to act as another model when it comes to serialization.

GoDoc

Usage

The example herein shows how to manage different kinds of background jobs using https://github.com/qor/serializable_meta.

Define serializable model

Define QorJob model and embed serializable_meta.SerializableMeta to apply the feature.

type QorJob struct {
  gorm.Model
  Name string
  serializable_meta.SerializableMeta
}

Add function GetSerializableArgumentResource to the model, so Serializable Meta can know the type of argument. Then define background jobs.

func (qorJob QorJob) GetSerializableArgumentResource() *admin.Resource {
  return jobsArgumentsMap[qorJob.Kind]
}

var jobsArgumentsMap = map[string]*admin.Resource{
  "newsletter": admin.NewResource(&sendNewsletterArgument{}),
  "import_products": admin.NewResource(&importProductArgument{}),
}

type sendNewsletterArgument struct {
  Subject string
  Content string
}

type importProductArgument struct {}
Use serializable features

At first, Set a job's Name, Kind and SetSerializableArgumentValue. Then save it into database.

var qorJob QorJob
qorJob.Name = "sending newsletter"
qorJob.Kind = "newsletter"
qorJob.SetSerializableArgumentValue(&sendNewsletterArgument{
  Subject: "subject",
  Content: "content",
})

db.Create(&qorJob)

This will marshal sendNewsletterArgument as a json, and save it into database by this SQL

INSERT INTO "qor_jobs" (kind, value) VALUES (`newsletter`, `{"Subject":"subject","Content":"content"}`);

Now you can fetch the saved QorJob from the database. And get the serialized data from the record.

var result QorJob
db.First(&result, "name = ?", "sending newsletter")

var argument = result.GetSerializableArgument(result)
argument.(*sendNewsletterArgument).Subject // "subject"
argument.(*sendNewsletterArgument).Content // "content"

License

Released under the MIT License.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type SerializableMeta

type SerializableMeta struct {
	Kind  string
	Value serializableArgument `sql:"size:65532"`
}

SerializableMeta default struct that implemented SerializableMetaInterface

func (*SerializableMeta) ConfigureQorResourceBeforeInitialize

func (serialize *SerializableMeta) ConfigureQorResourceBeforeInitialize(res resource.Resourcer)

ConfigureQorResourceBeforeInitialize configure qor resource for qor admin

func (*SerializableMeta) GetSerializableArgument

func (serialize *SerializableMeta) GetSerializableArgument(serializableMetaInterface SerializableMetaInterface) interface{}

GetSerializableArgument get serializable argument

func (SerializableMeta) GetSerializableArgumentKind

func (serialize SerializableMeta) GetSerializableArgumentKind() string

GetSerializableArgumentKind get serializable argument kind

func (*SerializableMeta) SetSerializableArgumentKind

func (serialize *SerializableMeta) SetSerializableArgumentKind(name string)

SetSerializableArgumentKind set serializable argument kind

func (*SerializableMeta) SetSerializableArgumentValue

func (serialize *SerializableMeta) SetSerializableArgumentValue(value interface{})

SetSerializableArgumentValue set serializable argument value

type SerializableMetaInterface

type SerializableMetaInterface interface {
	GetSerializableArgumentResource() *admin.Resource
	GetSerializableArgument(SerializableMetaInterface) interface{}
	GetSerializableArgumentKind() string
	SetSerializableArgumentKind(name string)
	SetSerializableArgumentValue(interface{})
}

SerializableMetaInterface is a interface defined methods need for a serializable model

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL