jirarest2 0.0.14 → 0.0.15
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.tar.gz.sig +1 -2
- data/History.txt +8 -0
- data/lib/jirarest2.rb +1 -1
- data/lib/jirarest2/field.rb +22 -8
- data/lib/jirarest2/issuetype.rb +12 -18
- data/test/test_fieldcreatemeta.rb +1 -1
- data/test/test_fields.rb +8 -1
- metadata +12 -12
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
g̾>�rs+Z뤘l�϶���S���[7���G1[�����Ui�-ť�bIP���뾶[���F����v�L��okІ�lO�F�����S�o�[|��>��n^�8��X
|
1
|
+
*s��!VQ�'�\3Y�'1ݼ�bXi�T%T��s4���ι��A��@h�������mhUO�
|
data/History.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== 0.0.15 / 2012-09-21
|
2
|
+
|
3
|
+
* 3 bug fixes:
|
4
|
+
|
5
|
+
* Changed the behaviour regarding custom fieldtypes with type "string". Those are now a TextField by default and only radiobuttons and select are named as exceptions
|
6
|
+
* Fixed a "bug" with jira versions that don't return the "issuetype" field in the createmeta statement
|
7
|
+
* Fixed the CascadingField type
|
8
|
+
|
1
9
|
=== 0.0.14 / 2012-09-19
|
2
10
|
|
3
11
|
* 1 unknown:
|
data/lib/jirarest2.rb
CHANGED
data/lib/jirarest2/field.rb
CHANGED
@@ -418,6 +418,7 @@ protected
|
|
418
418
|
end # class MultiField
|
419
419
|
|
420
420
|
# The class to represent CascadingSelectFields
|
421
|
+
# @todo error message is more than just a bit misleading
|
421
422
|
class CascadingField < Field
|
422
423
|
# The key element for the answers - It should not be needed - but it's easer on the checks if it's exposed
|
423
424
|
# @return [String] The key element for the way to Jira
|
@@ -434,6 +435,10 @@ protected
|
|
434
435
|
# @return [Boolean] true if the value is allowed, false if not
|
435
436
|
def value_allowed?(value)
|
436
437
|
return true if @allowed_values == [] # If there is no list get out of here fast
|
438
|
+
# Special case to ensure that we can use the string "nil" if the is really an allowed value
|
439
|
+
if value[1] == "nil" && ( @allowed_values[0].has_key?(value[0]) && @allowed_values[0][value[0]] == [nil] ) then
|
440
|
+
value[1] = nil
|
441
|
+
end
|
437
442
|
if @allowed_values[0].has_key?(value[0]) && @allowed_values[0][value[0]].include?(value[1]) then
|
438
443
|
return true
|
439
444
|
else
|
@@ -449,7 +454,7 @@ protected
|
|
449
454
|
if ! content.instance_of?(Array) or content.size != 2 then
|
450
455
|
raise Jirarest2::ValueNotAllowedException.new(@name,"Array"), "needs to be an Array with exactly 2 parameters. Was #{content.class}."
|
451
456
|
end
|
452
|
-
super
|
457
|
+
super(content)
|
453
458
|
end
|
454
459
|
|
455
460
|
|
@@ -460,7 +465,11 @@ protected
|
|
460
465
|
if @value.nil? then
|
461
466
|
super(nil)
|
462
467
|
else
|
463
|
-
|
468
|
+
if @value[1].nil? then
|
469
|
+
super({"value" => @value[0]}) # If there is no child the server prefers not to be bothered
|
470
|
+
else
|
471
|
+
super({"value" => @value[0], "child" => {"value" => @value[1]}})
|
472
|
+
end
|
464
473
|
end
|
465
474
|
end
|
466
475
|
|
@@ -473,18 +482,23 @@ protected
|
|
473
482
|
|
474
483
|
#Interpret the result of createmeta for one field
|
475
484
|
# @attr [Hash](structure)
|
476
|
-
# @note fills allowed_values with a straight list of allowed values
|
477
|
-
# @todo
|
485
|
+
# @note fills allowed_values with a straight list of allowed values.
|
486
|
+
# @todo The implementation is awkward with only one element in the array and the fields as Hashes in element 0. See if this is should be rewritten.
|
478
487
|
def createmeta(structure)
|
479
488
|
@readonly = true if structure["operations"] == []
|
480
489
|
@key = "value"
|
481
490
|
if structure["allowedValues"] then
|
491
|
+
@allowed_values << Hash.new
|
482
492
|
structure["allowedValues"].each{ |suggestion|
|
483
493
|
subentries = Array.new
|
484
|
-
suggestion
|
485
|
-
|
486
|
-
|
487
|
-
|
494
|
+
if suggestion.has_key?("children") then
|
495
|
+
suggestion["children"].each{ |entry|
|
496
|
+
subentries << entry["value"]
|
497
|
+
}
|
498
|
+
else
|
499
|
+
subentries << nil
|
500
|
+
end
|
501
|
+
@allowed_values[0][suggestion[@key]] = subentries
|
488
502
|
}
|
489
503
|
end
|
490
504
|
end
|
data/lib/jirarest2/issuetype.rb
CHANGED
@@ -29,6 +29,7 @@ class Issuetype
|
|
29
29
|
attr_reader :required_fields
|
30
30
|
|
31
31
|
#Get the correct Fieldtype based on the schema from createmeta
|
32
|
+
# Strings are a little bit strange as the representation differs - some just go as values others go as hashes
|
32
33
|
# @attr [Hash] schema The type description we get
|
33
34
|
# @return [String] Name of the Fieldtype to use
|
34
35
|
# @todo timetracking will probably not work
|
@@ -83,36 +84,25 @@ class Issuetype
|
|
83
84
|
when /.*:cascadingselect$/
|
84
85
|
return "CascadingField"
|
85
86
|
else
|
86
|
-
raise Jirarest2::CouldNotDetermineFieldtypeException schema
|
87
|
+
raise Jirarest2::CouldNotDetermineFieldtypeException, schema
|
87
88
|
end
|
88
89
|
else
|
89
|
-
raise Jirarest2::CouldNotDetermineFieldtypeException schema
|
90
|
+
raise Jirarest2::CouldNotDetermineFieldtypeException, schema
|
90
91
|
end
|
91
92
|
when "string"
|
93
|
+
# Strings should be easy but unfortunately there are some strings that result in hashes
|
92
94
|
return "TextField" if schema["system"]
|
93
|
-
schema["custom"] =~ /.*:(\w*)$/
|
95
|
+
schema["custom"] =~ /.*:(\w*)$/
|
94
96
|
case $1
|
95
|
-
when "url"
|
96
|
-
return "TextField"
|
97
|
-
when "textfield"
|
98
|
-
return "TextField"
|
99
|
-
when "textarea"
|
100
|
-
return "TextField"
|
101
97
|
when "radiobuttons"
|
102
98
|
return "HashField"
|
103
99
|
when "select"
|
104
100
|
return "HashField"
|
105
|
-
when "hiddenjobswitch"
|
106
|
-
return "TextField"
|
107
|
-
when "readonlyfield"
|
108
|
-
return "TextField"
|
109
|
-
when "jobcheckbox"
|
110
|
-
return "TextField"
|
111
101
|
else
|
112
|
-
|
102
|
+
return "TextField"
|
113
103
|
end
|
114
104
|
else
|
115
|
-
raise Jirarest2::CouldNotDetermineFieldtypeException schema
|
105
|
+
raise Jirarest2::CouldNotDetermineFieldtypeException, schema
|
116
106
|
end
|
117
107
|
|
118
108
|
end # def decipher_schema
|
@@ -157,7 +147,7 @@ class Issuetype
|
|
157
147
|
createmeta(json["editmeta"])
|
158
148
|
else
|
159
149
|
# We need to know what to fill and how
|
160
|
-
raise Jirearesr2::FieldsUnknownError json["self"]
|
150
|
+
raise Jirearesr2::FieldsUnknownError, json["self"]
|
161
151
|
end
|
162
152
|
end
|
163
153
|
@issuekey = json["key"]
|
@@ -210,6 +200,10 @@ class Issuetype
|
|
210
200
|
@fields.each { |id,field|
|
211
201
|
fields = fields.merge!(field.to_j) if ! field.to_j.nil? #Sending empty fields with a new ticket will not work
|
212
202
|
}
|
203
|
+
# Work out some difference between different versions of JIRA(tm). Sometimes the issuetype is there as a field sometimes it isn't.
|
204
|
+
if !fields.has_key?("issuetype") then
|
205
|
+
fields["issuetype"] = {"name" => @name}
|
206
|
+
end
|
213
207
|
h = {"fields" => fields}
|
214
208
|
return h
|
215
209
|
else
|
@@ -451,7 +451,7 @@ class TestFieldCreatemeta < MiniTest::Unit::TestCase
|
|
451
451
|
def test_customfield_10000 # cascadingselect -> CascadingField
|
452
452
|
fstruct = {"customfield_10000" => {"required"=>false, "schema"=>{"type"=>"array", "items"=>"string", "custom"=>"com.atlassian.jira.plugin.system.customfieldtypes:cascadingselect", "customId"=>10000}, "name"=>"Cascading Select Test", "operations"=>["set"], "allowedValues"=>[{"self"=>"http://localhost:2990/jira/rest/api/2/customFieldOption/10000", "value"=>"English", "id"=>"10000", "children"=>[{"self"=>"http://localhost:2990/jira/rest/api/2/customFieldOption/10003", "value"=>"One", "id"=>"10003"}, {"self"=>"http://localhost:2990/jira/rest/api/2/customFieldOption/10004", "value"=>"Two", "id"=>"10004"}, {"self"=>"http://localhost:2990/jira/rest/api/2/customFieldOption/10005", "value"=>"Three", "id"=>"10005"}, {"self"=>"http://localhost:2990/jira/rest/api/2/customFieldOption/10006", "value"=>"Four", "id"=>"10006"}]}, {"self"=>"http://localhost:2990/jira/rest/api/2/customFieldOption/10001", "value"=>"German", "id"=>"10001", "children"=>[{"self"=>"http://localhost:2990/jira/rest/api/2/customFieldOption/10007", "value"=>"Eins", "id"=>"10007"}, {"self"=>"http://localhost:2990/jira/rest/api/2/customFieldOption/10008", "value"=>"zwei", "id"=>"10008"}, {"self"=>"http://localhost:2990/jira/rest/api/2/customFieldOption/10009", "value"=>"drEi", "id"=>"10009"}, {"self"=>"http://localhost:2990/jira/rest/api/2/customFieldOption/10010", "value"=>"vier", "id"=>"10010"}]}, {"self"=>"http://localhost:2990/jira/rest/api/2/customFieldOption/10002", "value"=>"ISO", "id"=>"10002", "children"=>[{"self"=>"http://localhost:2990/jira/rest/api/2/customFieldOption/10011", "value"=>"Unaone", "id"=>"10011"}, {"self"=>"http://localhost:2990/jira/rest/api/2/customFieldOption/10012", "value"=>"Bissotwo", "id"=>"10012"}, {"self"=>"http://localhost:2990/jira/rest/api/2/customFieldOption/10013", "value"=>"Terrathree", "id"=>"10013"}, {"self"=>"http://localhost:2990/jira/rest/api/2/customFieldOption/10014", "value"=>"Kartefour", "id"=>"10014"}]}]}}
|
453
453
|
field = Jirarest2Field::CascadingField.new("customfield_10000","Cascading Select Test",{:required => false, :createmeta => fstruct["customfield_10000"]})
|
454
|
-
allowed_v = [{"English"=>["One", "Two", "Three", "Four"]
|
454
|
+
allowed_v = [{"English"=>["One", "Two", "Three", "Four"], "German"=>["Eins", "zwei", "drEi", "vier"], "ISO"=>["Unaone", "Bissotwo", "Terrathree", "Kartefour"]}]
|
455
455
|
assert_equal "customfield_10000", field.id
|
456
456
|
assert_equal "Cascading Select Test", field.name
|
457
457
|
assert_equal false, field.readonly
|
data/test/test_fields.rb
CHANGED
@@ -346,14 +346,21 @@ module Jirarest2Field
|
|
346
346
|
end
|
347
347
|
|
348
348
|
def test_allowed
|
349
|
-
@field.allowed_values= [{ "color" => ["red","green","yellow"],"car" => ["bmw","mini","mg","vw"],
|
349
|
+
@field.allowed_values= [{ "color" => ["red","green","yellow"],"car" => ["bmw","mini","mg","vw"],"lang" => ["ruby","Java","C","C#"]}]
|
350
350
|
@field.value = ["color","red"]
|
351
|
+
assert_equal ["color","red"],@field.value
|
351
352
|
@field.value = ["car","mg"]
|
353
|
+
assert_equal ["car","mg"],@field.value
|
352
354
|
assert_raises(Jirarest2::ValueNotAllowedException) { @field.value = ["color","lang"] }
|
353
355
|
assert_raises(Jirarest2::ValueNotAllowedException) { @field.value = ["color"] }
|
354
356
|
assert_raises(Jirarest2::ValueNotAllowedException) { @field.value = ["music"] }
|
355
357
|
assert_raises(Jirarest2::ValueNotAllowedException) { @field.value = ["music","Cello"] }
|
356
358
|
end
|
359
|
+
|
360
|
+
def test_allowed_with_empties
|
361
|
+
@field.allowed_values = [{ "color" => ["red","green","yellow"],"car" => [nil],"lang" => ["ruby","Java","C","C#"]}]
|
362
|
+
@field.value = ["car","nil"]
|
363
|
+
end
|
357
364
|
|
358
365
|
end # class TestCascadingField
|
359
366
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jirarest2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.15
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -50,11 +50,11 @@ cert_chain:
|
|
50
50
|
-----END CERTIFICATE-----
|
51
51
|
|
52
52
|
'
|
53
|
-
date: 2012-09-
|
53
|
+
date: 2012-09-20 00:00:00.000000000 Z
|
54
54
|
dependencies:
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: json
|
57
|
-
requirement: &
|
57
|
+
requirement: &14487300 !ruby/object:Gem::Requirement
|
58
58
|
none: false
|
59
59
|
requirements:
|
60
60
|
- - ! '>='
|
@@ -62,10 +62,10 @@ dependencies:
|
|
62
62
|
version: 1.6.0
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
|
-
version_requirements: *
|
65
|
+
version_requirements: *14487300
|
66
66
|
- !ruby/object:Gem::Dependency
|
67
67
|
name: highline
|
68
|
-
requirement: &
|
68
|
+
requirement: &14482800 !ruby/object:Gem::Requirement
|
69
69
|
none: false
|
70
70
|
requirements:
|
71
71
|
- - ! '>='
|
@@ -73,10 +73,10 @@ dependencies:
|
|
73
73
|
version: 1.1.0
|
74
74
|
type: :runtime
|
75
75
|
prerelease: false
|
76
|
-
version_requirements: *
|
76
|
+
version_requirements: *14482800
|
77
77
|
- !ruby/object:Gem::Dependency
|
78
78
|
name: hoe-yard
|
79
|
-
requirement: &
|
79
|
+
requirement: &14481280 !ruby/object:Gem::Requirement
|
80
80
|
none: false
|
81
81
|
requirements:
|
82
82
|
- - ! '>='
|
@@ -84,10 +84,10 @@ dependencies:
|
|
84
84
|
version: 0.1.2
|
85
85
|
type: :development
|
86
86
|
prerelease: false
|
87
|
-
version_requirements: *
|
87
|
+
version_requirements: *14481280
|
88
88
|
- !ruby/object:Gem::Dependency
|
89
89
|
name: webmock
|
90
|
-
requirement: &
|
90
|
+
requirement: &14479940 !ruby/object:Gem::Requirement
|
91
91
|
none: false
|
92
92
|
requirements:
|
93
93
|
- - ! '>='
|
@@ -95,10 +95,10 @@ dependencies:
|
|
95
95
|
version: 1.7.0
|
96
96
|
type: :development
|
97
97
|
prerelease: false
|
98
|
-
version_requirements: *
|
98
|
+
version_requirements: *14479940
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
100
|
name: hoe
|
101
|
-
requirement: &
|
101
|
+
requirement: &14478520 !ruby/object:Gem::Requirement
|
102
102
|
none: false
|
103
103
|
requirements:
|
104
104
|
- - ! '>='
|
@@ -106,7 +106,7 @@ dependencies:
|
|
106
106
|
version: 2.9.4
|
107
107
|
type: :development
|
108
108
|
prerelease: false
|
109
|
-
version_requirements: *
|
109
|
+
version_requirements: *14478520
|
110
110
|
description: ! "jirarest2 is yet another implementation of the JIRA(tm) REST-API[https://developer.atlassian.com/display/JIRADEV/JIRA+Remote+API+Reference]
|
111
111
|
. This one for Ruby1.9.1\n\nIt is intended to be called within the shell to create
|
112
112
|
and verify JIRA(tm) issues fast without a browser. There was no particular need
|
metadata.gz.sig
CHANGED
Binary file
|