loading
Generated 2025-10-08T23:58:23+00:00

All Files ( 100.0% covered at 1.98 hits/line )

94 files in total.
1279 relevant lines, 1279 lines covered and 0 lines missed. ( 100.0% )
31 total branches, 31 branches covered and 0 branches missed. ( 100.0% )
File % covered Lines Relevant Lines Lines covered Lines missed Avg. Hits / Line Branch Coverage Branches Covered branches Missed branches
lib/ghub.rb 100.00 % 21 12 12 0 1.75 100.00 % 0 0 0
lib/ghub/api/client.rb 100.00 % 49 24 24 0 15.00 100.00 % 4 4 0
lib/ghub/api/page.rb 100.00 % 59 28 28 0 3.43 100.00 % 4 4 0
lib/ghub/client.rb 100.00 % 35 9 9 0 3.00 100.00 % 2 2 0
lib/ghub/configuration/content.rb 100.00 % 10 4 4 0 1.25 100.00 % 0 0 0
lib/ghub/configuration/loader.rb 100.00 % 30 12 12 0 1.50 100.00 % 0 0 0
lib/ghub/container.rb 100.00 % 15 8 8 0 1.25 100.00 % 0 0 0
lib/ghub/dependencies.rb 100.00 % 7 3 3 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/branches/protection/actions/show.rb 100.00 % 32 12 12 0 1.25 100.00 % 0 0 0
lib/ghub/endpoints/branches/protection/actions/update.rb 100.00 % 39 12 12 0 1.25 100.00 % 0 0 0
lib/ghub/endpoints/branches/protection/container.rb 100.00 % 33 16 16 0 1.13 100.00 % 0 0 0
lib/ghub/endpoints/branches/protection/dependencies.rb 100.00 % 13 6 6 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/branches/protection/models/show.rb 100.00 % 49 11 11 0 1.82 100.00 % 0 0 0
lib/ghub/endpoints/branches/protection/requests/update.rb 100.00 % 52 31 31 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/branches/protection/responses/show.rb 100.00 % 27 17 17 0 1.29 100.00 % 0 0 0
lib/ghub/endpoints/branches/protection/root.rb 100.00 % 23 11 11 0 1.09 100.00 % 0 0 0
lib/ghub/endpoints/branches/signature/container.rb 100.00 % 24 11 11 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/branches/signature/dependencies.rb 100.00 % 13 6 6 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/branches/signature/root.rb 100.00 % 49 21 21 0 1.43 100.00 % 0 0 0
lib/ghub/endpoints/container.rb 100.00 % 20 12 12 0 1.58 100.00 % 0 0 0
lib/ghub/endpoints/dependencies.rb 100.00 % 9 4 4 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/organizations/members/actions/index.rb 100.00 % 33 14 14 0 1.29 100.00 % 0 0 0
lib/ghub/endpoints/organizations/members/container.rb 100.00 % 28 13 13 0 1.08 100.00 % 0 0 0
lib/ghub/endpoints/organizations/members/dependencies.rb 100.00 % 13 6 6 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/organizations/members/responses/index.rb 100.00 % 14 6 6 0 1.17 100.00 % 0 0 0
lib/ghub/endpoints/organizations/members/root.rb 100.00 % 16 7 7 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/pulls/actions/index.rb 100.00 % 29 13 13 0 1.31 100.00 % 0 0 0
lib/ghub/endpoints/pulls/actions/show.rb 100.00 % 27 11 11 0 1.27 100.00 % 0 0 0
lib/ghub/endpoints/pulls/container.rb 100.00 % 28 14 14 0 1.14 100.00 % 0 0 0
lib/ghub/endpoints/pulls/dependencies.rb 100.00 % 11 5 5 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/pulls/models/show.rb 100.00 % 82 14 14 0 3.64 100.00 % 2 2 0
lib/ghub/endpoints/pulls/responses/index.rb 100.00 % 12 5 5 0 1.20 100.00 % 0 0 0
lib/ghub/endpoints/pulls/responses/show.rb 100.00 % 62 53 53 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/pulls/root.rb 100.00 % 16 7 7 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/repositories/actions/create.rb 100.00 % 38 12 12 0 1.75 100.00 % 0 0 0
lib/ghub/endpoints/repositories/actions/index.rb 100.00 % 31 13 13 0 1.54 100.00 % 0 0 0
lib/ghub/endpoints/repositories/actions/patch.rb 100.00 % 38 12 12 0 1.67 100.00 % 0 0 0
lib/ghub/endpoints/repositories/actions/show.rb 100.00 % 27 11 11 0 1.36 100.00 % 0 0 0
lib/ghub/endpoints/repositories/container.rb 100.00 % 37 20 20 0 1.25 100.00 % 0 0 0
lib/ghub/endpoints/repositories/dependencies.rb 100.00 % 11 5 5 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/repositories/path.rb 100.00 % 50 25 25 0 2.68 100.00 % 7 7 0
lib/ghub/endpoints/repositories/requests/create.rb 100.00 % 32 23 23 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/repositories/requests/patch.rb 100.00 % 38 27 27 0 1.11 100.00 % 0 0 0
lib/ghub/endpoints/repositories/responses/index.rb 100.00 % 12 5 5 0 1.20 100.00 % 0 0 0
lib/ghub/endpoints/repositories/responses/show.rb 100.00 % 97 88 88 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/repositories/root.rb 100.00 % 29 11 11 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/search/users/actions/index.rb 100.00 % 30 13 13 0 1.31 100.00 % 0 0 0
lib/ghub/endpoints/search/users/container.rb 100.00 % 28 13 13 0 1.08 100.00 % 0 0 0
lib/ghub/endpoints/search/users/dependencies.rb 100.00 % 13 6 6 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/search/users/models/index.rb 100.00 % 41 10 10 0 1.40 100.00 % 0 0 0
lib/ghub/endpoints/search/users/responses/index.rb 100.00 % 38 28 28 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/search/users/root.rb 100.00 % 16 7 7 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/users/actions/index.rb 100.00 % 29 13 13 0 1.46 100.00 % 0 0 0
lib/ghub/endpoints/users/actions/show.rb 100.00 % 25 11 11 0 1.36 100.00 % 0 0 0
lib/ghub/endpoints/users/container.rb 100.00 % 29 15 15 0 1.13 100.00 % 0 0 0
lib/ghub/endpoints/users/dependencies.rb 100.00 % 11 5 5 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/users/models/index.rb 100.00 % 38 9 9 0 1.44 100.00 % 0 0 0
lib/ghub/endpoints/users/models/show.rb 100.00 % 52 9 9 0 1.44 100.00 % 0 0 0
lib/ghub/endpoints/users/responses/index.rb 100.00 % 33 24 24 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/users/responses/show.rb 100.00 % 45 37 37 0 1.00 100.00 % 0 0 0
lib/ghub/endpoints/users/root.rb 100.00 % 16 7 7 0 1.00 100.00 % 0 0 0
lib/ghub/models/application.rb 100.00 % 35 8 8 0 2.00 100.00 % 0 0 0
lib/ghub/models/boolean_link.rb 100.00 % 15 7 7 0 4.14 100.00 % 0 0 0
lib/ghub/models/branch.rb 100.00 % 22 8 8 0 4.63 100.00 % 0 0 0
lib/ghub/models/check.rb 100.00 % 13 6 6 0 2.67 100.00 % 0 0 0
lib/ghub/models/dismissal_restriction.rb 100.00 % 32 12 12 0 2.00 100.00 % 2 2 0
lib/ghub/models/label.rb 100.00 % 21 6 6 0 3.00 100.00 % 0 0 0
lib/ghub/models/license.rb 100.00 % 19 6 6 0 6.33 100.00 % 0 0 0
lib/ghub/models/link.rb 100.00 % 13 6 6 0 22.33 100.00 % 0 0 0
lib/ghub/models/links.rb 100.00 % 27 9 9 0 10.11 100.00 % 0 0 0
lib/ghub/models/owner.rb 100.00 % 26 6 6 0 1.33 100.00 % 0 0 0
lib/ghub/models/permissions/branch.rb 100.00 % 20 7 7 0 1.29 100.00 % 0 0 0
lib/ghub/models/permissions/repository.rb 100.00 % 21 7 7 0 3.57 100.00 % 0 0 0
lib/ghub/models/repository.rb 100.00 % 109 11 11 0 9.91 100.00 % 6 6 0
lib/ghub/models/restriction.rb 100.00 % 33 12 12 0 2.42 100.00 % 2 2 0
lib/ghub/models/review.rb 100.00 % 29 9 9 0 2.89 100.00 % 2 2 0
lib/ghub/models/status_check.rb 100.00 % 26 9 9 0 3.00 100.00 % 0 0 0
lib/ghub/models/team.rb 100.00 % 26 6 6 0 2.00 100.00 % 0 0 0
lib/ghub/models/user.rb 100.00 % 34 7 7 0 15.29 100.00 % 0 0 0
lib/ghub/responses/application.rb 100.00 % 42 31 31 0 1.00 100.00 % 0 0 0
lib/ghub/responses/boolean_link.rb 100.00 % 11 5 5 0 1.00 100.00 % 0 0 0
lib/ghub/responses/branch.rb 100.00 % 14 8 8 0 1.00 100.00 % 0 0 0
lib/ghub/responses/dismissal_restriction.rb 100.00 % 15 9 9 0 1.00 100.00 % 0 0 0
lib/ghub/responses/label.rb 100.00 % 16 10 10 0 1.00 100.00 % 0 0 0
lib/ghub/responses/license.rb 100.00 % 14 8 8 0 1.00 100.00 % 0 0 0
lib/ghub/responses/link.rb 100.00 % 8 3 3 0 1.33 100.00 % 0 0 0
lib/ghub/responses/links.rb 100.00 % 17 11 11 0 1.00 100.00 % 0 0 0
lib/ghub/responses/permission.rb 100.00 % 14 8 8 0 1.00 100.00 % 0 0 0
lib/ghub/responses/repository.rb 100.00 % 90 83 83 0 1.00 100.00 % 0 0 0
lib/ghub/responses/restriction.rb 100.00 % 16 10 10 0 1.00 100.00 % 0 0 0
lib/ghub/responses/review.rb 100.00 % 15 8 8 0 1.00 100.00 % 0 0 0
lib/ghub/responses/status_check.rb 100.00 % 20 11 11 0 1.00 100.00 % 0 0 0
lib/ghub/responses/team.rb 100.00 % 20 14 14 0 1.00 100.00 % 0 0 0
lib/ghub/responses/user.rb 100.00 % 27 21 21 0 1.00 100.00 % 0 0 0

lib/ghub.rb

100.0% lines covered

100.0% branches covered

12 relevant lines. 12 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "dry/monads"
  3. 1 require "dry/schema"
  4. 1 require "zeitwerk"
  5. 1 Dry::Schema.load_extensions :monads
  6. 1 Zeitwerk::Loader.new.then do |loader|
  7. 1 loader.inflector.inflect "api" => "API"
  8. 1 loader.tag = File.basename __FILE__, ".rb"
  9. 1 loader.push_dir __dir__
  10. 1 loader.setup
  11. end
  12. # Main namespace.
  13. 1 module Ghub
  14. 1 def self.loader registry = Zeitwerk::Registry
  15. 10 @loader ||= registry.loaders.each.find { |loader| loader.tag == File.basename(__FILE__, ".rb") }
  16. end
  17. end

lib/ghub/api/client.rb

100.0% lines covered

100.0% branches covered

24 relevant lines. 24 lines covered and 0 lines missed.
4 total branches, 4 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "dry/monads"
  3. 1 module Ghub
  4. 1 module API
  5. # A low-level API client.
  6. 1 class Client
  7. 1 include Dependencies[:configuration, :http]
  8. 1 include Dry::Monads[:result]
  9. 1 def initialize(page: Page, **)
  10. 72 super(**)
  11. 72 @page = page
  12. end
  13. 1 def get path, **parameters
  14. 41 else: 1 then: 40 return call __method__, path, params: parameters unless configuration.paginate
  15. 2 page.of { |index| call __method__, path, params: parameters.merge(page: index) }
  16. end
  17. 1 def post path, body = nil, **parameters
  18. 7 call __method__, path, json: body, params: parameters
  19. end
  20. 1 def put path, body = nil, **parameters
  21. 6 call __method__, path, json: body, params: parameters
  22. end
  23. 1 def patch path, body = nil, **parameters
  24. 7 call __method__, path, json: body, params: parameters
  25. end
  26. 1 def delete(path, **parameters) = call __method__, path, params: parameters
  27. 1 private
  28. 1 attr_reader :page
  29. 1 def call method, path, **options
  30. 69 http.auth("Bearer #{configuration.token}")
  31. .headers(accept: configuration.accept)
  32. .public_send(method, "#{configuration.url}/#{path}", options)
  33. 69 then: 50 else: 19 .then { |response| response.status.success? ? Success(response) : Failure(response) }
  34. end
  35. end
  36. end
  37. end

lib/ghub/api/page.rb

100.0% lines covered

100.0% branches covered

28 relevant lines. 28 lines covered and 0 lines missed.
4 total branches, 4 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "dry/monads"
  3. 1 require "json"
  4. 1 require "refinements/array"
  5. 1 module Ghub
  6. 1 module API
  7. # Represents a page of an API response.
  8. 1 class Page
  9. 1 extend Dry::Monads[:result]
  10. 1 using Refinements::Array
  11. 1 def self.of index = 1, bodies: [], &request
  12. 8 yield(index).fmap { |response| new response }
  13. 4 .fmap { |page| [page, bodies.including(page.body)] }
  14. .bind do |page, amalgam|
  15. 4 then: 3 if page.last?
  16. 3 Success page.to_response(amalgam)
  17. else: 1 else
  18. 1 of page.next, bodies: amalgam, &request
  19. end
  20. end
  21. end
  22. 1 def initialize response
  23. 13 @response = response
  24. end
  25. 1 def next = navigation __method__
  26. 1 def last? = navigation(:last).zero?
  27. 1 def body = response.parse
  28. 1 def to_response content = []
  29. 5 then: 1 else: 4 return response if content.empty?
  30. 4 response.class.new request: response.request,
  31. headers: response.headers,
  32. body: content.to_json,
  33. status: response.status,
  34. version: response.version
  35. end
  36. 1 private
  37. 1 attr_reader :response
  38. 1 def navigation target
  39. 25 links.find { |link| link.include? target.to_s }
  40. 11 .then { |link| String(link)[/page=(?<page>\d+)/, :page].to_i }
  41. end
  42. 1 def links = String(response.headers["Link"]).split ", "
  43. end
  44. end
  45. end

lib/ghub/client.rb

100.0% lines covered

100.0% branches covered

9 relevant lines. 9 lines covered and 0 lines missed.
2 total branches, 2 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "inspectable"
  3. 1 module Ghub
  4. # The primary interface for making API requests.
  5. 1 class Client
  6. 1 include Dependencies[:configuration]
  7. 1 include Endpoints::Dependencies.public(
  8. :branch_protection,
  9. :branch_signature,
  10. :organization_members,
  11. :pulls,
  12. :repositories,
  13. :search_users,
  14. :users
  15. )
  16. 1 include Inspectable[
  17. branch_protection: :class,
  18. branch_signature: :class,
  19. organization_members: :class,
  20. pulls: :class,
  21. repositories: :class,
  22. search_users: :class,
  23. users: :class
  24. ]
  25. 1 def initialize(**)
  26. 10 super
  27. 10 then: 1 else: 9 yield configuration if block_given?
  28. end
  29. end
  30. end

lib/ghub/configuration/content.rb

100.0% lines covered

100.0% branches covered

4 relevant lines. 4 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "inspectable"
  3. 1 module Ghub
  4. 1 module Configuration
  5. # Defines the client configuration content for API requests.
  6. 2 Content = Struct.new(:accept, :paginate, :token, :url) { include Inspectable[token: :redact] }
  7. end
  8. end

lib/ghub/configuration/loader.rb

100.0% lines covered

100.0% branches covered

12 relevant lines. 12 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "refinements/string"
  3. 1 module Ghub
  4. 1 module Configuration
  5. # Handles loading of configuration with environment defaults.
  6. 1 class Loader
  7. 1 using Refinements::String
  8. 1 def initialize model = Content, environment: ENV
  9. 3 @model = model
  10. 3 @environment = environment
  11. end
  12. 1 def call
  13. 3 model[
  14. accept: environment.fetch("GITHUB_API_ACCEPT", "application/vnd.github+json"),
  15. paginate: environment.fetch("GITHUB_API_PAGINATE", "false").truthy?,
  16. token: environment["GITHUB_API_TOKEN"],
  17. url: environment.fetch("GITHUB_API_URL", "https://api.github.com")
  18. ]
  19. end
  20. 1 private
  21. 1 attr_reader :model, :environment
  22. end
  23. end
  24. end

lib/ghub/container.rb

100.0% lines covered

100.0% branches covered

8 relevant lines. 8 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "containable"
  3. 1 require "http"
  4. 1 module Ghub
  5. # Defines application dependencies.
  6. 1 module Container
  7. 1 extend Containable
  8. 2 register(:configuration) { Configuration::Loader.new.call }
  9. 1 register :http, HTTP
  10. 2 register(:api) { API::Client.new }
  11. end
  12. end

lib/ghub/dependencies.rb

100.0% lines covered

100.0% branches covered

3 relevant lines. 3 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "infusible"
  3. 1 module Ghub
  4. 1 Dependencies = Infusible[Container]
  5. end

lib/ghub/endpoints/branches/protection/actions/show.rb

100.0% lines covered

100.0% branches covered

12 relevant lines. 12 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "pipeable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Branches
  6. 1 module Protection
  7. 1 module Actions
  8. # Handles a branch projection show action.
  9. 1 class Show
  10. 1 include Ghub::Dependencies[:api]
  11. 1 include Dependencies[response: "responses.show", model: "models.show"]
  12. 1 include Pipeable
  13. 1 def call owner, repository, branch, **parameters
  14. 4 pipe(
  15. api.get(
  16. "repos/#{owner}/#{repository}/branches/#{branch}/protection",
  17. **parameters
  18. ),
  19. try(:parse, catch: JSON::ParserError),
  20. validate(response, as: :to_h),
  21. to(model, :for)
  22. )
  23. end
  24. end
  25. end
  26. end
  27. end
  28. end
  29. end

lib/ghub/endpoints/branches/protection/actions/update.rb

100.0% lines covered

100.0% branches covered

12 relevant lines. 12 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "pipeable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Branches
  6. 1 module Protection
  7. 1 module Actions
  8. # Handles a branch projection update action.
  9. 1 class Update
  10. 1 include Ghub::Dependencies[:api]
  11. 1 include Dependencies[
  12. request: "requests.update",
  13. response: "responses.show",
  14. model: "models.show"
  15. ]
  16. 1 include Pipeable
  17. 1 def call owner, repository, branch, body, **parameters
  18. 4 pipe(
  19. body,
  20. validate(request),
  21. insert("repos/#{owner}/#{repository}/branches/#{branch}/protection", at: 0),
  22. insert(parameters),
  23. to(api, :put),
  24. try(:parse, catch: JSON::ParserError),
  25. validate(response, as: :to_h),
  26. to(model, :for)
  27. )
  28. end
  29. end
  30. end
  31. end
  32. end
  33. end
  34. end

lib/ghub/endpoints/branches/protection/container.rb

100.0% lines covered

100.0% branches covered

16 relevant lines. 16 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "containable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Branches
  6. 1 module Protection
  7. # Defines branch protection dependencies.
  8. 1 module Container
  9. 1 extend Containable
  10. 1 namespace :requests do
  11. 1 register :update, Requests::Update
  12. end
  13. 1 namespace :responses do
  14. 1 register :show, Responses::Show
  15. end
  16. 1 namespace :models do
  17. 1 register :show, Models::Show
  18. end
  19. 1 namespace :actions do
  20. 2 register(:show) { Actions::Show.new }
  21. 2 register(:update) { Actions::Update.new }
  22. end
  23. end
  24. end
  25. end
  26. end
  27. end

lib/ghub/endpoints/branches/protection/dependencies.rb

100.0% lines covered

100.0% branches covered

6 relevant lines. 6 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "infusible"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Branches
  6. 1 module Protection
  7. 1 Dependencies = Infusible[Container]
  8. end
  9. end
  10. end
  11. end

lib/ghub/endpoints/branches/protection/models/show.rb

100.0% lines covered

100.0% branches covered

11 relevant lines. 11 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Branches
  5. 1 module Protection
  6. 1 module Models
  7. # Defines branch protection.
  8. 1 Show = Struct.new(
  9. :allow_deletions,
  10. :allow_force_pushes,
  11. :block_creations,
  12. :enforce_admins,
  13. :required_conversation_resolution,
  14. :required_linear_history,
  15. :required_pull_request_reviews,
  16. :required_signatures,
  17. :required_status_checks,
  18. :restrictions,
  19. :url
  20. ) do
  21. 1 def self.for(**attributes)
  22. 4 new(
  23. **attributes.merge!(
  24. enforce_admins: Ghub::Models::BooleanLink[**attributes[:enforce_admins]],
  25. required_signatures: Ghub::Models::BooleanLink[
  26. **Hash(attributes[:required_signatures])
  27. ],
  28. required_status_checks: Ghub::Models::StatusCheck.for(
  29. **Hash(attributes[:required_status_checks])
  30. ),
  31. required_pull_request_reviews: Ghub::Models::Review.for(
  32. **Hash(attributes[:required_pull_request_reviews])
  33. ),
  34. restrictions: Ghub::Models::Restriction.for(**Hash(attributes[:restrictions]))
  35. )
  36. )
  37. end
  38. 1 def initialize(**)
  39. 4 super
  40. 4 freeze
  41. end
  42. end
  43. end
  44. end
  45. end
  46. end
  47. end

lib/ghub/endpoints/branches/protection/requests/update.rb

100.0% lines covered

100.0% branches covered

31 relevant lines. 31 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Branches
  5. 1 module Protection
  6. 1 module Requests
  7. # Defines the data structure for updating a protected branch.
  8. 1 Update = Dry::Schema.JSON do
  9. 1 required(:enforce_admins).filled :bool
  10. 1 required(:required_pull_request_reviews).maybe(:hash) do
  11. 1 optional(:bypass_pull_request_allowances).hash do
  12. 1 optional(:users).array :string
  13. 1 optional(:teams).array :string
  14. 1 optional(:apps).array :string
  15. end
  16. 1 optional(:dismiss_stale_reviews).filled :bool
  17. 1 optional(:dismissal_restrictions).hash do
  18. 1 optional(:users).array :string
  19. 1 optional(:teams).array :string
  20. 1 optional(:apps).array :string
  21. end
  22. 1 optional(:require_code_owner_reviews).filled :bool
  23. 1 optional(:required_approving_review_count).filled :integer
  24. end
  25. 1 required(:required_status_checks).hash do
  26. 1 required(:strict).filled :bool
  27. 1 required(:contexts).array(:string)
  28. end
  29. 1 required(:restrictions).maybe(:hash) do
  30. 1 required(:users).array :string
  31. 1 required(:teams).array :string
  32. 1 optional(:apps).array :string
  33. end
  34. 1 optional(:allow_deletions).filled :bool
  35. 1 optional(:allow_force_pushes).filled :bool
  36. 1 optional(:block_creations).filled :bool
  37. 1 optional(:required_conversation_resolution).filled :bool
  38. 1 optional(:required_linear_history).filled :bool
  39. end
  40. end
  41. end
  42. end
  43. end
  44. end

lib/ghub/endpoints/branches/protection/responses/show.rb

100.0% lines covered

100.0% branches covered

17 relevant lines. 17 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Branches
  5. 1 module Protection
  6. 1 module Responses
  7. # Defines a brnach protection response.
  8. 1 Show = Dry::Schema.Params do
  9. 2 required(:allow_deletions).hash { required(:enabled).filled :bool }
  10. 2 required(:allow_force_pushes).hash { required(:enabled).filled :bool }
  11. 2 required(:block_creations).hash { required(:enabled).filled :bool }
  12. 1 required(:enforce_admins).hash(Ghub::Responses::BooleanLink)
  13. 2 required(:required_conversation_resolution).hash { required(:enabled).filled :bool }
  14. 2 required(:required_linear_history).hash { required(:enabled).filled :bool }
  15. 1 required(:required_signatures).hash(Ghub::Responses::BooleanLink)
  16. 1 required(:required_status_checks).hash(Ghub::Responses::StatusCheck)
  17. 1 required(:url).filled :string
  18. 1 optional(:required_pull_request_reviews).hash(Ghub::Responses::Review)
  19. 1 optional(:restrictions).hash(Ghub::Responses::Restriction)
  20. end
  21. end
  22. end
  23. end
  24. end
  25. end

lib/ghub/endpoints/branches/protection/root.rb

100.0% lines covered

100.0% branches covered

11 relevant lines. 11 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Branches
  5. 1 module Protection
  6. # Provides access to the branch protection API endpoint.
  7. 1 class Root
  8. 1 include Ghub::Dependencies[:api]
  9. 1 include Dependencies[show_action: "actions.show", update_action: "actions.update"]
  10. 1 def show(...) = show_action.call(...)
  11. 1 def update(...) = update_action.call(...)
  12. 1 def destroy owner, repository, branch
  13. 2 api.delete "repos/#{owner}/#{repository}/branches/#{branch}/protection"
  14. end
  15. end
  16. end
  17. end
  18. end
  19. end

lib/ghub/endpoints/branches/signature/container.rb

100.0% lines covered

100.0% branches covered

11 relevant lines. 11 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "containable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Branches
  6. 1 module Signature
  7. # Defines branch signature dependencies.
  8. 1 module Container
  9. 1 extend Containable
  10. 1 namespace :responses do
  11. 1 register :show, Ghub::Responses::BooleanLink
  12. end
  13. 1 namespace :models do
  14. 1 register :show, Ghub::Models::BooleanLink
  15. end
  16. end
  17. end
  18. end
  19. end
  20. end

lib/ghub/endpoints/branches/signature/dependencies.rb

100.0% lines covered

100.0% branches covered

6 relevant lines. 6 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "infusible"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Branches
  6. 1 module Signature
  7. 1 Dependencies = Infusible[Container]
  8. end
  9. end
  10. end
  11. end

lib/ghub/endpoints/branches/signature/root.rb

100.0% lines covered

100.0% branches covered

21 relevant lines. 21 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "pipeable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Branches
  6. 1 module Signature
  7. # Provides access to the branch signature API endpoint.
  8. 1 class Root
  9. 1 include Ghub::Dependencies[:api]
  10. 1 include Dependencies[response: "responses.show", model: "models.show"]
  11. 1 include Pipeable
  12. 1 PATH = "repos/%<owner>s/%<repository>s/branches/%<branch>s/protection/required_signatures"
  13. 1 def initialize(path: PATH, **)
  14. 5 super(**)
  15. 5 @path = path
  16. end
  17. 1 def show owner, repository, branch
  18. 1 pipe format(path, owner:, repository:, branch:),
  19. to(api, :get),
  20. try(:parse, catch: JSON::ParserError),
  21. validate(response, as: :to_h),
  22. to(model, :for)
  23. end
  24. 1 def create owner, repository, branch
  25. 1 pipe format(path, owner:, repository:, branch:),
  26. to(api, :post),
  27. try(:parse, catch: JSON::ParserError),
  28. validate(response, as: :to_h),
  29. to(model, :for)
  30. end
  31. 1 def destroy owner, repository, branch
  32. 2 api.delete format(path, owner:, repository:, branch:)
  33. end
  34. 1 private
  35. 1 attr_reader :path
  36. end
  37. end
  38. end
  39. end
  40. end

lib/ghub/endpoints/container.rb

100.0% lines covered

100.0% branches covered

12 relevant lines. 12 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "containable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. # Defines endpoint dependencies.
  6. 1 module Container
  7. 1 extend Containable
  8. 2 register(:branch_protection) { Endpoints::Branches::Protection::Root.new }
  9. 2 register(:branch_signature) { Endpoints::Branches::Signature::Root.new }
  10. 2 register(:organization_members) { Endpoints::Organizations::Members::Root.new }
  11. 2 register(:pulls) { Endpoints::Pulls::Root.new }
  12. 2 register(:repositories) { Endpoints::Repositories::Root.new }
  13. 2 register(:search_users) { Endpoints::Search::Users::Root.new }
  14. 2 register(:users) { Endpoints::Users::Root.new }
  15. end
  16. end
  17. end

lib/ghub/endpoints/dependencies.rb

100.0% lines covered

100.0% branches covered

4 relevant lines. 4 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "infusible"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 Dependencies = Infusible[Container]
  6. end
  7. end

lib/ghub/endpoints/organizations/members/actions/index.rb

100.0% lines covered

100.0% branches covered

14 relevant lines. 14 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "pipeable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Organizations
  6. 1 module Members
  7. 1 module Actions
  8. # Handles an organization member index action.
  9. 1 class Index
  10. 1 include Ghub::Dependencies[:api]
  11. 1 include Dependencies[response: "responses.index", model: "models.show"]
  12. 1 include Pipeable
  13. 1 def call owner, **parameters
  14. 3 pipe(
  15. "orgs/#{owner}/members",
  16. insert(parameters),
  17. to(api, :get),
  18. try(:parse, catch: JSON::ParserError),
  19. 2 fmap { |body| {body:} },
  20. validate(response, as: :to_h),
  21. as(:fetch, :body),
  22. 2 map { |item| model.for(**item) }
  23. )
  24. end
  25. end
  26. end
  27. end
  28. end
  29. end
  30. end

lib/ghub/endpoints/organizations/members/container.rb

100.0% lines covered

100.0% branches covered

13 relevant lines. 13 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "containable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Organizations
  6. 1 module Members
  7. # Defines member dependencies.
  8. 1 module Container
  9. 1 extend Containable
  10. 1 namespace :responses do
  11. 1 register :index, Responses::Index
  12. end
  13. 1 namespace :models do
  14. 1 register :show, Ghub::Models::User
  15. end
  16. 1 namespace :actions do
  17. 2 register(:index) { Actions::Index.new }
  18. end
  19. end
  20. end
  21. end
  22. end
  23. end

lib/ghub/endpoints/organizations/members/dependencies.rb

100.0% lines covered

100.0% branches covered

6 relevant lines. 6 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "infusible"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Organizations
  6. 1 module Members
  7. 1 Dependencies = Infusible[Container]
  8. end
  9. end
  10. end
  11. end

lib/ghub/endpoints/organizations/members/responses/index.rb

100.0% lines covered

100.0% branches covered

6 relevant lines. 6 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Organizations
  5. 1 module Members
  6. 1 module Responses
  7. # Defines a collection of members.
  8. 2 Index = Dry::Schema.Params { required(:body).array :hash, Ghub::Responses::User }
  9. end
  10. end
  11. end
  12. end
  13. end

lib/ghub/endpoints/organizations/members/root.rb

100.0% lines covered

100.0% branches covered

7 relevant lines. 7 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Organizations
  5. 1 module Members
  6. # Provides access to the organization members API endpoint.
  7. 1 class Root
  8. 1 include Dependencies[index_action: "actions.index"]
  9. 1 def index(...) = index_action.call(...)
  10. end
  11. end
  12. end
  13. end
  14. end

lib/ghub/endpoints/pulls/actions/index.rb

100.0% lines covered

100.0% branches covered

13 relevant lines. 13 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "pipeable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Pulls
  6. 1 module Actions
  7. # Handles a repository index action.
  8. 1 class Index
  9. 1 include Ghub::Dependencies[:api]
  10. 1 include Dependencies[response: "responses.index", model: "models.show"]
  11. 1 include Pipeable
  12. 1 def call owner, repository, **parameters
  13. 3 pipe(
  14. api.get("repos/#{owner}/#{repository}/pulls", **parameters),
  15. try(:parse, catch: JSON::ParserError),
  16. 2 fmap { |body| {body:} },
  17. validate(response, as: :to_h),
  18. as(:fetch, :body),
  19. 2 map { |item| model.for(**item) }
  20. )
  21. end
  22. end
  23. end
  24. end
  25. end
  26. end

lib/ghub/endpoints/pulls/actions/show.rb

100.0% lines covered

100.0% branches covered

11 relevant lines. 11 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "pipeable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Pulls
  6. 1 module Actions
  7. # Handles a repository index action.
  8. 1 class Show
  9. 1 include Ghub::Dependencies[:api]
  10. 1 include Dependencies[response: "responses.show", model: "models.show"]
  11. 1 include Pipeable
  12. 1 def call owner, repository, id, **parameters
  13. 4 pipe(
  14. api.get("repos/#{owner}/#{repository}/pulls/#{id}", **parameters),
  15. try(:parse, catch: JSON::ParserError),
  16. validate(response, as: :to_h),
  17. to(model, :for)
  18. )
  19. end
  20. end
  21. end
  22. end
  23. end
  24. end

lib/ghub/endpoints/pulls/container.rb

100.0% lines covered

100.0% branches covered

14 relevant lines. 14 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "containable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Pulls
  6. # Defines pull request dependencies.
  7. 1 module Container
  8. 1 extend Containable
  9. 1 namespace :responses do
  10. 1 register :index, Responses::Index
  11. 1 register :show, Responses::Show
  12. end
  13. 1 namespace :models do
  14. 1 register :show, Models::Show
  15. end
  16. 1 namespace :actions do
  17. 2 register(:index) { Actions::Index.new }
  18. 2 register(:show) { Actions::Show.new }
  19. end
  20. end
  21. end
  22. end
  23. end

lib/ghub/endpoints/pulls/dependencies.rb

100.0% lines covered

100.0% branches covered

5 relevant lines. 5 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "infusible"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Pulls
  6. 1 Dependencies = Infusible[Container]
  7. end
  8. end
  9. end

lib/ghub/endpoints/pulls/models/show.rb

100.0% lines covered

100.0% branches covered

14 relevant lines. 14 lines covered and 0 lines missed.
2 total branches, 2 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Pulls
  5. 1 module Models
  6. # Defines a single pull request.
  7. 1 Show = Struct.new(
  8. :_links,
  9. :active_lock_reason,
  10. :additions,
  11. :assignee,
  12. :assignees,
  13. :author_association,
  14. :auto_merge,
  15. :base,
  16. :body,
  17. :changed_files,
  18. :closed_at,
  19. :comments,
  20. :comments_url,
  21. :commits,
  22. :commits_url,
  23. :created_at,
  24. :deletions,
  25. :diff_url,
  26. :draft,
  27. :head,
  28. :html_url,
  29. :id,
  30. :issue_url,
  31. :labels,
  32. :locked,
  33. :maintainer_can_modify,
  34. :mergeable,
  35. :merge_commit_sha,
  36. :mergeable_state,
  37. :merged,
  38. :merged_at,
  39. :merged_by,
  40. :milestone,
  41. :node_id,
  42. :number,
  43. :patch_url,
  44. :rebaseable,
  45. :requested_reviewers,
  46. :requested_teams,
  47. :review_comment_url,
  48. :review_comments,
  49. :review_comments_url,
  50. :state,
  51. :statuses_url,
  52. :title,
  53. :updated_at,
  54. :url,
  55. :user
  56. ) do
  57. 1 def self.for(**attributes)
  58. 6 assignee = attributes[:assignee]
  59. 6 new(
  60. **attributes.merge!(
  61. _links: Ghub::Models::Links.for(**attributes[:_links]),
  62. 6 then: 5 else: 1 assignee: (Ghub::Models::User[**assignee] if assignee),
  63. 6 assignees: attributes[:assignees].map { |data| Ghub::Models::User[**data] },
  64. base: Ghub::Models::Branch[**attributes[:base]],
  65. head: Ghub::Models::Branch[**attributes[:head]],
  66. 6 labels: attributes[:labels].map { |data| Ghub::Models::Label[**data] },
  67. user: Ghub::Models::User[**attributes[:user]]
  68. )
  69. )
  70. end
  71. 1 def initialize(**)
  72. 7 super
  73. 7 freeze
  74. end
  75. end
  76. end
  77. end
  78. end
  79. end

lib/ghub/endpoints/pulls/responses/index.rb

100.0% lines covered

100.0% branches covered

5 relevant lines. 5 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Pulls
  5. 1 module Responses
  6. # Defines a collection of pull requests.
  7. 2 Index = Dry::Schema.Params { required(:body).array :hash, Show }
  8. end
  9. end
  10. end
  11. end

lib/ghub/endpoints/pulls/responses/show.rb

100.0% lines covered

100.0% branches covered

53 relevant lines. 53 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Pulls
  5. 1 module Responses
  6. # Defines a single pull request.
  7. 1 Show = Dry::Schema.Params do
  8. 1 required(:_links).hash Ghub::Responses::Links
  9. 1 required(:active_lock_reason).maybe :string
  10. 1 required(:assignee).maybe :hash, Ghub::Responses::User
  11. 1 required(:assignees).array Ghub::Responses::User
  12. 1 required(:author_association).filled :string
  13. 1 required(:auto_merge).maybe :bool
  14. 1 required(:base).hash Ghub::Responses::Branch
  15. 1 required(:body).filled :string
  16. 1 required(:closed_at).filled :string
  17. 1 required(:comments_url).filled :string
  18. 1 required(:commits_url).filled :string
  19. 1 required(:created_at).filled :string
  20. 1 required(:diff_url).filled :string
  21. 1 required(:draft).filled :bool
  22. 1 required(:head).hash Ghub::Responses::Branch
  23. 1 required(:html_url).filled :string
  24. 1 required(:id).filled :integer
  25. 1 required(:issue_url).filled :string
  26. 1 required(:labels).array Ghub::Responses::Label
  27. 1 required(:locked).filled :bool
  28. 1 required(:merge_commit_sha).filled :string
  29. 1 required(:merged_at).maybe :date_time
  30. 1 required(:milestone).maybe :hash
  31. 1 required(:node_id).filled :string
  32. 1 required(:number).filled :integer
  33. 1 required(:patch_url).filled :string
  34. 1 required(:requested_reviewers).maybe :array
  35. 1 required(:requested_teams).maybe :array
  36. 1 required(:review_comment_url).filled :string
  37. 1 required(:review_comments_url).filled :string
  38. 1 required(:state).filled :string
  39. 1 required(:statuses_url).filled :string
  40. 1 required(:title).filled :string
  41. 1 required(:updated_at).filled :string
  42. 1 required(:url).filled :string
  43. 1 required(:user).hash Ghub::Responses::User
  44. 1 optional(:additions).filled :integer
  45. 1 optional(:changed_files).filled :integer
  46. 1 optional(:comments).filled :integer
  47. 1 optional(:commits).filled :integer
  48. 1 optional(:deletions).filled :integer
  49. 1 optional(:maintainer_can_modify).filled :bool
  50. 1 optional(:mergable).filled :bool
  51. 1 optional(:mergeable_state).filled :string
  52. 1 optional(:merged).filled :bool
  53. 1 optional(:merged_by).maybe :string
  54. 1 optional(:rebaseable).filled :bool
  55. 1 optional(:review_comments).filled :integer
  56. end
  57. end
  58. end
  59. end
  60. end

lib/ghub/endpoints/pulls/root.rb

100.0% lines covered

100.0% branches covered

7 relevant lines. 7 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Pulls
  5. # Provides access to the pulls API endpoint.
  6. 1 class Root
  7. 1 include Dependencies[index_action: "actions.index", show_action: "actions.show"]
  8. 1 def index(...) = index_action.call(...)
  9. 1 def show(...) = show_action.call(...)
  10. end
  11. end
  12. end
  13. end

lib/ghub/endpoints/repositories/actions/create.rb

100.0% lines covered

100.0% branches covered

12 relevant lines. 12 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "pipeable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Repositories
  6. 1 module Actions
  7. # Handles a repository create action.
  8. 1 class Create
  9. 1 include Ghub::Dependencies[:api]
  10. 1 include Dependencies[
  11. :path,
  12. request: "requests.create",
  13. response: "responses.show",
  14. model: "models.show"
  15. ]
  16. 1 include Pipeable
  17. 1 def call kind, body, owner: nil, **parameters
  18. 6 path.create(kind, owner:).bind do |url_path|
  19. 5 pipe body,
  20. validate(request),
  21. insert(url_path, at: 0),
  22. insert(parameters),
  23. to(api, :post),
  24. try(:parse, catch: JSON::ParserError),
  25. validate(response, as: :to_h),
  26. to(model, :for)
  27. end
  28. end
  29. end
  30. end
  31. end
  32. end
  33. end

lib/ghub/endpoints/repositories/actions/index.rb

100.0% lines covered

100.0% branches covered

13 relevant lines. 13 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "pipeable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Repositories
  6. 1 module Actions
  7. # Handles a repository index action.
  8. 1 class Index
  9. 1 include Ghub::Dependencies[:api]
  10. 1 include Dependencies[:path, response: "responses.index", model: "models.show"]
  11. 1 include Pipeable
  12. 1 def call kind, owner, **parameters
  13. 4 pipe(
  14. path.index(kind, owner),
  15. insert(parameters),
  16. to(api, :get),
  17. try(:parse, catch: JSON::ParserError),
  18. 3 fmap { |body| {body:} },
  19. validate(response, as: :to_h),
  20. as(:fetch, :body),
  21. 3 map { |item| model.for(**item) }
  22. )
  23. end
  24. end
  25. end
  26. end
  27. end
  28. end

lib/ghub/endpoints/repositories/actions/patch.rb

100.0% lines covered

100.0% branches covered

12 relevant lines. 12 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "pipeable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Repositories
  6. 1 module Actions
  7. # Handles a repository patch action.
  8. 1 class Patch
  9. 1 include Ghub::Dependencies[:api]
  10. 1 include Dependencies[
  11. :path,
  12. request: "requests.patch",
  13. response: "responses.show",
  14. model: "models.show"
  15. ]
  16. 1 include Pipeable
  17. 1 def call owner, id, body, **parameters
  18. 5 path.patch(owner, id).bind do |url_path|
  19. 5 pipe body,
  20. validate(request),
  21. insert(url_path, at: 0),
  22. insert(parameters),
  23. to(api, :patch),
  24. try(:parse, catch: JSON::ParserError),
  25. validate(response, as: :to_h),
  26. to(model, :for)
  27. end
  28. end
  29. end
  30. end
  31. end
  32. end
  33. end

lib/ghub/endpoints/repositories/actions/show.rb

100.0% lines covered

100.0% branches covered

11 relevant lines. 11 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "pipeable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Repositories
  6. 1 module Actions
  7. # Handles a repository show action.
  8. 1 class Show
  9. 1 include Ghub::Dependencies[:api]
  10. 1 include Dependencies[:path, response: "responses.show", model: "models.show"]
  11. 1 include Pipeable
  12. 1 def call owner, id, **parameters
  13. 5 pipe path.show(owner, id),
  14. insert(parameters),
  15. to(api, :get),
  16. try(:parse, catch: JSON::ParserError),
  17. validate(response, as: :to_h),
  18. to(model, :for)
  19. end
  20. end
  21. end
  22. end
  23. end
  24. end

lib/ghub/endpoints/repositories/container.rb

100.0% lines covered

100.0% branches covered

20 relevant lines. 20 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "containable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Repositories
  6. # Defines repository dependencies.
  7. 1 module Container
  8. 1 extend Containable
  9. 1 namespace :requests do
  10. 1 register :create, Requests::Create
  11. 1 register :patch, Requests::Patch
  12. end
  13. 1 namespace :responses do
  14. 1 register :index, Responses::Index
  15. 1 register :show, Ghub::Responses::Repository
  16. end
  17. 1 namespace :models do
  18. 1 register :show, Ghub::Models::Repository
  19. end
  20. 2 register(:path) { Path.new }
  21. 1 namespace :actions do
  22. 2 register(:create) { Actions::Create.new }
  23. 2 register(:index) { Actions::Index.new }
  24. 2 register(:patch) { Actions::Patch.new }
  25. 2 register(:show) { Actions::Show.new }
  26. end
  27. end
  28. end
  29. end
  30. end

lib/ghub/endpoints/repositories/dependencies.rb

100.0% lines covered

100.0% branches covered

5 relevant lines. 5 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "infusible"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Repositories
  6. 1 Dependencies = Infusible[Container]
  7. end
  8. end
  9. end

lib/ghub/endpoints/repositories/path.rb

100.0% lines covered

100.0% branches covered

25 relevant lines. 25 lines covered and 0 lines missed.
7 total branches, 7 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "dry/monads"
  3. 1 require "refinements/array"
  4. 1 module Ghub
  5. 1 module Endpoints
  6. 1 module Repositories
  7. # Dynamically builds API repository path sfor users or organizations.
  8. 1 class Path
  9. 1 include Dry::Monads[:result]
  10. 1 using Refinements::Array
  11. 1 KINDS = %w[users orgs].freeze
  12. 1 def initialize kinds: KINDS
  13. 15 @kinds = kinds
  14. end
  15. 1 def index kind, owner
  16. 9 then: 8 else: 1 kinds.include?(kind.to_s) ? Success("#{kind}/#{owner}/repos") : error(kind)
  17. end
  18. 1 def show(...) = resource(...)
  19. 1 def create kind, owner: nil
  20. 12 when: 6 case kind.to_s
  21. 6 when "users" then Success "user/repos"
  22. when: 4 when "orgs"
  23. 4 else: 2 then: 3 else: 1 owner ? Success("orgs/#{owner}/repos") : Failure("Organization name is missing.")
  24. 2 else error kind
  25. end
  26. end
  27. 1 def patch(...) = resource(...)
  28. 1 def destroy(...) = resource(...)
  29. 1 private
  30. 1 attr_reader :kinds
  31. 1 def resource(owner, id) = Success "repos/#{owner}/#{id}"
  32. 1 def error(kind) = Failure %(Invalid kind: #{kind.inspect}. Use: #{kinds.to_usage "or"}.)
  33. end
  34. end
  35. end
  36. end

lib/ghub/endpoints/repositories/requests/create.rb

100.0% lines covered

100.0% branches covered

23 relevant lines. 23 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Repositories
  5. 1 module Requests
  6. # Defines the data structure for creating a repository.
  7. 1 Create = Dry::Schema.JSON do
  8. 1 required(:name).filled :string
  9. 1 optional(:allow_auto_merge).filled :bool
  10. 1 optional(:allow_merge_commit).filled :bool
  11. 1 optional(:allow_rebase_merge).filled :bool
  12. 1 optional(:allow_squash_merge).filled :bool
  13. 1 optional(:auto_init).filled :bool
  14. 1 optional(:delete_branch_on_merge).filled :bool
  15. 1 optional(:description).filled :string
  16. 1 optional(:gitignore_template).filled :string
  17. 1 optional(:has_downloads).filled :bool
  18. 1 optional(:has_issues).filled :bool
  19. 1 optional(:has_projects).filled :bool
  20. 1 optional(:has_wiki).filled :bool
  21. 1 optional(:homepage).filled :string
  22. 1 optional(:is_template).filled :bool
  23. 1 optional(:license_template).filled :string
  24. 1 optional(:private).filled :bool
  25. 1 optional(:team_id).filled :integer
  26. end
  27. end
  28. end
  29. end
  30. end

lib/ghub/endpoints/repositories/requests/patch.rb

100.0% lines covered

100.0% branches covered

27 relevant lines. 27 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Repositories
  5. 1 module Requests
  6. # Defines the data structure for patching a repository.
  7. 1 Patch = Dry::Schema.JSON do
  8. 1 optional(:allow_auto_merge).filled :bool
  9. 1 optional(:allow_forking).filled :bool
  10. 1 optional(:allow_merge_commit).filled :bool
  11. 1 optional(:allow_rebase_merge).filled :bool
  12. 1 optional(:allow_squash_merge).filled :bool
  13. 1 optional(:archived).filled :bool
  14. 1 optional(:default_branch).filled :string
  15. 1 optional(:delete_branch_on_merge).filled :bool
  16. 1 optional(:description).filled :string
  17. 1 optional(:has_issues).filled :bool
  18. 1 optional(:has_projects).filled :bool
  19. 1 optional(:has_wiki).filled :bool
  20. 1 optional(:homepage).filled :string
  21. 1 optional(:is_template).filled :bool
  22. 1 optional(:name).filled :string
  23. 1 optional(:private).filled :bool
  24. 1 optional(:security_and_analysis).hash do
  25. 2 optional(:advanced_security).hash { required(:status).filled :string }
  26. 2 optional(:secret_scanning).hash { required(:status).filled :string }
  27. 2 optional(:secret_scanning_push_protection).hash { required(:status).filled :string }
  28. end
  29. 1 optional(:use_squash_pr_title_as_default).filled :bool
  30. 1 optional(:visibility).filled :bool
  31. end
  32. end
  33. end
  34. end
  35. end

lib/ghub/endpoints/repositories/responses/index.rb

100.0% lines covered

100.0% branches covered

5 relevant lines. 5 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Repositories
  5. 1 module Responses
  6. # Defines a repository within a collection.
  7. 2 Index = Dry::Schema.Params { required(:body).array :hash, Show }
  8. end
  9. end
  10. end
  11. end

lib/ghub/endpoints/repositories/responses/show.rb

100.0% lines covered

100.0% branches covered

88 relevant lines. 88 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Repositories
  5. 1 module Responses
  6. # Defines a repository.
  7. 1 Show = Dry::Schema.Params do
  8. 1 required(:allow_forking).filled :bool
  9. 1 required(:archive_url).filled :string
  10. 1 required(:archived).filled :bool
  11. 1 required(:assignees_url).filled :string
  12. 1 required(:blobs_url).filled :string
  13. 1 required(:branches_url).filled :string
  14. 1 required(:clone_url).filled :string
  15. 1 required(:collaborators_url).filled :string
  16. 1 required(:comments_url).filled :string
  17. 1 required(:commits_url).filled :string
  18. 1 required(:compare_url).filled :string
  19. 1 required(:contents_url).filled :string
  20. 1 required(:contributors_url).filled :string
  21. 1 required(:created_at).filled :date_time
  22. 1 required(:default_branch).filled :string
  23. 1 required(:deployments_url).filled :string
  24. 1 required(:description).maybe :string
  25. 1 required(:disabled).filled :bool
  26. 1 required(:downloads_url).filled :string
  27. 1 required(:events_url).filled :string
  28. 1 required(:fork).filled :bool
  29. 1 required(:forks).filled :integer
  30. 1 required(:forks_count).filled :integer
  31. 1 required(:forks_url).filled :string
  32. 1 required(:full_name).filled :string
  33. 1 required(:git_commits_url).filled :string
  34. 1 required(:git_refs_url).filled :string
  35. 1 required(:git_tags_url).filled :string
  36. 1 required(:git_url).filled :string
  37. 1 required(:has_downloads).filled :bool
  38. 1 required(:has_issues).filled :bool
  39. 1 required(:has_pages).filled :bool
  40. 1 required(:has_projects).filled :bool
  41. 1 required(:has_wiki).filled :bool
  42. 1 required(:homepage).maybe :string
  43. 1 required(:hooks_url).filled :string
  44. 1 required(:html_url).filled :string
  45. 1 required(:id).filled :integer
  46. 1 required(:is_template).filled :bool
  47. 1 required(:issue_comment_url).filled :string
  48. 1 required(:issue_events_url).filled :string
  49. 1 required(:issues_url).filled :string
  50. 1 required(:keys_url).filled :string
  51. 1 required(:labels_url).filled :string
  52. 1 required(:language).maybe :string
  53. 1 required(:languages_url).filled :string
  54. 1 required(:license).maybe :hash, Ghub::Responses::License
  55. 1 required(:merges_url).filled :string
  56. 1 required(:milestones_url).filled :string
  57. 1 required(:mirror_url).maybe :string
  58. 1 required(:name).filled :string
  59. 1 required(:node_id).filled :string
  60. 1 required(:notifications_url).filled :string
  61. 1 required(:open_issues).filled :integer
  62. 1 required(:open_issues_count).filled :integer
  63. 1 required(:owner).hash Ghub::Responses::User
  64. 1 required(:private).filled :bool
  65. 1 required(:pulls_url).filled :string
  66. 1 required(:pushed_at).filled :date_time
  67. 1 required(:releases_url).filled :string
  68. 1 required(:size).filled :integer
  69. 1 required(:ssh_url).filled :string
  70. 1 required(:stargazers_count).filled :integer
  71. 1 required(:stargazers_url).filled :string
  72. 1 required(:statuses_url).filled :string
  73. 1 required(:subscribers_url).filled :string
  74. 1 required(:subscription_url).filled :string
  75. 1 required(:svn_url).filled :string
  76. 1 required(:tags_url).filled :string
  77. 1 required(:teams_url).filled :string
  78. 1 required(:topics).array(:str?)
  79. 1 required(:trees_url).filled :string
  80. 1 required(:updated_at).filled :date_time
  81. 1 required(:url).filled :string
  82. 1 required(:visibility).filled :string
  83. 1 required(:watchers).filled :integer
  84. 1 required(:watchers_count).filled :integer
  85. 1 required(:web_commit_signoff_required).filled :bool
  86. 1 optional(:network_count).filled :integer
  87. 1 optional(:organization).hash Ghub::Responses::User
  88. 1 optional(:permissions).hash Ghub::Responses::Permission
  89. 1 optional(:subscribers_count).filled :integer
  90. 1 optional(:temp_clone_token).maybe :string
  91. end
  92. end
  93. end
  94. end
  95. end

lib/ghub/endpoints/repositories/root.rb

100.0% lines covered

100.0% branches covered

11 relevant lines. 11 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Repositories
  5. # Provides access to the users API endpoint.
  6. 1 class Root
  7. 1 include Ghub::Dependencies[:api]
  8. 1 include Dependencies[
  9. create_action: "actions.create",
  10. index_action: "actions.index",
  11. patch_action: "actions.patch",
  12. show_action: "actions.show"
  13. ]
  14. 1 def index(...) = index_action.call(...)
  15. 1 def show(...) = show_action.call(...)
  16. 1 def create(...) = create_action.call(...)
  17. 1 def patch(...) = patch_action.call(...)
  18. 1 def destroy(owner, id) = api.delete "repos/#{owner}/#{id}"
  19. end
  20. end
  21. end
  22. end

lib/ghub/endpoints/search/users/actions/index.rb

100.0% lines covered

100.0% branches covered

13 relevant lines. 13 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "pipeable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Search
  6. 1 module Users
  7. 1 module Actions
  8. # Handles a user index action.
  9. 1 class Index
  10. 1 include Ghub::Dependencies[:api]
  11. 1 include Dependencies[response: "responses.index", model: "models.index"]
  12. 1 include Pipeable
  13. 1 def call **parameters
  14. 4 pipe(
  15. api.get("search/users", **parameters),
  16. try(:parse, catch: JSON::ParserError),
  17. validate(response, as: :to_h),
  18. as(:fetch, :items),
  19. 2 map { |item| model.for(**item) }
  20. )
  21. end
  22. end
  23. end
  24. end
  25. end
  26. end
  27. end

lib/ghub/endpoints/search/users/container.rb

100.0% lines covered

100.0% branches covered

13 relevant lines. 13 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "containable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Search
  6. 1 module Users
  7. # Defines user dependencies.
  8. 1 module Container
  9. 1 extend Containable
  10. 1 namespace :responses do
  11. 1 register :index, Responses::Index
  12. end
  13. 1 namespace :models do
  14. 1 register :index, Models::Index
  15. end
  16. 1 namespace :actions do
  17. 2 register(:index) { Actions::Index.new }
  18. end
  19. end
  20. end
  21. end
  22. end
  23. end

lib/ghub/endpoints/search/users/dependencies.rb

100.0% lines covered

100.0% branches covered

6 relevant lines. 6 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "infusible"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Search
  6. 1 module Users
  7. 1 Dependencies = Infusible[Container]
  8. end
  9. end
  10. end
  11. end

lib/ghub/endpoints/search/users/models/index.rb

100.0% lines covered

100.0% branches covered

10 relevant lines. 10 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Search
  5. 1 module Users
  6. 1 module Models
  7. # Defines a user within a collection.
  8. 1 Index = Struct.new(
  9. :avatar_url,
  10. :events_url,
  11. :followers_url,
  12. :following_url,
  13. :gists_url,
  14. :gravatar_id,
  15. :html_url,
  16. :id,
  17. :login,
  18. :node_id,
  19. :organizations_url,
  20. :received_events_url,
  21. :repos_url,
  22. :score,
  23. :site_admin,
  24. :starred_url,
  25. :subscriptions_url,
  26. :type,
  27. :url
  28. ) do
  29. 1 def self.for(**) = new(**)
  30. 1 def initialize(**)
  31. 3 super
  32. 3 freeze
  33. end
  34. end
  35. end
  36. end
  37. end
  38. end
  39. end

lib/ghub/endpoints/search/users/responses/index.rb

100.0% lines covered

100.0% branches covered

28 relevant lines. 28 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Search
  5. 1 module Users
  6. 1 module Responses
  7. # Defines a user within a collection.
  8. 1 Index = Dry::Schema.Params do
  9. 1 required(:total_count).filled :integer
  10. 1 required(:incomplete_results).filled :bool
  11. 1 required(:items).array(:hash) do
  12. 1 required(:avatar_url).filled :string
  13. 1 required(:events_url).filled :string
  14. 1 required(:followers_url).filled :string
  15. 1 required(:following_url).filled :string
  16. 1 required(:gists_url).filled :string
  17. 1 required(:gravatar_id).maybe :string
  18. 1 required(:html_url).filled :string
  19. 1 required(:id).filled :integer
  20. 1 required(:login).filled :string
  21. 1 required(:node_id).filled :string
  22. 1 required(:organizations_url).filled :string
  23. 1 required(:received_events_url).filled :string
  24. 1 required(:repos_url).filled :string
  25. 1 required(:score).filled :float
  26. 1 required(:site_admin).filled :bool
  27. 1 required(:starred_url).filled :string
  28. 1 required(:subscriptions_url).filled :string
  29. 1 required(:type).filled :string
  30. 1 required(:url).filled :string
  31. end
  32. end
  33. end
  34. end
  35. end
  36. end
  37. end

lib/ghub/endpoints/search/users/root.rb

100.0% lines covered

100.0% branches covered

7 relevant lines. 7 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Search
  5. 1 module Users
  6. # Provides access to the search API endpoint for users.
  7. 1 class Root
  8. 1 include Dependencies[index_action: "actions.index"]
  9. 1 def index(...) = index_action.call(...)
  10. end
  11. end
  12. end
  13. end
  14. end

lib/ghub/endpoints/users/actions/index.rb

100.0% lines covered

100.0% branches covered

13 relevant lines. 13 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "pipeable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Users
  6. 1 module Actions
  7. # Handles a user index action.
  8. 1 class Index
  9. 1 include Ghub::Dependencies[:api]
  10. 1 include Dependencies[response: "responses.index", model: "models.index"]
  11. 1 include Pipeable
  12. 1 def call **parameters
  13. 4 pipe(
  14. api.get("users", **parameters),
  15. try(:parse, catch: JSON::ParserError),
  16. 3 fmap { |body| {body:} },
  17. validate(response, as: :to_h),
  18. as(:fetch, :body),
  19. 2 map { |item| model.for(**item) }
  20. )
  21. end
  22. end
  23. end
  24. end
  25. end
  26. end

lib/ghub/endpoints/users/actions/show.rb

100.0% lines covered

100.0% branches covered

11 relevant lines. 11 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "pipeable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Users
  6. 1 module Actions
  7. # Handles a user show action.
  8. 1 class Show
  9. 1 include Ghub::Dependencies[:api]
  10. 1 include Dependencies[response: "responses.show", model: "models.show"]
  11. 1 include Pipeable
  12. 1 def call id, **parameters
  13. 5 pipe api.get("users/#{id}", **parameters),
  14. try(:parse, catch: JSON::ParserError),
  15. validate(response, as: :to_h),
  16. to(model, :for)
  17. end
  18. end
  19. end
  20. end
  21. end
  22. end

lib/ghub/endpoints/users/container.rb

100.0% lines covered

100.0% branches covered

15 relevant lines. 15 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "containable"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Users
  6. # Defines user dependencies.
  7. 1 module Container
  8. 1 extend Containable
  9. 1 namespace :responses do
  10. 1 register :index, Responses::Index
  11. 1 register :show, Responses::Show
  12. end
  13. 1 namespace :models do
  14. 1 register :index, Models::Index
  15. 1 register :show, Models::Show
  16. end
  17. 1 namespace :actions do
  18. 2 register(:index) { Actions::Index.new }
  19. 2 register(:show) { Actions::Show.new }
  20. end
  21. end
  22. end
  23. end
  24. end

lib/ghub/endpoints/users/dependencies.rb

100.0% lines covered

100.0% branches covered

5 relevant lines. 5 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 require "infusible"
  3. 1 module Ghub
  4. 1 module Endpoints
  5. 1 module Users
  6. 1 Dependencies = Infusible[Container]
  7. end
  8. end
  9. end

lib/ghub/endpoints/users/models/index.rb

100.0% lines covered

100.0% branches covered

9 relevant lines. 9 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Users
  5. 1 module Models
  6. # Defines a user within a collection.
  7. 1 Index = Struct.new(
  8. :avatar_url,
  9. :events_url,
  10. :followers_url,
  11. :following_url,
  12. :gists_url,
  13. :gravatar_id,
  14. :html_url,
  15. :id,
  16. :login,
  17. :node_id,
  18. :organizations_url,
  19. :received_events_url,
  20. :repos_url,
  21. :site_admin,
  22. :starred_url,
  23. :subscriptions_url,
  24. :type,
  25. :url
  26. ) do
  27. 1 def self.for(**) = new(**)
  28. 1 def initialize(**)
  29. 3 super
  30. 3 freeze
  31. end
  32. end
  33. end
  34. end
  35. end
  36. end

lib/ghub/endpoints/users/models/show.rb

100.0% lines covered

100.0% branches covered

9 relevant lines. 9 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Users
  5. 1 module Models
  6. # Defines a single user.
  7. 1 Show = Struct.new(
  8. :avatar_url,
  9. :bio,
  10. :blog,
  11. :company,
  12. :created_at,
  13. :email,
  14. :events_url,
  15. :followers,
  16. :followers_url,
  17. :following,
  18. :following_url,
  19. :gists_url,
  20. :gravatar_id,
  21. :hireable,
  22. :html_url,
  23. :id,
  24. :location,
  25. :login,
  26. :name,
  27. :node_id,
  28. :organizations_url,
  29. :public_gists,
  30. :public_repos,
  31. :received_events_url,
  32. :repos_url,
  33. :site_admin,
  34. :starred_url,
  35. :subscriptions_url,
  36. :twitter_username,
  37. :type,
  38. :updated_at,
  39. :url
  40. ) do
  41. 1 def self.for(**) = new(**)
  42. 1 def initialize(**)
  43. 3 super
  44. 3 freeze
  45. end
  46. end
  47. end
  48. end
  49. end
  50. end

lib/ghub/endpoints/users/responses/index.rb

100.0% lines covered

100.0% branches covered

24 relevant lines. 24 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Users
  5. 1 module Responses
  6. # Defines a user within a collection.
  7. 1 Index = Dry::Schema.JSON do
  8. 1 required(:body).array(:hash) do
  9. 1 required(:avatar_url).filled :string
  10. 1 required(:events_url).filled :string
  11. 1 required(:followers_url).filled :string
  12. 1 required(:following_url).filled :string
  13. 1 required(:gists_url).filled :string
  14. 1 required(:gravatar_id).maybe :string
  15. 1 required(:html_url).filled :string
  16. 1 required(:id).filled :integer
  17. 1 required(:login).filled :string
  18. 1 required(:node_id).filled :string
  19. 1 required(:organizations_url).filled :string
  20. 1 required(:received_events_url).filled :string
  21. 1 required(:repos_url).filled :string
  22. 1 required(:site_admin).filled :bool
  23. 1 required(:starred_url).filled :string
  24. 1 required(:subscriptions_url).filled :string
  25. 1 required(:type).filled :string
  26. 1 required(:url).filled :string
  27. end
  28. end
  29. end
  30. end
  31. end
  32. end

lib/ghub/endpoints/users/responses/show.rb

100.0% lines covered

100.0% branches covered

37 relevant lines. 37 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Users
  5. 1 module Responses
  6. # Defines a single user.
  7. 1 Show = Dry::Schema.JSON do
  8. 1 required(:avatar_url).filled :string
  9. 1 required(:bio).maybe :string
  10. 1 required(:blog).maybe :string
  11. 1 required(:company).maybe :string
  12. 1 required(:created_at).filled :date_time
  13. 1 required(:email).maybe :string
  14. 1 required(:events_url).filled :string
  15. 1 required(:followers).filled :integer
  16. 1 required(:followers_url).filled :string
  17. 1 required(:following).filled :integer
  18. 1 required(:following_url).filled :string
  19. 1 required(:gists_url).filled :string
  20. 1 required(:gravatar_id).maybe :string
  21. 1 required(:hireable).maybe :string
  22. 1 required(:html_url).filled :string
  23. 1 required(:id).filled :integer
  24. 1 required(:location).maybe :string
  25. 1 required(:login).filled :string
  26. 1 required(:name).maybe :string
  27. 1 required(:node_id).filled :string
  28. 1 required(:organizations_url).filled :string
  29. 1 required(:public_gists).filled :integer
  30. 1 required(:public_repos).filled :integer
  31. 1 required(:received_events_url).filled :string
  32. 1 required(:repos_url).filled :string
  33. 1 required(:site_admin).filled :bool
  34. 1 required(:starred_url).filled :string
  35. 1 required(:subscriptions_url).filled :string
  36. 1 required(:twitter_username).maybe :string
  37. 1 required(:type).filled :string
  38. 1 required(:updated_at).filled :date_time
  39. 1 required(:url).filled :string
  40. end
  41. end
  42. end
  43. end
  44. end

lib/ghub/endpoints/users/root.rb

100.0% lines covered

100.0% branches covered

7 relevant lines. 7 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Endpoints
  4. 1 module Users
  5. # Provides access to the users API endpoint.
  6. 1 class Root
  7. 1 include Dependencies[index_action: "actions.index", show_action: "actions.show"]
  8. 1 def index(...) = index_action.call(...)
  9. 1 def show(...) = show_action.call(...)
  10. end
  11. end
  12. end
  13. end

lib/ghub/models/application.rb

100.0% lines covered

100.0% branches covered

8 relevant lines. 8 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. # Defines an application.
  5. 1 Application = Struct.new(
  6. :created_at,
  7. :description,
  8. :events,
  9. :external_url,
  10. :html_url,
  11. :id,
  12. :name,
  13. :node_id,
  14. :owner,
  15. :permissions,
  16. :slug,
  17. :updated_at
  18. ) do
  19. 1 def self.for(**attributes)
  20. 1 new(
  21. **attributes.merge!(
  22. owner: Owner[**attributes[:owner]],
  23. permissions: Permissions::Branch[**attributes[:permissions]]
  24. )
  25. )
  26. end
  27. 1 def initialize(**)
  28. 5 super
  29. 5 freeze
  30. end
  31. end
  32. end
  33. end

lib/ghub/models/boolean_link.rb

100.0% lines covered

100.0% branches covered

7 relevant lines. 7 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. # Defines a boolean link.
  5. 1 BooleanLink = Struct.new :enabled, :url do
  6. 1 def self.for(**) = new(**)
  7. 1 def initialize(**)
  8. 12 super
  9. 12 freeze
  10. end
  11. end
  12. end
  13. end

lib/ghub/models/branch.rb

100.0% lines covered

100.0% branches covered

8 relevant lines. 8 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. # Defines a branch.
  5. 1 Branch = Struct.new :label, :ref, :repo, :sha, :user do
  6. 1 def self.for(**attributes)
  7. 2 new(
  8. **attributes.merge!(
  9. user: User[**attributes[:user]],
  10. repo: Repository.for(**attributes[:repo])
  11. )
  12. )
  13. end
  14. 1 def initialize(**)
  15. 15 super
  16. 15 freeze
  17. end
  18. end
  19. end
  20. end

lib/ghub/models/check.rb

100.0% lines covered

100.0% branches covered

6 relevant lines. 6 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. # Defines a check.
  5. 1 Check = Struct.new :context, :app_id do
  6. 1 def initialize(**)
  7. 6 super
  8. 6 freeze
  9. end
  10. end
  11. end
  12. end

lib/ghub/models/dismissal_restriction.rb

100.0% lines covered

100.0% branches covered

12 relevant lines. 12 lines covered and 0 lines missed.
2 total branches, 2 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. # Defines a dismissal restriction.
  5. 1 DismissalRestriction = Struct.new(
  6. :apps,
  7. :teams,
  8. :teams_url,
  9. :url,
  10. :users,
  11. :users_url
  12. ) do
  13. 1 def self.for(**attributes)
  14. 3 then: 1 else: 2 return new if attributes.empty?
  15. 2 new(
  16. **attributes.merge!(
  17. 2 apps: attributes[:apps].map { |arguments| Application[**arguments] },
  18. 2 teams: attributes[:teams].map { |arguments| Team[**arguments] },
  19. 2 users: attributes[:users].map { |arguments| User[**arguments] }
  20. )
  21. )
  22. end
  23. 1 def initialize(**)
  24. 4 super
  25. 4 freeze
  26. end
  27. end
  28. end
  29. end

lib/ghub/models/label.rb

100.0% lines covered

100.0% branches covered

6 relevant lines. 6 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. # Defines a label.
  5. 1 Label = Struct.new(
  6. :color,
  7. :default,
  8. :description,
  9. :id,
  10. :name,
  11. :node_id,
  12. :url
  13. ) do
  14. 1 def initialize(**)
  15. 7 super
  16. 7 freeze
  17. end
  18. end
  19. end
  20. end

lib/ghub/models/license.rb

100.0% lines covered

100.0% branches covered

6 relevant lines. 6 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. # Defines a license.
  5. 1 License = Struct.new(
  6. :key,
  7. :name,
  8. :node_id,
  9. :spdx_id,
  10. :url
  11. ) do
  12. 1 def initialize(**)
  13. 17 super
  14. 17 freeze
  15. end
  16. end
  17. end
  18. end

lib/ghub/models/link.rb

100.0% lines covered

100.0% branches covered

6 relevant lines. 6 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. # Defines a link.
  5. 1 Link = Struct.new :href do
  6. 1 def initialize(**)
  7. 65 super
  8. 65 freeze
  9. end
  10. end
  11. end
  12. end

lib/ghub/models/links.rb

100.0% lines covered

100.0% branches covered

9 relevant lines. 9 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. # Defines a set of links.
  5. 1 Links = Struct.new(
  6. :self,
  7. :html,
  8. :issue,
  9. :comments,
  10. :review_comments,
  11. :review_comment,
  12. :commits,
  13. :statuses
  14. ) do
  15. 1 def self.for(**attributes)
  16. 63 attributes.reduce({}) { |collection, (key, value)| collection.merge key => Link[**value] }
  17. 7 .then { |updates| new(**updates) }
  18. end
  19. 1 def initialize(**)
  20. 8 super
  21. 8 freeze
  22. end
  23. end
  24. end
  25. end

lib/ghub/models/owner.rb

100.0% lines covered

100.0% branches covered

6 relevant lines. 6 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. # Defines an owner.
  5. 1 Owner = Struct.new(
  6. :login,
  7. :id,
  8. :node_id,
  9. :url,
  10. :repos_url,
  11. :events_url,
  12. :hooks_url,
  13. :issues_url,
  14. :members_url,
  15. :public_members_url,
  16. :avatar_url,
  17. :description
  18. ) do
  19. 1 def initialize(**)
  20. 2 super
  21. 2 freeze
  22. end
  23. end
  24. end
  25. end

lib/ghub/models/permissions/branch.rb

100.0% lines covered

100.0% branches covered

7 relevant lines. 7 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. 1 module Permissions
  5. # Defines branch permissions.
  6. 1 Branch = Struct.new(
  7. :contents,
  8. :issues,
  9. :metadata,
  10. :single_file
  11. ) do
  12. 1 def initialize(**)
  13. 2 super
  14. 2 freeze
  15. end
  16. end
  17. end
  18. end
  19. end

lib/ghub/models/permissions/repository.rb

100.0% lines covered

100.0% branches covered

7 relevant lines. 7 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. 1 module Permissions
  5. # Defines repository permissions.
  6. 1 Repository = Struct.new(
  7. :admin,
  8. :maintain,
  9. :pull,
  10. :push,
  11. :triage
  12. ) do
  13. 1 def initialize(**)
  14. 10 super
  15. 10 freeze
  16. end
  17. end
  18. end
  19. end
  20. end

lib/ghub/models/repository.rb

100.0% lines covered

100.0% branches covered

11 relevant lines. 11 lines covered and 0 lines missed.
6 total branches, 6 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. # Defines a repository.
  5. 1 Repository = Struct.new(
  6. :allow_forking,
  7. :archive_url,
  8. :archived,
  9. :assignees_url,
  10. :blobs_url,
  11. :branches_url,
  12. :clone_url,
  13. :collaborators_url,
  14. :comments_url,
  15. :commits_url,
  16. :compare_url,
  17. :contents_url,
  18. :contributors_url,
  19. :created_at,
  20. :default_branch,
  21. :deployments_url,
  22. :description,
  23. :disabled,
  24. :downloads_url,
  25. :events_url,
  26. :fork,
  27. :forks,
  28. :forks_count,
  29. :forks_url,
  30. :full_name,
  31. :git_commits_url,
  32. :git_refs_url,
  33. :git_tags_url,
  34. :git_url,
  35. :has_downloads,
  36. :has_issues,
  37. :has_pages,
  38. :has_projects,
  39. :has_wiki,
  40. :homepage,
  41. :hooks_url,
  42. :html_url,
  43. :id,
  44. :is_template,
  45. :issue_comment_url,
  46. :issue_events_url,
  47. :issues_url,
  48. :keys_url,
  49. :labels_url,
  50. :language,
  51. :languages_url,
  52. :license,
  53. :merges_url,
  54. :milestones_url,
  55. :mirror_url,
  56. :name,
  57. :network_count,
  58. :node_id,
  59. :notifications_url,
  60. :open_issues,
  61. :open_issues_count,
  62. :organization,
  63. :owner,
  64. :permissions,
  65. :private,
  66. :pulls_url,
  67. :pushed_at,
  68. :releases_url,
  69. :ssh_url,
  70. :stargazers_count,
  71. :stargazers_url,
  72. :statuses_url,
  73. :subscribers_count,
  74. :subscribers_url,
  75. :subscription_url,
  76. :svn_url,
  77. :tags_url,
  78. :teams_url,
  79. :temp_clone_token,
  80. :topics,
  81. :trees_url,
  82. :updated_at,
  83. :url,
  84. :visibility,
  85. :watchers,
  86. :watchers_count,
  87. :web_commit_signoff_required,
  88. :weight
  89. ) do
  90. 1 def self.for(**attributes)
  91. 17 new(
  92. **attributes.transform_keys!(size: :weight),
  93. 17 then: 16 else: 1 license: (License[**Hash(attributes[:license])] if attributes.key? :license),
  94. owner: User[**attributes[:owner]],
  95. 17 then: 7 else: 10 organization: (User[**attributes[:organization]] if attributes.key? :organization),
  96. permissions: (
  97. 17 then: 9 else: 8 Permissions::Repository[**attributes[:permissions]] if attributes.key? :permissions
  98. )
  99. )
  100. end
  101. 1 def initialize(**)
  102. 18 super
  103. 18 freeze
  104. end
  105. end
  106. end
  107. end

lib/ghub/models/restriction.rb

100.0% lines covered

100.0% branches covered

12 relevant lines. 12 lines covered and 0 lines missed.
2 total branches, 2 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. # Defines a restriction.
  5. 1 Restriction = Struct.new(
  6. :apps,
  7. :apps_url,
  8. :teams,
  9. :teams_url,
  10. :url,
  11. :users,
  12. :users_url
  13. ) do
  14. 1 def self.for(**attributes)
  15. 6 then: 5 else: 1 return new if attributes.empty?
  16. 1 new(
  17. **attributes.merge!(
  18. 1 apps: attributes[:apps].map { |arguments| Application[**arguments] },
  19. 1 teams: attributes[:teams].map { |arguments| Team[**arguments] },
  20. 1 users: attributes[:users].map { |arguments| User[**arguments] }
  21. )
  22. )
  23. end
  24. 1 def initialize(**)
  25. 7 super
  26. 7 freeze
  27. end
  28. end
  29. end
  30. end

lib/ghub/models/review.rb

100.0% lines covered

100.0% branches covered

9 relevant lines. 9 lines covered and 0 lines missed.
2 total branches, 2 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. # Defines a review.
  5. 1 Review = Struct.new(
  6. :dismiss_stale_reviews,
  7. :require_code_owner_reviews,
  8. :required_approving_review_count,
  9. :url,
  10. :dismissal_restrictions
  11. ) do
  12. 1 def self.for(**attributes)
  13. 6 then: 5 else: 1 return new if attributes.empty?
  14. 1 new(
  15. **attributes.merge!(
  16. dismissal_restrictions: DismissalRestriction.for(**attributes[:dismissal_restrictions])
  17. )
  18. )
  19. end
  20. 1 def initialize(**)
  21. 7 super
  22. 7 freeze
  23. end
  24. end
  25. end
  26. end

lib/ghub/models/status_check.rb

100.0% lines covered

100.0% branches covered

9 relevant lines. 9 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. # Defines a status check.
  5. 1 StatusCheck = Struct.new(
  6. :url,
  7. :strict,
  8. :contexts,
  9. :contexts_url,
  10. :checks,
  11. :enforcement_level
  12. ) do
  13. 1 def self.for(**attributes)
  14. 5 new(
  15. 5 **attributes.merge!(checks: attributes[:checks].map { |arguments| Check[**arguments] })
  16. )
  17. end
  18. 1 def initialize(**)
  19. 6 super
  20. 6 freeze
  21. end
  22. end
  23. end
  24. end

lib/ghub/models/team.rb

100.0% lines covered

100.0% branches covered

6 relevant lines. 6 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. # Defines a team.
  5. 1 Team = Struct.new(
  6. :description,
  7. :html_url,
  8. :id,
  9. :members_url,
  10. :name,
  11. :node_id,
  12. :parent,
  13. :permission,
  14. :privacy,
  15. :repositories_url,
  16. :slug,
  17. :url
  18. ) do
  19. 1 def initialize(**)
  20. 4 super
  21. 4 freeze
  22. end
  23. end
  24. end
  25. end

lib/ghub/models/user.rb

100.0% lines covered

100.0% branches covered

7 relevant lines. 7 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Models
  4. # Defines a user.
  5. 1 User = Struct.new(
  6. :avatar_url,
  7. :events_url,
  8. :followers_url,
  9. :following_url,
  10. :gists_url,
  11. :gravatar_id,
  12. :html_url,
  13. :id,
  14. :login,
  15. :node_id,
  16. :organizations_url,
  17. :received_events_url,
  18. :repos_url,
  19. :site_admin,
  20. :starred_url,
  21. :subscriptions_url,
  22. :type,
  23. :url
  24. ) do
  25. 1 def self.for(**) = new(**)
  26. 1 def initialize(**)
  27. 51 super
  28. 51 freeze
  29. end
  30. end
  31. end
  32. end

lib/ghub/responses/application.rb

100.0% lines covered

100.0% branches covered

31 relevant lines. 31 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Responses
  4. # Defines an application.
  5. 1 Application = Dry::Schema.Params do
  6. 1 required(:created_at).filled :date_time
  7. 1 required(:description).filled :string
  8. 1 required(:events).array(:str?)
  9. 1 required(:external_url).filled :string
  10. 1 required(:html_url).filled :string
  11. 1 required(:id).filled :integer
  12. 1 required(:name).filled :string
  13. 1 required(:node_id).filled :string
  14. 1 required(:owner).hash do
  15. 1 required(:login).filled :string
  16. 1 required(:id).filled :integer
  17. 1 required(:node_id).filled :string
  18. 1 required(:url).filled :string
  19. 1 required(:repos_url).filled :string
  20. 1 required(:events_url).filled :string
  21. 1 required(:hooks_url).filled :string
  22. 1 required(:issues_url).filled :string
  23. 1 required(:members_url).filled :string
  24. 1 required(:public_members_url).filled :string
  25. 1 required(:avatar_url).filled :string
  26. 1 required(:description).filled :string
  27. end
  28. 1 required(:permissions).hash do
  29. 1 required(:metadata).filled :string
  30. 1 required(:contents).filled :string
  31. 1 required(:issues).filled :string
  32. 1 required(:single_file).filled :string
  33. end
  34. 1 required(:slug).filled :string
  35. 1 required(:updated_at).filled :date_time
  36. end
  37. end
  38. end

lib/ghub/responses/boolean_link.rb

100.0% lines covered

100.0% branches covered

5 relevant lines. 5 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Responses
  4. # Defines a boolean link.
  5. 1 BooleanLink = Dry::Schema.Params do
  6. 1 required(:enabled).filled :bool
  7. 1 required(:url).filled :string
  8. end
  9. end
  10. end

lib/ghub/responses/branch.rb

100.0% lines covered

100.0% branches covered

8 relevant lines. 8 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Responses
  4. # Defines a branch.
  5. 1 Branch = Dry::Schema.Params do
  6. 1 required(:label).filled :string
  7. 1 required(:ref).filled :string
  8. 1 required(:sha).filled :string
  9. 1 required(:user).hash(Ghub::Responses::User)
  10. 1 required(:repo).hash(Ghub::Responses::Repository)
  11. end
  12. end
  13. end

lib/ghub/responses/dismissal_restriction.rb

100.0% lines covered

100.0% branches covered

9 relevant lines. 9 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Responses
  4. # Defines a dismissal restriction.
  5. 1 DismissalRestriction = Dry::Schema.Params do
  6. 1 required(:apps).array(Application)
  7. 1 required(:teams).array(Team)
  8. 1 required(:teams_url).filled :string
  9. 1 required(:url).filled :string
  10. 1 required(:users).array(User)
  11. 1 required(:users_url).filled :string
  12. end
  13. end
  14. end

lib/ghub/responses/label.rb

100.0% lines covered

100.0% branches covered

10 relevant lines. 10 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Responses
  4. # Defines a label.
  5. 1 Label = Dry::Schema.Params do
  6. 1 required(:color).filled :string
  7. 1 required(:default).filled :bool
  8. 1 required(:description).maybe :string
  9. 1 required(:id).filled :integer
  10. 1 required(:name).filled :string
  11. 1 required(:node_id).filled :string
  12. 1 required(:url).filled :string
  13. end
  14. end
  15. end

lib/ghub/responses/license.rb

100.0% lines covered

100.0% branches covered

8 relevant lines. 8 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Responses
  4. # Defines a license.
  5. 1 License = Dry::Schema.Params do
  6. 1 required(:key).filled :string
  7. 1 required(:name).filled :string
  8. 1 required(:node_id).filled :string
  9. 1 required(:spdx_id).filled :string
  10. 1 required(:url).maybe :string
  11. end
  12. end
  13. end

lib/ghub/responses/link.rb

100.0% lines covered

100.0% branches covered

3 relevant lines. 3 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Responses
  4. # Defines a link.
  5. 2 Link = Dry::Schema.Params { required(:href).filled :string }
  6. end
  7. end

lib/ghub/responses/links.rb

100.0% lines covered

100.0% branches covered

11 relevant lines. 11 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Responses
  4. # Defines a set of links.
  5. 1 Links = Dry::Schema.Params do
  6. 1 required(:self).hash(Link)
  7. 1 required(:html).hash(Link)
  8. 1 required(:issue).hash(Link)
  9. 1 required(:comments).hash(Link)
  10. 1 required(:review_comments).hash(Link)
  11. 1 required(:review_comment).hash(Link)
  12. 1 required(:commits).hash(Link)
  13. 1 required(:statuses).hash(Link)
  14. end
  15. end
  16. end

lib/ghub/responses/permission.rb

100.0% lines covered

100.0% branches covered

8 relevant lines. 8 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Responses
  4. # Defines a permission.
  5. 1 Permission = Dry::Schema.Params do
  6. 1 required(:admin).filled :bool
  7. 1 required(:maintain).filled :bool
  8. 1 required(:pull).filled :bool
  9. 1 required(:push).filled :bool
  10. 1 required(:triage).filled :bool
  11. end
  12. end
  13. end

lib/ghub/responses/repository.rb

100.0% lines covered

100.0% branches covered

83 relevant lines. 83 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Responses
  4. # Defines a repository.
  5. 1 Repository = Dry::Schema.Params do
  6. 1 required(:allow_forking).filled :bool
  7. 1 required(:archive_url).filled :string
  8. 1 required(:archived).filled :bool
  9. 1 required(:assignees_url).filled :string
  10. 1 required(:blobs_url).filled :string
  11. 1 required(:branches_url).filled :string
  12. 1 required(:clone_url).filled :string
  13. 1 required(:collaborators_url).filled :string
  14. 1 required(:comments_url).filled :string
  15. 1 required(:commits_url).filled :string
  16. 1 required(:compare_url).filled :string
  17. 1 required(:contents_url).filled :string
  18. 1 required(:contributors_url).filled :string
  19. 1 required(:created_at).filled :date_time
  20. 1 required(:default_branch).filled :string
  21. 1 required(:deployments_url).filled :string
  22. 1 required(:description).maybe :string
  23. 1 required(:disabled).filled :bool
  24. 1 required(:downloads_url).filled :string
  25. 1 required(:events_url).filled :string
  26. 1 required(:fork).filled :bool
  27. 1 required(:forks).filled :integer
  28. 1 required(:forks_count).filled :integer
  29. 1 required(:forks_url).filled :string
  30. 1 required(:full_name).filled :string
  31. 1 required(:git_commits_url).filled :string
  32. 1 required(:git_refs_url).filled :string
  33. 1 required(:git_tags_url).filled :string
  34. 1 required(:git_url).filled :string
  35. 1 required(:has_downloads).filled :bool
  36. 1 required(:has_issues).filled :bool
  37. 1 required(:has_pages).filled :bool
  38. 1 required(:has_projects).filled :bool
  39. 1 required(:has_wiki).filled :bool
  40. 1 required(:homepage).maybe :string
  41. 1 required(:hooks_url).filled :string
  42. 1 required(:html_url).filled :string
  43. 1 required(:id).filled :integer
  44. 1 required(:is_template).filled :bool
  45. 1 required(:issue_comment_url).filled :string
  46. 1 required(:issue_events_url).filled :string
  47. 1 required(:issues_url).filled :string
  48. 1 required(:keys_url).filled :string
  49. 1 required(:labels_url).filled :string
  50. 1 required(:language).maybe :string
  51. 1 required(:languages_url).filled :string
  52. 1 required(:license).maybe :hash, License
  53. 1 required(:merges_url).filled :string
  54. 1 required(:milestones_url).filled :string
  55. 1 required(:mirror_url).maybe :string
  56. 1 required(:name).filled :string
  57. 1 required(:node_id).filled :string
  58. 1 required(:notifications_url).filled :string
  59. 1 required(:open_issues).filled :integer
  60. 1 required(:open_issues_count).filled :integer
  61. 1 required(:owner).hash User
  62. 1 required(:private).filled :bool
  63. 1 required(:pulls_url).filled :string
  64. 1 required(:pushed_at).filled :date_time
  65. 1 required(:releases_url).filled :string
  66. 1 required(:size).filled :integer
  67. 1 required(:ssh_url).filled :string
  68. 1 required(:stargazers_count).filled :integer
  69. 1 required(:stargazers_url).filled :string
  70. 1 required(:statuses_url).filled :string
  71. 1 required(:subscribers_url).filled :string
  72. 1 required(:subscription_url).filled :string
  73. 1 required(:svn_url).filled :string
  74. 1 required(:tags_url).filled :string
  75. 1 required(:teams_url).filled :string
  76. 1 required(:topics).array(:str?)
  77. 1 required(:trees_url).filled :string
  78. 1 required(:updated_at).filled :date_time
  79. 1 required(:url).filled :string
  80. 1 required(:visibility).filled :string
  81. 1 required(:watchers).filled :integer
  82. 1 required(:watchers_count).filled :integer
  83. 1 required(:web_commit_signoff_required).filled :bool
  84. 1 optional(:organization).hash User
  85. 1 optional(:permissions).hash Permission
  86. end
  87. end
  88. end

lib/ghub/responses/restriction.rb

100.0% lines covered

100.0% branches covered

10 relevant lines. 10 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Responses
  4. # Defines a restriction.
  5. 1 Restriction = Dry::Schema.Params do
  6. 1 required(:apps).array(Application)
  7. 1 required(:apps_url).filled :string
  8. 1 required(:teams).array(Team)
  9. 1 required(:teams_url).filled :string
  10. 1 required(:url).filled :string
  11. 1 required(:users).array(User)
  12. 1 required(:users_url).filled :string
  13. end
  14. end
  15. end

lib/ghub/responses/review.rb

100.0% lines covered

100.0% branches covered

8 relevant lines. 8 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Responses
  4. # Defines a review.
  5. 1 Review = Dry::Schema.Params do
  6. 1 required(:dismiss_stale_reviews).filled :bool
  7. 1 required(:require_code_owner_reviews).filled :bool
  8. 1 required(:required_approving_review_count).filled :integer
  9. 1 required(:url).filled :string
  10. 1 optional(:dismissal_restrictions).hash(DismissalRestriction)
  11. end
  12. end
  13. end

lib/ghub/responses/status_check.rb

100.0% lines covered

100.0% branches covered

11 relevant lines. 11 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Responses
  4. # Defines a status check.
  5. 1 StatusCheck = Dry::Schema.Params do
  6. 1 required(:url).filled :string
  7. 1 required(:strict).filled :bool
  8. 1 required(:contexts).array(:str?)
  9. 1 required(:contexts_url).filled :string
  10. 1 required(:checks).array(:hash) do
  11. 1 required(:context).filled :string
  12. 1 required(:app_id).maybe :integer
  13. end
  14. 1 optional(:enforcement_level).filled :string
  15. end
  16. end
  17. end

lib/ghub/responses/team.rb

100.0% lines covered

100.0% branches covered

14 relevant lines. 14 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Responses
  4. # Defines a team.
  5. 1 Team = Dry::Schema.Params do
  6. 1 required(:description).filled :string
  7. 1 required(:id).filled :integer
  8. 1 required(:members_url).filled :string
  9. 1 required(:name).filled :string
  10. 1 required(:node_id).filled :string
  11. 1 required(:parent).maybe :string
  12. 1 required(:permission).filled :string
  13. 1 required(:privacy).filled :string
  14. 1 required(:repositories_url).filled :string
  15. 1 required(:slug).filled :string
  16. 1 required(:url).filled :string
  17. end
  18. end
  19. end

lib/ghub/responses/user.rb

100.0% lines covered

100.0% branches covered

21 relevant lines. 21 lines covered and 0 lines missed.
0 total branches, 0 branches covered and 0 branches missed.
    
  1. # frozen_string_literal: true
  2. 1 module Ghub
  3. 1 module Responses
  4. # Defines a user.
  5. 1 User = Dry::Schema.Params do
  6. 1 required(:avatar_url).filled(:string)
  7. 1 required(:events_url).filled(:string)
  8. 1 required(:followers_url).filled(:string)
  9. 1 required(:following_url).filled(:string)
  10. 1 required(:gists_url).filled(:string)
  11. 1 required(:gravatar_id).maybe(:string)
  12. 1 required(:html_url).filled(:string)
  13. 1 required(:id).filled(:integer)
  14. 1 required(:login).filled(:string)
  15. 1 required(:node_id).filled(:string)
  16. 1 required(:organizations_url).filled(:string)
  17. 1 required(:received_events_url).filled(:string)
  18. 1 required(:repos_url).filled(:string)
  19. 1 required(:site_admin).filled(:bool)
  20. 1 required(:starred_url).filled(:string)
  21. 1 required(:subscriptions_url).filled(:string)
  22. 1 required(:type).filled(:string)
  23. 1 required(:url).filled(:string)
  24. end
  25. end
  26. end