keytechkit 0.3.16

Sign up to get free protection for your applications and to get access to all the features.
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: []