Class: SmartTodo::Events
- Inherits:
-
Object
- Object
- SmartTodo::Events
- Defined in:
- lib/smart_todo/events.rb
Overview
This module contains all the methods accessible for SmartTodo comments. It is meant to be reopened by the host application in order to define its own events.
An event needs to return a String
containing the message that will be sent to the TODO assignee or false
in case the event hasn’t been met.
Instance Method Summary collapse
-
#date(on_date) ⇒ false, String
Check if the
date
is in the past. -
#gem_bump(gem_name, *requirements) ⇒ false, String
Check if
gem_name
was bumped to therequirements
expected. -
#gem_release(gem_name, *requirements) ⇒ false, String
Check if a new version of
gem_name
was released with therequirements
expected. -
#initialize(now: nil, spec_set: nil, current_ruby_version: nil) ⇒ Events
constructor
A new instance of Events.
-
#issue_close(organization, repo, issue_number) ⇒ false, String
Check if the issue
issue_number
is closed. -
#pull_request_close(organization, repo, pr_number) ⇒ false, String
Check if the pull request
pr_number
is closed. -
#ruby_version(*requirements) ⇒ false, String
Check if the installed ruby version meets requirements.
Constructor Details
#initialize(now: nil, spec_set: nil, current_ruby_version: nil) ⇒ Events
Returns a new instance of Events.
29 30 31 32 33 34 35 |
# File 'lib/smart_todo/events.rb', line 29 def initialize(now: nil, spec_set: nil, current_ruby_version: nil) @now = now @spec_set = spec_set @rubygems_client = nil @github_client = nil @current_ruby_version = current_ruby_version end |
Instance Method Details
#date(on_date) ⇒ false, String
Check if the date
is in the past
41 42 43 44 45 46 47 48 |
# File 'lib/smart_todo/events.rb', line 41 def date(on_date) if now >= Time.parse(on_date) "We are past the *#{on_date}* due date and " \ "your TODO is now ready to be addressed." else false end end |
#gem_bump(gem_name, *requirements) ⇒ false, String
Check if gem_name
was bumped to the requirements
expected
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/smart_todo/events.rb', line 91 def gem_bump(gem_name, *requirements) specs = spec_set[gem_name] if specs.empty? "The gem *#{gem_name}* is not in your dependencies, I can't determine if " \ "your TODO is ready to be addressed." else requirement = Gem::Requirement.new(requirements) version = specs.first.version if requirement.satisfied_by?(version) "The gem *#{gem_name}* was updated to version *#{version}* and " \ "your TODO is now ready to be addressed." else false end end end |
#gem_release(gem_name, *requirements) ⇒ false, String
Check if a new version of gem_name
was released with the requirements
expected
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/smart_todo/events.rb', line 61 def gem_release(gem_name, *requirements) response = rubygems_client.get("/api/v1/versions/#{gem_name}.json") if response.code_type < Net::HTTPClientError "The gem *#{gem_name}* doesn't seem to exist, I can't determine if " \ "your TODO is ready to be addressed." else requirement = Gem::Requirement.new(requirements) version = JSON.parse(response.body).find { |gem| requirement.satisfied_by?(Gem::Version.new(gem["number"])) } if version "The gem *#{gem_name}* was released to version *#{version["number"]}* and " \ "your TODO is now ready to be addressed." else false end end end |
#issue_close(organization, repo, issue_number) ⇒ false, String
Check if the issue issue_number
is closed
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/smart_todo/events.rb', line 116 def issue_close(organization, repo, issue_number) headers = github_headers(organization, repo) response = github_client.get("/repos/#{organization}/#{repo}/issues/#{issue_number}", headers) if response.code_type < Net::HTTPClientError <<~EOM I can't retrieve the information from the issue *#{issue_number}* in the *#{organization}/#{repo}* repository. If the repository is a private one, make sure to export the `#{GITHUB_TOKEN}` environment variable with a correct GitHub token. EOM elsif JSON.parse(response.body)["state"] == "closed" "The issue https://github.com/#{organization}/#{repo}/issues/#{issue_number} is now closed, " \ "your TODO is ready to be addressed." else false end end |
#pull_request_close(organization, repo, pr_number) ⇒ false, String
Check if the pull request pr_number
is closed
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/smart_todo/events.rb', line 141 def pull_request_close(organization, repo, pr_number) headers = github_headers(organization, repo) response = github_client.get("/repos/#{organization}/#{repo}/pulls/#{pr_number}", headers) if response.code_type < Net::HTTPClientError <<~EOM I can't retrieve the information from the PR *#{pr_number}* in the *#{organization}/#{repo}* repository. If the repository is a private one, make sure to export the `#{GITHUB_TOKEN}` environment variable with a correct GitHub token. EOM elsif JSON.parse(response.body)["state"] == "closed" "The pull request https://github.com/#{organization}/#{repo}/pull/#{pr_number} is now closed, " \ "your TODO is ready to be addressed." else false end end |
#ruby_version(*requirements) ⇒ false, String
Check if the installed ruby version meets requirements.
164 165 166 167 168 169 170 171 172 |
# File 'lib/smart_todo/events.rb', line 164 def ruby_version(*requirements) requirement = Gem::Requirement.new(requirements) if requirement.satisfied_by?(current_ruby_version) "The currently installed version of Ruby #{current_ruby_version} is #{requirement}." else false end end |