Class: ErrbitJiraPlugin::IssueTracker

Inherits:
ErrbitPlugin::IssueTracker
  • Object
show all
Defined in:
lib/errbit_jira_plugin/issue_tracker.rb

Constant Summary collapse

LABEL =
'jira'
NOTE =
'Please configure Jira by entering the information below.'
FIELDS =
{
  :base_url => {
      :label => 'Jira URL without trailing slash',
      :placeholder => 'https://jira.example.org'
  },
  :context_path => {
      :optional => true,
      :label => 'Context Path (Just "/" if empty otherwise with leading slash)',
      :placeholder => "/jira"
  },
  :username => {
      :label => 'Username',
      :placeholder => 'johndoe'
  },
  :password => {
      :label => 'Password',
      :placeholder => 'p@assW0rd'
  },
  :project_id => {
      :label => 'Project Key',
      :placeholder => 'The project Key where the issue will be created'
  },
  :issue_priority => {
      :label => 'Priority',
      :placeholder => 'Normal'
  }
}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.body_templateObject



63
64
65
66
67
68
69
# File 'lib/errbit_jira_plugin/issue_tracker.rb', line 63

def self.body_template
  @body_template ||= ERB.new(File.read(
    File.join(
      ErrbitJiraPlugin.root, 'views', 'jira_issues_body.txt.erb'
    )
  ))
end

.fieldsObject



45
46
47
# File 'lib/errbit_jira_plugin/issue_tracker.rb', line 45

def self.fields
  FIELDS
end

.iconsObject



49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/errbit_jira_plugin/issue_tracker.rb', line 49

def self.icons
  @icons ||= {
    create: [
      'image/png', ErrbitJiraPlugin.read_static_file('jira_create.png')
    ],
    goto: [
      'image/png', ErrbitJiraPlugin.read_static_file('jira_goto.png'),
    ],
    inactive: [
      'image/png', ErrbitJiraPlugin.read_static_file('jira_inactive.png'),
    ]
  }
end

.labelObject



37
38
39
# File 'lib/errbit_jira_plugin/issue_tracker.rb', line 37

def self.label
  LABEL
end

.noteObject



41
42
43
# File 'lib/errbit_jira_plugin/issue_tracker.rb', line 41

def self.note
  NOTE
end

Instance Method Details

#clientObject



87
88
89
90
91
92
93
94
95
96
# File 'lib/errbit_jira_plugin/issue_tracker.rb', line 87

def client
  options = {
    :username => params['username'],
    :password => params['password'],
    :site => params['base_url'],
    :auth_type => :basic,
    :context_path => (params['context_path'] == '/') ? params['context_path'] = '' : params['context_path']
  }
  JIRA::Client.new(options)
end

#comments_allowed?Boolean

Returns:



83
84
85
# File 'lib/errbit_jira_plugin/issue_tracker.rb', line 83

def comments_allowed?
  false
end

#configured?Boolean

Returns:



71
72
73
# File 'lib/errbit_jira_plugin/issue_tracker.rb', line 71

def configured?
  params['project_id'].present?
end

#create_issue(problem, reported_by = nil) ⇒ Object



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/errbit_jira_plugin/issue_tracker.rb', line 98

def create_issue(problem, reported_by = nil)
  begin
    issue_title =  "[#{ problem.environment }][#{ problem.where }] #{problem.message.to_s.truncate(100)}".delete!("\n")
    issue_description = self.class.body_template.result(binding).unpack('C*').pack('U*')
    issue = {"fields"=>{"summary"=>issue_title, "description"=>issue_description,"project"=>{"key"=>params['project_id']},"issuetype"=>{"id"=>"3"},"priority"=>{"name"=>params['issue_priority']}}}
    
    issue_build = client.Issue.build
    issue_build.save(issue)
    
    problem.update_attributes(
      :issue_link => jira_url(issue_build.key),
      :issue_type => params['issue_type']
    )

  rescue JIRA::HTTPError
    raise ErrbitJiraPlugin::IssueError, "Could not create an issue with Jira.  Please check your credentials."
  end
end

#ctx_pathObject



121
122
123
# File 'lib/errbit_jira_plugin/issue_tracker.rb', line 121

def ctx_path
  (params['context_path'] == '') ? '/' : params['context_path']
end

#errorsObject



75
76
77
78
79
80
81
# File 'lib/errbit_jira_plugin/issue_tracker.rb', line 75

def errors
  errors = []
  if self.class.fields.detect {|f| options[f[0]].blank? }
    errors << [:base, 'You must specify all non optional values!']
  end
  errors
end

#jira_url(project_id) ⇒ Object



117
118
119
# File 'lib/errbit_jira_plugin/issue_tracker.rb', line 117

def jira_url(project_id)
  "#{params['base_url']}#{ctx_path}browse/#{project_id}"
end

#urlObject



125
126
127
# File 'lib/errbit_jira_plugin/issue_tracker.rb', line 125

def url
  params['base_url']
end