Class: VersiononeSdk::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/versionone_sdk/client.rb

Constant Summary collapse

DEFAULT_PROTOCOL =
'https'
DEFAULT_HOSTNAME =
'localhost'
DEFAULT_PORT =
443

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Client

Returns a new instance of Client.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/versionone_sdk/client.rb', line 14

def initialize(opts = {})
  @sProtocol   = opts[:protocol] || DEFAULT_PROTOCOL
  @sHostname   = opts[:hostname] || DEFAULT_HOSTNAME
  @iPort       = opts.key?(:port) && opts[:port] \
               ? opts[:port].to_i : DEFAULT_PORT
  sUsername    = opts[:username] || ''
  sPassword    = opts[:password] || ''
  # VersionOne provides a mechanism for generating an access token
  sAccessToken = opts[:access_token] || ''
  @sInstance   = opts[:instance] || ''
  @dTypePrefix = {'B' => 'Story', 'E' => 'Epic'}
  @sUrl        = buildUrl(@sProtocol, @sHostname, @iPort)
  @oFaraday    = Faraday::Connection.new url: @sUrl
  @oFaraday.ssl.verify = opts[:ssl_verify].to_s.match(/false/i) \
               ? false : true
  if sAccessToken.empty?
    @oFaraday.basic_auth(sUsername, sPassword)
  else
    # could also patch Faraday to have a method similar to basic_auth
    @oFaraday.headers['Authorization']  = "Bearer #{sAccessToken}"
  end
  @oUpdate     = VersiononeSdk::Update.new self
end

Instance Attribute Details

#oFaradayObject

Returns the value of attribute oFaraday.



11
12
13
# File 'lib/versionone_sdk/client.rb', line 11

def oFaraday
  @oFaraday
end

#sInstanceObject

Returns the value of attribute sInstance.



12
13
14
# File 'lib/versionone_sdk/client.rb', line 12

def sInstance
  @sInstance
end

Instance Method Details

#getAsset(xAssetId1, xAssetId2 = nil) ⇒ Object

Raises:

  • (RuntimeError)


38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/versionone_sdk/client.rb', line 38

def getAsset(xAssetId1, xAssetId2 = nil)
  xAssetId1.strip!

  if xAssetId1 =~ /^([^:]+):([0-9]+)$/
    sAssetType = $1
    sAssetOid = $2.to_i
    return self.getAssetForTypeAndOid(sAssetType, sAssetOid)

  elsif xAssetId1 =~ /^([a-zA-Z])-[0-9]+$/
    sAssetTypeAbbr = $1.upcase
    sAssetType = @dTypePrefix.key?(sAssetTypeAbbr) \
      ? @dTypePrefix[ sAssetTypeAbbr ] : ''
    xAssetId1.upcase!
    return self.getAssetForTypeAndNumber(sAssetType, xAssetId1)

  elsif !xAssetId2.nil?
    if xAssetId2.is_a?(String) && xAssetId2 =~ /^[0-9]+$/
      xAssetId2 = xAssetId2.to_i
    end

    if xAssetId2.is_a?(Integer)

      if xAssetId1 =~ /^[a-zA-Z]$/
        xAssetId1.upcase!
        sAssetTypeAbbr = xAssetId1
        sAssetType = @dTypePrefix.key?(sAssetTypeAbbr) \
          ? @dTypePrefix[ sAssetTypeAbbr ] : ''
        sAssetNumber = xAssetId1 + '-' + xAssetId2.to_s
        sAssetNumber.upcase!
        return self.getAssetForTypeAndNumber(sAssetType, sAssetNumber)
      elsif xAssetId1 =~ /^[a-zA-Z].+$/
        return self.getAssetForTypeAndOid(xAssetId1, xAssetId2)
      end
    end
  end

  raise RuntimeError, "E_UNKNOWN_ASSET_ID [#{xAssetId1}][#{xAssetId2.to_s}]"
end

#getAssetForTypeAndNumber(sAssetType = nil, sAssetNumber = nil) ⇒ Object



84
85
86
87
88
89
90
# File 'lib/versionone_sdk/client.rb', line 84

def getAssetForTypeAndNumber(sAssetType = nil, sAssetNumber = nil)
  sUrl = self.getUrlForAssetTypeAndNumber( sAssetType, sAssetNumber )
  oRes = @oFaraday.get sUrl
  oParser = VersiononeSdk::ParserXmlAssets.new({:url => @sUrl})
  aDocs = oParser.getDocsForAssetsXml( oRes.body )
  return aDocs[0]
end

#getAssetForTypeAndOid(sAssetType = nil, sAssetOid = nil) ⇒ Object



77
78
79
80
81
82
# File 'lib/versionone_sdk/client.rb', line 77

def getAssetForTypeAndOid(sAssetType = nil, sAssetOid = nil)
  sUrl = self.getUrlForAssets( sAssetType, sAssetOid )
  oRes = @oFaraday.get sUrl
  oParser = VersiononeSdk::ParserXmlAssets.new({:url => @sUrl})
  aDoc = oParser.getDocForAssetXml( oRes.body )
end

#getAssets(sAssetType = nil, xIds = nil) ⇒ Object



92
93
94
95
96
97
# File 'lib/versionone_sdk/client.rb', line 92

def getAssets(sAssetType = nil, xIds = nil)
  oRes = self.getAssetsXml(sAssetType,xIds)
  oParser = VersiononeSdk::ParserXmlAssets.new({:url => @sUrl})
  aDocs = oParser.getDocsForAssetsXml( oRes.body )
  return aDocs
end

#getAssetsXml(sAssetType = nil, xIds = nil) ⇒ Object



99
100
101
102
103
# File 'lib/versionone_sdk/client.rb', line 99

def getAssetsXml(sAssetType = nil, xIds = nil)
  sUrl = self.getUrlForAssets(sAssetType)
  oRes = @oFaraday.get sUrl
  return oRes
end

#getUrlForAssets(sAssetType = nil, sAssetOid = nil) ⇒ Object



111
112
113
114
115
116
117
118
119
120
# File 'lib/versionone_sdk/client.rb', line 111

def getUrlForAssets(sAssetType = nil, sAssetOid = nil)
  aUrl = [@sUrl, @sInstance, 'rest-1.v1/Data',sAssetType]
  if sAssetOid.is_a?(Integer)
    aUrl.push sAssetOid
  elsif sAssetOid.kind_of?(String) && sAssetOid =~ /^[0-9]+$/
    aUrl.push sAssetOid
  end
  sUrl = aUrl.join('/')
  return sUrl
end

#getUrlForAssetTypeAndNumber(sAssetType = nil, sAssetNumber = nil) ⇒ Object



105
106
107
108
109
# File 'lib/versionone_sdk/client.rb', line 105

def getUrlForAssetTypeAndNumber(sAssetType = nil, sAssetNumber = nil)
  aUrl = [ @sUrl, @sInstance, 'rest-1.v1/Data',sAssetType + %Q!?where=Number="#{sAssetNumber}"!]
  sUrl = aUrl.join('/')
  return sUrl
end

#updateAsset(sAssetType = nil, sAssetOid = nil, sName = nil, xxValues = nil, yTagType = nil) ⇒ Object



122
123
124
# File 'lib/versionone_sdk/client.rb', line 122

def updateAsset(sAssetType=nil,sAssetOid=nil,sName=nil,xxValues=nil,yTagType=nil)
  return @oUpdate.updateAsset(sAssetType, sAssetOid, sName, xxValues, yTagType)
end