nexosis_api 2.0.0 → 2.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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/lib/nexosis_api/algorithm.rb +22 -22
  3. data/lib/nexosis_api/algorithm_contestant.rb +43 -43
  4. data/lib/nexosis_api/calendar_jointarget.rb +35 -35
  5. data/lib/nexosis_api/classifier_result.rb +25 -25
  6. data/lib/nexosis_api/client/contest.rb +66 -66
  7. data/lib/nexosis_api/client/datasets.rb +155 -155
  8. data/lib/nexosis_api/client/imports.rb +141 -141
  9. data/lib/nexosis_api/client/models.rb +108 -108
  10. data/lib/nexosis_api/client/sessions.rb +213 -213
  11. data/lib/nexosis_api/client/views.rb +105 -105
  12. data/lib/nexosis_api/client.rb +118 -118
  13. data/lib/nexosis_api/column.rb +50 -50
  14. data/lib/nexosis_api/column_options.rb +38 -38
  15. data/lib/nexosis_api/column_role.rb +19 -19
  16. data/lib/nexosis_api/column_type.rb +23 -19
  17. data/lib/nexosis_api/dataset_data.rb +22 -22
  18. data/lib/nexosis_api/dataset_jointarget.rb +18 -18
  19. data/lib/nexosis_api/dataset_model.rb +26 -26
  20. data/lib/nexosis_api/dataset_summary.rb +33 -33
  21. data/lib/nexosis_api/http_exception.rb +28 -28
  22. data/lib/nexosis_api/impact_metric.rb +22 -22
  23. data/lib/nexosis_api/imports_response.rb +74 -79
  24. data/lib/nexosis_api/join.rb +63 -63
  25. data/lib/nexosis_api/link.rb +18 -18
  26. data/lib/nexosis_api/message.rb +19 -19
  27. data/lib/nexosis_api/metric.rb +16 -16
  28. data/lib/nexosis_api/model_summary.rb +66 -66
  29. data/lib/nexosis_api/paged_array.rb +35 -35
  30. data/lib/nexosis_api/predict_response.rb +35 -35
  31. data/lib/nexosis_api/session.rb +118 -118
  32. data/lib/nexosis_api/session_contest.rb +30 -30
  33. data/lib/nexosis_api/session_response.rb +33 -33
  34. data/lib/nexosis_api/session_result.rb +27 -27
  35. data/lib/nexosis_api/session_selection_metrics.rb +20 -20
  36. data/lib/nexosis_api/time_interval.rb +15 -15
  37. data/lib/nexosis_api/view_data.rb +14 -14
  38. data/lib/nexosis_api/view_definition.rb +64 -64
  39. data/lib/nexosis_api.rb +11 -11
  40. data/nexosisapi.gemspec +20 -20
  41. metadata +3 -3
@@ -1,105 +1,105 @@
1
- module NexosisApi
2
- # class to operate on views endpoint in Nexosis API
3
- class Client
4
- # Views-based API operations
5
- # @see http://docs.nexosis.com/
6
- # @since 1.2.0
7
- module Views
8
- ## List all existing view defintions, optionally limited by
9
- # partial name or participating data sources
10
- # @param partial_name [String] optionally limit results by view name
11
- # @param dataset_name [String] optionally limit results by dataset used in definition
12
- # @param page [Integer] optionally get results by non-zero page - defaults to 0
13
- # @param page_size [Integer] optionally limit page size - defaults to 50 (max: 1000)
14
- # @return [NexosisApi::PagedArray of NexosisApi::ViewDefinition]
15
- # @raise [NexosisApi::HttpException]
16
- def list_views(partial_name = '', dataset_name = '', page = 0, page_size = 50)
17
- url = '/views'
18
- query = {
19
- 'page': page,
20
- 'pageSize': page_size
21
- }
22
- query.store 'partialName', partial_name if partial_name.empty? == false
23
- query.store 'dataSetName', dataset_name if dataset_name.empty? == false
24
- response = self.class.get(url, headers: @headers, query: query)
25
- raise NexosisApi::HttpException('Could not retrieve list of views.', 'attempting list of views', response) unless response.success?
26
- NexosisApi::PagedArray.new(response.parsed_response, response.parsed_response['items']
27
- .map { |definition| NexosisApi::ViewDefinition.new(definition) })
28
- end
29
-
30
- # Create a new view or update an existing one by name
31
- # @param view_name [String] the name of the view to create or update.
32
- # @param dataset_name [String] the unique name of a data that is one source of this view.
33
- # @param right_datasource_name [String] the additional data source to join in this view.
34
- # @return [NexosisApi::ViewDefinition] - definition as created by API
35
- # @note @view_name Must be unique within your organization
36
- # @raise [NexosisApi::HttpException]
37
- def create_view(view_name, dataset_name, right_datasource_name)
38
- raise ArgumentError, 'view_name was not provided and is not optional' unless view_name.to_s.empty? == false
39
- raise ArgumentError, 'dataset_name was not provided and is not optional' unless dataset_name.to_s.empty? == false
40
- raise ArgumentError, 'right_datasource_name was not provided and is not optional' unless right_datasource_name.to_s.empty? == false
41
- view_definition = NexosisApi::ViewDefinition.new('viewName' => view_name)
42
- view_definition.dataset_name = dataset_name
43
- join = NexosisApi::Join.new('dataSet' => { 'name' => right_datasource_name })
44
- view_definition.joins = [join]
45
- create_view_by_def(view_definition)
46
- end
47
-
48
- # Create or update a view based on a view definition object
49
- # @param view_definition [NexosisApi::ViewDefinition] an object populated with the view configuration to create
50
- # @return [NexosisApi::ViewDefinition] - definition as created by API
51
- # @raise [NexosisApi::HttpException]
52
- def create_view_by_def(view_definition)
53
- view_name = view_definition.view_name
54
- raise ArgumentError, 'view_name was not provided and is not optional' unless view_name.to_s.empty? == false
55
- url = "/views/#{view_name}"
56
- response = self.class.put(url, headers: @headers, body: view_definition.to_json)
57
- if response.success?
58
- return NexosisApi::ViewDefinition.new(response.parsed_response)
59
- else
60
- raise NexosisApi::HttpException.new('Could not create the requested view',
61
- "Attempting to create view named #{view_name}",
62
- response)
63
- end
64
- end
65
-
66
- # Deletes the named view and optionally all sessions created from it
67
- # @param view_name [String] the view to remove
68
- # @param cascade [String] indicate any non-nil to remove associated sessions
69
- # @return [void]
70
- # @raise [NexosisApi::HttpException]
71
- def remove_view(view_name, cascade = nil)
72
- raise ArgumentError, 'view_name was not provided and is not optional' unless view_name.to_s.empty? == false
73
- url = "/views/#{view_name}"
74
- query = 'cascade=sessions' unless cascade.nil?
75
- response = self.class.delete(url, headers: @headers, query: query)
76
- unless response.success?
77
- raise NexosisApi::HttpException.new('Could not delete view',
78
- "Attempting to delete view #{view_name}",
79
- response)
80
- end
81
- end
82
-
83
- # Get the processed data from the view definition
84
- #
85
- # @param view_name [String] the unique name of the view for which to retrieve data
86
- # @param page_number [Integer] zero-based page number of results to retrieve
87
- # @param page_size [Integer] Count of results to retrieve in each page (max 1000).
88
- # @param query_options [Hash] options hash for limiting and projecting returned results
89
- # @note Query Options includes start_date as a DateTime or ISO 8601 compliant string,
90
- # end_date, also as a DateTime or string, and :include as an Array of strings indicating the columns to return.
91
- # The dates can be used independently and are inclusive. Lack of options returns all values within the given page.
92
- # @note - the results include any transformations or imputations required to prepare the data for a session
93
- # @raise [NexosisApi::HttpException]
94
- def get_view(view_name, page_number = 0, page_size = 50, query_options = {})
95
- raise ArgumentError, 'view_name was not provided and is not optional' unless view_name.to_s.empty? == false
96
- url = "/views/#{view_name}"
97
- response = self.class.get(url, headers: @headers,
98
- query: create_query(page_number, page_size, query_options),
99
- query_string_normalizer: ->(query_map) { array_query_normalizer(query_map) } )
100
- raise NexosisApi::HttpException.new('Could not retrieve data for the given view', "Requesting data for view #{view_name}", response) unless response.success?
101
- NexosisApi::ViewData.new(response.parsed_response)
102
- end
103
- end
104
- end
105
- end
1
+ module NexosisApi
2
+ # class to operate on views endpoint in Nexosis API
3
+ class Client
4
+ # Views-based API operations
5
+ # @see http://docs.nexosis.com/
6
+ # @since 1.2.0
7
+ module Views
8
+ ## List all existing view defintions, optionally limited by
9
+ # partial name or participating data sources
10
+ # @param partial_name [String] optionally limit results by view name
11
+ # @param dataset_name [String] optionally limit results by dataset used in definition
12
+ # @param page [Integer] optionally get results by non-zero page - defaults to 0
13
+ # @param page_size [Integer] optionally limit page size - defaults to 50 (max: 1000)
14
+ # @return [NexosisApi::PagedArray of NexosisApi::ViewDefinition]
15
+ # @raise [NexosisApi::HttpException]
16
+ def list_views(partial_name = '', dataset_name = '', page = 0, page_size = 50)
17
+ url = '/views'
18
+ query = {
19
+ 'page': page,
20
+ 'pageSize': page_size
21
+ }
22
+ query.store 'partialName', partial_name if partial_name.empty? == false
23
+ query.store 'dataSetName', dataset_name if dataset_name.empty? == false
24
+ response = self.class.get(url, headers: @headers, query: query)
25
+ raise NexosisApi::HttpException('Could not retrieve list of views.', 'attempting list of views', response) unless response.success?
26
+ NexosisApi::PagedArray.new(response.parsed_response, response.parsed_response['items']
27
+ .map { |definition| NexosisApi::ViewDefinition.new(definition) })
28
+ end
29
+
30
+ # Create a new view or update an existing one by name
31
+ # @param view_name [String] the name of the view to create or update.
32
+ # @param dataset_name [String] the unique name of a data that is one source of this view.
33
+ # @param right_datasource_name [String] the additional data source to join in this view.
34
+ # @return [NexosisApi::ViewDefinition] - definition as created by API
35
+ # @note @view_name Must be unique within your organization
36
+ # @raise [NexosisApi::HttpException]
37
+ def create_view(view_name, dataset_name, right_datasource_name)
38
+ raise ArgumentError, 'view_name was not provided and is not optional' unless view_name.to_s.empty? == false
39
+ raise ArgumentError, 'dataset_name was not provided and is not optional' unless dataset_name.to_s.empty? == false
40
+ raise ArgumentError, 'right_datasource_name was not provided and is not optional' unless right_datasource_name.to_s.empty? == false
41
+ view_definition = NexosisApi::ViewDefinition.new('viewName' => view_name)
42
+ view_definition.dataset_name = dataset_name
43
+ join = NexosisApi::Join.new('dataSet' => { 'name' => right_datasource_name })
44
+ view_definition.joins = [join]
45
+ create_view_by_def(view_definition)
46
+ end
47
+
48
+ # Create or update a view based on a view definition object
49
+ # @param view_definition [NexosisApi::ViewDefinition] an object populated with the view configuration to create
50
+ # @return [NexosisApi::ViewDefinition] - definition as created by API
51
+ # @raise [NexosisApi::HttpException]
52
+ def create_view_by_def(view_definition)
53
+ view_name = view_definition.view_name
54
+ raise ArgumentError, 'view_name was not provided and is not optional' unless view_name.to_s.empty? == false
55
+ url = "/views/#{view_name}"
56
+ response = self.class.put(url, headers: @headers, body: view_definition.to_json)
57
+ if response.success?
58
+ return NexosisApi::ViewDefinition.new(response.parsed_response)
59
+ else
60
+ raise NexosisApi::HttpException.new('Could not create the requested view',
61
+ "Attempting to create view named #{view_name}",
62
+ response)
63
+ end
64
+ end
65
+
66
+ # Deletes the named view and optionally all sessions created from it
67
+ # @param view_name [String] the view to remove
68
+ # @param cascade [String] indicate any non-nil to remove associated sessions
69
+ # @return [void]
70
+ # @raise [NexosisApi::HttpException]
71
+ def remove_view(view_name, cascade = nil)
72
+ raise ArgumentError, 'view_name was not provided and is not optional' unless view_name.to_s.empty? == false
73
+ url = "/views/#{view_name}"
74
+ query = 'cascade=sessions' unless cascade.nil?
75
+ response = self.class.delete(url, headers: @headers, query: query)
76
+ unless response.success?
77
+ raise NexosisApi::HttpException.new('Could not delete view',
78
+ "Attempting to delete view #{view_name}",
79
+ response)
80
+ end
81
+ end
82
+
83
+ # Get the processed data from the view definition
84
+ #
85
+ # @param view_name [String] the unique name of the view for which to retrieve data
86
+ # @param page_number [Integer] zero-based page number of results to retrieve
87
+ # @param page_size [Integer] Count of results to retrieve in each page (max 1000).
88
+ # @param query_options [Hash] options hash for limiting and projecting returned results
89
+ # @note Query Options includes start_date as a DateTime or ISO 8601 compliant string,
90
+ # end_date, also as a DateTime or string, and :include as an Array of strings indicating the columns to return.
91
+ # The dates can be used independently and are inclusive. Lack of options returns all values within the given page.
92
+ # @note - the results include any transformations or imputations required to prepare the data for a session
93
+ # @raise [NexosisApi::HttpException]
94
+ def get_view(view_name, page_number = 0, page_size = 50, query_options = {})
95
+ raise ArgumentError, 'view_name was not provided and is not optional' unless view_name.to_s.empty? == false
96
+ url = "/views/#{view_name}"
97
+ response = self.class.get(url, headers: @headers,
98
+ query: create_query(page_number, page_size, query_options),
99
+ query_string_normalizer: ->(query_map) { array_query_normalizer(query_map) } )
100
+ raise NexosisApi::HttpException.new('Could not retrieve data for the given view', "Requesting data for view #{view_name}", response) unless response.success?
101
+ NexosisApi::ViewData.new(response.parsed_response)
102
+ end
103
+ end
104
+ end
105
+ end
@@ -1,118 +1,118 @@
1
- require 'nexosis_api/algorithm_contestant'
2
- require 'nexosis_api/algorithm'
3
- require 'nexosis_api/calendar_jointarget'
4
- require 'nexosis_api/classifier_result'
5
- require 'nexosis_api/column'
6
- require 'nexosis_api/column_options'
7
- require 'nexosis_api/column_role'
8
- require 'nexosis_api/column_type'
9
- require 'nexosis_api/dataset_data'
10
- require 'nexosis_api/dataset_jointarget'
11
- require 'nexosis_api/dataset_model'
12
- require 'nexosis_api/dataset_summary'
13
- require 'nexosis_api/http_exception'
14
- require 'nexosis_api/impact_metric'
15
- require 'nexosis_api/imports_response'
16
- require 'nexosis_api/join'
17
- require 'nexosis_api/link'
18
- require 'nexosis_api/message'
19
- require 'nexosis_api/metric'
20
- require 'nexosis_api/model_summary'
21
- require 'nexosis_api/paged_array'
22
- require 'nexosis_api/predict_response'
23
- require 'nexosis_api/session_contest'
24
- require 'nexosis_api/session_response'
25
- require 'nexosis_api/session_result'
26
- require 'nexosis_api/session_selection_metrics'
27
- require 'nexosis_api/session'
28
- require 'nexosis_api/time_interval'
29
- require 'nexosis_api/view_definition'
30
- require 'nexosis_api/view_data'
31
- require 'nexosis_api/client/contest'
32
- require 'nexosis_api/client/sessions'
33
- require 'nexosis_api/client/datasets'
34
- require 'nexosis_api/client/imports'
35
- require 'nexosis_api/client/views'
36
- require 'nexosis_api/client/models'
37
-
38
- module NexosisApi
39
- # Primary entry point to working with Nexosis API
40
- class Client
41
- include HTTParty
42
- base_uri 'https://ml.nexosis.com/v1'
43
- include Client::Sessions
44
- include Client::Datasets
45
- include Client::Imports
46
- include Client::Views
47
- include Client::Models
48
- include Client::Contest
49
-
50
- def initialize(options = {})
51
- raise ArgumentError, 'api_key was not defined' unless options[:api_key].nil? == false
52
- @api_key = options[:api_key]
53
- self.class.base_uri options[:base_uri] unless options[:base_uri].nil?
54
- @headers = { 'api-key' => @api_key, 'Content-Type' => 'application/json',
55
- 'User-Agent' => 'Nexosis-Ruby-API-Client/1.2' }
56
- @options = { headers: @headers, format: :json }
57
- end
58
-
59
- # Gets the quota stats for the account
60
- #
61
- # @return [Hash] a hash of quota values and current values
62
- def get_account_quotas()
63
- session_url = '/sessions?page=0&pageSize=1'
64
- response = self.class.get(session_url, @options)
65
- response.headers.select { |k, _v| k.to_s.start_with? 'nexosis-account' }
66
- end
67
-
68
- # Provide access to read or modify the api key
69
- # @return [String]
70
- # @since 2.0.0
71
- def api_key(value)
72
- @api_key = value unless value.nil?
73
- @headers['api-key'] = @api_key
74
- @api_key
75
- end
76
-
77
- private
78
-
79
- # @private
80
- def process_csv_to_s csv
81
- content = ''
82
- if(csv.is_a?(CSV))
83
- csv.each do |row|
84
- if(csv.headers.nil?)
85
- # not using row.to_csv because it uses non-compliant '\n' newline
86
- content.concat(row.join(',')).concat("\r\n")
87
- else
88
- content.concat(row.fields.join(',')).concat("\r\n")
89
- end
90
- end
91
- if(csv.headers.nil? == false)
92
- content.prepend(csv.headers.join(',').concat("\r\n")) unless csv.headers.nil?
93
- end
94
- else
95
- content = csv
96
- end
97
- content
98
- end
99
-
100
- # @private
101
- def create_query(page_number, page_size, options = {})
102
- options.store(:page_number, page_number)
103
- options.store(:page_size, page_size)
104
- query = {
105
- 'page' => [page_number],
106
- 'pageSize' => [page_size]
107
- }
108
- query['startDate'] = [options[:start_date].iso8601.gsub(/\+/,'%2B')] unless options[:start_date].nil?
109
- query['endDate'] = [options[:end_date].iso8601.gsub(/\+/,'%2B')] unless options[:end_date].nil?
110
- query['include'] = options[:include] unless options[:include].nil?
111
- query
112
- end
113
-
114
- def array_query_normalizer(query_set)
115
- query_set.map { |key, value| value.map { |v| "#{key}=#{v}" } }.join('&')
116
- end
117
- end
118
- end
1
+ require 'nexosis_api/algorithm_contestant'
2
+ require 'nexosis_api/algorithm'
3
+ require 'nexosis_api/calendar_jointarget'
4
+ require 'nexosis_api/classifier_result'
5
+ require 'nexosis_api/column'
6
+ require 'nexosis_api/column_options'
7
+ require 'nexosis_api/column_role'
8
+ require 'nexosis_api/column_type'
9
+ require 'nexosis_api/dataset_data'
10
+ require 'nexosis_api/dataset_jointarget'
11
+ require 'nexosis_api/dataset_model'
12
+ require 'nexosis_api/dataset_summary'
13
+ require 'nexosis_api/http_exception'
14
+ require 'nexosis_api/impact_metric'
15
+ require 'nexosis_api/imports_response'
16
+ require 'nexosis_api/join'
17
+ require 'nexosis_api/link'
18
+ require 'nexosis_api/message'
19
+ require 'nexosis_api/metric'
20
+ require 'nexosis_api/model_summary'
21
+ require 'nexosis_api/paged_array'
22
+ require 'nexosis_api/predict_response'
23
+ require 'nexosis_api/session_contest'
24
+ require 'nexosis_api/session_response'
25
+ require 'nexosis_api/session_result'
26
+ require 'nexosis_api/session_selection_metrics'
27
+ require 'nexosis_api/session'
28
+ require 'nexosis_api/time_interval'
29
+ require 'nexosis_api/view_definition'
30
+ require 'nexosis_api/view_data'
31
+ require 'nexosis_api/client/contest'
32
+ require 'nexosis_api/client/sessions'
33
+ require 'nexosis_api/client/datasets'
34
+ require 'nexosis_api/client/imports'
35
+ require 'nexosis_api/client/views'
36
+ require 'nexosis_api/client/models'
37
+
38
+ module NexosisApi
39
+ # Primary entry point to working with Nexosis API
40
+ class Client
41
+ include HTTParty
42
+ base_uri 'https://ml.nexosis.com/v1'
43
+ include Client::Sessions
44
+ include Client::Datasets
45
+ include Client::Imports
46
+ include Client::Views
47
+ include Client::Models
48
+ include Client::Contest
49
+
50
+ def initialize(options = {})
51
+ raise ArgumentError, 'api_key was not defined' unless options[:api_key].nil? == false
52
+ @api_key = options[:api_key]
53
+ self.class.base_uri options[:base_uri] unless options[:base_uri].nil?
54
+ @headers = { 'api-key' => @api_key, 'Content-Type' => 'application/json',
55
+ 'User-Agent' => 'Nexosis-Ruby-API-Client/1.2' }
56
+ @options = { headers: @headers, format: :json }
57
+ end
58
+
59
+ # Gets the quota stats for the account
60
+ #
61
+ # @return [Hash] a hash of quota values and current values
62
+ def get_account_quotas()
63
+ session_url = '/sessions?page=0&pageSize=1'
64
+ response = self.class.get(session_url, @options)
65
+ response.headers.select { |k, _v| k.to_s.start_with? 'nexosis-account' }
66
+ end
67
+
68
+ # Provide access to read or modify the api key
69
+ # @return [String]
70
+ # @since 2.0.0
71
+ def api_key(value)
72
+ @api_key = value unless value.nil?
73
+ @headers['api-key'] = @api_key
74
+ @api_key
75
+ end
76
+
77
+ private
78
+
79
+ # @private
80
+ def process_csv_to_s csv
81
+ content = ''
82
+ if(csv.is_a?(CSV))
83
+ csv.each do |row|
84
+ if(csv.headers.nil?)
85
+ # not using row.to_csv because it uses non-compliant '\n' newline
86
+ content.concat(row.join(',')).concat("\r\n")
87
+ else
88
+ content.concat(row.fields.join(',')).concat("\r\n")
89
+ end
90
+ end
91
+ if(csv.headers.nil? == false)
92
+ content.prepend(csv.headers.join(',').concat("\r\n")) unless csv.headers.nil?
93
+ end
94
+ else
95
+ content = csv
96
+ end
97
+ content
98
+ end
99
+
100
+ # @private
101
+ def create_query(page_number, page_size, options = {})
102
+ options.store(:page_number, page_number)
103
+ options.store(:page_size, page_size)
104
+ query = {
105
+ 'page' => [page_number],
106
+ 'pageSize' => [page_size]
107
+ }
108
+ query['startDate'] = [options[:start_date].iso8601.gsub(/\+/,'%2B')] unless options[:start_date].nil?
109
+ query['endDate'] = [options[:end_date].iso8601.gsub(/\+/,'%2B')] unless options[:end_date].nil?
110
+ query['include'] = options[:include] unless options[:include].nil?
111
+ query
112
+ end
113
+
114
+ def array_query_normalizer(query_set)
115
+ query_set.map { |key, value| value.map { |v| "#{key}=#{v}" } }.join('&')
116
+ end
117
+ end
118
+ end
@@ -1,50 +1,50 @@
1
- module NexosisApi
2
- # class to hold the parsed results of column metadata
3
- class Column
4
- def initialize(column_name, value_hash)
5
- @name = column_name
6
- @type = NexosisApi::ColumnType.const_get(value_hash['dataType'].upcase) unless value_hash['dataType'].nil?
7
- @role = NexosisApi::ColumnRole.const_get(value_hash['role'].upcase) unless value_hash['role'].nil?
8
- @imputation = value_hash['imputation'] unless value_hash['imputation'].nil?
9
- @aggregation = value_hash['aggregation'] unless value_hash['aggregation'].nil?
10
- end
11
- # The column header, label, or name
12
- # @return [String]
13
- attr_accessor :name
14
-
15
- # The data type of this column
16
- # @note Either string, numeric, logical, or date
17
- # @return [NexosisApi::ColumnType]
18
- attr_accessor :type
19
-
20
- # The role of this column
21
- # @note Either none, timestamp, target, or feature
22
- # @return [NexosisApi::ColumnRole]
23
- attr_accessor :role
24
-
25
- # The strategy used to imput missing values
26
- # @note Either Zeroes, Mean, Median, or Mode
27
- # @return [String]
28
- attr_accessor :imputation
29
-
30
- # The strategy used to aggregate data if requested prediction period is greater than observation period
31
- # @note Either Sum, Mean, Median, or Mode
32
- # @return [String]
33
- attr_accessor :aggregation
34
-
35
- # utility method to format a column description in the way it is expected on input
36
- def to_hash
37
- { name => { 'dataType' => type.to_s,
38
- 'role' => role.to_s,
39
- 'imputation' => imputation.to_s,
40
- 'aggregation' => aggregation.to_s } }
41
- end
42
-
43
- # allows json to be built for api requests
44
- def self.to_json(column_array)
45
- result = {}
46
- column_array.each { |col| result[col.to_hash.keys[0]] = col.to_hash.values[0] }
47
- result
48
- end
49
- end
50
- end
1
+ module NexosisApi
2
+ # class to hold the parsed results of column metadata
3
+ class Column
4
+ def initialize(column_name, value_hash)
5
+ @name = column_name
6
+ @type = NexosisApi::ColumnType.const_get(value_hash['dataType'].upcase) unless value_hash['dataType'].nil?
7
+ @role = NexosisApi::ColumnRole.const_get(value_hash['role'].upcase) unless value_hash['role'].nil?
8
+ @imputation = value_hash['imputation'] unless value_hash['imputation'].nil?
9
+ @aggregation = value_hash['aggregation'] unless value_hash['aggregation'].nil?
10
+ end
11
+ # The column header, label, or name
12
+ # @return [String]
13
+ attr_accessor :name
14
+
15
+ # The data type of this column
16
+ # @note Either string, numeric, logical, or date
17
+ # @return [NexosisApi::ColumnType]
18
+ attr_accessor :type
19
+
20
+ # The role of this column
21
+ # @note Either none, timestamp, target, or feature
22
+ # @return [NexosisApi::ColumnRole]
23
+ attr_accessor :role
24
+
25
+ # The strategy used to imput missing values
26
+ # @note Either Zeroes, Mean, Median, or Mode
27
+ # @return [String]
28
+ attr_accessor :imputation
29
+
30
+ # The strategy used to aggregate data if requested prediction period is greater than observation period
31
+ # @note Either Sum, Mean, Median, or Mode
32
+ # @return [String]
33
+ attr_accessor :aggregation
34
+
35
+ # utility method to format a column description in the way it is expected on input
36
+ def to_hash
37
+ { name => { 'dataType' => type.to_s,
38
+ 'role' => role.to_s,
39
+ 'imputation' => imputation.to_s,
40
+ 'aggregation' => aggregation.to_s } }
41
+ end
42
+
43
+ # allows json to be built for api requests
44
+ def self.to_json(column_array)
45
+ result = {}
46
+ column_array.each { |col| result[col.to_hash.keys[0]] = col.to_hash.values[0] }
47
+ result
48
+ end
49
+ end
50
+ end
@@ -1,38 +1,38 @@
1
- module NexosisApi
2
- # Class for holding the join options on a column in a view-based join
3
- # @since 1.2.0
4
- class ColumnOptions
5
- # Create a new option for a join column.
6
- # @param column_name [String] the name of the original column from the source dataset
7
- # @param options_hash [Hash] additional information about how to process the column in a join
8
- def initialize(column_name, options_hash)
9
- @column_name = column_name
10
- @join_interval = NexosisApi::TimeInterval.const_get(options_hash['joinInterval'].upcase) unless options_hash['joinInterval'].nil?
11
- @alias = options_hash['alias']
12
- end
13
-
14
- # The name of the column on which these options are applied
15
- # @return [String]
16
- attr_accessor :column_name
17
-
18
- # Optional interval of a time series column being joined to another time series
19
- # @note not valid outside of join defintion
20
- # @return [NexosisApi::TimeInterval]
21
- attr_accessor :join_interval
22
-
23
- # Optional alias of the column when participating in a join
24
- # @note An alias can be used to keep two same-named columns distinct
25
- # or to merge two distinctly named columns. By default same-named columns
26
- # on two sides of a join will be merged.
27
- # @return [String]
28
- attr_accessor :alias
29
-
30
- # builds a custom hash which will match api requests
31
- def to_hash
32
- hash = { column_name => {} }
33
- hash[column_name]['join_interval'] = join_interval.to_s unless join_interval.nil?
34
- hash[column_name]['alias'] = @alias.to_s unless @alias.nil?
35
- hash
36
- end
37
- end
38
- end
1
+ module NexosisApi
2
+ # Class for holding the join options on a column in a view-based join
3
+ # @since 1.2.0
4
+ class ColumnOptions
5
+ # Create a new option for a join column.
6
+ # @param column_name [String] the name of the original column from the source dataset
7
+ # @param options_hash [Hash] additional information about how to process the column in a join
8
+ def initialize(column_name, options_hash)
9
+ @column_name = column_name
10
+ @join_interval = NexosisApi::TimeInterval.const_get(options_hash['joinInterval'].upcase) unless options_hash['joinInterval'].nil?
11
+ @alias = options_hash['alias']
12
+ end
13
+
14
+ # The name of the column on which these options are applied
15
+ # @return [String]
16
+ attr_accessor :column_name
17
+
18
+ # Optional interval of a time series column being joined to another time series
19
+ # @note not valid outside of join defintion
20
+ # @return [NexosisApi::TimeInterval]
21
+ attr_accessor :join_interval
22
+
23
+ # Optional alias of the column when participating in a join
24
+ # @note An alias can be used to keep two same-named columns distinct
25
+ # or to merge two distinctly named columns. By default same-named columns
26
+ # on two sides of a join will be merged.
27
+ # @return [String]
28
+ attr_accessor :alias
29
+
30
+ # builds a custom hash which will match api requests
31
+ def to_hash
32
+ hash = { column_name => {} }
33
+ hash[column_name]['join_interval'] = join_interval.to_s unless join_interval.nil?
34
+ hash[column_name]['alias'] = @alias.to_s unless @alias.nil?
35
+ hash
36
+ end
37
+ end
38
+ end