X-Git-Url: http://nitlanguage.org diff --git a/lib/github/events.nit b/lib/github/events.nit index 33c637f..3417de2 100644 --- a/lib/github/events.nit +++ b/lib/github/events.nit @@ -18,108 +18,64 @@ 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 + super Jsonable + 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. @@ -127,112 +83,64 @@ end # 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. @@ -241,53 +149,25 @@ end # 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. @@ -296,123 +176,65 @@ end # 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. # @@ -420,20 +242,41 @@ class StatusEvent # 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