Module: Trellohub::Form::Issue
- Included in:
- Trellohub::Form
- Defined in:
- lib/trellohub/form/issue.rb
Class Method Summary collapse
- .accessible_attributes ⇒ Object
- .included(base) ⇒ Object
- .prefix(array) ⇒ Object
- .readable_attributes ⇒ Object
- .valid_attributes ⇒ Object
Instance Method Summary collapse
- #assign_card_list_by_issue ⇒ Object
- #assign_card_members_by_issue ⇒ Object
- #build_card_attributes_by_issue ⇒ Object
- #build_issue_attributes_by_issue ⇒ Object
- #close_issue ⇒ Object
- #create_issue ⇒ Object
- #import_issue(repository, issue) ⇒ Object
- #issue_body ⇒ Object
- #issue_repository_name ⇒ Object (also: #issue_repo_name)
- #issue_update? ⇒ Boolean
- #save_as_issue ⇒ Object
- #to_issue ⇒ Object
- #to_valid_issue ⇒ Object
- #update_issue ⇒ Object
Class Method Details
.accessible_attributes ⇒ Object
14 15 16 |
# File 'lib/trellohub/form/issue.rb', line 14 def accessible_attributes self.prefix self.valid_attributes end |
.included(base) ⇒ Object
31 32 33 34 35 36 |
# 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) ⇒ Object
27 28 29 |
# File 'lib/trellohub/form/issue.rb', line 27 def prefix(array) array.map { |key| :"issue_#{key}" } end |
.readable_attributes ⇒ Object
18 19 20 21 22 23 24 25 |
# File 'lib/trellohub/form/issue.rb', line 18 def readable_attributes self.prefix i( number created_at updated_at closed_at ) end |
.valid_attributes ⇒ Object
5 6 7 8 9 10 11 12 |
# File 'lib/trellohub/form/issue.rb', line 5 def valid_attributes i( title labels state assignee ) end |
Instance Method Details
#assign_card_list_by_issue ⇒ Object
101 102 103 104 105 106 107 |
# 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 ⇒ Object
91 92 93 94 95 96 97 98 99 |
# 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 ⇒ Object
50 51 52 53 54 55 56 57 |
# 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 ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# 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 ⇒ Object
145 146 147 148 149 150 151 152 153 |
# 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 ⇒ Object
122 123 124 125 126 127 128 129 130 131 |
# 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) ⇒ Object
39 40 41 42 43 44 45 46 47 48 |
# 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 ⇒ Object
113 114 115 116 117 118 119 120 |
# 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_repository_name ⇒ Object Also known as: issue_repo_name
86 87 88 |
# File 'lib/trellohub/form/issue.rb', line 86 def issue_repository_name @issue_repository.split('/').last end |
#issue_update? ⇒ Boolean
109 110 111 |
# File 'lib/trellohub/form/issue.rb', line 109 def issue_update? !@key.nil? end |
#save_as_issue ⇒ Object
155 156 157 158 159 160 161 |
# 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 ⇒ Object
181 182 183 184 185 186 187 188 |
# 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 ⇒ Object
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 |
# 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 ⇒ Object
133 134 135 136 137 138 139 140 141 142 143 |
# 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 |