Writing_On_GitHub_Fetch_Client   A
last analyzed

Complexity

Total Complexity 15

Size/Duplication

Total Lines 115
Duplicated Lines 0 %

Test Coverage

Coverage 66.67%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 36
c 2
b 0
f 0
dl 0
loc 115
ccs 30
cts 45
cp 0.6667
rs 10
wmc 15

6 Methods

Rating   Name   Duplication   Size   Complexity  
A remote_contents() 0 2 1
A exists() 0 6 2
A blob() 0 9 2
A compare() 0 17 3
A tree_recursive() 0 25 5
A blob_by_path() 0 7 2
1
<?php
2
/**
3
 * Fetch API client class.
4
 * @package Writing_On_GitHub
5
 */
6
7
/**
8
 * Class Writing_On_GitHub_Fetch_Client
9
 */
10
class Writing_On_GitHub_Fetch_Client extends Writing_On_GitHub_Base_Client {
11
12
    /**
13
     * Compare a commit by sha with master from the GitHub API
14
     *
15
     * @param string $sha Sha for commit to retrieve.
16
     *
17
     * @return Writing_On_GitHub_File_Info[]|WP_Error
18
     */
19 1
    public function compare( $sha ) {
20
        // https://api.github.com/repos/litefeel/testwpsync/compare/861f87e8851b8debb78db548269d29f8da4d94ac...master
21 1
        $endpoint = $this->compare_endpoint();
22 1
        $branch = $this->branch();
23 1
        $data = $this->call( 'GET', "$endpoint/$sha...$branch" );
24
25 1
        if ( is_wp_error( $data ) ) {
26
            return $data;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $data also could return the type stdClass which is incompatible with the documented return type Writing_On_GitHub_File_Info[]&WP_Error.
Loading history...
27
        }
28
29 1
        $files = array();
30 1
        foreach ($data->files as $file) {
0 ignored issues
show
Bug introduced by
The property files does not seem to exist on WP_Error.
Loading history...
31 1
            $file->path = $file->filename;
32 1
            $files[] = new Writing_On_GitHub_File_Info($file);
33 1
        }
34
35 1
        return $files;
36
    }
37
38
    /**
39
     * Calls the content API to get the post's contents and metadata
40
     *
41
     * Returns Object the response from the API
42
     *
43
     * @param Writing_On_GitHub_Post $post Post to retrieve remote contents for.
44
     *
45
     * @return mixed
46
     */
47
    public function remote_contents( $post ) {
48
        return $this->call( 'GET', $this->content_endpoint( $post->github_path() ) );
49
    }
50
51
52
53
    public function exists( $path ) {
54
        $result = $this->call( 'GET', $this->content_endpoint( $path ) );
55
        if ( is_wp_error( $result ) ) {
56
            return false;
57
        }
58
        return true;
59
    }
60
61
    /**
62
     * Retrieves a tree by sha recursively from the GitHub API
63
     *
64
     * @param string $sha Commit sha to retrieve tree from.
65
     *
66
     * @return Writing_On_GitHub_File_Info[]|WP_Error
67
     */
68 6
    public function tree_recursive( $sha = '_default' ) {
69
70 6
        if ( '_default' === $sha ) {
71 6
            $sha = $this->branch();
72 6
        }
73
74 6
        $data = $this->call( 'GET', $this->tree_endpoint() . '/' . $sha . '?recursive=1' );
75
76 6
        if ( is_wp_error( $data ) ) {
77 4
            return $data;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $data also could return the type stdClass which is incompatible with the documented return type Writing_On_GitHub_File_Info[]&WP_Error.
Loading history...
78
        }
79
80 2
        $files = array();
81
82 2
        foreach ( $data->tree as $index => $thing ) {
0 ignored issues
show
Bug introduced by
The property tree does not seem to exist on WP_Error.
Loading history...
83
            // We need to remove the trees because
84
            // the recursive tree includes both
85
            // the subtrees as well the subtrees' blobs.
86 2
            if ( 'blob' === $thing->type ) {
87 2
                $thing->status = '';
88 2
                $files[] = new Writing_On_GitHub_File_Info( $thing );
89 2
            }
90 2
        }
91
92 2
        return $files;
93
    }
94
95
    /**
96
     * Retrieves the blob data for a given sha
97
     *
98
     * @param Writing_On_GitHub_File_Info $fileinfo
99
     *
100
     * @return Writing_On_GitHub_Blob|WP_Error
101
     */
102 1
    public function blob( Writing_On_GitHub_File_Info $fileinfo ) {
103 1
        $data = $this->call( 'GET', $this->blob_endpoint() . '/' . $fileinfo->sha );
104
105 1
        if ( is_wp_error( $data ) ) {
106 1
            return $data;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $data also could return the type stdClass which is incompatible with the documented return type WP_Error|Writing_On_GitHub_Blob.
Loading history...
107
        }
108
109
        $data->path = $fileinfo->path;
0 ignored issues
show
Bug introduced by
The property path does not seem to exist on WP_Error.
Loading history...
110
        return new Writing_On_GitHub_Blob( $data );
0 ignored issues
show
Bug introduced by
It seems like $data can also be of type WP_Error; however, parameter $data of Writing_On_GitHub_Blob::__construct() does only seem to accept stdClass, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

110
        return new Writing_On_GitHub_Blob( /** @scrutinizer ignore-type */ $data );
Loading history...
111
    }
112
113
    /**
114
     * Get blob by path
115
     * @param  string $path
116
     * @return Writing_On_GitHub_Blob|WP_Error
117
     */
118
    public function blob_by_path( $path ) {
119
        $result = $this->call( 'GET', $this->content_endpoint( $path ) );
120
        if ( is_wp_error( $result ) ) {
121
            return $result;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $result also could return the type stdClass which is incompatible with the documented return type WP_Error|Writing_On_GitHub_Blob.
Loading history...
122
        }
123
124
        return new Writing_On_GitHub_Blob( $result );
0 ignored issues
show
Bug introduced by
It seems like $result can also be of type WP_Error; however, parameter $data of Writing_On_GitHub_Blob::__construct() does only seem to accept stdClass, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

124
        return new Writing_On_GitHub_Blob( /** @scrutinizer ignore-type */ $result );
Loading history...
125
    }
126
}
127