keytechkit 0.3.16
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.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.rspec +3 -0
- data/.rubocop.yml +9 -0
- data/.travis.yml +7 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +146 -0
- data/LICENSE +21 -0
- data/README.md +60 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/keytechKit.gemspec +30 -0
- data/lib/keytechKit/classes/classdefinition.rb +38 -0
- data/lib/keytechKit/classes/classes.rb +47 -0
- data/lib/keytechKit/classes/layout/control.rb +35 -0
- data/lib/keytechKit/classes/layout/layout.rb +22 -0
- data/lib/keytechKit/classes/layouts.rb +78 -0
- data/lib/keytechKit/classes/subarea.rb +12 -0
- data/lib/keytechKit/elements/bom/bom_element.rb +42 -0
- data/lib/keytechKit/elements/bom/bom_element_list.rb +29 -0
- data/lib/keytechKit/elements/data_dictionary/data_dictionary_definition.rb +23 -0
- data/lib/keytechKit/elements/data_dictionary/data_dictionary_handler.rb +50 -0
- data/lib/keytechKit/elements/element.rb +81 -0
- data/lib/keytechKit/elements/element_files/element_file.rb +19 -0
- data/lib/keytechKit/elements/element_files/element_file_handler.rb +181 -0
- data/lib/keytechKit/elements/element_handler.rb +183 -0
- data/lib/keytechKit/elements/group_by.rb +16 -0
- data/lib/keytechKit/elements/notes/note.rb +31 -0
- data/lib/keytechKit/elements/notes/note_handler.rb +35 -0
- data/lib/keytechKit/elements/search_response_header.rb +47 -0
- data/lib/keytechKit/search.rb +46 -0
- data/lib/keytechKit/serverinfo.rb +33 -0
- data/lib/keytechKit/serverinfo_handler.rb +23 -0
- data/lib/keytechKit/targetlink.rb +26 -0
- data/lib/keytechKit/tools.rb +14 -0
- data/lib/keytechKit/user.rb +79 -0
- data/lib/keytechKit/version.rb +15 -0
- data/lib/keytechKit.rb +98 -0
- metadata +153 -0
@@ -0,0 +1,33 @@
|
|
1
|
+
|
2
|
+
module KeytechKit
|
3
|
+
##
|
4
|
+
# Provides information about current keytech server
|
5
|
+
# Read the full response for raw server data or use the well named accessors
|
6
|
+
class Serverinfo
|
7
|
+
attr_accessor :response
|
8
|
+
|
9
|
+
attr_accessor :database_version
|
10
|
+
attr_accessor :api_version
|
11
|
+
attr_accessor :server_description
|
12
|
+
# Unique ServerID this ID is unique for every installation
|
13
|
+
attr_accessor :server_id
|
14
|
+
|
15
|
+
def initialize(result_data)
|
16
|
+
parse_response(result_data)
|
17
|
+
end
|
18
|
+
|
19
|
+
def parse_response(result_data)
|
20
|
+
result = result_data
|
21
|
+
result.each do |kv|
|
22
|
+
puts "Key: #{kv['Key']}, #{kv['Value']}"
|
23
|
+
|
24
|
+
case kv['Key']
|
25
|
+
when 'keytech database version' then self.database_version = kv['Value']
|
26
|
+
when 'API version' then self.api_version = kv['Value']
|
27
|
+
# More fields
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'keytechKit/serverinfo'
|
2
|
+
|
3
|
+
module KeytechKit
|
4
|
+
##
|
5
|
+
# Serverinfo Handler
|
6
|
+
class ServerInfoHandler
|
7
|
+
include HTTParty
|
8
|
+
|
9
|
+
def initialize(keytechkit, base_url)
|
10
|
+
self.class.base_uri(base_url)
|
11
|
+
@keytechkit = keytechkit
|
12
|
+
end
|
13
|
+
|
14
|
+
def load
|
15
|
+
response = self.class.get('/serverinfo')
|
16
|
+
if response.success?
|
17
|
+
Serverinfo.new(response['ServerInfoResult'])
|
18
|
+
else
|
19
|
+
raise response.response
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module KeytechKit
|
2
|
+
##
|
3
|
+
# This links two keytech objects regarding of a context
|
4
|
+
# Can represent a favorite to element link
|
5
|
+
# Can represent a name to a stored query
|
6
|
+
# Can link to a parent link object
|
7
|
+
class Targetlink
|
8
|
+
attr_accessor :entryName
|
9
|
+
attr_accessor :linkID
|
10
|
+
attr_accessor :parentID
|
11
|
+
attr_accessor :targetElementKey
|
12
|
+
|
13
|
+
def initialize(result)
|
14
|
+
parse_result(result)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def parse_result(result)
|
20
|
+
self.entryName = result['EntryName']
|
21
|
+
self.linkID = result['LinkID']
|
22
|
+
self.parentID = result['ParentID']
|
23
|
+
self.targetElementKey = result['TargetElementKey']
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class Tools
|
2
|
+
# Returns a classkey (MISC_FILE) from a elementkey (MISC_FILE:1234)
|
3
|
+
def self.classKey(element_key)
|
4
|
+
element_key.split(':').first
|
5
|
+
end
|
6
|
+
|
7
|
+
# Return a classkey (MI, FD, DO) from a elementkey (MISC_FILE:!234)
|
8
|
+
def self.classType(element_key)
|
9
|
+
classKey = self.classKey(element_key)
|
10
|
+
return 'MI' if classKey.upcase.end_with?('_MI')
|
11
|
+
return 'FD' if classKey.end_with?('_FD', '_WF')
|
12
|
+
'DO'
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'keytechKit/targetlink'
|
2
|
+
module KeytechKit
|
3
|
+
##
|
4
|
+
# The user Object
|
5
|
+
# This represents a keytech user.
|
6
|
+
class User
|
7
|
+
include HTTParty
|
8
|
+
default_timeout 10
|
9
|
+
|
10
|
+
attr_accessor :response
|
11
|
+
|
12
|
+
attr_accessor :isActive
|
13
|
+
attr_accessor :isAdmin
|
14
|
+
attr_accessor :isSuperuser
|
15
|
+
attr_accessor :name
|
16
|
+
attr_accessor :languageID
|
17
|
+
attr_accessor :longName
|
18
|
+
attr_accessor :mail
|
19
|
+
|
20
|
+
def initialize(base_url, username, password)
|
21
|
+
self.class.base_uri(base_url)
|
22
|
+
@auth = { username: username, password: password }
|
23
|
+
end
|
24
|
+
|
25
|
+
# Returns a updated user object
|
26
|
+
# username = key of user
|
27
|
+
def load(username)
|
28
|
+
options = {}
|
29
|
+
options[:basic_auth] = @auth
|
30
|
+
response = self.class.get("/user/#{username}", options)
|
31
|
+
if response.success?
|
32
|
+
self.response = response
|
33
|
+
parse_response
|
34
|
+
self
|
35
|
+
else
|
36
|
+
raise response.response
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def queries(options = {})
|
41
|
+
load_target_links('queries', options)
|
42
|
+
end
|
43
|
+
|
44
|
+
def favorites
|
45
|
+
load_target_links('favorites')
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def load_target_links(linkType, options = {})
|
51
|
+
parameter = { query: options }
|
52
|
+
parameter[:basic_auth] = @auth
|
53
|
+
response = self.class.get("/user/#{name}/#{linkType}", parameter)
|
54
|
+
if response.success?
|
55
|
+
targetLinks_response = response['TargetLinks']
|
56
|
+
targetLinks = []
|
57
|
+
targetLinks_response.each do |link_response|
|
58
|
+
targetLinks.push Targetlink.new(link_response)
|
59
|
+
end
|
60
|
+
targetLinks
|
61
|
+
else
|
62
|
+
raise response.response
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def parse_response
|
67
|
+
# Only one user should be returns every time
|
68
|
+
user_data = response['MembersList'][0]
|
69
|
+
|
70
|
+
self.isActive = user_data['IsActive']
|
71
|
+
self.isAdmin = user_data['IsAdmin']
|
72
|
+
self.isSuperuser = user_data['IsSuperuser']
|
73
|
+
self.name = user_data['KeyName']
|
74
|
+
self.languageID = user_data['LanguageID']
|
75
|
+
self.longName = user_data['Longname']
|
76
|
+
self.mail = user_data['MailAddress']
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module KeytechKit
|
2
|
+
VERSION = '0.3.16'
|
3
|
+
|
4
|
+
# Public available Demo URL for testing and dsevelopment
|
5
|
+
DEMO_URL = 'https://demo.keytech.de'
|
6
|
+
|
7
|
+
# username to access public web API
|
8
|
+
DEMO_USER = 'jgrant'
|
9
|
+
|
10
|
+
# No password for public web API
|
11
|
+
DEMO_PASSWORD = ''
|
12
|
+
|
13
|
+
DEMO_ARTICLE = 'DEFAULT_MI:500228' # Dampfwalze / Steamroller
|
14
|
+
|
15
|
+
end
|
data/lib/keytechKit.rb
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'keytechKit/version'
|
3
|
+
require 'keytechKit/serverinfo_handler'
|
4
|
+
require 'keytechKit/search'
|
5
|
+
require 'keytechKit/user'
|
6
|
+
require 'keytechKit/elements/element_handler'
|
7
|
+
require 'keytechKit/elements/notes/note_handler'
|
8
|
+
require 'keytechKit/classes/classes'
|
9
|
+
require 'keytechKit/classes/layouts'
|
10
|
+
require 'keytechKit/classes/layout/layout'
|
11
|
+
require 'keytechKit/elements/element_files/element_file_handler'
|
12
|
+
require 'keytechKit/elements/data_dictionary/data_dictionary_handler'
|
13
|
+
|
14
|
+
module KeytechKit
|
15
|
+
##
|
16
|
+
# This class is the interface controller to the keytech Web API
|
17
|
+
# Use the helper functions to access various resources from the API
|
18
|
+
#
|
19
|
+
class KeytechKit
|
20
|
+
attr_reader :base_url
|
21
|
+
attr_reader :username
|
22
|
+
attr_reader :password
|
23
|
+
|
24
|
+
# Initializes this class
|
25
|
+
# user +baseurl+, +username+ and +password+ to start accessing all other
|
26
|
+
# keytech API resources
|
27
|
+
#
|
28
|
+
def initialize(baseurl, username = '', password = '')
|
29
|
+
@base_url = baseurl
|
30
|
+
@username = username
|
31
|
+
@password = password
|
32
|
+
end
|
33
|
+
|
34
|
+
# Returns the Serverinfo @see +ServerInfo+ for details
|
35
|
+
# This should be always the first call whenever starting with keytech API.
|
36
|
+
# ServerInfo will give valuable information about server access, version
|
37
|
+
# number and functions
|
38
|
+
#
|
39
|
+
def serverinfo
|
40
|
+
@serverinfo_handler = ServerInfoHandler.new(self, @base_url) if @serverinfo_handler.nil?
|
41
|
+
@serverinfo_handler.load
|
42
|
+
end
|
43
|
+
|
44
|
+
# Returns the login in user.
|
45
|
+
# This is always the user with which you Initialized this classes
|
46
|
+
# Check this object to see if the user is active and have API access.
|
47
|
+
def current_user
|
48
|
+
if @_curent_user.nil?
|
49
|
+
user = User.new(@base_url, @username, @password)
|
50
|
+
@_curent_user = user.load(@username)
|
51
|
+
end
|
52
|
+
@_curent_user
|
53
|
+
end
|
54
|
+
|
55
|
+
# Returns the Elements resource. You will need to specify alwys the concrete
|
56
|
+
# Element you want to access. keytech API does not support to return bulk
|
57
|
+
# Lists of Elements
|
58
|
+
#
|
59
|
+
def element_handler
|
60
|
+
@_element_handler = ElementHandler.new(self, @base_url, @username, @password) if @_element_handler.nil?
|
61
|
+
@_element_handler
|
62
|
+
end
|
63
|
+
|
64
|
+
# Returns the Data Dictionaries. Data Dictionary (DD) will give lookup tables
|
65
|
+
# you will need to fill various element fields.
|
66
|
+
def data_dictionary_handler
|
67
|
+
@data_dictionary_handler = DataDictionaryHandler.new(self, @base_url, @username, @password) if @data_dictionary_handler.nil?
|
68
|
+
@data_dictionary_handler
|
69
|
+
end
|
70
|
+
|
71
|
+
# Returns the classes object.
|
72
|
+
# A class in terms of keytech describes a type of elements.
|
73
|
+
# A class describes the attributes, its types and it supported layouts to make
|
74
|
+
# certain elements visible for a user.
|
75
|
+
def classes
|
76
|
+
@classes = Classes.new(@base_url, @username, @password) if @classes.nil?
|
77
|
+
@classes
|
78
|
+
end
|
79
|
+
|
80
|
+
# TODO: Move Laoyuts under classes
|
81
|
+
# returns the layout class. Eveny class can have a layout which describes
|
82
|
+
# the attribues with its type, acccess, datadictionary and if it is
|
83
|
+
# visible to the user.
|
84
|
+
def layouts
|
85
|
+
@_layouts = Layouts.new(@base_url, @username, @password) if @_layouts.nil?
|
86
|
+
@_layouts
|
87
|
+
end
|
88
|
+
|
89
|
+
# Returns the Search Object
|
90
|
+
# With the search you can start a fulltextsearch, search by field, type or
|
91
|
+
# access a predefined search on the server side for elements
|
92
|
+
#
|
93
|
+
def search
|
94
|
+
@_search = Search.new(@base_url, @username, @password) if @_search.nil?
|
95
|
+
@_search
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
metadata
ADDED
@@ -0,0 +1,153 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: keytechkit
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.16
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Thorsten Claus
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-11-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.16'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.16'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rails
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '5.2'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '5.2'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: httparty
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.16'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.16'
|
83
|
+
description:
|
84
|
+
email:
|
85
|
+
- thorstenclaus@web.de
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- ".gitignore"
|
91
|
+
- ".rspec"
|
92
|
+
- ".rubocop.yml"
|
93
|
+
- ".travis.yml"
|
94
|
+
- Gemfile
|
95
|
+
- Gemfile.lock
|
96
|
+
- LICENSE
|
97
|
+
- README.md
|
98
|
+
- Rakefile
|
99
|
+
- bin/console
|
100
|
+
- bin/setup
|
101
|
+
- keytechKit.gemspec
|
102
|
+
- lib/keytechKit.rb
|
103
|
+
- lib/keytechKit/classes/classdefinition.rb
|
104
|
+
- lib/keytechKit/classes/classes.rb
|
105
|
+
- lib/keytechKit/classes/layout/control.rb
|
106
|
+
- lib/keytechKit/classes/layout/layout.rb
|
107
|
+
- lib/keytechKit/classes/layouts.rb
|
108
|
+
- lib/keytechKit/classes/subarea.rb
|
109
|
+
- lib/keytechKit/elements/bom/bom_element.rb
|
110
|
+
- lib/keytechKit/elements/bom/bom_element_list.rb
|
111
|
+
- lib/keytechKit/elements/data_dictionary/data_dictionary_definition.rb
|
112
|
+
- lib/keytechKit/elements/data_dictionary/data_dictionary_handler.rb
|
113
|
+
- lib/keytechKit/elements/element.rb
|
114
|
+
- lib/keytechKit/elements/element_files/element_file.rb
|
115
|
+
- lib/keytechKit/elements/element_files/element_file_handler.rb
|
116
|
+
- lib/keytechKit/elements/element_handler.rb
|
117
|
+
- lib/keytechKit/elements/group_by.rb
|
118
|
+
- lib/keytechKit/elements/notes/note.rb
|
119
|
+
- lib/keytechKit/elements/notes/note_handler.rb
|
120
|
+
- lib/keytechKit/elements/search_response_header.rb
|
121
|
+
- lib/keytechKit/search.rb
|
122
|
+
- lib/keytechKit/serverinfo.rb
|
123
|
+
- lib/keytechKit/serverinfo_handler.rb
|
124
|
+
- lib/keytechKit/targetlink.rb
|
125
|
+
- lib/keytechKit/tools.rb
|
126
|
+
- lib/keytechKit/user.rb
|
127
|
+
- lib/keytechKit/version.rb
|
128
|
+
homepage: https://claus-software.de
|
129
|
+
licenses:
|
130
|
+
- MIT
|
131
|
+
metadata:
|
132
|
+
source_code_uri: https://github.com/tclaus/keytechkit.gem
|
133
|
+
post_install_message:
|
134
|
+
rdoc_options: []
|
135
|
+
require_paths:
|
136
|
+
- lib
|
137
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 2.4.0
|
142
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
requirements: []
|
148
|
+
rubyforge_project:
|
149
|
+
rubygems_version: 2.7.7
|
150
|
+
signing_key:
|
151
|
+
specification_version: 4
|
152
|
+
summary: keytechkit is a ruby gem to connect to the keytech Web API
|
153
|
+
test_files: []
|