Repository: PhilippeBoisney/GithubApp Branch: master Commit: 98c625d09058 Files: 82 Total size: 468.5 KB Directory structure: gitextract_s9z8qbgg/ ├── .gitattributes ├── .gitignore ├── .idea/ │ └── codeStyles/ │ └── codeStyleConfig.xml ├── README.md ├── app/ │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src/ │ ├── androidTest/ │ │ ├── assets/ │ │ │ ├── detail_user.json │ │ │ ├── followers_user.json │ │ │ ├── repos_user.json │ │ │ ├── search_users.json │ │ │ └── search_users_empty.json │ │ └── java/ │ │ └── io/ │ │ └── github/ │ │ └── philippeboisney/ │ │ └── githubapp/ │ │ ├── TIRunner.kt │ │ ├── base/ │ │ │ ├── BaseIT.kt │ │ │ └── TIBaseApplication.kt │ │ ├── di/ │ │ │ └── storage_module_test.kt │ │ ├── ui/ │ │ │ └── SearchUserFragmentTest.kt │ │ ├── utils/ │ │ │ ├── RecyclerViewUtils.kt │ │ │ └── ViewMatcherUtils.kt │ │ └── views/ │ │ └── SingleFragmentActivity.kt │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── io/ │ │ │ └── github/ │ │ │ └── philippeboisney/ │ │ │ └── githubapp/ │ │ │ ├── GithubApplication.kt │ │ │ ├── api/ │ │ │ │ ├── NetworkState.kt │ │ │ │ └── UserService.kt │ │ │ ├── base/ │ │ │ │ ├── BaseFragment.kt │ │ │ │ └── BaseViewModel.kt │ │ │ ├── di/ │ │ │ │ ├── app_component.kt │ │ │ │ ├── network_module.kt │ │ │ │ ├── repository_module.kt │ │ │ │ ├── storage_module.kt │ │ │ │ └── view_model_module.kt │ │ │ ├── extensions/ │ │ │ │ ├── StorageExtensions.kt │ │ │ │ └── ViewExtensions.kt │ │ │ ├── model/ │ │ │ │ ├── Filters.kt │ │ │ │ ├── Repository.kt │ │ │ │ ├── Result.kt │ │ │ │ └── User.kt │ │ │ ├── pagination/ │ │ │ │ └── datasource/ │ │ │ │ ├── UserDataSource.kt │ │ │ │ └── UserDataSourceFactory.kt │ │ │ ├── repository/ │ │ │ │ └── UserRepository.kt │ │ │ ├── storage/ │ │ │ │ └── SharedPrefsManager.kt │ │ │ ├── ui/ │ │ │ │ ├── MainActivity.kt │ │ │ │ └── user/ │ │ │ │ └── search/ │ │ │ │ ├── SearchUserFragment.kt │ │ │ │ ├── SearchUserViewModel.kt │ │ │ │ └── views/ │ │ │ │ ├── SearchUserAdapter.kt │ │ │ │ ├── SearchUserNetworkStateViewHolder.kt │ │ │ │ └── SearchUserViewHolder.kt │ │ │ └── utils/ │ │ │ └── FilterUtills.kt │ │ └── res/ │ │ ├── drawable/ │ │ │ ├── ic_directions_run_black_24dp.xml │ │ │ ├── ic_filter_list_white_24dp.xml │ │ │ ├── ic_healing_black_24dp.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── ic_search_white_24dp.xml │ │ │ └── ic_star_white_24dp.xml │ │ ├── drawable-v24/ │ │ │ └── ic_launcher_foreground.xml │ │ ├── layout/ │ │ │ ├── activity_main.xml │ │ │ ├── fragment_search_user.xml │ │ │ ├── item_search_user.xml │ │ │ └── item_search_user_network_state.xml │ │ ├── menu/ │ │ │ └── menu_search.xml │ │ ├── mipmap-anydpi-v26/ │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ └── values/ │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ ├── test/ │ │ ├── java/ │ │ │ └── io/ │ │ │ └── github/ │ │ │ └── philippeboisney/ │ │ │ └── githubapp/ │ │ │ ├── base/ │ │ │ │ └── BaseUT.kt │ │ │ └── repository/ │ │ │ └── UserRepositoryTest.kt │ │ └── resources/ │ │ ├── detail_user.json │ │ ├── followers_user.json │ │ ├── repos_user.json │ │ └── search_users.json │ └── test-common/ │ └── java/ │ └── io/ │ └── github/ │ └── philippeboisney/ │ └── githubapp/ │ ├── base/ │ │ └── BaseTest.kt │ └── di/ │ ├── app_component_test.kt │ └── network_module_test.kt ├── build.gradle ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat └── settings.gradle ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ # Auto detect text files and perform LF normalization * text=auto ================================================ FILE: .gitignore ================================================ # Built application files *.apk *.ap_ *.aab # Files for the ART/Dalvik VM *.dex # Java class files *.class # Generated files bin/ gen/ out/ # Gradle files .gradle/ build/ # Local configuration file (sdk path, etc) local.properties # Proguard folder generated by Eclipse proguard/ # Log Files *.log # Android Studio Navigation editor temp files .navigation/ # Android Studio captures folder captures/ # IntelliJ *.iml .idea/workspace.xml .idea/tasks.xml .idea/gradle.xml .idea/assetWizardSettings.xml .idea/dictionaries .idea/libraries .idea/caches # Keystore files # Uncomment the following lines if you do not want to check your keystore files in. #*.jks #*.keystore # External native build folder generated in Android Studio 2.2 and later .externalNativeBuild # Google Services (e.g. APIs or Firebase) google-services.json # Freeline freeline.py freeline/ freeline_project_description.json # fastlane fastlane/report.xml fastlane/Preview.html fastlane/screenshots fastlane/test_output fastlane/readme.md .idea/encodings.xml .idea/codeStyles/Project.xml .idea/misc.xml .idea/modules.xml .idea/runConfigurations.xml .idea/vcs.xml keys.properties ================================================ FILE: .idea/codeStyles/codeStyleConfig.xml ================================================ ================================================ FILE: README.md ================================================ ## GithubApp ![enter image description here](https://cdn-images-1.medium.com/max/2000/1*0WkJM1nM4B6WGhYEAqWvRQ.png) **Relative Medium article**: https://medium.com/@Phil_Boisney/playing-with-4f21bc67a7f9 ## Notes If you want to compile and run this project, don't forget to create a file (called keys.properties) in the root of project containing [Github's API keys](https://github.com/settings/applications/new): GithubClientId="YOUR_ID" GithubClientSecret="YOUR_SECRET" ================================================ FILE: app/.gitignore ================================================ /build ================================================ FILE: app/build.gradle ================================================ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' def keysPropertiesFile = rootProject.file("keys.properties") def keysProperties = new Properties() keysProperties.load(new FileInputStream(keysPropertiesFile)) android { compileSdkVersion 28 defaultConfig { applicationId "io.github.philippeboisney.githubapp" minSdkVersion 21 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "io.github.philippeboisney.githubapp.TIRunner" vectorDrawables.useSupportLibrary = true } buildTypes { debug { buildConfigField 'String', "GithubClientId", keysProperties['GithubClientId'] buildConfigField 'String', "GithubClientSecret", keysProperties['GithubClientSecret'] } release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' buildConfigField 'String', "GithubClientId", keysProperties['GithubClientId'] buildConfigField 'String', "GithubClientSecret", keysProperties['GithubClientSecret'] } } sourceSets { androidTest.java.srcDirs += "src/test-common/java" test.java.srcDirs += "src/test-common/java" } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) // KOTLIN implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version" // ANDROID implementation "androidx.appcompat:appcompat:$app_compat_version" implementation "androidx.constraintlayout:constraintlayout:$constraint_layout_version" implementation "com.google.android.material:material:$android_material_version" // NETWORK implementation "com.squareup.retrofit2:retrofit:$retrofit_version" implementation "com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:$retrofit_coroutines_adapter_version" implementation "com.squareup.retrofit2:converter-gson:$retrofit_gson_adapter_version" implementation "com.github.bumptech.glide:glide:$glide_version" implementation "com.google.code.gson:gson:$gson_version" implementation "androidx.paging:paging-runtime:$pagination_version" implementation "com.squareup.okhttp3:logging-interceptor:$okhttp_version" kapt "com.github.bumptech.glide:compiler:$glide_version" // KOIN implementation "org.koin:koin-android:$koin_version" implementation "org.koin:koin-android-viewmodel:$koin_version" // MATERIAL DIALOG implementation "com.afollestad.material-dialogs:core:$material_dialog_version" // UNIT TESTING testImplementation 'junit:junit:4.12' testImplementation "org.koin:koin-test:$koin_version" testImplementation "com.squareup.okhttp3:mockwebserver:$okhttp_version" testImplementation "org.jetbrains.kotlin:kotlin-test:$kotlin_version" // INSTRUMENTATION TESTING androidTestImplementation 'androidx.test.ext:junit:1.1.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.1.1' androidTestImplementation 'androidx.test.espresso:espresso-intents:3.1.1' androidTestImplementation "com.squareup.okhttp3:mockwebserver:$okhttp_version" androidTestImplementation "org.koin:koin-test:$koin_version" androidTestImplementation "android.arch.core:core-testing:1.1.1" } ================================================ FILE: app/proguard-rules.pro ================================================ # Add project specific ProGuard rules here. # You can control the set of applied configuration files using the # proguardFiles setting in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} # Uncomment this to preserve the line number information for # debugging stack traces. #-keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile -keepattributes EnclosingMethod #Force obsucation on main package -keep class !io.github.philippeboisney.githubapp.** { *; } -keep class io.github.philippeboisney.githubapp.model.** { *; } #GSON CONF -keepattributes Signature -keepattributes *Annotation* -keep class sun.misc.Unsafe { *; } -keep class com.google.gson.examples.android.model.** { *; } -keep class * implements com.google.gson.TypeAdapterFactory -keep class * implements com.google.gson.JsonSerializer -keep class * implements com.google.gson.JsonDeserializer #Android Annotation -keepclassmembers class * extends android.app.Activity{ public void *(android.view.View); } #RxJava -keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* { long producerIndex; long consumerIndex; } -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef { long producerNode; long consumerNode; } #Google -keep public class com.google.** {*;} #OK HTTP -dontwarn okio.** -dontwarn okhttp3.** #Glide -keep public class * implements com.bumptech.glide.module.GlideModule -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $VALUES; public *; } #GUAVA -dontwarn com.google.common** # Retrofit -dontwarn retrofit2.** #JWT -keepattributes InnerClasses -keep class io.jsonwebtoken.** { *; } -keepnames class io.jsonwebtoken.* { *; } -keepnames interface io.jsonwebtoken.* { *; } -keep class org.bouncycastle.** { *; } -keepnames class org.bouncycastle.** { *; } -dontwarn org.bouncycastle.** #JUNIT -dontwarn org.junit.** -dontwarn android.test.** ================================================ FILE: app/src/androidTest/assets/detail_user.json ================================================ { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false, "name": "Boisney Philippe", "company": "CookMinute", "blog": "https://philippeboisney.github.io/", "location": "Lyon", "email": "phil.boisney@gmail.com", "hireable": true, "bio": "Android Developer 📱🤖", "public_repos": 32, "public_gists": 83, "followers": 103, "following": 2, "created_at": "2014-03-04T07:15:43Z", "updated_at": "2019-01-08T12:27:43Z" } ================================================ FILE: app/src/androidTest/assets/followers_user.json ================================================ [ { "login": "UgurMercan", "id": 7712975, "node_id": "MDQ6VXNlcjc3MTI5NzU=", "avatar_url": "https://avatars0.githubusercontent.com/u/7712975?v=4", "gravatar_id": "", "url": "https://api.github.com/users/UgurMercan", "html_url": "https://github.com/UgurMercan", "followers_url": "https://api.github.com/users/UgurMercan/followers", "following_url": "https://api.github.com/users/UgurMercan/following{/other_user}", "gists_url": "https://api.github.com/users/UgurMercan/gists{/gist_id}", "starred_url": "https://api.github.com/users/UgurMercan/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/UgurMercan/subscriptions", "organizations_url": "https://api.github.com/users/UgurMercan/orgs", "repos_url": "https://api.github.com/users/UgurMercan/repos", "events_url": "https://api.github.com/users/UgurMercan/events{/privacy}", "received_events_url": "https://api.github.com/users/UgurMercan/received_events", "type": "User", "site_admin": false }, { "login": "Balasnest", "id": 6050520, "node_id": "MDQ6VXNlcjYwNTA1MjA=", "avatar_url": "https://avatars3.githubusercontent.com/u/6050520?v=4", "gravatar_id": "", "url": "https://api.github.com/users/Balasnest", "html_url": "https://github.com/Balasnest", "followers_url": "https://api.github.com/users/Balasnest/followers", "following_url": "https://api.github.com/users/Balasnest/following{/other_user}", "gists_url": "https://api.github.com/users/Balasnest/gists{/gist_id}", "starred_url": "https://api.github.com/users/Balasnest/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/Balasnest/subscriptions", "organizations_url": "https://api.github.com/users/Balasnest/orgs", "repos_url": "https://api.github.com/users/Balasnest/repos", "events_url": "https://api.github.com/users/Balasnest/events{/privacy}", "received_events_url": "https://api.github.com/users/Balasnest/received_events", "type": "User", "site_admin": false } ] ================================================ FILE: app/src/androidTest/assets/repos_user.json ================================================ [ { "id": 54724122, "node_id": "MDEwOlJlcG9zaXRvcnk1NDcyNDEyMg==", "name": "AlertOnboarding", "full_name": "PhilippeBoisney/AlertOnboarding", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/AlertOnboarding", "description": "A simple and attractive AlertView to onboard your users in your amazing world.", "fork": false, "url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding", "forks_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/AlertOnboarding/deployments", "created_at": "2016-03-25T14:31:43Z", "updated_at": "2019-01-05T19:26:59Z", "pushed_at": "2018-07-14T01:54:43Z", "git_url": "git://github.com/PhilippeBoisney/AlertOnboarding.git", "ssh_url": "git@github.com:PhilippeBoisney/AlertOnboarding.git", "clone_url": "https://github.com/PhilippeBoisney/AlertOnboarding.git", "svn_url": "https://github.com/PhilippeBoisney/AlertOnboarding", "homepage": "", "size": 10618, "stargazers_count": 608, "watchers_count": 608, "language": "Swift", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 81, "mirror_url": null, "archived": false, "open_issues_count": 15, "license": { "key": "mit", "name": "MIT License", "spdx_id": "MIT", "url": "https://api.github.com/licenses/mit", "node_id": "MDc6TGljZW5zZTEz" }, "forks": 81, "open_issues": 15, "watchers": 608, "default_branch": "master" }, { "id": 61873343, "node_id": "MDEwOlJlcG9zaXRvcnk2MTg3MzM0Mw==", "name": "AlertViewLoveNotification", "full_name": "PhilippeBoisney/AlertViewLoveNotification", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/AlertViewLoveNotification", "description": "A simple and attractive AlertView to ask permission to your users for Push Notification.", "fork": false, "url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification", "forks_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/AlertViewLoveNotification/deployments", "created_at": "2016-06-24T09:26:28Z", "updated_at": "2018-11-21T23:42:53Z", "pushed_at": "2017-10-05T07:38:28Z", "git_url": "git://github.com/PhilippeBoisney/AlertViewLoveNotification.git", "ssh_url": "git@github.com:PhilippeBoisney/AlertViewLoveNotification.git", "clone_url": "https://github.com/PhilippeBoisney/AlertViewLoveNotification.git", "svn_url": "https://github.com/PhilippeBoisney/AlertViewLoveNotification", "homepage": "", "size": 2558, "stargazers_count": 35, "watchers_count": 35, "language": "Swift", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 4, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": { "key": "mit", "name": "MIT License", "spdx_id": "MIT", "url": "https://api.github.com/licenses/mit", "node_id": "MDc6TGljZW5zZTEz" }, "forks": 4, "open_issues": 0, "watchers": 35, "default_branch": "master" }, { "id": 123602697, "node_id": "MDEwOlJlcG9zaXRvcnkxMjM2MDI2OTc=", "name": "android-architecture-components", "full_name": "PhilippeBoisney/android-architecture-components", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/android-architecture-components", "description": "Samples for Android Architecture Components. ", "fork": true, "url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components", "forks_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/android-architecture-components/deployments", "created_at": "2018-03-02T16:24:57Z", "updated_at": "2018-08-05T11:45:48Z", "pushed_at": "2018-03-02T13:55:43Z", "git_url": "git://github.com/PhilippeBoisney/android-architecture-components.git", "ssh_url": "git@github.com:PhilippeBoisney/android-architecture-components.git", "clone_url": "https://github.com/PhilippeBoisney/android-architecture-components.git", "svn_url": "https://github.com/PhilippeBoisney/android-architecture-components", "homepage": "https://d.android.com/arch", "size": 829, "stargazers_count": 1, "watchers_count": 1, "language": "Java", "has_issues": false, "has_projects": true, "has_downloads": false, "has_wiki": false, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": { "key": "apache-2.0", "name": "Apache License 2.0", "spdx_id": "Apache-2.0", "url": "https://api.github.com/licenses/apache-2.0", "node_id": "MDc6TGljZW5zZTI=" }, "forks": 0, "open_issues": 0, "watchers": 1, "default_branch": "master" }, { "id": 71452109, "node_id": "MDEwOlJlcG9zaXRvcnk3MTQ1MjEwOQ==", "name": "android-design-template", "full_name": "PhilippeBoisney/android-design-template", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/android-design-template", "description": "This is a State of the Art Android Material Design template. You can use this project as a template for upcoming App projects. Just clone the project, change package name and make all necessary customisations.", "fork": true, "url": "https://api.github.com/repos/PhilippeBoisney/android-design-template", "forks_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/android-design-template/deployments", "created_at": "2016-10-20T10:27:30Z", "updated_at": "2016-10-20T10:27:32Z", "pushed_at": "2015-12-17T19:19:31Z", "git_url": "git://github.com/PhilippeBoisney/android-design-template.git", "ssh_url": "git@github.com:PhilippeBoisney/android-design-template.git", "clone_url": "https://github.com/PhilippeBoisney/android-design-template.git", "svn_url": "https://github.com/PhilippeBoisney/android-design-template", "homepage": "http://andreas-schrade.de", "size": 1707, "stargazers_count": 0, "watchers_count": 0, "language": "Java", "has_issues": false, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": { "key": "apache-2.0", "name": "Apache License 2.0", "spdx_id": "Apache-2.0", "url": "https://api.github.com/licenses/apache-2.0", "node_id": "MDc6TGljZW5zZTI=" }, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, { "id": 84169375, "node_id": "MDEwOlJlcG9zaXRvcnk4NDE2OTM3NQ==", "name": "android-inapp-billing-v3", "full_name": "PhilippeBoisney/android-inapp-billing-v3", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/android-inapp-billing-v3", "description": "A lightweight implementation of Android In-app Billing Version 3", "fork": true, "url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3", "forks_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/android-inapp-billing-v3/deployments", "created_at": "2017-03-07T07:37:28Z", "updated_at": "2017-03-07T07:37:30Z", "pushed_at": "2017-01-23T06:58:29Z", "git_url": "git://github.com/PhilippeBoisney/android-inapp-billing-v3.git", "ssh_url": "git@github.com:PhilippeBoisney/android-inapp-billing-v3.git", "clone_url": "https://github.com/PhilippeBoisney/android-inapp-billing-v3.git", "svn_url": "https://github.com/PhilippeBoisney/android-inapp-billing-v3", "homepage": "", "size": 770, "stargazers_count": 0, "watchers_count": 0, "language": "Java", "has_issues": false, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": { "key": "other", "name": "Other", "spdx_id": "NOASSERTION", "url": null, "node_id": "MDc6TGljZW5zZTA=" }, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, { "id": 124439174, "node_id": "MDEwOlJlcG9zaXRvcnkxMjQ0MzkxNzQ=", "name": "AndroidCodeCov", "full_name": "PhilippeBoisney/AndroidCodeCov", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/AndroidCodeCov", "description": null, "fork": false, "url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov", "forks_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/AndroidCodeCov/deployments", "created_at": "2018-03-08T19:38:56Z", "updated_at": "2018-03-08T19:39:31Z", "pushed_at": "2018-03-08T19:42:48Z", "git_url": "git://github.com/PhilippeBoisney/AndroidCodeCov.git", "ssh_url": "git@github.com:PhilippeBoisney/AndroidCodeCov.git", "clone_url": "https://github.com/PhilippeBoisney/AndroidCodeCov.git", "svn_url": "https://github.com/PhilippeBoisney/AndroidCodeCov", "homepage": null, "size": 1391, "stargazers_count": 0, "watchers_count": 0, "language": "Java", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": null, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, { "id": 146766152, "node_id": "MDEwOlJlcG9zaXRvcnkxNDY3NjYxNTI=", "name": "AnimatedVectorDrawable_Sketch", "full_name": "PhilippeBoisney/AnimatedVectorDrawable_Sketch", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/AnimatedVectorDrawable_Sketch", "description": null, "fork": false, "url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch", "forks_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/AnimatedVectorDrawable_Sketch/deployments", "created_at": "2018-08-30T14:58:57Z", "updated_at": "2018-12-02T08:16:51Z", "pushed_at": "2018-08-30T15:00:52Z", "git_url": "git://github.com/PhilippeBoisney/AnimatedVectorDrawable_Sketch.git", "ssh_url": "git@github.com:PhilippeBoisney/AnimatedVectorDrawable_Sketch.git", "clone_url": "https://github.com/PhilippeBoisney/AnimatedVectorDrawable_Sketch.git", "svn_url": "https://github.com/PhilippeBoisney/AnimatedVectorDrawable_Sketch", "homepage": null, "size": 10, "stargazers_count": 1, "watchers_count": 1, "language": null, "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 1, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": null, "forks": 1, "open_issues": 0, "watchers": 1, "default_branch": "master" }, { "id": 84570684, "node_id": "MDEwOlJlcG9zaXRvcnk4NDU3MDY4NA==", "name": "awesome-ios", "full_name": "PhilippeBoisney/awesome-ios", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/awesome-ios", "description": "A curated list of awesome iOS ecosystem, including Objective-C and Swift Projects ", "fork": true, "url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios", "forks_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios/deployments", "created_at": "2017-03-10T14:56:26Z", "updated_at": "2018-05-18T09:59:50Z", "pushed_at": "2017-03-10T14:59:20Z", "git_url": "git://github.com/PhilippeBoisney/awesome-ios.git", "ssh_url": "git@github.com:PhilippeBoisney/awesome-ios.git", "clone_url": "https://github.com/PhilippeBoisney/awesome-ios.git", "svn_url": "https://github.com/PhilippeBoisney/awesome-ios", "homepage": "http://awesomeios.com", "size": 3464, "stargazers_count": 1, "watchers_count": 1, "language": "Swift", "has_issues": false, "has_projects": true, "has_downloads": true, "has_wiki": false, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": { "key": "mit", "name": "MIT License", "spdx_id": "MIT", "url": "https://api.github.com/licenses/mit", "node_id": "MDc6TGljZW5zZTEz" }, "forks": 0, "open_issues": 0, "watchers": 1, "default_branch": "master" }, { "id": 84189518, "node_id": "MDEwOlJlcG9zaXRvcnk4NDE4OTUxOA==", "name": "awesome-ios-animation", "full_name": "PhilippeBoisney/awesome-ios-animation", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/awesome-ios-animation", "description": "A curated list of awesome iOS animation, including Objective-C and Swift libraries", "fork": true, "url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation", "forks_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-animation/deployments", "created_at": "2017-03-07T11:05:09Z", "updated_at": "2017-03-31T08:10:59Z", "pushed_at": "2017-03-07T11:08:07Z", "git_url": "git://github.com/PhilippeBoisney/awesome-ios-animation.git", "ssh_url": "git@github.com:PhilippeBoisney/awesome-ios-animation.git", "clone_url": "https://github.com/PhilippeBoisney/awesome-ios-animation.git", "svn_url": "https://github.com/PhilippeBoisney/awesome-ios-animation", "homepage": null, "size": 45, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": false, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": null, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, { "id": 84188992, "node_id": "MDEwOlJlcG9zaXRvcnk4NDE4ODk5Mg==", "name": "awesome-ios-ui", "full_name": "PhilippeBoisney/awesome-ios-ui", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/awesome-ios-ui", "description": "A curated list of awesome iOS UI/UX libraries", "fork": true, "url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui", "forks_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/awesome-ios-ui/deployments", "created_at": "2017-03-07T10:58:48Z", "updated_at": "2017-03-07T06:54:51Z", "pushed_at": "2017-03-07T10:59:31Z", "git_url": "git://github.com/PhilippeBoisney/awesome-ios-ui.git", "ssh_url": "git@github.com:PhilippeBoisney/awesome-ios-ui.git", "clone_url": "https://github.com/PhilippeBoisney/awesome-ios-ui.git", "svn_url": "https://github.com/PhilippeBoisney/awesome-ios-ui", "homepage": "", "size": 118119, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": false, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": null, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, { "id": 84171675, "node_id": "MDEwOlJlcG9zaXRvcnk4NDE3MTY3NQ==", "name": "EZPods", "full_name": "PhilippeBoisney/EZPods", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/EZPods", "description": "Easy CocoaPods checklist and tutorial", "fork": true, "url": "https://api.github.com/repos/PhilippeBoisney/EZPods", "forks_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/EZPods/deployments", "created_at": "2017-03-07T08:00:57Z", "updated_at": "2017-01-07T21:02:58Z", "pushed_at": "2016-11-17T11:21:44Z", "git_url": "git://github.com/PhilippeBoisney/EZPods.git", "ssh_url": "git@github.com:PhilippeBoisney/EZPods.git", "clone_url": "https://github.com/PhilippeBoisney/EZPods.git", "svn_url": "https://github.com/PhilippeBoisney/EZPods", "homepage": "", "size": 11, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": false, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": { "key": "mit", "name": "MIT License", "spdx_id": "MIT", "url": "https://api.github.com/licenses/mit", "node_id": "MDc6TGljZW5zZTEz" }, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, { "id": 105865860, "node_id": "MDEwOlJlcG9zaXRvcnkxMDU4NjU4NjA=", "name": "Floaty", "full_name": "PhilippeBoisney/Floaty", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/Floaty", "description": ":heart: Floating Action Button for iOS", "fork": true, "url": "https://api.github.com/repos/PhilippeBoisney/Floaty", "forks_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/Floaty/deployments", "created_at": "2017-10-05T08:23:48Z", "updated_at": "2017-10-05T08:23:50Z", "pushed_at": "2017-10-05T08:28:40Z", "git_url": "git://github.com/PhilippeBoisney/Floaty.git", "ssh_url": "git@github.com:PhilippeBoisney/Floaty.git", "clone_url": "https://github.com/PhilippeBoisney/Floaty.git", "svn_url": "https://github.com/PhilippeBoisney/Floaty", "homepage": "", "size": 8555, "stargazers_count": 0, "watchers_count": 0, "language": "Swift", "has_issues": false, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": { "key": "mit", "name": "MIT License", "spdx_id": "MIT", "url": "https://api.github.com/licenses/mit", "node_id": "MDc6TGljZW5zZTEz" }, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, { "id": 123577730, "node_id": "MDEwOlJlcG9zaXRvcnkxMjM1Nzc3MzA=", "name": "GithubArchitectureComponents", "full_name": "PhilippeBoisney/GithubArchitectureComponents", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/GithubArchitectureComponents", "description": "The implementation of Android \"Architecture Components\" sample explained by Google : https://developer.android.com/topic/libraries/architecture/guide.html ", "fork": false, "url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents", "forks_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/GithubArchitectureComponents/deployments", "created_at": "2018-03-02T12:42:00Z", "updated_at": "2019-01-13T03:09:15Z", "pushed_at": "2019-01-11T06:48:43Z", "git_url": "git://github.com/PhilippeBoisney/GithubArchitectureComponents.git", "ssh_url": "git@github.com:PhilippeBoisney/GithubArchitectureComponents.git", "clone_url": "https://github.com/PhilippeBoisney/GithubArchitectureComponents.git", "svn_url": "https://github.com/PhilippeBoisney/GithubArchitectureComponents", "homepage": null, "size": 1284, "stargazers_count": 211, "watchers_count": 211, "language": "Java", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 64, "mirror_url": null, "archived": false, "open_issues_count": 2, "license": null, "forks": 64, "open_issues": 2, "watchers": 211, "default_branch": "master" }, { "id": 84571135, "node_id": "MDEwOlJlcG9zaXRvcnk4NDU3MTEzNQ==", "name": "iOS-readme-template", "full_name": "PhilippeBoisney/iOS-readme-template", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/iOS-readme-template", "description": "README.md template for your iOS open-source projects. Inspired by @dbader's readme-template", "fork": true, "url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template", "forks_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/iOS-readme-template/deployments", "created_at": "2017-03-10T15:00:57Z", "updated_at": "2017-03-03T13:48:02Z", "pushed_at": "2017-02-10T12:06:17Z", "git_url": "git://github.com/PhilippeBoisney/iOS-readme-template.git", "ssh_url": "git@github.com:PhilippeBoisney/iOS-readme-template.git", "clone_url": "https://github.com/PhilippeBoisney/iOS-readme-template.git", "svn_url": "https://github.com/PhilippeBoisney/iOS-readme-template", "homepage": "", "size": 15, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": false, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": { "key": "other", "name": "Other", "spdx_id": "NOASSERTION", "url": null, "node_id": "MDc6TGljZW5zZTA=" }, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, { "id": 47493844, "node_id": "MDEwOlJlcG9zaXRvcnk0NzQ5Mzg0NA==", "name": "LinearProgressBar", "full_name": "PhilippeBoisney/LinearProgressBar", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/LinearProgressBar", "description": "A simple Linear Progress Bar for IOS (Swift 3.0), inspired by Material Design", "fork": false, "url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar", "forks_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/LinearProgressBar/deployments", "created_at": "2015-12-06T11:22:18Z", "updated_at": "2019-01-04T10:55:17Z", "pushed_at": "2018-11-28T12:42:32Z", "git_url": "git://github.com/PhilippeBoisney/LinearProgressBar.git", "ssh_url": "git@github.com:PhilippeBoisney/LinearProgressBar.git", "clone_url": "https://github.com/PhilippeBoisney/LinearProgressBar.git", "svn_url": "https://github.com/PhilippeBoisney/LinearProgressBar", "homepage": "", "size": 4459, "stargazers_count": 118, "watchers_count": 118, "language": "Swift", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 38, "mirror_url": null, "archived": false, "open_issues_count": 11, "license": { "key": "mit", "name": "MIT License", "spdx_id": "MIT", "url": "https://api.github.com/licenses/mit", "node_id": "MDc6TGljZW5zZTEz" }, "forks": 38, "open_issues": 11, "watchers": 118, "default_branch": "master" }, { "id": 105866867, "node_id": "MDEwOlJlcG9zaXRvcnkxMDU4NjY4Njc=", "name": "Material", "full_name": "PhilippeBoisney/Material", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/Material", "description": "A UI/UX framework for creating beautiful applications.", "fork": true, "url": "https://api.github.com/repos/PhilippeBoisney/Material", "forks_url": "https://api.github.com/repos/PhilippeBoisney/Material/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/Material/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/Material/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/Material/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/Material/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/Material/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/Material/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/Material/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/Material/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/Material/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/Material/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/Material/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/Material/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/Material/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/Material/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/Material/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/Material/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/Material/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/Material/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/Material/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/Material/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/Material/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/Material/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/Material/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/Material/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/Material/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/Material/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/Material/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/Material/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/Material/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/Material/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/Material/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/Material/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/Material/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/Material/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/Material/deployments", "created_at": "2017-10-05T08:35:03Z", "updated_at": "2018-01-15T14:55:05Z", "pushed_at": "2017-10-05T10:09:10Z", "git_url": "git://github.com/PhilippeBoisney/Material.git", "ssh_url": "git@github.com:PhilippeBoisney/Material.git", "clone_url": "https://github.com/PhilippeBoisney/Material.git", "svn_url": "https://github.com/PhilippeBoisney/Material", "homepage": "http://materialswift.com", "size": 33204, "stargazers_count": 1, "watchers_count": 1, "language": "Swift", "has_issues": false, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": { "key": "bsd-3-clause", "name": "BSD 3-Clause \"New\" or \"Revised\" License", "spdx_id": "BSD-3-Clause", "url": "https://api.github.com/licenses/bsd-3-clause", "node_id": "MDc6TGljZW5zZTU=" }, "forks": 0, "open_issues": 0, "watchers": 1, "default_branch": "master" }, { "id": 84091366, "node_id": "MDEwOlJlcG9zaXRvcnk4NDA5MTM2Ng==", "name": "ModernSearchBar", "full_name": "PhilippeBoisney/ModernSearchBar", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/ModernSearchBar", "description": "The famous iOS search bar with auto completion feature implemented.", "fork": false, "url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar", "forks_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/ModernSearchBar/deployments", "created_at": "2017-03-06T15:48:06Z", "updated_at": "2019-01-10T12:28:19Z", "pushed_at": "2019-01-10T14:46:05Z", "git_url": "git://github.com/PhilippeBoisney/ModernSearchBar.git", "ssh_url": "git@github.com:PhilippeBoisney/ModernSearchBar.git", "clone_url": "https://github.com/PhilippeBoisney/ModernSearchBar.git", "svn_url": "https://github.com/PhilippeBoisney/ModernSearchBar", "homepage": "", "size": 42218, "stargazers_count": 120, "watchers_count": 120, "language": "Swift", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 22, "mirror_url": null, "archived": false, "open_issues_count": 11, "license": { "key": "other", "name": "Other", "spdx_id": "NOASSERTION", "url": null, "node_id": "MDc6TGljZW5zZTA=" }, "forks": 22, "open_issues": 11, "watchers": 120, "default_branch": "master" }, { "id": 162693566, "node_id": "MDEwOlJlcG9zaXRvcnkxNjI2OTM1NjY=", "name": "NoBullshit", "full_name": "PhilippeBoisney/NoBullshit", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/NoBullshit", "description": "A sample project entirely written in Kotlin. Backend/Frontend with Ktor and Android app.", "fork": false, "url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit", "forks_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/NoBullshit/deployments", "created_at": "2018-12-21T09:21:05Z", "updated_at": "2019-01-14T09:54:35Z", "pushed_at": "2019-01-04T10:19:20Z", "git_url": "git://github.com/PhilippeBoisney/NoBullshit.git", "ssh_url": "git@github.com:PhilippeBoisney/NoBullshit.git", "clone_url": "https://github.com/PhilippeBoisney/NoBullshit.git", "svn_url": "https://github.com/PhilippeBoisney/NoBullshit", "homepage": "https://www.nobullshit.io", "size": 180, "stargazers_count": 120, "watchers_count": 120, "language": "Kotlin", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 7, "mirror_url": null, "archived": false, "open_issues_count": 1, "license": null, "forks": 7, "open_issues": 1, "watchers": 120, "default_branch": "master" }, { "id": 110101234, "node_id": "MDEwOlJlcG9zaXRvcnkxMTAxMDEyMzQ=", "name": "OpenClassrooms---Parcours-Android", "full_name": "PhilippeBoisney/OpenClassrooms---Parcours-Android", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/OpenClassrooms---Parcours-Android", "description": "Ensemble de documents & mini-projets réalisés durant la formation diplômante d'un an OpenClassrooms (DÉVELOPPEUR·SE D'APPLICATION - ANDROID)", "fork": false, "url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android", "forks_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/OpenClassrooms---Parcours-Android/deployments", "created_at": "2017-11-09T10:29:53Z", "updated_at": "2019-01-04T12:39:23Z", "pushed_at": "2018-07-31T14:08:36Z", "git_url": "git://github.com/PhilippeBoisney/OpenClassrooms---Parcours-Android.git", "ssh_url": "git@github.com:PhilippeBoisney/OpenClassrooms---Parcours-Android.git", "clone_url": "https://github.com/PhilippeBoisney/OpenClassrooms---Parcours-Android.git", "svn_url": "https://github.com/PhilippeBoisney/OpenClassrooms---Parcours-Android", "homepage": null, "size": 10075, "stargazers_count": 15, "watchers_count": 15, "language": "Java", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 116, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": null, "forks": 116, "open_issues": 0, "watchers": 15, "default_branch": "master" }, { "id": 105868237, "node_id": "MDEwOlJlcG9zaXRvcnkxMDU4NjgyMzc=", "name": "PagingMenuController", "full_name": "PhilippeBoisney/PagingMenuController", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/PagingMenuController", "description": "Paging view controller with customizable menu in Swift", "fork": true, "url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController", "forks_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/PagingMenuController/deployments", "created_at": "2017-10-05T08:50:44Z", "updated_at": "2018-03-07T10:07:25Z", "pushed_at": "2017-10-05T10:09:19Z", "git_url": "git://github.com/PhilippeBoisney/PagingMenuController.git", "ssh_url": "git@github.com:PhilippeBoisney/PagingMenuController.git", "clone_url": "https://github.com/PhilippeBoisney/PagingMenuController.git", "svn_url": "https://github.com/PhilippeBoisney/PagingMenuController", "homepage": "", "size": 745, "stargazers_count": 1, "watchers_count": 1, "language": "Swift", "has_issues": false, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 1, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": { "key": "mit", "name": "MIT License", "spdx_id": "MIT", "url": "https://api.github.com/licenses/mit", "node_id": "MDc6TGljZW5zZTEz" }, "forks": 1, "open_issues": 0, "watchers": 1, "default_branch": "master" }, { "id": 144451027, "node_id": "MDEwOlJlcG9zaXRvcnkxNDQ0NTEwMjc=", "name": "RetroKotlin", "full_name": "PhilippeBoisney/RetroKotlin", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/RetroKotlin", "description": "Simple Android app to show how unit testing with MockWebServer and Architecture Components (ViewModel + LiveData)", "fork": false, "url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin", "forks_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/RetroKotlin/deployments", "created_at": "2018-08-12T08:40:09Z", "updated_at": "2019-01-09T18:50:31Z", "pushed_at": "2018-08-28T20:25:43Z", "git_url": "git://github.com/PhilippeBoisney/RetroKotlin.git", "ssh_url": "git@github.com:PhilippeBoisney/RetroKotlin.git", "clone_url": "https://github.com/PhilippeBoisney/RetroKotlin.git", "svn_url": "https://github.com/PhilippeBoisney/RetroKotlin", "homepage": "", "size": 267, "stargazers_count": 22, "watchers_count": 22, "language": "Kotlin", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 5, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": null, "forks": 5, "open_issues": 0, "watchers": 22, "default_branch": "master" }, { "id": 114471552, "node_id": "MDEwOlJlcG9zaXRvcnkxMTQ0NzE1NTI=", "name": "RxJava2WithLoader", "full_name": "PhilippeBoisney/RxJava2WithLoader", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/RxJava2WithLoader", "description": "RxJava2 : Better Handling Rotation with Loaders & ConnectableObservable", "fork": false, "url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader", "forks_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/RxJava2WithLoader/deployments", "created_at": "2017-12-16T15:43:46Z", "updated_at": "2019-01-13T10:14:09Z", "pushed_at": "2017-12-16T16:17:13Z", "git_url": "git://github.com/PhilippeBoisney/RxJava2WithLoader.git", "ssh_url": "git@github.com:PhilippeBoisney/RxJava2WithLoader.git", "clone_url": "https://github.com/PhilippeBoisney/RxJava2WithLoader.git", "svn_url": "https://github.com/PhilippeBoisney/RxJava2WithLoader", "homepage": null, "size": 2279, "stargazers_count": 11, "watchers_count": 11, "language": "Java", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 2, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": null, "forks": 2, "open_issues": 0, "watchers": 11, "default_branch": "master" }, { "id": 85094051, "node_id": "MDEwOlJlcG9zaXRvcnk4NTA5NDA1MQ==", "name": "SAConfettiView", "full_name": "PhilippeBoisney/SAConfettiView", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/SAConfettiView", "description": "Confetti! Who doesn't like confetti?", "fork": true, "url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView", "forks_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/SAConfettiView/deployments", "created_at": "2017-03-15T16:09:48Z", "updated_at": "2017-03-15T16:09:50Z", "pushed_at": "2017-02-06T15:28:12Z", "git_url": "git://github.com/PhilippeBoisney/SAConfettiView.git", "ssh_url": "git@github.com:PhilippeBoisney/SAConfettiView.git", "clone_url": "https://github.com/PhilippeBoisney/SAConfettiView.git", "svn_url": "https://github.com/PhilippeBoisney/SAConfettiView", "homepage": "", "size": 75, "stargazers_count": 0, "watchers_count": 0, "language": "Shell", "has_issues": false, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": { "key": "mit", "name": "MIT License", "spdx_id": "MIT", "url": "https://api.github.com/licenses/mit", "node_id": "MDc6TGljZW5zZTEz" }, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, { "id": 126037581, "node_id": "MDEwOlJlcG9zaXRvcnkxMjYwMzc1ODE=", "name": "SaveMyTrip_OC", "full_name": "PhilippeBoisney/SaveMyTrip_OC", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/SaveMyTrip_OC", "description": null, "fork": false, "url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC", "forks_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_OC/deployments", "created_at": "2018-03-20T15:12:48Z", "updated_at": "2018-03-28T07:59:15Z", "pushed_at": "2018-03-28T07:59:14Z", "git_url": "git://github.com/PhilippeBoisney/SaveMyTrip_OC.git", "ssh_url": "git@github.com:PhilippeBoisney/SaveMyTrip_OC.git", "clone_url": "https://github.com/PhilippeBoisney/SaveMyTrip_OC.git", "svn_url": "https://github.com/PhilippeBoisney/SaveMyTrip_OC", "homepage": null, "size": 2975, "stargazers_count": 0, "watchers_count": 0, "language": "Java", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": null, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, { "id": 123422596, "node_id": "MDEwOlJlcG9zaXRvcnkxMjM0MjI1OTY=", "name": "SaveMyTrip_Test", "full_name": "PhilippeBoisney/SaveMyTrip_Test", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/SaveMyTrip_Test", "description": null, "fork": false, "url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test", "forks_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/SaveMyTrip_Test/deployments", "created_at": "2018-03-01T10:54:40Z", "updated_at": "2018-03-01T10:59:10Z", "pushed_at": "2018-03-08T19:05:25Z", "git_url": "git://github.com/PhilippeBoisney/SaveMyTrip_Test.git", "ssh_url": "git@github.com:PhilippeBoisney/SaveMyTrip_Test.git", "clone_url": "https://github.com/PhilippeBoisney/SaveMyTrip_Test.git", "svn_url": "https://github.com/PhilippeBoisney/SaveMyTrip_Test", "homepage": null, "size": 7635, "stargazers_count": 0, "watchers_count": 0, "language": "Java", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": null, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, { "id": 82560397, "node_id": "MDEwOlJlcG9zaXRvcnk4MjU2MDM5Nw==", "name": "SearchView", "full_name": "PhilippeBoisney/SearchView", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/SearchView", "description": "Persistent SearchView Library in Material Design.", "fork": true, "url": "https://api.github.com/repos/PhilippeBoisney/SearchView", "forks_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/SearchView/deployments", "created_at": "2017-02-20T13:23:28Z", "updated_at": "2017-02-20T13:23:29Z", "pushed_at": "2017-02-20T07:51:53Z", "git_url": "git://github.com/PhilippeBoisney/SearchView.git", "ssh_url": "git@github.com:PhilippeBoisney/SearchView.git", "clone_url": "https://github.com/PhilippeBoisney/SearchView.git", "svn_url": "https://github.com/PhilippeBoisney/SearchView", "homepage": "", "size": 4061, "stargazers_count": 0, "watchers_count": 0, "language": "Java", "has_issues": false, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": { "key": "apache-2.0", "name": "Apache License 2.0", "spdx_id": "Apache-2.0", "url": "https://api.github.com/licenses/apache-2.0", "node_id": "MDc6TGljZW5zZTI=" }, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, { "id": 105877135, "node_id": "MDEwOlJlcG9zaXRvcnkxMDU4NzcxMzU=", "name": "Sharaku", "full_name": "PhilippeBoisney/Sharaku", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/Sharaku", "description": "Image filtering UI library like Instagram.", "fork": true, "url": "https://api.github.com/repos/PhilippeBoisney/Sharaku", "forks_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/Sharaku/deployments", "created_at": "2017-10-05T10:30:36Z", "updated_at": "2017-10-05T10:30:38Z", "pushed_at": "2017-10-05T10:32:06Z", "git_url": "git://github.com/PhilippeBoisney/Sharaku.git", "ssh_url": "git@github.com:PhilippeBoisney/Sharaku.git", "clone_url": "https://github.com/PhilippeBoisney/Sharaku.git", "svn_url": "https://github.com/PhilippeBoisney/Sharaku", "homepage": "", "size": 11414, "stargazers_count": 0, "watchers_count": 0, "language": "Swift", "has_issues": false, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": { "key": "mit", "name": "MIT License", "spdx_id": "MIT", "url": "https://api.github.com/licenses/mit", "node_id": "MDc6TGljZW5zZTEz" }, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, { "id": 72827040, "node_id": "MDEwOlJlcG9zaXRvcnk3MjgyNzA0MA==", "name": "Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3", "full_name": "PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3", "description": "Simple Ajax CRUD application for Google App Engine. Use Spring 4, Thymeleaf 3, AdminLTE open-source template and Blueimp for upload images via ajax.", "fork": true, "url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3", "forks_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3/deployments", "created_at": "2016-11-04T08:08:25Z", "updated_at": "2016-11-04T08:08:27Z", "pushed_at": "2016-08-14T07:24:07Z", "git_url": "git://github.com/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3.git", "ssh_url": "git@github.com:PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3.git", "clone_url": "https://github.com/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3.git", "svn_url": "https://github.com/PhilippeBoisney/Simple-Ajax-CRUD-GoogleAppEngine-Spring4-Thymleaf3", "homepage": "", "size": 1046, "stargazers_count": 0, "watchers_count": 0, "language": "CSS", "has_issues": false, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": { "key": "mit", "name": "MIT License", "spdx_id": "MIT", "url": "https://api.github.com/licenses/mit", "node_id": "MDc6TGljZW5zZTEz" }, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, { "id": 63934164, "node_id": "MDEwOlJlcG9zaXRvcnk2MzkzNDE2NA==", "name": "SimpleDroidRx", "full_name": "PhilippeBoisney/SimpleDroidRx", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/SimpleDroidRx", "description": "An application that helps you learn and better understand ReactiveX", "fork": false, "url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx", "forks_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/SimpleDroidRx/deployments", "created_at": "2016-07-22T07:43:42Z", "updated_at": "2018-12-27T08:42:08Z", "pushed_at": "2017-02-17T13:29:49Z", "git_url": "git://github.com/PhilippeBoisney/SimpleDroidRx.git", "ssh_url": "git@github.com:PhilippeBoisney/SimpleDroidRx.git", "clone_url": "https://github.com/PhilippeBoisney/SimpleDroidRx.git", "svn_url": "https://github.com/PhilippeBoisney/SimpleDroidRx", "homepage": null, "size": 2008, "stargazers_count": 59, "watchers_count": 59, "language": "Java", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 6, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": null, "forks": 6, "open_issues": 0, "watchers": 59, "default_branch": "master" }, { "id": 41054121, "node_id": "MDEwOlJlcG9zaXRvcnk0MTA1NDEyMQ==", "name": "SimpleFloatingActionButton", "full_name": "PhilippeBoisney/SimpleFloatingActionButton", "private": false, "owner": { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false }, "html_url": "https://github.com/PhilippeBoisney/SimpleFloatingActionButton", "description": "Material design Circular Floating Button Menu (inspired by Google Material Design) for iOS written in Swift 2.0", "fork": false, "url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton", "forks_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/forks", "keys_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/teams", "hooks_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/hooks", "issue_events_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/issues/events{/number}", "events_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/events", "assignees_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/assignees{/user}", "branches_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/branches{/branch}", "tags_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/tags", "blobs_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/git/refs{/sha}", "trees_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/statuses/{sha}", "languages_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/languages", "stargazers_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/stargazers", "contributors_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/contributors", "subscribers_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/subscribers", "subscription_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/subscription", "commits_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/commits{/sha}", "git_commits_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/git/commits{/sha}", "comments_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/comments{/number}", "issue_comment_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/issues/comments{/number}", "contents_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/contents/{+path}", "compare_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/merges", "archive_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/downloads", "issues_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/issues{/number}", "pulls_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/pulls{/number}", "milestones_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/milestones{/number}", "notifications_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/labels{/name}", "releases_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/releases{/id}", "deployments_url": "https://api.github.com/repos/PhilippeBoisney/SimpleFloatingActionButton/deployments", "created_at": "2015-08-19T19:03:05Z", "updated_at": "2018-11-05T09:54:57Z", "pushed_at": "2016-01-13T11:20:29Z", "git_url": "git://github.com/PhilippeBoisney/SimpleFloatingActionButton.git", "ssh_url": "git@github.com:PhilippeBoisney/SimpleFloatingActionButton.git", "clone_url": "https://github.com/PhilippeBoisney/SimpleFloatingActionButton.git", "svn_url": "https://github.com/PhilippeBoisney/SimpleFloatingActionButton", "homepage": null, "size": 10410, "stargazers_count": 22, "watchers_count": 22, "language": "Swift", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 4, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": { "key": "mit", "name": "MIT License", "spdx_id": "MIT", "url": "https://api.github.com/licenses/mit", "node_id": "MDc6TGljZW5zZTEz" }, "forks": 4, "open_issues": 0, "watchers": 22, "default_branch": "master" } ] ================================================ FILE: app/src/androidTest/assets/search_users.json ================================================ { "total_count": 1, "incomplete_results": false, "items": [ { "login": "PhilippeBoisney", "id": 6847959, "node_id": "MDQ6VXNlcjY4NDc5NTk=", "avatar_url": "https://avatars0.githubusercontent.com/u/6847959?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PhilippeBoisney", "html_url": "https://github.com/PhilippeBoisney", "followers_url": "https://api.github.com/users/PhilippeBoisney/followers", "following_url": "https://api.github.com/users/PhilippeBoisney/following{/other_user}", "gists_url": "https://api.github.com/users/PhilippeBoisney/gists{/gist_id}", "starred_url": "https://api.github.com/users/PhilippeBoisney/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PhilippeBoisney/subscriptions", "organizations_url": "https://api.github.com/users/PhilippeBoisney/orgs", "repos_url": "https://api.github.com/users/PhilippeBoisney/repos", "events_url": "https://api.github.com/users/PhilippeBoisney/events{/privacy}", "received_events_url": "https://api.github.com/users/PhilippeBoisney/received_events", "type": "User", "site_admin": false, "score": 86.58868 } ] } ================================================ FILE: app/src/androidTest/assets/search_users_empty.json ================================================ { "total_count": 1, "incomplete_results": false, "items": [ ] } ================================================ FILE: app/src/androidTest/java/io/github/philippeboisney/githubapp/TIRunner.kt ================================================ package io.github.philippeboisney.githubapp import android.app.Application import android.content.Context import androidx.test.runner.AndroidJUnitRunner import io.github.philippeboisney.githubapp.base.TIBaseApplication /** * Custom runner to disable dependency injection. */ class TIRunner : AndroidJUnitRunner() { override fun newApplication(cl: ClassLoader, className: String, context: Context): Application { return super.newApplication(cl, TIBaseApplication::class.java.name, context) } } ================================================ FILE: app/src/androidTest/java/io/github/philippeboisney/githubapp/base/BaseIT.kt ================================================ package io.github.philippeboisney.githubapp.base import androidx.test.platform.app.InstrumentationRegistry import okhttp3.mockwebserver.MockResponse import java.io.InputStream abstract class BaseIT: BaseTest() { fun mockHttpResponse(fileName: String, responseCode: Int) { val json = getJson(fileName) return mockServer.enqueue( MockResponse() .setResponseCode(responseCode) .setBody(json)) } private fun getJson(path : String) : String { val inputStream: InputStream = InstrumentationRegistry.getInstrumentation().context.resources.assets.open(path) return inputStream.bufferedReader().use{it.readText()} } } ================================================ FILE: app/src/androidTest/java/io/github/philippeboisney/githubapp/base/TIBaseApplication.kt ================================================ package io.github.philippeboisney.githubapp.base import android.app.Application import io.github.philippeboisney.githubapp.GithubApplication import org.koin.dsl.module.Module /** * We use a separate [Application] for tests to prevent initializing release modules. * On the contrary, we will provide inside our tests custom [Module] directly. */ class TIBaseApplication : GithubApplication() { override fun provideComponent() = listOf() } ================================================ FILE: app/src/androidTest/java/io/github/philippeboisney/githubapp/di/storage_module_test.kt ================================================ package io.github.philippeboisney.githubapp.di import androidx.test.espresso.internal.inject.InstrumentationContext import androidx.test.platform.app.InstrumentationRegistry import io.github.philippeboisney.githubapp.repository.UserRepository import io.github.philippeboisney.githubapp.storage.SharedPrefsManager import org.koin.android.ext.koin.androidApplication import org.koin.android.ext.koin.androidContext import org.koin.dsl.module.module val storageModuleTest = module { single { SharedPrefsManager(InstrumentationRegistry.getInstrumentation().context) } } ================================================ FILE: app/src/androidTest/java/io/github/philippeboisney/githubapp/ui/SearchUserFragmentTest.kt ================================================ package io.github.philippeboisney.githubapp.ui import androidx.test.espresso.Espresso.onView import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.action.ViewActions.typeText import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.matcher.ViewMatchers.* import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.LargeTest import androidx.test.rule.ActivityTestRule import io.github.philippeboisney.githubapp.R import io.github.philippeboisney.githubapp.base.BaseIT import io.github.philippeboisney.githubapp.di.configureAppComponent import io.github.philippeboisney.githubapp.di.storageModule import io.github.philippeboisney.githubapp.ui.user.search.SearchUserFragment import org.junit.runner.RunWith import org.koin.standalone.StandAloneContext.loadKoinModules import org.koin.dsl.module.Module import java.net.HttpURLConnection import android.widget.AutoCompleteTextView import androidx.arch.core.executor.testing.CountingTaskExecutorRule import androidx.recyclerview.widget.RecyclerView import io.github.philippeboisney.githubapp.di.storageModuleTest import io.github.philippeboisney.githubapp.utils.hasItemCount import io.github.philippeboisney.githubapp.utils.waitForAdapterChangeWithPagination import org.hamcrest.CoreMatchers.* import org.junit.* @RunWith(AndroidJUnit4::class) @LargeTest class SearchUserFragmentTest: BaseIT() { @Rule @JvmField val activityRule = ActivityTestRule(MainActivity::class.java, true, false) @get:Rule var executorRule = CountingTaskExecutorRule() // OVERRIDE --- override fun isMockServerEnabled() = true @Before override fun setUp() { super.setUp() configureCustomDependencies() activityRule.launchActivity(null) } // TESTS --- @Test fun whenFragmentIsEmpty() { onView(withId(R.id.fragment_search_user_empty_list_image)).check(matches(isDisplayed())) onView(withId(R.id.fragment_search_user_empty_list_title)).check(matches(isDisplayed())) onView(withId(R.id.fragment_search_user_empty_list_title)).check(matches(withText(containsString(getString(R.string.no_result_found))))) onView(withId(R.id.fragment_search_user_empty_list_button)).check(matches(not(isDisplayed()))) } @Test fun whenUserSearchUsersAndSucceed() { mockHttpResponse("search_users.json", HttpURLConnection.HTTP_OK) mockHttpResponse("detail_user.json", HttpURLConnection.HTTP_OK) mockHttpResponse("repos_user.json", HttpURLConnection.HTTP_OK) mockHttpResponse("followers_user.json", HttpURLConnection.HTTP_OK) mockHttpResponse("search_users_empty.json", HttpURLConnection.HTTP_OK) onView(withId(R.id.action_search)).perform(click()) onView(isAssignableFrom(AutoCompleteTextView::class.java)).perform(typeText("t")) waitForAdapterChangeWithPagination(getRecyclerView(), executorRule, 4) onView(withId(R.id.fragment_search_user_rv)).check(matches((hasItemCount(1)))) onView(allOf(withId(R.id.item_search_user_title), withText("PhilippeBoisney"))).check(matches(isDisplayed())) onView(allOf(withId(R.id.item_search_user_repositories), withText("1346 - 32 ${getString(R.string.repositories)}"))).check(matches(isDisplayed())) onView(allOf(withId(R.id.item_search_user_follower_name), withText("UgurMercan"))).check(matches(isDisplayed())) onView(allOf(withId(R.id.item_search_user_follower_count), withText("+102"))).check(matches(isDisplayed())) } @Test fun whenUserSearchUsersAndFailed() { mockHttpResponse("search_users.json", HttpURLConnection.HTTP_BAD_REQUEST) onView(withId(R.id.action_search)).perform(click()) onView(isAssignableFrom(AutoCompleteTextView::class.java)).perform(typeText("t")) Thread.sleep(1000) onView(withId(R.id.fragment_search_user_empty_list_image)).check(matches(isDisplayed())) onView(withId(R.id.fragment_search_user_empty_list_title)).check(matches(isDisplayed())) onView(withId(R.id.fragment_search_user_empty_list_title)).check(matches(withText(containsString(getString(R.string.technical_error))))) onView(withId(R.id.fragment_search_user_empty_list_button)).check(matches(isDisplayed())) } // UTILS --- /** * Configure custom [Module] for each [Test] */ private fun configureCustomDependencies() { loadKoinModules(configureAppComponent(getMockUrl()).toMutableList().apply { add(storageModuleTest) }) } /** * Convenient access to String resources */ private fun getString(id: Int) = activityRule.activity.getString(id) /** * Convenient access to [SearchUserFragment]'s RecyclerView */ private fun getRecyclerView() = activityRule.activity.findViewById(R.id.fragment_search_user_rv) } ================================================ FILE: app/src/androidTest/java/io/github/philippeboisney/githubapp/utils/RecyclerViewUtils.kt ================================================ package io.github.philippeboisney.githubapp.utils import android.util.Log import androidx.arch.core.executor.testing.CountingTaskExecutorRule import androidx.recyclerview.widget.RecyclerView import androidx.test.espresso.matcher.ViewMatchers import androidx.test.platform.app.InstrumentationRegistry import org.hamcrest.CoreMatchers import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit /** * Waiting adapter showing items inside its RecyclerView * before continue the test. */ fun waitForAdapterChangeWithPagination(recyclerView: RecyclerView, testRule: CountingTaskExecutorRule, count: Int) { val latch = CountDownLatch(count) InstrumentationRegistry.getInstrumentation().runOnMainSync { recyclerView.adapter?.registerAdapterDataObserver( object : RecyclerView.AdapterDataObserver() { override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) { latch.countDown() } override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { latch.countDown() } }) } testRule.drainTasks(1, TimeUnit.SECONDS) if (recyclerView.adapter?.itemCount ?: 0 > 0) { return //already loaded } ViewMatchers.assertThat(latch.await(10, TimeUnit.SECONDS), CoreMatchers.`is`(true)) } ================================================ FILE: app/src/androidTest/java/io/github/philippeboisney/githubapp/utils/ViewMatcherUtils.kt ================================================ package io.github.philippeboisney.githubapp.utils import android.util.Log import android.view.View import androidx.recyclerview.widget.RecyclerView import androidx.test.espresso.matcher.BoundedMatcher import org.hamcrest.Description import org.hamcrest.Matcher /** * [Matcher] helper for [RecyclerView] * Count the number of its items */ fun hasItemCount(itemCount: Int): Matcher { return object : BoundedMatcher( RecyclerView::class.java) { override fun describeTo(description: Description) { description.appendText("has $itemCount items") } override fun matchesSafely(view: RecyclerView): Boolean { return view.adapter?.itemCount == itemCount } } } ================================================ FILE: app/src/androidTest/java/io/github/philippeboisney/githubapp/views/SingleFragmentActivity.kt ================================================ package io.github.philippeboisney.githubapp.views import android.os.Bundle import android.view.ViewGroup import android.widget.FrameLayout import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import io.github.philippeboisney.githubapp.R /** * Used for testing fragments inside a fake activity. */ class SingleFragmentActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val content = FrameLayout(this).apply { layoutParams = FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) id = R.id.container } setContentView(content) } fun setFragment(fragment: Fragment) { supportFragmentManager.beginTransaction() .add(R.id.container, fragment, "TEST") .commit() } } ================================================ FILE: app/src/main/AndroidManifest.xml ================================================ ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/GithubApplication.kt ================================================ package io.github.philippeboisney.githubapp import android.app.Application import io.github.philippeboisney.githubapp.di.appComponent import org.koin.android.ext.android.startKoin open class GithubApplication: Application() { override fun onCreate() { super.onCreate() configureDi() } // CONFIGURATION --- open fun configureDi() = startKoin(this, provideComponent()) // PUBLIC API --- open fun provideComponent() = appComponent } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/api/NetworkState.kt ================================================ package io.github.philippeboisney.githubapp.api /** * Used to notify a client * of the actual state of a query */ enum class NetworkState { RUNNING, SUCCESS, FAILED } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/api/UserService.kt ================================================ package io.github.philippeboisney.githubapp.api import io.github.philippeboisney.githubapp.BuildConfig import io.github.philippeboisney.githubapp.model.Repository import io.github.philippeboisney.githubapp.model.Result import io.github.philippeboisney.githubapp.model.User import kotlinx.coroutines.Deferred import retrofit2.http.GET import retrofit2.http.Path import retrofit2.http.Query interface UserService { @GET("search/users") fun search(@Query("q") query: String, @Query("page") page: Int, @Query("per_page") perPage: Int, @Query("sort") sort: String, @Query("client_id") clientId: String = BuildConfig.GithubClientId, @Query("client_secret") clientSecret: String = BuildConfig.GithubClientSecret): Deferred @GET("users/{username}") fun getDetail(@Path("username") username: String, @Query("client_id") clientId: String = BuildConfig.GithubClientId, @Query("client_secret") clientSecret: String = BuildConfig.GithubClientSecret): Deferred @GET("users/{username}/repos") fun getRepos(@Path("username") username: String, @Query("client_id") clientId: String = BuildConfig.GithubClientId, @Query("client_secret") clientSecret: String = BuildConfig.GithubClientSecret): Deferred> @GET("users/{username}/followers") fun getFollowers(@Path("username") username: String, @Query("per_page") perPage: Int = 2, @Query("client_id") clientId: String = BuildConfig.GithubClientId, @Query("client_secret") clientSecret: String = BuildConfig.GithubClientSecret): Deferred> } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/base/BaseFragment.kt ================================================ package io.github.philippeboisney.githubapp.base import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment abstract class BaseFragment: Fragment() { // OVERRIDE --- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(getLayoutId(), container, false) } // ABSTRACT --- abstract fun getLayoutId(): Int } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/base/BaseViewModel.kt ================================================ package io.github.philippeboisney.githubapp.base import androidx.lifecycle.ViewModel import kotlinx.coroutines.* abstract class BaseViewModel: ViewModel() { /** * This is a scope for all coroutines launched by [BaseViewModel] * that will be dispatched in Main Thread */ protected val uiScope = CoroutineScope(Dispatchers.Main) /** * This is a scope for all coroutines launched by [BaseViewModel] * that will be dispatched in a Pool of Thread */ protected val ioScope = CoroutineScope(Dispatchers.Default) /** * Cancel all coroutines when the ViewModel is cleared */ override fun onCleared() { super.onCleared() uiScope.coroutineContext.cancel() ioScope.coroutineContext.cancel() } } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/di/app_component.kt ================================================ package io.github.philippeboisney.githubapp.di val appComponent = listOf(networkModule, viewModelModule, repositoryModule, storageModule) ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/di/network_module.kt ================================================ package io.github.philippeboisney.githubapp.di import android.util.Log import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory import io.github.philippeboisney.githubapp.api.UserService import io.github.philippeboisney.githubapp.repository.UserRepository import io.github.philippeboisney.githubapp.ui.user.search.SearchUserViewModel import okhttp3.Interceptor import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import org.koin.android.viewmodel.ext.koin.viewModel import org.koin.dsl.module.module import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory val networkModule = module { factory { HttpLoggingInterceptor(HttpLoggingInterceptor.Logger { Log.d("API", it) }) .setLevel(HttpLoggingInterceptor.Level.HEADERS) } factory { OkHttpClient.Builder().addInterceptor(get()).build() } single { Retrofit.Builder() .client(get()) .baseUrl("https://api.github.com/") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(CoroutineCallAdapterFactory()) .build() } factory{ get().create(UserService::class.java) } } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/di/repository_module.kt ================================================ package io.github.philippeboisney.githubapp.di import io.github.philippeboisney.githubapp.repository.UserRepository import org.koin.dsl.module.module val repositoryModule = module { factory { UserRepository(get()) } } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/di/storage_module.kt ================================================ package io.github.philippeboisney.githubapp.di import io.github.philippeboisney.githubapp.repository.UserRepository import io.github.philippeboisney.githubapp.storage.SharedPrefsManager import org.koin.android.ext.koin.androidContext import org.koin.dsl.module.module val storageModule = module { single { SharedPrefsManager(androidContext()) } } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/di/view_model_module.kt ================================================ package io.github.philippeboisney.githubapp.di import io.github.philippeboisney.githubapp.ui.user.search.SearchUserViewModel import org.koin.android.viewmodel.ext.koin.viewModel import org.koin.dsl.module.module val viewModelModule = module { viewModel { SearchUserViewModel(get(), get()) } } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/extensions/StorageExtensions.kt ================================================ package io.github.philippeboisney.githubapp.extensions import android.content.SharedPreferences inline fun SharedPreferences.edit(operation: (SharedPreferences.Editor) -> Unit) { val editor = this.edit() operation(editor) editor.apply() } fun SharedPreferences.setValue(key: String, value: Any?) { when (value) { is String? -> edit({ it.putString(key, value) }) is Int -> edit({ it.putInt(key, value) }) is Boolean -> edit({ it.putBoolean(key, value) }) is Float -> edit({ it.putFloat(key, value) }) is Long -> edit({ it.putLong(key, value) }) else -> throw UnsupportedOperationException("Not yet implemented") } } inline fun SharedPreferences.get(key: String, defaultValue: T? = null): T? { return when (T::class) { String::class -> getString(key, defaultValue as? String) as T? Int::class -> getInt(key, defaultValue as? Int ?: -1) as T? Boolean::class -> getBoolean(key, defaultValue as? Boolean ?: false) as T? Float::class -> getFloat(key, defaultValue as? Float ?: -1f) as T? Long::class -> getLong(key, defaultValue as? Long ?: -1) as T? else -> throw UnsupportedOperationException("Not yet implemented") } } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/extensions/ViewExtensions.kt ================================================ package io.github.philippeboisney.githubapp.extensions import androidx.appcompat.widget.SearchView fun SearchView.onQueryTextChange(action: (String) -> Unit) { this.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String): Boolean { return true } override fun onQueryTextChange(newText: String): Boolean { action.invoke(newText) return true } }) } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/model/Filters.kt ================================================ package io.github.philippeboisney.githubapp.model import io.github.philippeboisney.githubapp.api.UserService object Filters { /** * Filters used by [UserService] * to sort "search" queries */ enum class ResultSearchUsers(val value: String) { BY_REPOS("repositories"), BY_FOLLOWERS("followers"), BY_SCORE("score") } } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/model/Repository.kt ================================================ package io.github.philippeboisney.githubapp.model import com.google.gson.annotations.SerializedName data class Repository(@SerializedName("stargazers_count") val numberStars: Int) ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/model/Result.kt ================================================ package io.github.philippeboisney.githubapp.model import com.google.gson.annotations.SerializedName data class Result(@SerializedName("total_count") val totalCount: Int, @SerializedName("items") val items: List) ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/model/User.kt ================================================ package io.github.philippeboisney.githubapp.model import com.google.gson.annotations.SerializedName data class User(@SerializedName("login") val login: String, @SerializedName("avatar_url") val avatarUrl: String, @SerializedName("followers") val totalFollowers: Int, @SerializedName("public_repos") var totalRepos: Int, @Transient var totalStars: Int, @Transient var followers: List) ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/pagination/datasource/UserDataSource.kt ================================================ package io.github.philippeboisney.githubapp.pagination.datasource import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.paging.PageKeyedDataSource import io.github.philippeboisney.githubapp.api.NetworkState import io.github.philippeboisney.githubapp.model.User import io.github.philippeboisney.githubapp.repository.UserRepository import kotlinx.coroutines.* class UserDataSource(private val repository: UserRepository, private val query: String, private val sort: String, private val scope: CoroutineScope): PageKeyedDataSource() { // FOR DATA --- private var supervisorJob = SupervisorJob() private val networkState = MutableLiveData() private var retryQuery: (() -> Any)? = null // Keep reference of the last query (to be able to retry it if necessary) // OVERRIDE --- override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback) { retryQuery = { loadInitial(params, callback) } executeQuery(1, params.requestedLoadSize) { callback.onResult(it, null, 2) } } override fun loadAfter(params: LoadParams, callback: LoadCallback) { val page = params.key retryQuery = { loadAfter(params, callback) } executeQuery(page, params.requestedLoadSize) { callback.onResult(it, page + 1) } } override fun loadBefore(params: LoadParams, callback: LoadCallback) { } // UTILS --- private fun executeQuery(page: Int, perPage: Int, callback:(List) -> Unit) { networkState.postValue(NetworkState.RUNNING) scope.launch(getJobErrorHandler() + supervisorJob) { delay(200) // To handle user typing case val users = repository.searchUsersWithPagination(query, page, perPage, sort) retryQuery = null networkState.postValue(NetworkState.SUCCESS) callback(users) } } private fun getJobErrorHandler() = CoroutineExceptionHandler { _, e -> Log.e(UserDataSource::class.java.simpleName, "An error happened: $e") networkState.postValue(NetworkState.FAILED) } override fun invalidate() { super.invalidate() supervisorJob.cancelChildren() // Cancel possible running job to only keep last result searched by user } // PUBLIC API --- fun getNetworkState(): LiveData = networkState fun refresh() = this.invalidate() fun retryFailedQuery() { val prevQuery = retryQuery retryQuery = null prevQuery?.invoke() } } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/pagination/datasource/UserDataSourceFactory.kt ================================================ package io.github.philippeboisney.githubapp.pagination.datasource import androidx.lifecycle.MutableLiveData import androidx.paging.DataSource import io.github.philippeboisney.githubapp.model.User import io.github.philippeboisney.githubapp.repository.UserRepository import kotlinx.coroutines.CoroutineScope class UserDataSourceFactory(private val repository: UserRepository, private var query: String = "", private var sort: String = "", private val scope: CoroutineScope): DataSource.Factory() { val source = MutableLiveData() override fun create(): DataSource { val source = UserDataSource(repository, query, sort, scope) this.source.postValue(source) return source } // --- PUBLIC API fun getQuery() = query fun getSource() = source.value fun updateQuery(query: String, sort: String){ this.query = query this.sort = sort getSource()?.refresh() } } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/repository/UserRepository.kt ================================================ package io.github.philippeboisney.githubapp.repository import io.github.philippeboisney.githubapp.api.UserService import io.github.philippeboisney.githubapp.model.User class UserRepository(private val service: UserService) { private suspend fun search(query: String, page: Int, perPage: Int, sort: String) = service.search(query, page, perPage, sort).await() private suspend fun getDetail(login: String) = service.getDetail(login).await() private suspend fun getRepos(login: String) = service.getRepos(login).await() private suspend fun getFollowers(login: String) = service.getFollowers(login).await() suspend fun searchUsersWithPagination(query: String, page: Int, perPage: Int, sort: String): List { if (query.isEmpty()) return listOf() val users = mutableListOf() val request = search(query, page, perPage, sort) // Search by name request.items.forEach { val user = getDetail(it.login) // Fetch detail for each user val repositories = getRepos(user.login) // Fetch all repos for each user val followers = getFollowers(user.login) // Fetch all followers for each user user.totalStars = repositories.map { it.numberStars }.sum() user.followers = if (followers.isNotEmpty()) followers else listOf() users.add(user) } return users } } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/storage/SharedPrefsManager.kt ================================================ package io.github.philippeboisney.githubapp.storage import android.content.Context import android.content.SharedPreferences import io.github.philippeboisney.githubapp.extensions.setValue import io.github.philippeboisney.githubapp.model.Filters import java.lang.IllegalStateException class SharedPrefsManager(private val context: Context) { private fun get(): SharedPreferences = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE) /** * Returns [Filters.ResultSearchUsers] saved in [SharedPreferences] * This filter will be used to sort "search" queries */ fun getFilterWhenSearchingUsers(): Filters.ResultSearchUsers { val value = get().getString(KEY_FILTERS, Filters.ResultSearchUsers.BY_SCORE.value) return when (value) { Filters.ResultSearchUsers.BY_SCORE.value -> Filters.ResultSearchUsers.BY_SCORE Filters.ResultSearchUsers.BY_REPOS.value -> Filters.ResultSearchUsers.BY_REPOS Filters.ResultSearchUsers.BY_FOLLOWERS.value -> Filters.ResultSearchUsers.BY_FOLLOWERS else -> throw IllegalStateException("Filter not recognized") } } /** * Saves [Filters.ResultSearchUsers] in [SharedPreferences] * This filter will be used to sort "search" queries */ fun saveFilterWhenSearchingUsers(filters: Filters.ResultSearchUsers) { get().setValue(KEY_FILTERS, filters.value) } companion object { private const val SP_NAME = "GithubAppPrefs" private const val KEY_FILTERS = "KEY_FILTERS" } } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/ui/MainActivity.kt ================================================ package io.github.philippeboisney.githubapp.ui import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.Menu import android.view.MenuInflater import android.widget.SearchView import io.github.philippeboisney.githubapp.R import io.github.philippeboisney.githubapp.ui.user.search.SearchUserFragment class MainActivity : AppCompatActivity() { // OVERRIDE --- override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) configureAndShowFragment() } override fun onCreateOptionsMenu(menu: Menu?): Boolean { return configureToolbar(menu) } // CONFIGURATION --- private fun configureAndShowFragment() { var fragment = supportFragmentManager.findFragmentById(R.id.activity_main_container) as SearchUserFragment? if (fragment == null) { fragment = SearchUserFragment() supportFragmentManager.beginTransaction() .add(R.id.activity_main_container, fragment) .commit() } } private fun configureToolbar(menu: Menu?): Boolean { menuInflater.inflate(R.menu.menu_search, menu) val searchItem = menu?.findItem(R.id.action_search) val searchView = searchItem?.actionView as? SearchView searchView?.queryHint = getString(R.string.search) return true } } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/ui/user/search/SearchUserFragment.kt ================================================ package io.github.philippeboisney.githubapp.ui.user.search import android.os.Bundle import android.util.Log import android.view.Menu import android.view.MenuInflater import androidx.fragment.app.Fragment import android.view.View import androidx.appcompat.widget.SearchView import androidx.lifecycle.Observer import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.list.listItemsSingleChoice import com.bumptech.glide.Glide import io.github.philippeboisney.githubapp.R import io.github.philippeboisney.githubapp.api.NetworkState import io.github.philippeboisney.githubapp.base.BaseFragment import io.github.philippeboisney.githubapp.extensions.onQueryTextChange import io.github.philippeboisney.githubapp.ui.user.search.views.SearchUserAdapter import io.github.philippeboisney.githubapp.utils.convertFilterToIndex import io.github.philippeboisney.githubapp.utils.convertIndexToFilter import kotlinx.android.synthetic.main.fragment_search_user.fragment_search_user_rv as recyclerView import kotlinx.android.synthetic.main.fragment_search_user.fragment_search_user_empty_list_image as emptyListImage import kotlinx.android.synthetic.main.fragment_search_user.fragment_search_user_empty_list_title as emptyListTitle import kotlinx.android.synthetic.main.fragment_search_user.fragment_search_user_empty_list_button as emptyListButton import kotlinx.android.synthetic.main.fragment_search_user.fragment_search_user_fab as fab import kotlinx.android.synthetic.main.fragment_search_user.fragment_search_user_progress as progressBar import org.koin.android.viewmodel.ext.android.viewModel /** * A simple [Fragment] subclass. * */ class SearchUserFragment : BaseFragment(), SearchUserAdapter.OnClickListener { // FOR DATA --- private val viewModel: SearchUserViewModel by viewModel() private lateinit var adapter: SearchUserAdapter // OVERRIDE --- override fun getLayoutId(): Int = R.layout.fragment_search_user override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setHasOptionsMenu(true) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) configureRecyclerView() configureObservables() configureOnClick() } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { configureMenu(menu) super.onCreateOptionsMenu(menu, inflater) } // ACTION --- override fun onClickRetry() { viewModel.refreshFailedRequest() } override fun whenListIsUpdated(size: Int, networkState: NetworkState?) { updateUIWhenLoading(size, networkState) updateUIWhenEmptyList(size, networkState) } private fun configureOnClick(){ emptyListButton.setOnClickListener { viewModel.refreshAllList() } fab.setOnClickListener { showDialogWithFilterItems { viewModel.refreshAllList() } } } // CONFIGURATION --- private fun configureMenu(menu: Menu) { val searchMenuItem = menu.findItem(R.id.action_search) val possibleExistingQuery = viewModel.getCurrentQuery() val searchView = searchMenuItem.actionView as SearchView if (possibleExistingQuery != null && !possibleExistingQuery.isEmpty()) { searchMenuItem.expandActionView() searchView.setQuery(possibleExistingQuery, false) searchView.clearFocus() } searchView.onQueryTextChange { viewModel.fetchUsersByName(it) } } private fun configureRecyclerView(){ adapter = SearchUserAdapter(this) recyclerView.adapter = adapter } private fun configureObservables() { viewModel.networkState?.observe(this, Observer { adapter.updateNetworkState(it) }) viewModel.users.observe(this, Observer { adapter.submitList(it) }) } // UPDATE UI ---- private fun updateUIWhenEmptyList(size: Int, networkState: NetworkState?) { emptyListImage.visibility = View.GONE emptyListButton.visibility = View.GONE emptyListTitle.visibility = View.GONE if (size == 0) { when (networkState) { NetworkState.SUCCESS -> { Glide.with(this).load(R.drawable.ic_directions_run_black_24dp).into(emptyListImage) emptyListTitle.text = getString(R.string.no_result_found) emptyListImage.visibility = View.VISIBLE emptyListTitle.visibility = View.VISIBLE emptyListButton.visibility = View.GONE } NetworkState.FAILED -> { Glide.with(this).load(R.drawable.ic_healing_black_24dp).into(emptyListImage) emptyListTitle.text = getString(R.string.technical_error) emptyListImage.visibility = View.VISIBLE emptyListTitle.visibility = View.VISIBLE emptyListButton.visibility = View.VISIBLE } } } } private fun updateUIWhenLoading(size: Int, networkState: NetworkState?) { progressBar.visibility = if (size == 0 && networkState == NetworkState.RUNNING) View.VISIBLE else View.GONE } private fun showDialogWithFilterItems(callback: () -> Unit) { MaterialDialog(this.activity!!).show { title(R.string.filter_popup_title) listItemsSingleChoice( R.array.filters, initialSelection = convertFilterToIndex(viewModel.getFilterWhenSearchingUsers())) { _, index, _ -> viewModel.saveFilterWhenSearchingUsers(convertIndexToFilter(index)) } positiveButton { callback() } } } } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/ui/user/search/SearchUserViewModel.kt ================================================ package io.github.philippeboisney.githubapp.ui.user.search import androidx.appcompat.widget.SearchView import androidx.lifecycle.LiveData import androidx.lifecycle.Transformations.switchMap import androidx.paging.LivePagedListBuilder import androidx.paging.PagedList import io.github.philippeboisney.githubapp.api.NetworkState import io.github.philippeboisney.githubapp.base.BaseViewModel import io.github.philippeboisney.githubapp.model.Filters import io.github.philippeboisney.githubapp.model.User import io.github.philippeboisney.githubapp.pagination.datasource.UserDataSourceFactory import io.github.philippeboisney.githubapp.repository.UserRepository import io.github.philippeboisney.githubapp.storage.SharedPrefsManager class SearchUserViewModel(repository: UserRepository, private val sharedPrefsManager: SharedPrefsManager): BaseViewModel() { // FOR DATA --- private val userDataSource = UserDataSourceFactory(repository = repository, scope = ioScope) // OBSERVABLES --- val users = LivePagedListBuilder(userDataSource, pagedListConfig()).build() val networkState: LiveData? = switchMap(userDataSource.source) { it.getNetworkState() } // PUBLIC API --- /** * Fetch a list of [User] by name * Called each time an user hits a key through [SearchView]. */ fun fetchUsersByName(query: String) { val search = query.trim() if (userDataSource.getQuery() == search) return userDataSource.updateQuery(search, sharedPrefsManager.getFilterWhenSearchingUsers().value) } /** * Retry possible last paged request (ie: network issue) */ fun refreshFailedRequest() = userDataSource.getSource()?.retryFailedQuery() /** * Refreshes all list after an issue */ fun refreshAllList() = userDataSource.getSource()?.refresh() /** * Returns filter [Filters.ResultSearchUsers] used to sort "search" request */ fun getFilterWhenSearchingUsers() = sharedPrefsManager.getFilterWhenSearchingUsers() /** * Saves filter [Filters.ResultSearchUsers] used to sort "search" request */ fun saveFilterWhenSearchingUsers(filter: Filters.ResultSearchUsers) = sharedPrefsManager.saveFilterWhenSearchingUsers(filter) /** * Returns current search query */ fun getCurrentQuery() = userDataSource.getQuery() // UTILS --- private fun pagedListConfig() = PagedList.Config.Builder() .setInitialLoadSizeHint(5) .setEnablePlaceholders(false) .setPageSize(5 * 2) .build() } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/ui/user/search/views/SearchUserAdapter.kt ================================================ package io.github.philippeboisney.githubapp.ui.user.search.views import android.view.LayoutInflater import android.view.ViewGroup import androidx.paging.PagedListAdapter import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import io.github.philippeboisney.githubapp.R import io.github.philippeboisney.githubapp.api.NetworkState import io.github.philippeboisney.githubapp.model.User class SearchUserAdapter(private val callback: OnClickListener): PagedListAdapter( diffCallback ) { // FOR DATA --- private var networkState: NetworkState? = null interface OnClickListener { fun onClickRetry() fun whenListIsUpdated(size: Int, networkState: NetworkState?) } // OVERRIDE --- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val view = LayoutInflater.from(parent.context).inflate(viewType, parent, false) return when (viewType) { R.layout.item_search_user -> SearchUserViewHolder( view ) R.layout.item_search_user_network_state -> SearchUserNetworkStateViewHolder( view ) else -> throw IllegalArgumentException("Unknown view type $viewType") } } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when (getItemViewType(position)) { R.layout.item_search_user -> (holder as SearchUserViewHolder).bindTo(getItem(position)) R.layout.item_search_user_network_state -> (holder as SearchUserNetworkStateViewHolder).bindTo(networkState, callback) } } override fun getItemViewType(position: Int): Int { return if (hasExtraRow() && position == itemCount - 1) { R.layout.item_search_user_network_state } else { R.layout.item_search_user } } override fun getItemCount(): Int { this.callback.whenListIsUpdated(super.getItemCount(), this.networkState) return super.getItemCount() } // UTILS --- private fun hasExtraRow() = networkState != null && networkState != NetworkState.SUCCESS // PUBLIC API --- fun updateNetworkState(newNetworkState: NetworkState?) { val previousState = this.networkState val hadExtraRow = hasExtraRow() this.networkState = newNetworkState val hasExtraRow = hasExtraRow() if (hadExtraRow != hasExtraRow) { if (hadExtraRow) { notifyItemRemoved(super.getItemCount()) } else { notifyItemInserted(super.getItemCount()) } } else if (hasExtraRow && previousState != newNetworkState) { notifyItemChanged(itemCount - 1) } } companion object { private val diffCallback = object : DiffUtil.ItemCallback() { override fun areItemsTheSame(oldItem: User, newItem: User): Boolean = oldItem == newItem override fun areContentsTheSame(oldItem: User, newItem: User): Boolean = oldItem == newItem } } } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/ui/user/search/views/SearchUserNetworkStateViewHolder.kt ================================================ package io.github.philippeboisney.githubapp.ui.user.search.views import android.view.View import androidx.recyclerview.widget.RecyclerView import io.github.philippeboisney.githubapp.api.NetworkState import kotlinx.android.synthetic.main.item_search_user_network_state.view.item_search_user_network_state_progress_bar as progressBar import kotlinx.android.synthetic.main.item_search_user_network_state.view.item_search_user_network_state_button as retryButton import kotlinx.android.synthetic.main.item_search_user_network_state.view.item_search_user_network_state_title as retryTitle class SearchUserNetworkStateViewHolder(parent: View): RecyclerView.ViewHolder(parent) { // PUBLIC API --- fun bindTo(networkState: NetworkState?, callback: SearchUserAdapter.OnClickListener){ hideViews() setVisibleRightViews(networkState) itemView.retryButton.setOnClickListener { callback.onClickRetry() } } // UTILS --- private fun hideViews() { itemView.retryButton.visibility = View.GONE itemView.retryTitle.visibility = View.GONE itemView.progressBar.visibility = View.GONE } private fun setVisibleRightViews(networkState: NetworkState?) { when (networkState) { NetworkState.FAILED -> { itemView.retryButton.visibility = View.VISIBLE itemView.retryTitle.visibility = View.VISIBLE } NetworkState.RUNNING -> { itemView.progressBar.visibility = View.VISIBLE } } } } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/ui/user/search/views/SearchUserViewHolder.kt ================================================ package io.github.philippeboisney.githubapp.ui.user.search.views import android.view.View import android.widget.ImageView import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions import com.bumptech.glide.request.RequestOptions import io.github.philippeboisney.githubapp.R import io.github.philippeboisney.githubapp.model.User import kotlinx.android.synthetic.main.item_search_user.view.item_search_user_title as title import kotlinx.android.synthetic.main.item_search_user.view.item_search_user_image_profile as image import kotlinx.android.synthetic.main.item_search_user.view.item_search_user_repositories as repositories import kotlinx.android.synthetic.main.item_search_user.view.item_search_user_follower_image as followerImage import kotlinx.android.synthetic.main.item_search_user.view.item_search_user_follower_image_bis as followerImageBis import kotlinx.android.synthetic.main.item_search_user.view.item_search_user_follower_name as followerName import kotlinx.android.synthetic.main.item_search_user.view.item_search_user_follower_count as followerCount class SearchUserViewHolder(parent: View): RecyclerView.ViewHolder(parent) { // PUBLIC API --- fun bindTo(user: User?){ user?.let { loadImage(it.avatarUrl, itemView.image) val firstFollower: User? = try { it.followers[0] } catch (e: Exception) { null } val secondFollower: User? = try { it.followers[1] } catch (e: Exception) { null } firstFollower?.let { loadImage(it.avatarUrl, itemView.followerImage) } secondFollower?.let { loadImage(it.avatarUrl, itemView.followerImageBis) } itemView.title.text = it.login.capitalize() itemView.repositories.text = "${it.totalStars} - ${it.totalRepos} ${itemView.context.getString(R.string.repositories)}" itemView.followerName.text = firstFollower?.login?.capitalize() itemView.followerCount.text = "+${it.totalFollowers - 1}" } } // UTILS --- private fun loadImage(url: String, imageView: ImageView) { Glide.with(itemView.context) .load(url) .transition(DrawableTransitionOptions.withCrossFade()) .apply(RequestOptions.circleCropTransform()) .into(imageView) } } ================================================ FILE: app/src/main/java/io/github/philippeboisney/githubapp/utils/FilterUtills.kt ================================================ package io.github.philippeboisney.githubapp.utils import io.github.philippeboisney.githubapp.model.Filters import java.lang.IllegalStateException fun convertFilterToIndex(filter: Filters.ResultSearchUsers) = when (filter) { Filters.ResultSearchUsers.BY_SCORE -> 2 Filters.ResultSearchUsers.BY_FOLLOWERS -> 1 Filters.ResultSearchUsers.BY_REPOS -> 0 } fun convertIndexToFilter(index: Int) = when (index) { 2 -> Filters.ResultSearchUsers.BY_SCORE 1 -> Filters.ResultSearchUsers.BY_FOLLOWERS 0 -> Filters.ResultSearchUsers.BY_REPOS else -> throw IllegalStateException("Index not recognized") } ================================================ FILE: app/src/main/res/drawable/ic_directions_run_black_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_filter_list_white_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_healing_black_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_launcher_background.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_search_white_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable/ic_star_white_24dp.xml ================================================ ================================================ FILE: app/src/main/res/drawable-v24/ic_launcher_foreground.xml ================================================ ================================================ FILE: app/src/main/res/layout/activity_main.xml ================================================ ================================================ FILE: app/src/main/res/layout/fragment_search_user.xml ================================================