Class: ErrbitFogbugzPlugin::IssueTracker

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

Constant Summary collapse

LABEL =
'fogbugz'
NOTE =
''
FIELDS =
[
  [:project_id, {
    :label       => "Area Name"
  }],
  [:account, {
    :label       => "FogBugz URL",
    :placeholder => "abc from https://abc.fogbugz.com/"
  }],
  [:username, {
    :placeholder => "Username/Email for your account"
  }],
  [:password, {
    :placeholder => "Password for your account"
  }]
]

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.body_templateObject



38
39
40
41
42
43
44
# File 'lib/errbit_fogbugz_plugin/issue_tracker.rb', line 38

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

.fieldsObject



34
35
36
# File 'lib/errbit_fogbugz_plugin/issue_tracker.rb', line 34

def self.fields
  FIELDS
end

.labelObject



26
27
28
# File 'lib/errbit_fogbugz_plugin/issue_tracker.rb', line 26

def self.label
  LABEL
end

.noteObject



30
31
32
# File 'lib/errbit_fogbugz_plugin/issue_tracker.rb', line 30

def self.note
  NOTE
end

Instance Method Details

#clientObject



64
65
66
67
68
69
70
71
72
# File 'lib/errbit_fogbugz_plugin/issue_tracker.rb', line 64

def client
  fogbugz = Fogbugz::Interface.new(
    :email => params['username'],
    :password => params['password'],
    :uri => url
  )
  fogbugz.authenticate
  fogbugz
end

#comments_allowed?Boolean

Returns:

  • (Boolean)


54
# File 'lib/errbit_fogbugz_plugin/issue_tracker.rb', line 54

def comments_allowed?; false; end

#configured?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/errbit_fogbugz_plugin/issue_tracker.rb', line 50

def configured?
  errors.empty?
end

#create_issue(problem, reported_by = nil) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/errbit_fogbugz_plugin/issue_tracker.rb', line 74

def create_issue(problem, reported_by = nil)
  issue = {
    'sTitle' => "[#{ problem.environment }][#{ problem.where }] #{problem.message.to_s.truncate(100)}",
    'sArea' => params['project_id'],
    'sEvent' => self.class.body_template.result(binding),
    'sTags' => ['errbit'].join(','),
    'cols' => ['ixBug'].join(',')
  }

  fb_resp = client.command(:new, issue)
  problem.update_attributes(
    :issue_link => sprintf('%s/default.asp?%s', url, fb_resp['case']['ixBug']),
    :issue_type => self.class.label
  )
end

#errorsObject



56
57
58
59
60
61
62
# File 'lib/errbit_fogbugz_plugin/issue_tracker.rb', line 56

def errors
  errors = []
  if self.class.fields.detect {|f| params[f[0].to_s].blank? }
    errors << [:base, 'You must specify your FogBugz Area Name, FogBugz URL, Username, and Password']
  end
  errors
end

#urlObject



46
47
48
# File 'lib/errbit_fogbugz_plugin/issue_tracker.rb', line 46

def url
  sprintf('https://%s.fogbugz.com', params['account'])
end