rally_api 0.9.17.pre → 0.9.18

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.
@@ -1,16 +1,31 @@
1
- = RallyAPI (rally_api) -- a wrapper for Rally's REST Web Services API
1
+ ## License
2
2
 
3
- == Description
3
+ Copyright (c) Rally Software Development Corp. 2013 Distributed under the MIT License.
4
+
5
+ ## Warranty
6
+
7
+ The Ruby Toolkit for Rally REST API is available on an as-is basis.
8
+
9
+ ## Support
10
+
11
+ Rally Software does not actively maintain this toolkit. If you have a question or problem, we recommend posting it to Stack Overflow: http://stackoverflow.com/questions/ask?tags=rally
12
+
13
+ ## Introduction
14
+
15
+ RallyAPI (rally_api) -- a wrapper for Rally's REST Web Services API
16
+
17
+ [![Stories in Ready](http://badge.waffle.io/RallyTools/RallyRestToolkitForRuby.png)](http://waffle.io/RallyTools/RallyRestToolkitForRuby)
4
18
 
5
19
  RallyAPI is a wrapper of Rally's Web Service API Json endpoints using rest-client and native json parsing
6
20
  Check the examples directory for more detailed samples.
7
21
 
8
- == Installation
9
- gem install rally_api
22
+ ### Installation
23
+
24
+ gem install rally_api
10
25
 
11
- == Usage
26
+ ### Usage
12
27
 
13
- === Making a connection to Rally
28
+ Making a connection to Rally
14
29
  require 'rally_api'
15
30
 
16
31
  #Setting custom headers
@@ -32,7 +47,7 @@ Check the examples directory for more detailed samples.
32
47
  @rally = RallyAPI::RallyRestJson.new(config)
33
48
 
34
49
 
35
- === Querying Rally
50
+ ### Querying Rally
36
51
 
37
52
  #type names are stored in rally.rally_objects hash, you can inspect there for a list
38
53
  #Look at the TypePath for all typedefs and this is the key to each hash.
@@ -69,7 +84,7 @@ Check the examples directory for more detailed samples.
69
84
  end
70
85
 
71
86
 
72
- === Reading an Artifact
87
+ ### Reading an Artifact
73
88
  defect = @rally.read("defect", 12345) #by ObjectID
74
89
  #or
75
90
  defect = @rally.read("defect", "FormattedID|DE42") #by FormattedID
@@ -89,13 +104,13 @@ Check the examples directory for more detailed samples.
89
104
  # This is done for speed - lazy loading (going back to get a value from Rally) can be unneccessarily slow
90
105
  # *Pick you fetch strings wisely* fetch everything you need and don't rely on read if you don't need it the speed is worth it.
91
106
 
92
- === Creating an Artifact
107
+ ### Creating an Artifact
93
108
  obj = {}
94
109
  obj["Name"] = "Test Defect created #{DateTime.now()}"
95
110
  new_de = @rally.create("defect", obj)
96
111
  puts new_de["FormattedID"]
97
112
 
98
- === Updating an Artifact
113
+ ### Updating an Artifact
99
114
  fields = {}
100
115
  fields["Severity"] = "Critical"
101
116
  fields["Description"] = "Description for the issue"
@@ -107,7 +122,7 @@ Check the examples directory for more detailed samples.
107
122
  field_updates = {"Description" => "Changed Description"}
108
123
  defect.update(field_updates)
109
124
 
110
- === Utils
125
+ ### Utils
111
126
  #allowed values: pass the Artifact type string or downcased symbol and the Display Name of the field
112
127
  @rally.allowed_values("Defect", "Severity")
113
128
  @rally.allowed_values("story", "ScheduleState")
@@ -117,9 +132,3 @@ Check the examples directory for more detailed samples.
117
132
  story1.rank_below(story2)
118
133
  story1.rank_to_bottom
119
134
  story1.rank_to_top
120
-
121
- == License/Meta
122
- Copyright (c) 2002-2013 Rally Software Development Corp. All Rights Reserved.
123
- Your use of this Software is governed by the terms and conditions of the applicable Subscription Agreement
124
- between your company and Rally Software Development Corp.
125
-
@@ -1,6 +1,5 @@
1
- require 'httpclient'
1
+ require "httpclient"
2
2
  require 'json'
3
- require 'nokogiri'
4
3
 
5
4
  # :stopdoc:
6
5
  #Copyright (c) 2002-2012 Rally Software Development Corp. All Rights Reserved.
@@ -68,63 +67,6 @@ module RallyAPI
68
67
  @security_token = keyval
69
68
  end
70
69
 
71
- #==========================================================================================================
72
- #new sso auth method - experimental
73
- def do_sso_auth(rally_sso_url, sso_user, sso_password)
74
- step1res = @rally_http_client.request(:get, rally_sso_url, {:follow_redirect => true})
75
- step1action = get_sso_form_info(step1res)
76
-
77
- post_content2 = {:body => step1action[:inputs], :follow_redirect => true}
78
- step2res = @rally_http_client.post(step1action[:action_url], post_content2)
79
- step2action = get_sso_form_info(step2res)
80
- step2formdata = {}
81
- step2action[:inputs].each_key do |nm|
82
- if nm.downcase.include?("name")
83
- step2formdata[nm] = sso_user
84
- elsif nm.downcase.include?("pass")
85
- step2formdata[nm] = sso_password
86
- end
87
- end
88
-
89
- base_url = URI.parse(step1action[:action_url])
90
-
91
- step3_url = "#{base_url.scheme}://#{base_url.host}#{step2action[:action_url]}"
92
- post_content3 = {:body => step2formdata, :follow_redirect => true}
93
- step3res = @rally_http_client.post(step3_url, post_content3)
94
- step3action = get_sso_form_info(step3res)
95
- post_content4 = {:body => step3action[:inputs], :follow_redirect => true}
96
-
97
- #step4_url = "#{base_url.scheme}://#{base_url.host}#{step3action[:action_url]}"
98
- step4res = @rally_http_client.post(step3action[:action_url], post_content4)
99
- log_info("got step4 #{step4res.body}")
100
-
101
- step4action = get_sso_form_info(step4res)
102
- post_content5 = {:body => step4action[:inputs], :follow_redirect => true}
103
- step5res = @rally_http_client.post(step4action[:action_url], post_content5)
104
- log_info("got step5 #{step5res.body}")
105
-
106
- res = @rally_http_client.get("https://rally1.rallydev.com/slm/webservice/1.42/user.js")
107
- log_info("final result: #{res.body}")
108
- true
109
- end
110
-
111
- def get_sso_form_info(form_html)
112
- log_info ("===================\nparsing #{form_html.body}\n======================")
113
- parsed_html = Nokogiri::HTML(form_html.body)
114
- inputs = {}
115
- parsed_html.css("//input").each do |inp|
116
- next if inp["name"].nil?
117
- inputs[inp["name"]] = inp["value"]
118
- end
119
-
120
- form = parsed_html.at("//form")
121
- form_action = form["action"]
122
- return_val = {:action_url => form_action, :inputs => inputs}
123
- log_info("\n==========================\n#{return_val}\n============================\n")
124
- return_val
125
- end
126
- #==========================================================================================================
127
-
128
70
  def logger=(log_dev)
129
71
  @logger = log_dev
130
72
  @rally_http_client.debug_dev = log_dev
@@ -14,7 +14,12 @@ module RallyAPI
14
14
  attr_reader :rally_object, :type, :warnings
15
15
 
16
16
  def initialize(rally_rest, json_hash, warnings = {})
17
- @type = json_hash["_type"] || json_hash["_ref"].split("/")[-2]
17
+ # handle that we might not get a _ref or a _type
18
+ if !json_hash["_type"].nil? || !json_hash["_ref"].nil?
19
+ @type = json_hash["_type"] || json_hash["_ref"].split("/")[-2]
20
+ else
21
+ @type = "unknown"
22
+ end
18
23
  @rally_object = json_hash
19
24
  @rally_rest = rally_rest
20
25
  @warnings = warnings[:warnings]
@@ -63,7 +68,7 @@ module RallyAPI
63
68
 
64
69
  def elements
65
70
  @rally_object.inject({}) do |elements, (key, value)|
66
- if key.to_s.starts_with?("c_")
71
+ if key.to_s.start_with?("c_")
67
72
  key = key.to_s[2..-1]
68
73
  end
69
74
  elements[underscore(key).to_sym] = value
@@ -48,14 +48,13 @@ module RallyAPI
48
48
 
49
49
  attr_accessor :rally_url, :rally_user, :rally_password, :rally_workspace_name, :rally_project_name, :wsapi_version,
50
50
  :rally_headers, :rally_default_workspace, :rally_default_project, :low_debug, :proxy_info,
51
- :rally_rest_api_compat, :logger, :rally_alias_types, :rally_sso_url
51
+ :rally_rest_api_compat, :logger, :rally_alias_types
52
52
  attr_reader :rally_connection
53
53
 
54
54
  def initialize(args)
55
55
  @rally_alias_types = { "story" => "HierarchicalRequirement", "userstory" => "HierarchicalRequirement" }
56
56
 
57
57
  @rally_url = args[:base_url] || "https://rally1.rallydev.com/slm"
58
- @rally_sso_url = args[:rally_sso_url]
59
58
  @rally_user = args[:username]
60
59
  @rally_password = args[:password]
61
60
  @rally_workspace_name = args[:workspace]
@@ -64,12 +63,20 @@ module RallyAPI
64
63
  @rally_headers = args[:headers] || CustomHttpHeader.new
65
64
  @proxy_info = args[:proxy]
66
65
  @skip_sec_key = args[:skip_sec_key]
66
+
67
67
  #flag to help RallyRestAPI users to use snake case field names eg Defect.fixed_in_build vs Defect["FixedInBuild"]
68
- @rally_rest_api_compat = args[:rally_rest_api_compat] || false
69
- @low_debug = args[:debug] || false
70
- @logger = args[:logger] || nil #assumes this is an instance of Logger
68
+ @rally_rest_api_compat = args[:rally_rest_api_compat] || false
71
69
 
72
- setup_rally_connection
70
+ @low_debug = args[:debug] || false
71
+ @logger = args[:logger] || nil #assumes this is an instance of Logger
72
+
73
+ @rally_connection = RallyJsonConnection.new(@rally_headers, @low_debug, @proxy_info)
74
+ @rally_connection.set_client_user(@rally_url, @rally_user, @rally_password)
75
+ @rally_connection.logger = @logger unless @logger.nil?
76
+
77
+ if @wsapi_version.to_s.include?("v2.") && !@skip_sec_key
78
+ @rally_connection.setup_security_token(security_url)
79
+ end
73
80
 
74
81
  if !@rally_workspace_name.nil?
75
82
  @rally_default_workspace = find_workspace(@rally_workspace_name)
@@ -84,20 +91,6 @@ module RallyAPI
84
91
  self
85
92
  end
86
93
 
87
- def setup_rally_connection
88
- @rally_connection = RallyJsonConnection.new(@rally_headers, @low_debug, @proxy_info)
89
- @rally_connection.logger = @logger unless @logger.nil?
90
- if @rally_sso_url.nil?
91
- @rally_connection.set_client_user(@rally_url, @rally_user, @rally_password)
92
- else
93
- @rally_connection.do_sso_auth(@rally_sso_url, @rally_user, @rally_password)
94
- end
95
-
96
- if @wsapi_version.to_s.include?("v2.") && !@skip_sec_key
97
- @rally_connection.setup_security_token(security_url)
98
- end
99
- end
100
-
101
94
  def debug_logging_on
102
95
  @low_debug = true
103
96
  @rally_connection.low_debug = true
@@ -4,5 +4,5 @@
4
4
  #of the applicable Subscription Agreement between your company and
5
5
  #Rally Software Development Corp.
6
6
  module RallyAPI
7
- VERSION = "0.9.17.pre"
7
+ VERSION = "0.9.18"
8
8
  end
metadata CHANGED
@@ -1,19 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rally_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.17.pre
5
- prerelease: 7
4
+ version: 0.9.18
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Dave Smith
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-14 00:00:00.000000000Z
12
+ date: 2013-07-26 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httpclient
16
- requirement: &70356434093580 !ruby/object:Gem::Requirement
16
+ requirement: &70250729329280 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,21 +21,10 @@ dependencies:
21
21
  version: 2.3.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70356434093580
25
- - !ruby/object:Gem::Dependency
26
- name: nokogiri
27
- requirement: &70356434093080 !ruby/object:Gem::Requirement
28
- none: false
29
- requirements:
30
- - - ~>
31
- - !ruby/object:Gem::Version
32
- version: 1.6.0
33
- type: :runtime
34
- prerelease: false
35
- version_requirements: *70356434093080
24
+ version_requirements: *70250729329280
36
25
  - !ruby/object:Gem::Dependency
37
26
  name: simplecov
38
- requirement: &70356434092700 !ruby/object:Gem::Requirement
27
+ requirement: &70250729355980 !ruby/object:Gem::Requirement
39
28
  none: false
40
29
  requirements:
41
30
  - - ! '>='
@@ -43,10 +32,10 @@ dependencies:
43
32
  version: '0'
44
33
  type: :development
45
34
  prerelease: false
46
- version_requirements: *70356434092700
35
+ version_requirements: *70250729355980
47
36
  - !ruby/object:Gem::Dependency
48
37
  name: rspec
49
- requirement: &70356434092220 !ruby/object:Gem::Requirement
38
+ requirement: &70250729355520 !ruby/object:Gem::Requirement
50
39
  none: false
51
40
  requirements:
52
41
  - - ! '>='
@@ -54,10 +43,10 @@ dependencies:
54
43
  version: '0'
55
44
  type: :development
56
45
  prerelease: false
57
- version_requirements: *70356434092220
46
+ version_requirements: *70250729355520
58
47
  - !ruby/object:Gem::Dependency
59
48
  name: rake
60
- requirement: &70356434091800 !ruby/object:Gem::Requirement
49
+ requirement: &70250729355100 !ruby/object:Gem::Requirement
61
50
  none: false
62
51
  requirements:
63
52
  - - ! '>='
@@ -65,7 +54,7 @@ dependencies:
65
54
  version: '0'
66
55
  type: :development
67
56
  prerelease: false
68
- version_requirements: *70356434091800
57
+ version_requirements: *70250729355100
69
58
  description: API wrapper for Rally's JSON REST web services api
70
59
  email:
71
60
  - dsmith@rallydev.com
@@ -73,7 +62,7 @@ executables: []
73
62
  extensions: []
74
63
  extra_rdoc_files: []
75
64
  files:
76
- - README.rdoc
65
+ - README.md
77
66
  - Rakefile
78
67
  - lib/rally_api/custom_http_header.rb
79
68
  - lib/rally_api/lookback_api_query.rb
@@ -100,9 +89,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
100
89
  required_rubygems_version: !ruby/object:Gem::Requirement
101
90
  none: false
102
91
  requirements:
103
- - - ! '>'
92
+ - - ! '>='
104
93
  - !ruby/object:Gem::Version
105
- version: 1.3.1
94
+ version: '0'
106
95
  requirements: []
107
96
  rubyforge_project: rally_api
108
97
  rubygems_version: 1.8.6