howlingmine-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.
- data/History.txt +3 -0
- data/Manifest.txt +13 -0
- data/README.txt +23 -0
- data/Rakefile +20 -0
- data/examples/issues_example.rb +38 -0
- data/howlingmine_client.tmproj +139 -0
- data/lib/howlingmine.rb +14 -0
- data/lib/howlingmine/client.rb +28 -0
- data/lib/howlingmine/config.rb +62 -0
- data/lib/howlingmine/issue.rb +92 -0
- data/redmine_test_files/database.yml +12 -0
- data/redmine_test_files/redmine.db +0 -0
- data/test/issue_test.rb +111 -0
- metadata +80 -0
data/History.txt
ADDED
data/Manifest.txt
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
History.txt
|
2
|
+
Manifest.txt
|
3
|
+
README.txt
|
4
|
+
Rakefile
|
5
|
+
examples/issues_example.rb
|
6
|
+
howlingmine_client.tmproj
|
7
|
+
lib/howlingmine.rb
|
8
|
+
lib/howlingmine/client.rb
|
9
|
+
lib/howlingmine/config.rb
|
10
|
+
lib/howlingmine/issue.rb
|
11
|
+
redmine_test_files/database.yml
|
12
|
+
redmine_test_files/redmine.db
|
13
|
+
test/issue_test.rb
|
data/README.txt
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
Howling Mine Client
|
2
|
+
====================
|
3
|
+
|
4
|
+
AR-esque library to interface with Howling Mine Server:
|
5
|
+
|
6
|
+
http://github.com/rubiojr/howlingmine-server
|
7
|
+
|
8
|
+
Code loosely based on hoptoad notifier by Thoughbot inc.
|
9
|
+
http://github.com/thoughtbot/hoptoad_notifier
|
10
|
+
|
11
|
+
|
12
|
+
INSTALLATION
|
13
|
+
------------
|
14
|
+
|
15
|
+
Install the rubygem from http://gemcutter.org
|
16
|
+
|
17
|
+
Requires howlingmine-server redmine plugin 0.1
|
18
|
+
|
19
|
+
EXAMPLES
|
20
|
+
-------------
|
21
|
+
see examples/ dir
|
22
|
+
|
23
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'hoe'
|
5
|
+
require './lib/howlingmine.rb'
|
6
|
+
|
7
|
+
Hoe.spec 'howlingmine-client' do |p|
|
8
|
+
p.version = HowlingMine::VERSION
|
9
|
+
p.developer('Sergio Rubio', 'sergio@rubio.name')
|
10
|
+
p.summary = 'Client library for the Howling Mine Server'
|
11
|
+
p.description = 'Client library for the Howling Mine Server'
|
12
|
+
p.url = 'http://github.com/rubiojr/howlingmine-client'
|
13
|
+
p.test_globs = ['test/*_test.rb']
|
14
|
+
end
|
15
|
+
|
16
|
+
# vim: syntax=Ruby
|
17
|
+
|
18
|
+
task :restore_redmine_db do
|
19
|
+
FileUtils.cp 'redmine_test_files/redmine.db','/opt/redmine-0.8/db/redmine.db'
|
20
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "#{File.join(File.dirname(__FILE__),'../lib/howlingmine.rb')}"
|
2
|
+
|
3
|
+
HowlingMine::Config.host = 'redmine.local'
|
4
|
+
HowlingMine::Config.port = 80 # default
|
5
|
+
HowlingMine::Config.use_ssl = false # default
|
6
|
+
HowlingMine::Config.project = 'howlingmine'
|
7
|
+
HowlingMine::Config.tracker = 'Bug' # default
|
8
|
+
HowlingMine::Config.api_key = 'OPlv8xfQmmEy0x5yHMrX'
|
9
|
+
|
10
|
+
HowlingMine::Issue.all.each do |i|
|
11
|
+
puts "-" * 40
|
12
|
+
puts "Issue ID: #{i.id}"
|
13
|
+
puts "Subject: #{i.subject}"
|
14
|
+
puts "Created On: #{i.created_on}"
|
15
|
+
puts "Last update: #{i.updated_on}"
|
16
|
+
puts "Issue status: #{i.status}"
|
17
|
+
end
|
18
|
+
|
19
|
+
issue = HowlingMine::Issue.new
|
20
|
+
issue.subject = 'issue number one'
|
21
|
+
issue.description = 'oh my, first issue'
|
22
|
+
# if an issue with the same subject exist, the default behaviour
|
23
|
+
# is to update the journal creating another comment
|
24
|
+
issue.save
|
25
|
+
|
26
|
+
# Get redmine issue #1 and update the journal
|
27
|
+
issue = HowlingMine::Issue.get 1
|
28
|
+
if issue
|
29
|
+
issue.description = 'another journal entry' # adds a comment to the issue
|
30
|
+
issue.save
|
31
|
+
end
|
32
|
+
|
33
|
+
# Get the last issue and print the last update date
|
34
|
+
issue = HowlingMine::Issue.last
|
35
|
+
if issue
|
36
|
+
puts '-' * 40
|
37
|
+
puts "Issue ##{issue.id} updated on: #{issue.updated_on.strftime '%F %H:%M'}"
|
38
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
|
+
<plist version="1.0">
|
4
|
+
<dict>
|
5
|
+
<key>currentDocument</key>
|
6
|
+
<string>test/issue_test.rb</string>
|
7
|
+
<key>documents</key>
|
8
|
+
<array>
|
9
|
+
<dict>
|
10
|
+
<key>expanded</key>
|
11
|
+
<true/>
|
12
|
+
<key>name</key>
|
13
|
+
<string>howlingmine_client</string>
|
14
|
+
<key>regexFolderFilter</key>
|
15
|
+
<string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
|
16
|
+
<key>sourceDirectory</key>
|
17
|
+
<string></string>
|
18
|
+
</dict>
|
19
|
+
</array>
|
20
|
+
<key>fileHierarchyDrawerWidth</key>
|
21
|
+
<integer>200</integer>
|
22
|
+
<key>metaData</key>
|
23
|
+
<dict>
|
24
|
+
<key>README.txt</key>
|
25
|
+
<dict>
|
26
|
+
<key>caret</key>
|
27
|
+
<dict>
|
28
|
+
<key>column</key>
|
29
|
+
<integer>0</integer>
|
30
|
+
<key>line</key>
|
31
|
+
<integer>9</integer>
|
32
|
+
</dict>
|
33
|
+
<key>firstVisibleColumn</key>
|
34
|
+
<integer>0</integer>
|
35
|
+
<key>firstVisibleLine</key>
|
36
|
+
<integer>0</integer>
|
37
|
+
</dict>
|
38
|
+
<key>Rakefile</key>
|
39
|
+
<dict>
|
40
|
+
<key>caret</key>
|
41
|
+
<dict>
|
42
|
+
<key>column</key>
|
43
|
+
<integer>0</integer>
|
44
|
+
<key>line</key>
|
45
|
+
<integer>20</integer>
|
46
|
+
</dict>
|
47
|
+
<key>firstVisibleColumn</key>
|
48
|
+
<integer>0</integer>
|
49
|
+
<key>firstVisibleLine</key>
|
50
|
+
<integer>0</integer>
|
51
|
+
</dict>
|
52
|
+
<key>lib/howlingmine/client.rb</key>
|
53
|
+
<dict>
|
54
|
+
<key>caret</key>
|
55
|
+
<dict>
|
56
|
+
<key>column</key>
|
57
|
+
<integer>127</integer>
|
58
|
+
<key>line</key>
|
59
|
+
<integer>22</integer>
|
60
|
+
</dict>
|
61
|
+
<key>columnSelection</key>
|
62
|
+
<false/>
|
63
|
+
<key>firstVisibleColumn</key>
|
64
|
+
<integer>0</integer>
|
65
|
+
<key>firstVisibleLine</key>
|
66
|
+
<integer>0</integer>
|
67
|
+
<key>selectFrom</key>
|
68
|
+
<dict>
|
69
|
+
<key>column</key>
|
70
|
+
<integer>115</integer>
|
71
|
+
<key>line</key>
|
72
|
+
<integer>22</integer>
|
73
|
+
</dict>
|
74
|
+
<key>selectTo</key>
|
75
|
+
<dict>
|
76
|
+
<key>column</key>
|
77
|
+
<integer>127</integer>
|
78
|
+
<key>line</key>
|
79
|
+
<integer>22</integer>
|
80
|
+
</dict>
|
81
|
+
</dict>
|
82
|
+
<key>lib/howlingmine/config.rb</key>
|
83
|
+
<dict>
|
84
|
+
<key>caret</key>
|
85
|
+
<dict>
|
86
|
+
<key>column</key>
|
87
|
+
<integer>12</integer>
|
88
|
+
<key>line</key>
|
89
|
+
<integer>6</integer>
|
90
|
+
</dict>
|
91
|
+
<key>firstVisibleColumn</key>
|
92
|
+
<integer>0</integer>
|
93
|
+
<key>firstVisibleLine</key>
|
94
|
+
<integer>0</integer>
|
95
|
+
</dict>
|
96
|
+
<key>lib/howlingmine/issue.rb</key>
|
97
|
+
<dict>
|
98
|
+
<key>caret</key>
|
99
|
+
<dict>
|
100
|
+
<key>column</key>
|
101
|
+
<integer>23</integer>
|
102
|
+
<key>line</key>
|
103
|
+
<integer>33</integer>
|
104
|
+
</dict>
|
105
|
+
<key>firstVisibleColumn</key>
|
106
|
+
<integer>0</integer>
|
107
|
+
<key>firstVisibleLine</key>
|
108
|
+
<integer>48</integer>
|
109
|
+
</dict>
|
110
|
+
<key>test/issue_test.rb</key>
|
111
|
+
<dict>
|
112
|
+
<key>caret</key>
|
113
|
+
<dict>
|
114
|
+
<key>column</key>
|
115
|
+
<integer>30</integer>
|
116
|
+
<key>line</key>
|
117
|
+
<integer>106</integer>
|
118
|
+
</dict>
|
119
|
+
<key>firstVisibleColumn</key>
|
120
|
+
<integer>0</integer>
|
121
|
+
<key>firstVisibleLine</key>
|
122
|
+
<integer>0</integer>
|
123
|
+
</dict>
|
124
|
+
</dict>
|
125
|
+
<key>openDocuments</key>
|
126
|
+
<array>
|
127
|
+
<string>lib/howlingmine/issue.rb</string>
|
128
|
+
<string>test/issue_test.rb</string>
|
129
|
+
<string>Rakefile</string>
|
130
|
+
<string>lib/howlingmine/client.rb</string>
|
131
|
+
<string>README.txt</string>
|
132
|
+
<string>lib/howlingmine/config.rb</string>
|
133
|
+
</array>
|
134
|
+
<key>showFileHierarchyDrawer</key>
|
135
|
+
<true/>
|
136
|
+
<key>windowFrame</key>
|
137
|
+
<string>{{300, 77}, {660, 645}}</string>
|
138
|
+
</dict>
|
139
|
+
</plist>
|
data/lib/howlingmine.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'net/https'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'rest_client'
|
5
|
+
require 'pp'
|
6
|
+
require 'json'
|
7
|
+
require 'time'
|
8
|
+
require "#{File.join(File.dirname(__FILE__),'howlingmine/config')}"
|
9
|
+
require "#{File.join(File.dirname(__FILE__),'howlingmine/client')}"
|
10
|
+
require "#{File.join(File.dirname(__FILE__),'howlingmine/issue')}"
|
11
|
+
|
12
|
+
module HowlingMine
|
13
|
+
VERSION = '0.1'
|
14
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module HowlingMine
|
2
|
+
module Client
|
3
|
+
|
4
|
+
class << self
|
5
|
+
def new_issue
|
6
|
+
post_ticket
|
7
|
+
end
|
8
|
+
|
9
|
+
def post_ticket
|
10
|
+
RestClient.post("#{HowlingMine::Config.protocol}://#{HowlingMine::Config.host}:#{HowlingMine::Config.port}/howling_mine/new_issue", HowlingMine::Config.params.merge(:api_key => HowlingMine::Config.api_key))
|
11
|
+
end
|
12
|
+
|
13
|
+
def issue_status
|
14
|
+
RestClient.post("#{HowlingMine::Config.protocol}://#{HowlingMine::Config.host}:#{HowlingMine::Config.port}/howling_mine/issue_status", :api_key => HowlingMine::Config.api_key, :issue_id => HowlingMine::Config.params[:issue_id])
|
15
|
+
end
|
16
|
+
def issues
|
17
|
+
RestClient.post("#{HowlingMine::Config.protocol}://#{HowlingMine::Config.host}:#{HowlingMine::Config.port}/howling_mine/issues", :api_key => HowlingMine::Config.api_key, :issue_id => HowlingMine::Config.params[:issue_id])
|
18
|
+
end
|
19
|
+
def projects
|
20
|
+
RestClient.post("#{HowlingMine::Config.protocol}://#{HowlingMine::Config.host}:#{HowlingMine::Config.port}/howling_mine/projects", :api_key => HowlingMine::Config.api_key, :issue_id => HowlingMine::Config.params[:issue_id])
|
21
|
+
end
|
22
|
+
def journals
|
23
|
+
RestClient.post("#{HowlingMine::Config.protocol}://#{HowlingMine::Config.host}:#{HowlingMine::Config.port}/howling_mine/journals", :api_key => HowlingMine::Config.api_key, :issue_id => HowlingMine::Config.params[:issue_id])
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module HowlingMine
|
2
|
+
class Config
|
3
|
+
|
4
|
+
attr_accessor :api_key
|
5
|
+
|
6
|
+
def self.api_key
|
7
|
+
params[:api_key]
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.api_key=(k)
|
11
|
+
params[:api_key] = k
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.params
|
15
|
+
@@params ||= {}
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.host
|
19
|
+
@@host ||= 'localhost'
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.host=(h)
|
23
|
+
@@host = h
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.port=(p)
|
27
|
+
@@port = p
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.port
|
31
|
+
@@port ||= 80
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.use_ssl
|
35
|
+
@@use_ssl ||= false
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.use_ssl=(yn)
|
39
|
+
@@use_ssl ||= yn
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.project
|
43
|
+
params[:project]
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.project=(p)
|
47
|
+
params[:project] = p
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.protocol
|
51
|
+
use_ssl ? 'https' : 'http'
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.tracker=(t)
|
55
|
+
params[:tracker] = t
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.tracker
|
59
|
+
params[:tracker] ||= 'Bug'
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
module HowlingMine
|
2
|
+
class Issue
|
3
|
+
|
4
|
+
attr_accessor :id, :subject, :description, :raw, :author
|
5
|
+
attr_writer :created_on, :updated_on
|
6
|
+
|
7
|
+
def save
|
8
|
+
client = HowlingMine::Client
|
9
|
+
params = {
|
10
|
+
:subject => subject || 'no subject',
|
11
|
+
:description => description || '',
|
12
|
+
:author => author || 'none',
|
13
|
+
#:custom_fields => {
|
14
|
+
# :foofield1 => 'field-text'
|
15
|
+
#}.to_yaml
|
16
|
+
}
|
17
|
+
|
18
|
+
HowlingMine::Config.params.merge!(params)
|
19
|
+
|
20
|
+
begin
|
21
|
+
response = client.new_issue
|
22
|
+
@id = response.to_i
|
23
|
+
return true
|
24
|
+
rescue Exception => e
|
25
|
+
return false
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.all
|
30
|
+
project = JSON.parse(HowlingMine::Client.projects).find do |p|
|
31
|
+
p['identifier'] == HowlingMine::Config.project
|
32
|
+
end
|
33
|
+
project_id = ''
|
34
|
+
if ! project.nil?
|
35
|
+
project_id = project['id']
|
36
|
+
else
|
37
|
+
raise Exception.new("#{HowlingMine::Config.project} project not found in target Redmine")
|
38
|
+
end
|
39
|
+
issues = []
|
40
|
+
client = HowlingMine::Client
|
41
|
+
JSON.parse(client.issues).each do |i|
|
42
|
+
next if i['project_id'] != project_id
|
43
|
+
issue = Issue.new
|
44
|
+
issue.subject = i['subject']
|
45
|
+
issue.description = i['description']
|
46
|
+
issue.id = i['id'].to_i
|
47
|
+
issue.raw = i
|
48
|
+
issue.created_on = i['created_on']
|
49
|
+
issue.updated_on = i['updated_on']
|
50
|
+
if i['custom_fields']
|
51
|
+
end
|
52
|
+
issues << issue
|
53
|
+
end
|
54
|
+
issues
|
55
|
+
end
|
56
|
+
|
57
|
+
def updated_on
|
58
|
+
Time.parse @updated_on
|
59
|
+
end
|
60
|
+
|
61
|
+
def created_on
|
62
|
+
Time.parse @created_on
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.first
|
66
|
+
all.first
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.last
|
70
|
+
all.last
|
71
|
+
end
|
72
|
+
|
73
|
+
def status
|
74
|
+
c = HowlingMine::Client
|
75
|
+
HowlingMine::Config.params.merge!(:issue_id => id)
|
76
|
+
c.issue_status.downcase
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.get(ticket_no)
|
80
|
+
all.find do |i| ticket_no.to_i == i.id end
|
81
|
+
end
|
82
|
+
|
83
|
+
def journal
|
84
|
+
client = HowlingMine::Client
|
85
|
+
params = {
|
86
|
+
:issue_id => id
|
87
|
+
}
|
88
|
+
HowlingMine::Config.params.merge! params
|
89
|
+
JSON.parse(client.journals)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# MySQL (default setup). Versions 4.1 and 5.0 are recommended.
|
2
|
+
#
|
3
|
+
# Get the fast C bindings:
|
4
|
+
# gem install mysql
|
5
|
+
# (on OS X: gem install mysql -- --include=/usr/local/lib)
|
6
|
+
# And be sure to use new-style password hashing:
|
7
|
+
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
|
8
|
+
|
9
|
+
production:
|
10
|
+
adapter: sqlite3
|
11
|
+
dbfile: db/redmine.db
|
12
|
+
|
Binary file
|
data/test/issue_test.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require "#{File.join(File.dirname(__FILE__),'../lib/howlingmine.rb')}"
|
3
|
+
|
4
|
+
class TestIssue < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
FileUtils.cp 'redmine_test_files/redmine.db','/opt/redmine-0.8/db/redmine.db'
|
8
|
+
HowlingMine::Config.host = 'redmine.local'
|
9
|
+
HowlingMine::Config.port = 80 # default
|
10
|
+
HowlingMine::Config.use_ssl = false # default
|
11
|
+
HowlingMine::Config.project = 'howlingmine'
|
12
|
+
HowlingMine::Config.tracker = 'Bug' # default
|
13
|
+
HowlingMine::Config.api_key = 'FboVJFYVg84avd2dfL3Y'
|
14
|
+
end
|
15
|
+
|
16
|
+
def teardown
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_api_key
|
20
|
+
HowlingMine::Config.api_key = '0'
|
21
|
+
assert_raises RestClient::RequestFailed do
|
22
|
+
HowlingMine::Issue.all
|
23
|
+
end
|
24
|
+
|
25
|
+
assert_nothing_raised do
|
26
|
+
HowlingMine::Config.api_key = 'FboVJFYVg84avd2dfL3Y'
|
27
|
+
HowlingMine::Issue.all
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_empty_issues
|
32
|
+
assert HowlingMine::Issue.all.empty?
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_subject
|
36
|
+
issue = HowlingMine::Issue.new
|
37
|
+
issue.subject = 'issue number one'
|
38
|
+
issue.save
|
39
|
+
issue = HowlingMine::Issue.get 1
|
40
|
+
issue.subject == 'issue number one'
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_get
|
44
|
+
issue = HowlingMine::Issue.new
|
45
|
+
issue.subject = 'issue number one'
|
46
|
+
assert issue.save
|
47
|
+
issue = HowlingMine::Issue.get 1
|
48
|
+
assert ! issue.nil?
|
49
|
+
assert issue.subject == 'issue number one'
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_new_issue
|
53
|
+
issue = HowlingMine::Issue.new
|
54
|
+
issue.subject = 'issue number one'
|
55
|
+
assert_nothing_raised do
|
56
|
+
assert issue.save
|
57
|
+
end
|
58
|
+
|
59
|
+
assert HowlingMine::Issue.all.size == 1
|
60
|
+
|
61
|
+
issue = HowlingMine::Issue.new
|
62
|
+
issue.subject = 'issue number 2'
|
63
|
+
issue.description = 'stuff'
|
64
|
+
assert issue.save
|
65
|
+
assert issue.id == 2
|
66
|
+
assert HowlingMine::Issue.all.size == 2
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_last_issue
|
70
|
+
issue = HowlingMine::Issue.new
|
71
|
+
issue.subject = 'issue number one'
|
72
|
+
assert issue.save
|
73
|
+
assert issue.id == HowlingMine::Issue.last.id
|
74
|
+
assert HowlingMine::Issue.last.id == 1
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_first_issue
|
78
|
+
issue = HowlingMine::Issue.new
|
79
|
+
issue.subject = 'issue number one'
|
80
|
+
assert issue.save
|
81
|
+
assert issue.id == HowlingMine::Issue.first.id
|
82
|
+
assert HowlingMine::Issue.first.id == 1
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_journal
|
86
|
+
issue = HowlingMine::Issue.new
|
87
|
+
issue.subject = 'issue number 1'
|
88
|
+
issue.save
|
89
|
+
assert issue.journal.size == 0
|
90
|
+
issue.description = 'comment one'
|
91
|
+
issue.save
|
92
|
+
assert issue.journal.size == 1
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_save
|
96
|
+
issue = HowlingMine::Issue.new
|
97
|
+
issue.subject = 'issue number 1'
|
98
|
+
issue.description = 'description'
|
99
|
+
assert issue.save
|
100
|
+
issue = HowlingMine::Issue.get 1
|
101
|
+
assert issue.subject == 'issue number 1'
|
102
|
+
assert issue.description == 'description'
|
103
|
+
|
104
|
+
assert_nothing_raised do
|
105
|
+
issue = HowlingMine::Issue.new
|
106
|
+
assert issue.save
|
107
|
+
assert HowlingMine::Issue.all.size == 2
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: howlingmine-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-12-15 00:00:00 +01: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 Howling Mine 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/issues_example.rb
|
42
|
+
- howlingmine_client.tmproj
|
43
|
+
- lib/howlingmine.rb
|
44
|
+
- lib/howlingmine/client.rb
|
45
|
+
- lib/howlingmine/config.rb
|
46
|
+
- lib/howlingmine/issue.rb
|
47
|
+
- redmine_test_files/database.yml
|
48
|
+
- redmine_test_files/redmine.db
|
49
|
+
- test/issue_test.rb
|
50
|
+
has_rdoc: true
|
51
|
+
homepage: http://github.com/rubiojr/howlingmine-client
|
52
|
+
licenses: []
|
53
|
+
|
54
|
+
post_install_message:
|
55
|
+
rdoc_options:
|
56
|
+
- --main
|
57
|
+
- README.txt
|
58
|
+
require_paths:
|
59
|
+
- lib
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: "0"
|
65
|
+
version:
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: "0"
|
71
|
+
version:
|
72
|
+
requirements: []
|
73
|
+
|
74
|
+
rubyforge_project: howlingmine-client
|
75
|
+
rubygems_version: 1.3.5
|
76
|
+
signing_key:
|
77
|
+
specification_version: 3
|
78
|
+
summary: Client library for the Howling Mine Server
|
79
|
+
test_files:
|
80
|
+
- test/issue_test.rb
|