module events
import api
+intrude import json
# Github event stub.
class GithubEvent
-
- # Github API client.
- var api: GithubAPI
-
- # Json representation of `self`.
- var json: JsonObject is noinit
-
- init do
- json = new JsonObject
- end
-
- # Init `self` from a `json` object.
- init from_json(api: GithubAPI, json: JsonObject) do
- init(api)
- self.json = json
- end
+ serialize
# Event ID from Github.
- fun id: String do return json["id"].as(String)
-
- # Set id.
- fun id=(id: String) do json["id"] = id
+ var id: nullable String is writable
# Action performed by the event.
- fun action: String do return json["action"].as(String)
-
- # Set action.
- fun action=(action: String) do json["action"] = action
+ var action: nullable String is writable
# Repo where this event occured.
- fun repo: Repo do
- return new Repo.from_json(api, json["repository"].as(JsonObject))
- end
-
- # Set repo.
- fun repo=(repo: Repo) do json["repository"] = repo.json
+ var repo: Repo is writable
end
# Triggered when a commit comment is created.
class CommitCommentEvent
super GithubEvent
+ serialize
# The `Comment` itself.
- fun comment: CommitComment do
- return new CommitComment.from_json(api, repo, json["comment"].as(JsonObject))
- end
-
- # Set comment.
- fun comment=(comment: CommitComment) do json["comment"] = comment.json
+ var comment: CommitComment is writable
end
# Triggered when a repository, branch, or tag is created.
class CreateEvent
super GithubEvent
+ serialize
# Oject type that was created.
#
# Can be one of `repository`, `branch`, or `tag`.
- fun ref_type: String do return json["ref_type"].as(String)
-
- # Set ref_type.
- fun ref_type=(ref_type: String) do json["ref_type"] = ref_type
+ var ref_type: String is writable
# Git ref (or null if only a repository was created).
- fun ref: String do return json["ref"].as(String)
-
- # Set ref.
- fun ref=(ref: String) do json["ref"] = ref
+ var ref: String is writable
# Name of the repo's default branch (usually master).
- fun master_branch: String do return json["master_branch"].as(String)
-
- # Set master_branch.
- fun master_branch=(master_branch: String) do json["master_branch"] = master_branch
+ var master_branch: String is writable
# Repo's current description.
- fun description: String do return json["description"].as(String)
-
- # Set description.
- fun description=(description: String) do json["description"] = description
+ var description: nullable String is writable
end
# Triggered when a branch or a tag is deleted.
class DeleteEvent
super GithubEvent
+ serialize
# Object type that was deleted.
#
# Can be one of `repository`, `branch`, or `tag`.
- fun ref_type: String do return json["ref_type"].as(String)
-
- # Set ref_type.
- fun ref_type=(ref_type: String) do json["ref_type"] = ref_type
+ var ref_type: String is writable
# Git ref (or null if only a repository was deleted).
- fun ref: String do return json["ref"].as(String)
-
- # Set ref.
- fun ref=(ref: String) do json["ref"] = ref
+ var ref: String is writable
end
# Triggered when a new snapshot is deployed.
# Deployement are mainly used with integration testing servers.
class DeploymentEvent
super GithubEvent
+ serialize
# Commit SHA for which this deployment was created.
- fun sha: String do return json["sha"].as(String)
-
- # Set sha.
- fun sha=(sha: String) do json["sha"] = sha
+ var sha: String is writable
# Name of repository for this deployment, formatted as :owner/:repo.
- fun name: String do return json["name"].as(String)
-
- # Set name.
- fun name=(name: String) do json["name"] = name
+ var name: String is writable
# Optional extra information for this deployment.
- fun payload: nullable String do
- var res = json.get_or_null("payload")
- if res isa String then return res else return null
- end
-
- # Set payload.
- fun payload=(payload: nullable String) do json["payload"] = payload
+ var payload: nullable String is writable
# Optional environment to deploy to.
# Default: "production"
- fun environment: nullable String do
- var res = json.get_or_null("environment")
- if res isa String then return res else return null
- end
-
- # Set environment.
- fun environment=(environment: nullable String) do json["environment"] = environment
+ var environment: nullable String is writable
# Optional human-readable description added to the deployment.
- fun description: nullable String do
- var res = json.get_or_null("description")
- if res isa String then return res else return null
- end
-
- # Set description.
- fun description=(description: nullable String) do json["description"] = description
+ var description: nullable String is writable
end
# Triggered when a deployement's status changes.
class DeploymentStatusEvent
super GithubEvent
+ serialize
# New deployment state.
#
# Can be `pending`, `success`, `failure`, or `error`.
- fun state: String do return json["state"].as(String)
+ var state: String is writable
# Optional link added to the status.
- fun target_url: nullable String do
- var res = json.get_or_null("target_url")
- if res isa String then return res else return null
- end
-
- # Set target_url.
- fun target_url=(target_url: nullable String) do json["target_url"] = target_url
+ var target_url: nullable String is writable
# Deployment hash that this status is associated with.
- fun deployment: String do return json["deployment"].as(String)
-
- # Set deployment.
- fun deployment=(deployment: String) do json["deployment"] = deployment
+ var deployment: String is writable
# Optional human-readable description added to the status.
- fun description: nullable String do
- var res = json.get_or_null("description")
- if res isa String then return res else return null
- end
-
- # Set description.
- fun description=(description: nullable String) do json["description"] = description
+ var description: nullable String is writable
end
# Triggered when a user forks a repository.
class ForkEvent
super GithubEvent
+ serialize
# Created repository.
- fun forkee: Repo do return new Repo.from_json(api, json["forkee"].as(JsonObject))
-
- # Set forkee.
- fun forkee=(forkee: Repo) do json["forkee"] = forkee.json
+ var forkee: Repo is writable
end
# Triggered when an issue comment is created.
class IssueCommentEvent
super GithubEvent
+ serialize
# `Issue` the comment belongs to.
- fun issue: Issue do
- return new Issue.from_json(api, repo, json["issue"].as(JsonObject))
- end
-
- # Set issue.
- fun issue=(issue: Issue) do json["issue"] = issue.json
+ var issue: Issue is writable
# The `Comment` itself.
- fun comment: IssueComment do
- return new IssueComment.from_json(api, repo, json["comment"].as(JsonObject))
- end
-
- # Set comment.
- fun comment=(comment: IssueComment) do json["comment"] = comment.json
+ var comment: IssueComment is writable
end
# Triggered when an event occurs on an issue.
# opened, closed or reopened.
class IssuesEvent
super GithubEvent
+ serialize
# The `Issue` itself.
- fun issue: Issue do return new Issue.from_json(api, repo, json["issue"].as(JsonObject))
-
- # Set issue.
- fun issue=(issue: Issue) do json["issue"] = issue.json
+ var issue: Issue is writable
# Optional `Label` that was added or removed from the issue.
- fun lbl: nullable Label do
- var res = json.get_or_null("label")
- if res isa JsonObject then return new Label.from_json(api, repo, res) else return null
- end
-
- # Set lbl.
- fun lbl=(lbl: nullable Label) do
- if lbl == null then
- json["lbl"] = null
- else
- json["lbl"] = lbl.json
- end
- end
+ var lbl: nullable Label is writable, serialize_as("label")
# Optional `User` that was assigned or unassigned from the issue.
- fun assignee: nullable User do
- var res = json.get_or_null("assignee")
- if res isa JsonObject then return new User.from_json(api, res) else return null
- end
-
- # Set assignee.
- fun assignee=(assignee: nullable User) do
- if assignee == null then
- json["assignee"] = null
- else
- json["assignee"] = assignee.json
- end
- end
+ var assignee: nullable User is writable
end
# Triggered when a user is added as a collaborator to a repository.
class MemberEvent
super GithubEvent
+ serialize
# `User` that was added.
- fun member: User do return new User.from_json(api, json["member"].as(JsonObject))
-
- # Set member.
- fun member=(member: User) do json["member"] = member.json
+ var member: User is writable
end
# Triggered when an event occurs on a pull request.
# labeled, unlabeled, opened, closed, reopened, or synchronized.
class PullRequestEvent
super GithubEvent
+ serialize
# The pull request number.
- fun number: Int do return json["number"].as(Int)
-
- # Set number.
- fun number=(number: Int) do json["number"] = number
+ var number: Int is writable
# The `PullRequest` itself.
- fun pull: PullRequest do
- return new PullRequest.from_json(api, repo, json["pull_request"].as(JsonObject))
- end
-
- # Set pull.
- fun pull=(pull: PullRequest) do json["pull_request"] = pull.json
+ var pull: PullRequest is writable
end
# Triggered when a comment is created on a pull request diff.
class PullRequestReviewCommentEvent
super GithubEvent
+ serialize
# The `Comment` itself.
- fun comment: ReviewComment do
- return new ReviewComment.from_json(api, repo, json["comment"].as(JsonObject))
- end
-
- # Set comment.
- fun comment=(comment: ReviewComment) do json["comment"] = comment.json
+ var comment: ReviewComment is writable
# `PullRequest` the `comment` belongs to.
- fun pull: PullRequest do
- return new PullRequest.from_json(api, repo, json["pull_request"].as(JsonObject))
- end
-
- # Set pull.
- fun pull=(pull: PullRequest) do json["pull_request"] = pull.json
+ var pull: PullRequest is writable
end
# Triggered when a repository branch is pushed to.
class PushEvent
super GithubEvent
+ serialize
# SHA of the HEAD commit on the repository.
- fun head: String do return json["head"].as(String)
-
- # Set head.
- fun head=(head: String) do json["head"] = head
+ var head_commit: Commit is writable
# Full Git ref that was pushed.
#
# Example: “refs/heads/master”
- fun ref: String do return json["ref"].as(String)
-
- # Set ref.
- fun ref=(ref: String) do json["ref"] = ref
+ var ref: String is writable
# Number of commits in the push.
- fun size: Int do return json["size"].as(Int)
-
- # Set size.
- fun size=(size: Int) do json["size"] = size
+ var size: nullable Int is writable
# Array of pushed commits.
- fun commits: Array[Commit] do
- var res = new Array[Commit]
- var arr = json["commits"].as(JsonArray)
- for obj in arr do
- if not obj isa JsonObject then continue
- res.add api.load_commit(repo, obj["sha"].as(String)).as(not null)
- end
- return res
- end
-
- # Set commits.
- fun commits=(commits: Array[Commit]) do
- var arr = new JsonArray
- for commit in commits do arr.add commit.json
- json["commits"] = arr
- end
+ var commits = new Array[Commit] is writable, optional
end
# Triggered when the status of a Git commit changes.
class StatusEvent
super GithubEvent
+ serialize
# The `Commit` itself.
- fun commit: Commit do
- return api.load_commit(repo, json["sha"].as(String)).as(not null)
- end
-
- # Set commit.
- fun commit=(commit: Commit) do json["sha"] = commit.sha
+ var sha: String is writable
# New state.
#
# Can be `pending`, `success`, `failure`, or `error`.
- fun state: String do return json["state"].as(String)
-
- # Set state.
- fun state=(state: String) do json["state"] = state
+ var state: String is writable
# Optional human-readable description added to the status.
- fun description: nullable String do
- var res = json.get_or_null("description")
- if res isa String then return res else return null
- end
-
- # Set description.
- fun description=(description: nullable String) do json["description"] = description
+ var description: nullable String is writable
# Optional link added to the status.
- fun target_url: nullable String do
- var res = json.get_or_null("target_url")
- if res isa String then return res else return null
- end
-
- # Set target_url.
- fun target_url=(target_url: nullable String) do json["target_url"] = target_url
+ var target_url: nullable String is writable
# Array of branches containing the status' SHA.
#
# but the SHA may or may not be the head of the branch.
#
# The array includes a maximum of 10 branches.
- fun branches: Array[Branch] do
- var res = new Array[Branch]
- var arr = json["branches"].as(JsonArray)
- for obj in arr do
- if not obj isa JsonObject then continue
- res.add api.load_branch(repo, obj["name"].as(String)).as(not null)
- end
- return res
- end
+ var branches = new Array[Branch] is writable, optional
+end
- # Set branches.
- fun branches=(branches: Array[Commit]) do
- var arr = new JsonArray
- for branch in branches do arr.add branch.json
- json["branches"] = arr
+redef class GithubDeserializer
+
+ redef fun class_name_heuristic(json_object) do
+ if json_object.has_key("action") and json_object.has_key("commit") and json_object.has_key("comment") then
+ return "CommitCommentEvent"
+ else if json_object.has_key("ref") and json_object.has_key("master_branch") then
+ return "CreateEvent"
+ else if json_object.has_key("ref") and json_object.has_key("ref_type") then
+ return "DeleteEvent"
+ else if json_object.has_key("action") and json_object.has_key("sha") then
+ return "DeploymentEvent"
+ else if json_object.has_key("action") and json_object.has_key("state") then
+ return "DeploymentStatusEvent"
+ else if json_object.has_key("action") and json_object.has_key("forkee") then
+ return "ForkEvent"
+ else if json_object.has_key("action") and json_object.has_key("issue") and json_object.has_key("comment") then
+ return "IssueCommentEvent"
+ else if json_object.has_key("action") and json_object.has_key("issue") then
+ return "IssuesEvent"
+ else if json_object.has_key("action") and json_object.has_key("member") then
+ return "MemberEvent"
+ else if json_object.has_key("action") and json_object.has_key("number") then
+ return "PullRequestEvent"
+ else if json_object.has_key("action") and json_object.has_key("pull") and json_object.has_key("comment") then
+ return "PullRequestReviewCommentEvent"
+ else if json_object.has_key("head_commit") and json_object.has_key("commits") then
+ return "PushEvent"
+ else if json_object.has_key("action") and json_object.has_key("branches") then
+ return "StatusEvent"
+ else if json_object.has_key("action") and json_object.has_key("issue") then
+ return "GithubEvent"
+ end
+ return super
end
end