redmine-ticket-client 0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,6 @@
1
+ === 1.0.0 / 2009-10-06
2
+
3
+ * 1 major enhancement
4
+
5
+ * Birthday!
6
+
@@ -0,0 +1,6 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ examples/post_ticket.rb
6
+ lib/redmine-ticket/client.rb
@@ -0,0 +1,16 @@
1
+ Redmine Ticket Client
2
+ ===============
3
+
4
+ This is the notifier plugin for integrating apps with Redmine Ticket Server:
5
+
6
+ http://github.com/rubiojr/redmine_ticket_server
7
+
8
+ Code based on hoptoad notifier by Thoughbot inc.
9
+
10
+ http://github.com/thoughtbot/hoptoad_notifier
11
+
12
+ INSTALLATION
13
+ ------------
14
+
15
+ CONFIGURATION
16
+ -------------
@@ -0,0 +1,14 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+ require './lib/redmine-ticket/client.rb'
6
+
7
+ Hoe.new('redmine-ticket-client', RedmineTicketClient::VERSION) do |p|
8
+ p.developer('Sergio Rubio', 'sergio@rubio.name')
9
+ p.summary = 'Client library for the Redmine Ticket Server'
10
+ p.description = 'Client library for the Redmine Ticket Server'
11
+ p.url = 'http://github.com/rubiojr/redmine_ticket_client'
12
+ end
13
+
14
+ # vim: syntax=Ruby
@@ -0,0 +1,30 @@
1
+ require File.join(File.dirname(__FILE__), '../lib/redmine-ticket/client')
2
+ params = {
3
+ # the identifier you specified for your project
4
+ :project => 'test',
5
+ # the name of your Tracker of choice in Redmine
6
+ :tracker => 'Bug',
7
+ # the key you generated before in Redmine
8
+ :api_key => 'API_KEY_HERE',
9
+ # the name of a ticket category (optional.)
10
+ :category => 'Development',
11
+
12
+ # the login of a user the ticket should get assigned to by default
13
+ #:assigned_to => 'admin', #optional
14
+
15
+ # the default priority (use a number, not a name. optional.)
16
+ #:priority => 5,
17
+
18
+ :subject => 'malabaristic',
19
+ :description => 'description text'
20
+
21
+ }.to_yaml
22
+
23
+ RedmineTicketClient.configure do |config|
24
+ config.params = params
25
+ config.host = '127.0.0.1' # the hostname your Redmine runs at
26
+ config.port = 3000 # the port your Redmine runs at
27
+ config.secure = false # sends data to your server via SSL (optional.)
28
+ end
29
+
30
+ RedmineTicketClient.post_ticket
@@ -0,0 +1,110 @@
1
+ require 'net/http'
2
+ require 'net/https'
3
+ require 'rubygems'
4
+
5
+ module RedmineTicketClient
6
+
7
+ VERSION = '0.1'
8
+
9
+ class << self
10
+ attr_accessor :host, :port, :secure, :params, :http_open_timeout, :http_read_timeout,
11
+ :proxy_host, :proxy_port, :proxy_user, :proxy_pass
12
+
13
+ # The port on which your Redmine server runs.
14
+ def port
15
+ @port || (secure ? 443 : 80)
16
+ end
17
+
18
+ # The host to connect to.
19
+ def host
20
+ @host ||= 'hoptoadapp.com'
21
+ end
22
+
23
+ # The HTTP open timeout (defaults to 2 seconds).
24
+ def http_open_timeout
25
+ @http_open_timeout ||= 2
26
+ end
27
+
28
+ # The HTTP read timeout (defaults to 5 seconds).
29
+ def http_read_timeout
30
+ @http_read_timeout ||= 5
31
+ end
32
+
33
+ # NOTE: secure connections are not yet supported.
34
+ def configure
35
+ yield self
36
+ end
37
+
38
+ def protocol #:nodoc:
39
+ secure ? "https" : "http"
40
+ end
41
+
42
+ def url #:nodoc:
43
+ URI.parse("#{protocol}://#{host}:#{port}/ticket_server/")
44
+ end
45
+
46
+ def default_ticket_options #:nodoc:
47
+ {
48
+ :params => RedmineTicketClient.params,
49
+ :error_message => 'Notification',
50
+ :request => {},
51
+ :session => {},
52
+ :environment => ENV.to_hash
53
+ }
54
+ end
55
+
56
+ def post_ticket
57
+ Sender.new.post_to_redmine( default_ticket_options )
58
+ end
59
+ end
60
+
61
+ class Sender
62
+ def rescue_action_in_public(exception)
63
+ end
64
+
65
+ def post_to_redmine hash_or_exception
66
+ ticket = hash_or_exception
67
+ send_to_redmine(:ticket => ticket)
68
+ end
69
+
70
+ def send_to_redmine data #:nodoc:
71
+ headers = {
72
+ 'Content-type' => 'application/x-yaml',
73
+ 'Accept' => 'text/xml, application/xml'
74
+ }
75
+
76
+ url = RedmineTicketClient.url
77
+
78
+ http = Net::HTTP::Proxy(RedmineTicketClient.proxy_host,
79
+ RedmineTicketClient.proxy_port,
80
+ RedmineTicketClient.proxy_user,
81
+ RedmineTicketClient.proxy_pass).new(url.host, url.port)
82
+
83
+ http.use_ssl = true
84
+ http.read_timeout = RedmineTicketClient.http_read_timeout
85
+ http.open_timeout = RedmineTicketClient.http_open_timeout
86
+ http.use_ssl = !!RedmineTicketClient.secure
87
+
88
+ response = begin
89
+ http.post(url.path, stringify_keys(data).to_yaml, headers)
90
+ rescue TimeoutError => e
91
+ $stderr.puts "Timeout while contacting the Redmine server."
92
+ nil
93
+ end
94
+
95
+ case response
96
+ when Net::HTTPSuccess then
97
+ puts "Redmine Success: #{response.class}"
98
+ else
99
+ $stderr.puts "Redmine Failure: #{response.class}\n#{response.body if response.respond_to? :body}"
100
+ end
101
+ end
102
+
103
+ def stringify_keys(hash) #:nodoc:
104
+ hash.inject({}) do |h, pair|
105
+ h[pair.first.to_s] = pair.last.is_a?(Hash) ? stringify_keys(pair.last) : pair.last
106
+ h
107
+ end
108
+ end
109
+ end
110
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: redmine-ticket-client
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.1"
5
+ platform: ruby
6
+ authors:
7
+ - Sergio Rubio
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-06 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hoe
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.3.3
24
+ version:
25
+ description: Client library for the Redmine Ticket Server
26
+ email:
27
+ - sergio@rubio.name
28
+ executables: []
29
+
30
+ extensions: []
31
+
32
+ extra_rdoc_files:
33
+ - History.txt
34
+ - Manifest.txt
35
+ - README.txt
36
+ files:
37
+ - History.txt
38
+ - Manifest.txt
39
+ - README.txt
40
+ - Rakefile
41
+ - examples/post_ticket.rb
42
+ - lib/redmine-ticket/client.rb
43
+ has_rdoc: true
44
+ homepage: http://github.com/rubiojr/redmine_ticket_client
45
+ licenses: []
46
+
47
+ post_install_message:
48
+ rdoc_options:
49
+ - --main
50
+ - README.txt
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ version:
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: "0"
64
+ version:
65
+ requirements: []
66
+
67
+ rubyforge_project: redmine-ticket-client
68
+ rubygems_version: 1.3.3
69
+ signing_key:
70
+ specification_version: 3
71
+ summary: Client library for the Redmine Ticket Server
72
+ test_files: []
73
+