usd 0.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.
Files changed (7) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +4 -0
  3. data/bin/rusdc +265 -0
  4. data/bin/set_env +11 -0
  5. data/lib/usd.rb +218 -0
  6. data/usd.gemspec +22 -0
  7. metadata +187 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b7ee6cd159beb63fa0f91e51c300f90000e134adad2c348540a76b1aed6b2960
4
+ data.tar.gz: c3ea66730d275a9ae7a6c9ca1ada2b86ec083b1a2c0d44657840cf5728db2477
5
+ SHA512:
6
+ metadata.gz: f00d963b94685905e03c5f1b7d999454fc26fa6a81ec2997d5d07194ad9070b9e43b7495feaf5ff4da5d932a2fef1c00566f3fafc1f28fa44f07ddf532b43d7d
7
+ data.tar.gz: beecba4f9b33bb7058c1fd371aa3ce7ed380bfd3d88770d6b1d3a1a9429b3014895779891fa3d9a683439a99e102061bca4d16687cadbb14dc4267345a664012
@@ -0,0 +1,4 @@
1
+
2
+ # usd - Ruby Class for SDM REST-API-Calls
3
+
4
+ There is a ruby class and a commandline tool rusdc.
@@ -0,0 +1,265 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "thor"
4
+ require 'tempfile'
5
+ require "erb"
6
+
7
+ load "#{__dir__}/usd.rb"
8
+
9
+ class Rusdc < Thor
10
+
11
+ desc "chg_add_nr", "<CO> <CI> - fügt einer CO ein CI hinzu"
12
+ def chg_add_nr(co, ci)
13
+ template = ERB.new <<-EOF
14
+ {
15
+ "lrel_asset_chgnr": {
16
+ "chg": {
17
+ "@id": "<%= uid_co %>"
18
+ },
19
+ "nr": {
20
+ "@id": "<%= uid_nr %>"
21
+ }
22
+ }
23
+ }
24
+ EOF
25
+ json = template.result_with_hash(:uid_co => loadcon.request("/caisd-rest/chg/COMMON_NAME-#{co}")["chg"]["@id"], :uid_nr => loadcon.request("/caisd-rest/nr/COMMON_NAME-#{ci}")["nr"]["@id"])
26
+ puts loadcon.create({:type => "json", :data => json})
27
+ end
28
+
29
+ desc "chg_list_nr", "<CO> - listet alle CIs einer CO"
30
+ def chg_list_nr(co)
31
+ invoke 'find', ['lrel_asset_chgnr', %(chg.chg_ref_num = '#{co}'), "nr"], {:format => "mlr", :mlr_format => "xtab"}
32
+ end
33
+
34
+ desc "create", "pipe json-data to create object"
35
+ def create()
36
+ puts loadcon.create({:type => "json", :data => STDIN.read})
37
+ end
38
+
39
+ desc "field_names","field_names <object> , listet die Attribute und Beziehungen eines Objektes auf."
40
+ def field_names(object)
41
+ e = loadcon.search(object,{'fields' => "*","start" => "1", "size" => "1"})[0]
42
+ e.keys.sort.each do |k|
43
+ puts "#{k} (#{e[k].class})"
44
+ if e[k].class == Hash
45
+ puts e[k].jp
46
+ end
47
+ end
48
+ end
49
+
50
+ desc "find", "find <object> <where-clause> [fields - Komma getrennt (id,name)] - findet alle Objecte die die wc erfüllen."
51
+ long_desc <<-LONGDESC
52
+
53
+
54
+ Mit --mlr_format kann man das output-Format von Miller (mlr) ändern auf csv, md (markdown), xtab (sehr übersichtlich), dkvp (Delimited key-value pairs) ..., siehe `mlr --help`
55
+
56
+ Beispiele:
57
+
58
+ - alle aktiven CIs die mit sygosrv beginnen und die Zahl 58 enthalten:
59
+ ./rusdc find nr "name like 'servername' and delete_flag.sym = 'Active' " "id,name" --format mlr
60
+
61
+ - meine aktiven Incidents:
62
+ ./rusdc find --format mlr in "assignee.last_name = 'gaida' and status.sym in ('Service pending','Work in progress.','Customer Pending','Open','Hold','Resolved')" ref_num,z_project,summary,status,call_back_date,affected_resource,orig_user_organization
63
+
64
+ - Activity-Log eines Incidents:
65
+ ./rusdc find alg "call_req_id.ref_num = 'I00001'" "call_req_id,action_desc,analyst,description,time_stamp,type" --format mlr --mlr_format xtab
66
+
67
+ - nur die Beschreibungen Activity-Log eines Incidents:
68
+ ./rusdc find alg "call_req_id.ref_num = 'I00001'" "description" --format mlr --mlr_format csv
69
+
70
+ - Incidents einer Maschine
71
+ ./rusdc find in "affected_resource.name = 'servername'" "ref_num,summary" --format mlr
72
+
73
+ - Kombiniert, alle Activity-Log-Beschreibungen aller Incidents einer Maschine:
74
+ ./rusdc find alg "call_req_id.affected_resource.name = 'servername'" "description" --format mlr
75
+
76
+ - Changes einer Maschine:
77
+ rusdc find chg "asset.nr.name = 'servername'" "@COMMON_NAME,summary,status" --format mlr
78
+
79
+ - Alle Maschinen finden die mit goes beginnen und deren childs auf Linux und Windows prüfen:
80
+ for ci in $(rusdc find nr "name like 'dc%' and delete_flag.sym = 'active'" "name" --format mlr | sed '1 d'); do rusdc nr_childs $ci > help ; echo "$ci: $(grep -iP '^(Linux|.*MS windows).*server' help)" ; done
81
+
82
+ LONGDESC
83
+ option :format, :type => :string, :default => "json"
84
+ option :mlr_format, :type => :string, :default => "pprint"
85
+ option :nice_time, :type => :boolean, :default => true
86
+ option :debug, :type => :boolean, :default => false
87
+ def find(object, wc, fields="*")
88
+ con = loadcon
89
+ con.debug = options[:debug]
90
+ e = con.search(object,{'fields' => fields,"wc" => wc})
91
+ if e.length > 0
92
+ if options[:nice_time]
93
+ e.each_index do |i|
94
+ e[i].keys.each do |key|
95
+ if key =~ /(date|last_mod|warranty_start|warranty_end|time_stamp)$/
96
+ e[i][key]=Time.at(e[i][key]).to_s
97
+ end
98
+ end
99
+ end
100
+ end
101
+ case options[:format]
102
+ when "json"
103
+ puts e.jp
104
+ when "yaml"
105
+ puts e.to_yaml
106
+ when "mlr"
107
+ # hierfuer muessen jq und mlr verfuegbar sein
108
+ if (fields =~ /^[\w\_,@]+$/)
109
+ fields_array=fields.split(/,/)
110
+ jq_mapping = []
111
+ fields_array.each do |key|
112
+ if e[0].keys.include?(key)
113
+ if e[0][key].class == Hash
114
+ jq_mapping << %("#{key}": ."#{key}"."@COMMON_NAME")
115
+ else
116
+ jq_mapping << %("#{key}": ."#{key}")
117
+ end
118
+ end
119
+ end
120
+ jq_mapping_string = jq_mapping.join(",")
121
+ file = Tempfile.new('inner_cmd')
122
+ cmd = %(jq '[.[]|{#{jq_mapping_string}}]' #{file.path} | mlr --ijson --o#{options[:mlr_format]} cat)
123
+ file.write(e.jp)
124
+ file.close
125
+ `cp #{file.path} /tmp/test.json`
126
+ puts `#{cmd}`
127
+ file.unlink
128
+ else
129
+ puts "fields Problem: es sind nur Buchstaben, Ziffern, Komma und Unterstrich zulaessig."
130
+ end
131
+ else
132
+ puts "das Format #{options[:format]} ist nicht hinterlegt. Es gibt nur json, yaml oder mlr."
133
+ end
134
+ else
135
+ puts "keine Einträge gefunden!"
136
+ end
137
+ end
138
+
139
+ desc "get", "get <object> <cn>"
140
+ option :yaml, :type => :boolean, :default => false
141
+ def get(object, cn)
142
+ e = loadcon.request("/caisd-rest/#{object}/COMMON_NAME-#{cn}")
143
+ if e.class == Hash
144
+ puts options[:yaml] ? e[object].to_yaml : e[object].jp
145
+ elsif e.message == "409 Conflict"
146
+ puts %(#{e.message} - try with 'rusdc find #{object} "" "@COMMON_NAME" --format mlr | sort | uniq -c | sort -n -r | head -20', may be more then one object with this COMMON_NAME)
147
+ else
148
+ puts e.response
149
+ end
150
+ end
151
+
152
+ desc "get_attachment_of_ci", "<ci_name> <filename>"
153
+ def get_attachment_of_ci(ciname, filename)
154
+ att_nr = loadcon.search("lrel_attachments_nr",{'fields' => "attmnt","wc" => "nr.name = '#{ciname}'"})
155
+ att_nr.each do |att|
156
+ attmnt = loadcon.request("/caisd-rest/attmnt/COMMON_NAME-#{att["attmnt"]["@COMMON_NAME"]}")["attmnt"]
157
+ if attmnt["orig_file_name"] == filename
158
+ puts loadcon.request("/caisd-rest/attmnt/#{attmnt["@id"]}/file-resource",{:unchanged => true})
159
+ end
160
+ end
161
+ end
162
+
163
+ desc "get_attachment_of_co", "<co_name> <filename>"
164
+ def get_attachment_of_co(coname, filename)
165
+ chg_id=loadcon.request("/caisd-rest/chg/COMMON_NAME-#{coname}")["chg"]["@id"]
166
+ att_nr = loadcon.search("lrel_attachments_changes",{'fields' => "attmnt","wc" => "chg = #{chg_id}"})
167
+ att_nr.each do |att|
168
+ attmnt = loadcon.request("/caisd-rest/attmnt/COMMON_NAME-#{att["attmnt"]["@COMMON_NAME"]}")["attmnt"]
169
+ if attmnt["orig_file_name"] == filename
170
+ puts loadcon.request("/caisd-rest/attmnt/#{attmnt["@id"]}/file-resource",{:unchanged => true})
171
+ end
172
+ end
173
+ end
174
+
175
+ desc "list_attachments_of_ci", "<ci_name>"
176
+ def list_attachments_of_ci(ciname)
177
+ att_nr = loadcon.search("lrel_attachments_nr",{'fields' => "attmnt","wc" => "nr.name = '#{ciname}'"})
178
+ att_nr.each do |att|
179
+ puts loadcon.request("/caisd-rest/attmnt/COMMON_NAME-#{att["attmnt"]["@COMMON_NAME"]}")["attmnt"]["orig_file_name"]
180
+ end
181
+ end
182
+
183
+ desc "list_attachments_of_co", "<co_name>"
184
+ def list_attachments_of_co(coname)
185
+ chg_id=loadcon.request("/caisd-rest/chg/COMMON_NAME-#{coname}")["chg"]["@id"]
186
+ att_nr = loadcon.search("lrel_attachments_changes",{'fields' => "attmnt","wc" => "chg = #{chg_id}"})
187
+ att_nr.each do |att|
188
+ puts loadcon.request("/caisd-rest/attmnt/COMMON_NAME-#{att["attmnt"]["@COMMON_NAME"]}")["attmnt"]["orig_file_name"]
189
+ end
190
+ end
191
+
192
+ desc "nr_add_child", "<nr-name> <child-name>"
193
+ def nr_add_child(nr, child)
194
+ template = ERB.new <<-EOF
195
+ {
196
+ "hier": {
197
+ "child": {
198
+ "@id": "<%= uid_child %>"
199
+ },
200
+ "parent": {
201
+ "@id": "<%= uid_parent %>"
202
+ }
203
+ }
204
+ }
205
+ EOF
206
+ json = template.result_with_hash(:uid_child => loadcon.request("/caisd-rest/nr/COMMON_NAME-#{child}")["nr"]["@id"], :uid_parent => loadcon.request("/caisd-rest/nr/COMMON_NAME-#{nr}")["nr"]["@id"])
207
+ puts loadcon.create({:type => "json", :data => json})
208
+ end
209
+
210
+ desc "nr_changes", "<nr> [inactive-too] - listet alle offenen Change eines nr, bei Bedarf auch inaktive"
211
+ option :inactive_too, :type => :boolean, :default => false
212
+ def nr_changes(nr)
213
+ wc_add = (options[:inactive_too] ? "" : " and status.sym in ('Service pending','Work in progress','Customer Pending','Open','Hold')")
214
+ wc = %(asset.nr.name = '#{nr}'#{wc_add})
215
+ invoke 'find', ['chg', wc, 'chg_ref_num,summary,status'], {:format => "mlr"}
216
+ end
217
+
218
+ desc "nr_childs", "nr_childs <ci-name> , listet alle Childs eines CI"
219
+ def nr_childs(name)
220
+ loadcon.search("hier",{'fields' => "*","wc" => "parent.name = '#{name}'"}).each do |c|
221
+ puts c["child"]["@COMMON_NAME"]
222
+ end
223
+ end
224
+
225
+ desc "nr_incidents", "<nr> [inactive-too] - listet alle offenen Incidents eines nr, bei Bedarf auch inaktive"
226
+ option :inactive_too, :type => :boolean, :default => false
227
+ def nr_incidents(nr)
228
+ invoke 'find', ['in', %(affected_resource.name = '#{nr}'#{options[:inactive_too] ? "" : " and not status.sym in ('Cancelled','Closed')"}), "ref_num,summary,status"], {:format => "mlr"}
229
+ end
230
+
231
+ desc "nr_parents", "nr_parents <ci-name> , listet alle Parents eines CI"
232
+ def nr_parents(name)
233
+ loadcon.search("hier",{'fields' => "*","wc" => "child.name = '#{name}'"}).each do |c|
234
+ puts c["parent"]["@COMMON_NAME"]
235
+ end
236
+ end
237
+
238
+ desc "update", "pipe json-data to update object"
239
+ long_desc <<-LONGDESC
240
+
241
+ Hier ein Beispiel
242
+
243
+ ciname=servername
244
+ rusdc find nr "name like '$ciname'" "z_backup" |jq '{nr:(.[0]|.z_backup= (.z_backup +"\n----\neine neue Zeile")|del(.link,."@id",."@REL_ATTR"))}' | rusdc update
245
+
246
+ LONGDESC
247
+ def update()
248
+ puts loadcon.update({:type => "json", :data => STDIN.read})
249
+ end
250
+
251
+
252
+ private
253
+
254
+ def loadcon
255
+ if ENV["usduser"] and ENV["usdpass"] and ENV["usdurl"]
256
+ Usd.new(ENV["usduser"],ENV["usdpass"],ENV["usdurl"])
257
+ else
258
+ puts "ACHTUNG:\n\nMindestens einer der Umgebunsvariablen usduser, usdpass und usdurl ist nicht gesetzt. Am besten das Skript #{__dir__}/set_env_prod mit `source` aufrufen!"
259
+ puts " also : source #{__dir__}/set_env_prod \n"
260
+ end
261
+ end
262
+
263
+ end
264
+
265
+ Rusdc.start(ARGV)
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env bash
2
+ # load with `source ./set_env`
3
+
4
+ export usduser=username
5
+ export usdurl="http://localhost:8050"
6
+ if [ -z "$usdpass" ]
7
+ then
8
+ read -s -p "password for $usduser ? " usdpass
9
+ echo ""
10
+ export usdpass
11
+ fi
@@ -0,0 +1,218 @@
1
+ require 'rest-client'
2
+ require "base64"
3
+ require "json"
4
+ require "yaml"
5
+ require 'uri'
6
+ require "time"
7
+ require "ostruct"
8
+ require 'tempfile'
9
+
10
+ class Usd
11
+
12
+ RestClient.proxy = ""
13
+
14
+ attr_reader :base_url, :user, :access_key, :expiration_date, :debug
15
+ attr_writer :debug
16
+
17
+ def initialize(user, password="", base_url = "http://localhost:8050", hash={})
18
+ hash = {:expiration_date => 0, :access_key => "",:save_access_key => true }.update hash
19
+ make_new = true
20
+ @base_url = base_url
21
+ @user = user
22
+ @debug = false
23
+ if File.exist?(".usd") and hash[:save_access_key]
24
+ tt = YAML.load(File.open(".usd","r"))
25
+ if (tt.expiration_date - Time.now.to_i ) > 900 and tt.base_url == base_url
26
+ @access_key = tt.access_key
27
+ @expiration_date = tt.expiration_date
28
+ make_new = false
29
+ puts "cache key loaded..." if @debug
30
+ end
31
+ end
32
+ if hash[:save_access_key] and hash[:access_key].length > 0
33
+ if (hash[:expiration_date] - Time.now.to_i ) > 900
34
+ @access_key = hash[:access_key]
35
+ @expiration_date = hash[:expiration_date]
36
+ make_new = false
37
+ puts "use existing access_key ..." if @debug
38
+ end
39
+ end
40
+ if make_new
41
+ encoded=Base64.encode64( "#{@user}:#{password}")
42
+ begin
43
+ response = RestClient::Request.execute(method: :post, url: "#{@base_url}/caisd-rest/rest_access?_type=json",
44
+ payload: '<rest_access/>',
45
+ headers: {
46
+ 'content-type' => "application/xml",
47
+ "accept" => "application/json",
48
+ "authorization" => "Basic #{encoded}",
49
+ "cache-control" => "no-cache"
50
+ },
51
+ log: Logger.new(STDOUT)
52
+ )
53
+ authData=JSON.parse(response.body)
54
+ if authData['rest_access']['access_key'] > 0
55
+ @access_key = authData['rest_access']['access_key']
56
+ @expiration_date = authData['rest_access']['expiration_date']
57
+ if hash[:save_access_key]
58
+ f=File.open(".usd","w")
59
+ f.puts self.to_yaml
60
+ f.close
61
+ end
62
+ else
63
+ "keinen Accesskey erhalten. \nresponse.body:\n#{response.body}"
64
+ end
65
+ rescue RestClient::ExceptionWithResponse => e
66
+ e.response
67
+ end
68
+ end
69
+ end
70
+
71
+ def self.loadcon
72
+ # load from env
73
+ Usd.new(ENV["usduser"],ENV["usdpass"],ENV["usdurl"])
74
+ end
75
+
76
+ def header(hash={})
77
+ hash = {
78
+ 'x-accesskey' => @access_key,
79
+ 'accept' => "application/json",
80
+ "Content-Type" =>"application/json; charset=UTF-8",
81
+ 'X-Obj-Attrs' => "*",
82
+ 'cache-control'=> "no-cache"
83
+ }.update hash
84
+ hash
85
+ end
86
+
87
+ def request(uri, hash={})
88
+ RestClient.log = STDOUT if @debug
89
+ hash = {:method => "get", :header => header(), :unchanged => false, :ostruct => false, :json => "", :base_url => @base_url}.update hash
90
+ puts "request - hash: #{JSON.pretty_generate(hash)}" if @debug
91
+ if (uri !~ /^http/)
92
+ url = URI.escape("#{hash[:base_url]}#{uri}")
93
+ else
94
+ url = URI.escape(uri)
95
+ end
96
+ begin
97
+ if hash[:method] == "get"
98
+ response = RestClient::Request.execute(method: hash[:method], url: url, headers: hash[:header])
99
+ elsif hash[:method] == "post"
100
+ response = RestClient.post(url, hash[:json], hash[:header])
101
+ elsif hash[:method] == "put"
102
+ response = RestClient.put(url, hash[:json], hash[:header])
103
+ elsif hash[:method] =~ /delete/i
104
+ response = RestClient.delete(url, hash[:header])
105
+ end
106
+ if hash[:ostruct]
107
+ JSON.parse(response.body, object_class: OpenStruct)
108
+ elsif hash[:unchanged]
109
+ response.body
110
+ else
111
+ JSON.parse(response.body)
112
+ end
113
+ rescue RestClient::ExceptionWithResponse => e
114
+ e
115
+ end
116
+ end
117
+
118
+ def create(hash = {})
119
+ hash = {:type => "ruby", :data => {}}.update hash
120
+ case hash[:type]
121
+ when "ruby"
122
+ data = hash[:data]
123
+ when "json"
124
+ data = JSON.parse(hash[:data])
125
+ when "yaml"
126
+ data = YAML.load(hash[:data])
127
+ else
128
+ "Error: 'data[:type]': '#{hash[:data]}' not found!"
129
+ end
130
+ puts "create - data: #{JSON.pretty_generate(data)}" if @debug
131
+ object = data.keys[0]
132
+ uri = "/caisd-rest/#{object}"
133
+ request("/caisd-rest/#{object}",{:method => "post", :json => data.to_json})
134
+ end
135
+
136
+ def update(hash = {})
137
+ hash = {:type => "ruby", :data => {}}.update hash
138
+ case hash[:type]
139
+ when "ruby"
140
+ data = hash[:data]
141
+ when "json"
142
+ data = JSON.parse(hash[:data])
143
+ when "yaml"
144
+ data = YAML.load(hash[:data])
145
+ else
146
+ "Error: 'data[:type]': '#{hash[:data]}' not found!"
147
+ end
148
+ puts "update - data: #{JSON.pretty_generate(data)}" if @debug
149
+ object = data.keys[0]
150
+ cn = data[object]["@COMMON_NAME"]
151
+ request("/caisd-rest/#{object}/COMMON_NAME-#{cn}",{:method => "put", :json => data.to_json, :header => header({'X-Obj-Attrs' => 'COMMON_NAME'})})
152
+ end
153
+
154
+ def set_url_parm(params_hash,attribute_name,default)
155
+ # disable case
156
+ params_hash.keys.each do |k|
157
+ if k =~ /^#{attribute_name}$/i
158
+ v = params_hash[k]
159
+ params_hash.delete(k)
160
+ params_hash[attribute_name] = v
161
+ end
162
+ end
163
+ "#{attribute_name}=#{params_hash[attribute_name]?params_hash[attribute_name]:default}"
164
+ end
165
+
166
+ def set_param(params_hash,attribute_name,default)
167
+ params_hash[attribute_name]?params_hash[attribute_name]:default
168
+ end
169
+
170
+ def search(object,params={})
171
+ attr=[]
172
+ attr.push set_url_parm(params,"SORT","id DESC")
173
+ attr.push set_url_parm(params,"start","1")
174
+ attr.push set_url_parm(params,"size","50")
175
+ attr.push set_url_parm(params,"WC","")
176
+ fields = set_param(params,"fields","COMMON_NAME,id")
177
+ query_string=attr.join("&")
178
+ res_rdata = request("/caisd-rest/#{object}?#{query_string}",{:method => "get", :header => header({'X-Obj-Attrs' => fields})})
179
+ puts res_rdata if @debug
180
+ count = res_rdata["collection_#{object}"]["@COUNT"].to_i
181
+ start = res_rdata["collection_#{object}"]["@START"].to_i
182
+ total_count = res_rdata["collection_#{object}"]["@TOTAL_COUNT"].to_i
183
+ # turn throught the pages
184
+ if count == 1
185
+ [res_rdata["collection_#{object}"][object]]
186
+ elsif count == 0
187
+ []
188
+ else
189
+ retArray = res_rdata["collection_#{object}"][object]
190
+ if total_count > (count + start - 1)
191
+ new_params = {"start" => (start + 50)}
192
+ params = params.update new_params
193
+ retArray += search(object,params)
194
+ end
195
+ retArray
196
+ end
197
+ end
198
+
199
+ end
200
+
201
+ module Jsonpretty
202
+ def jp
203
+ # return in json_pretty
204
+ JSON.pretty_generate(self)
205
+ end
206
+ def jpp
207
+ # print in json_pretty
208
+ puts JSON.pretty_generate(self)
209
+ end
210
+ end
211
+
212
+ class Hash
213
+ include Jsonpretty
214
+ end
215
+
216
+ class Array
217
+ include Jsonpretty
218
+ end
@@ -0,0 +1,22 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'usd'
3
+ s.version = '0.0.1'
4
+ s.date = '2019-10-31'
5
+ s.summary = "SDM REST-API-Calls"
6
+ s.description = "a Ruby class and a commandlinetool for SDM REST-API-Calls"
7
+ s.authors = ["Oliver Gaida"]
8
+ s.email = 'oliver.gaida@sycor.de'
9
+ #s.files = ["bin/rusdc", "bin/set_env", "lib/usd.rb"] # Dir["*/*"]
10
+ s.files = `git ls-files`.split($/)
11
+ s.homepage = 'https://github.com/ogaida/usd'
12
+ s.add_dependency('tempfile', '~> 0')
13
+ s.add_dependency('thor', '~> 0')
14
+ s.add_dependency('erb', '~> 0')
15
+ s.add_dependency('rest-client', '~> 0')
16
+ s.add_dependency('base64', '~> 0')
17
+ s.add_dependency('json', '~> 0')
18
+ s.add_dependency('yaml', '~> 0')
19
+ s.add_dependency('uri', '~> 0')
20
+ s.add_dependency('time', '~> 0')
21
+ s.add_dependency('ostruct', '~> 0')
22
+ end
metadata ADDED
@@ -0,0 +1,187 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: usd
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Oliver Gaida
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-10-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: tempfile
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: erb
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rest-client
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: base64
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: json
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: yaml
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: uri
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: time
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: ostruct
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: a Ruby class and a commandlinetool for SDM REST-API-Calls
154
+ email: oliver.gaida@sycor.de
155
+ executables: []
156
+ extensions: []
157
+ extra_rdoc_files: []
158
+ files:
159
+ - README.md
160
+ - bin/rusdc
161
+ - bin/set_env
162
+ - lib/usd.rb
163
+ - usd.gemspec
164
+ homepage: https://github.com/ogaida/usd
165
+ licenses: []
166
+ metadata: {}
167
+ post_install_message:
168
+ rdoc_options: []
169
+ require_paths:
170
+ - lib
171
+ required_ruby_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ required_rubygems_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ requirements: []
182
+ rubyforge_project:
183
+ rubygems_version: 2.7.6
184
+ signing_key:
185
+ specification_version: 4
186
+ summary: SDM REST-API-Calls
187
+ test_files: []