module Trellohub::Form::Issue

Public Class Methods

accessible_attributes() click to toggle source
# File lib/trellohub/form/issue.rb, line 14
def accessible_attributes
  self.prefix self.valid_attributes
end
included(base) click to toggle source
# File lib/trellohub/form/issue.rb, line 31
def included(base)
  base.class_eval do
    attr_accessor(*Trellohub::Form::Issue.accessible_attributes)
    attr_reader(*Trellohub::Form::Issue.readable_attributes)
  end
end
prefix(array) click to toggle source
# File lib/trellohub/form/issue.rb, line 27
def prefix(array)
  array.map { |key| :"issue_#{key}" }
end
readable_attributes() click to toggle source
# File lib/trellohub/form/issue.rb, line 18
def readable_attributes
  self.prefix %i(
    number
    created_at
    updated_at
    closed_at
  )
end
valid_attributes() click to toggle source
# File lib/trellohub/form/issue.rb, line 5
def valid_attributes
  %i(
    title
    labels
    state
    assignee
  )
end

Public Instance Methods

assign_card_list_by_issue() click to toggle source
# File lib/trellohub/form/issue.rb, line 101
def assign_card_list_by_issue
  labels = @origin_issue.labels.map(&:name).uniq
  list = Trellohub.list_by(labels: labels)
  return unless list
  @card_idList = list.id
  @card_list_name = list.name
end
assign_card_members_by_issue() click to toggle source
# File lib/trellohub/form/issue.rb, line 91
def assign_card_members_by_issue
  @card_idMembers = []
  return unless @origin_issue.assignee

  member = Trellohub::Member.find_by(username: @origin_issue.assignee.login)
  unless member.nil?
    @card_idMembers << member.id
  end
end
build_card_attributes_by_issue() click to toggle source
# File lib/trellohub/form/issue.rb, line 50
def build_card_attributes_by_issue
  @card_idBoard = Trellohub::Board.id
  @card_name = "#{issue_repo_name}##{@origin_issue.number} #{@origin_issue.title}"
  @card_desc = "synced_issue: #{Octokit.web_endpoint}#{@issue_repository}/issues/#{@origin_issue.number}"
  @card_closed = @origin_issue.state == 'closed'
  assign_card_members_by_issue
  assign_card_list_by_issue
end
build_issue_attributes_by_issue() click to toggle source
# File lib/trellohub/form/issue.rb, line 59
def build_issue_attributes_by_issue
  @origin_issue.attrs.keys.each do |key|
    next if key == :pull_request

    value = case key
      when :user
        @origin_issue.user.login
      when :assignee
        @origin_issue.assignee ? @origin_issue.assignee.login : nil
      when :labels
        @origin_issue.labels.empty? ? [] : @origin_issue.labels.map(&:name)
      else
        @origin_issue.send(key)
      end

    instance_variable_set(:"@issue_#{key}", value)
  end

  @issue_id = @origin_issue.id
  @issue_number = @origin_issue.number

  if @origin_issue.milestone
    @issue_milestone_title = @origin_issue.milestone.title
    @issue_milestone = @origin_issue.milestone.number
  end
end
close_issue() click to toggle source
# File lib/trellohub/form/issue.rb, line 145
def close_issue
  return if @issue_repository.nil? || @issue_number.nil?

  Octokit.close_issue(
    @issue_repository,
    @issue_number,
    to_valid_issue
  )
end
create_issue() click to toggle source
# File lib/trellohub/form/issue.rb, line 122
def create_issue
  return if @issue_repository.nil? || @issue_title.nil?

  Octokit.create_issue(
    @issue_repository,
    @issue_title,
    nil,
    to_valid_issue
  )
end
import_issue(repository, issue) click to toggle source
# File lib/trellohub/form/issue.rb, line 39
def import_issue(repository, issue)
  @origin_issue = issue.dup
  @issue_repository = repository
  @key = "#{repository}##{@origin_issue.number}"
  @state = @origin_issue.state
  @imported_from = :issue

  build_card_attributes_by_issue
  build_issue_attributes_by_issue
end
issue_body() click to toggle source
# File lib/trellohub/form/issue.rb, line 113
def issue_body
  if @issue_body.nil? && @imported_from == :card
    form = Trellohub::Form.with_issues.find_by_key(@key)
    @issue_body = form.issue_body if form
  end

  @issue_body
end
issue_repo_name()
issue_repository_name() click to toggle source
# File lib/trellohub/form/issue.rb, line 86
def issue_repository_name
  @issue_repository.split('/').last
end
Also aliased as: issue_repo_name
issue_update?() click to toggle source
# File lib/trellohub/form/issue.rb, line 109
def issue_update?
  !@key.nil?
end
save_as_issue() click to toggle source
# File lib/trellohub/form/issue.rb, line 155
def save_as_issue
  case
  when issue_update? && open? then update_issue
  when issue_update? && closed? then close_issue
  when open? then create_issue
  end
end
to_issue() click to toggle source
# File lib/trellohub/form/issue.rb, line 181
def to_issue
  Hash[Trellohub::Form::Issue.accessible_attributes.map { |key|
    [
      key.to_s.gsub('issue_', '').to_sym,
      instance_variable_get(:"@#{key}")
    ]
  }]
end
to_valid_issue() click to toggle source
# File lib/trellohub/form/issue.rb, line 163
def to_valid_issue
  Hash[Trellohub::Form::Issue.valid_attributes.map { |key|
    value = instance_variable_get(:"@issue_#{key}")

    case
    when @imported_from == :issue && !value.empty?
      valid_label = value.find { |v| Trellohub.issue_labels.include?(v) }
      value = []
      value << valid_label if valid_label
    when @imported_from == :card
      form = Trellohub::Form.with_issues.find_by_key(@key)
      value = form.issue_labels if form
    end if key == :labels

    [key, value]
  }]
end
update_issue() click to toggle source
# File lib/trellohub/form/issue.rb, line 133
def update_issue
  return if @issue_repository.nil? || @issue_number.nil? || @issue_title.nil?

  Octokit.update_issue(
    @issue_repository,
    @issue_number,
    @issue_title,
    issue_body,
    to_valid_issue
  )
end