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.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +9 -0
  5. data/.travis.yml +7 -0
  6. data/Gemfile +6 -0
  7. data/Gemfile.lock +146 -0
  8. data/LICENSE +21 -0
  9. data/README.md +60 -0
  10. data/Rakefile +6 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/keytechKit.gemspec +30 -0
  14. data/lib/keytechKit/classes/classdefinition.rb +38 -0
  15. data/lib/keytechKit/classes/classes.rb +47 -0
  16. data/lib/keytechKit/classes/layout/control.rb +35 -0
  17. data/lib/keytechKit/classes/layout/layout.rb +22 -0
  18. data/lib/keytechKit/classes/layouts.rb +78 -0
  19. data/lib/keytechKit/classes/subarea.rb +12 -0
  20. data/lib/keytechKit/elements/bom/bom_element.rb +42 -0
  21. data/lib/keytechKit/elements/bom/bom_element_list.rb +29 -0
  22. data/lib/keytechKit/elements/data_dictionary/data_dictionary_definition.rb +23 -0
  23. data/lib/keytechKit/elements/data_dictionary/data_dictionary_handler.rb +50 -0
  24. data/lib/keytechKit/elements/element.rb +81 -0
  25. data/lib/keytechKit/elements/element_files/element_file.rb +19 -0
  26. data/lib/keytechKit/elements/element_files/element_file_handler.rb +181 -0
  27. data/lib/keytechKit/elements/element_handler.rb +183 -0
  28. data/lib/keytechKit/elements/group_by.rb +16 -0
  29. data/lib/keytechKit/elements/notes/note.rb +31 -0
  30. data/lib/keytechKit/elements/notes/note_handler.rb +35 -0
  31. data/lib/keytechKit/elements/search_response_header.rb +47 -0
  32. data/lib/keytechKit/search.rb +46 -0
  33. data/lib/keytechKit/serverinfo.rb +33 -0
  34. data/lib/keytechKit/serverinfo_handler.rb +23 -0
  35. data/lib/keytechKit/targetlink.rb +26 -0
  36. data/lib/keytechKit/tools.rb +14 -0
  37. data/lib/keytechKit/user.rb +79 -0
  38. data/lib/keytechKit/version.rb +15 -0
  39. data/lib/keytechKit.rb +98 -0
  40. 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: []