Class: DTK::Client::DtkResponse
- Inherits:
-
Object
- Object
- DTK::Client::DtkResponse
- Extended by:
- CommandBase
- Includes:
- CommandBase, Hirb::Console
- Defined in:
- lib/view_processor/table_print.rb
Instance Attribute Summary collapse
-
#command_name ⇒ Object
Returns the value of attribute command_name.
-
#evaluated_data ⇒ Object
Returns the value of attribute evaluated_data.
-
#order_defintion ⇒ Object
Returns the value of attribute order_defintion.
Instance Method Summary collapse
- #filter_remove_underscore(field) ⇒ Object
- #get_metadata ⇒ Object
- #get_table_defintion(name, is_order = false) ⇒ Object
-
#initialize(data, data_type, forced_metadata, print_error_table) ⇒ DtkResponse
constructor
when adding class to table view you need to define mapping and order to be displayed in table this can be fixed with facets, but that is todo for now TODO: use facets with ordered hashes.
- #print ⇒ Object
- #safe_name(identifier) ⇒ Object
- #to_ostruct(data) ⇒ Object
-
#validate_forced_metadata(forced_metadata) ⇒ Object
Check if custom metadata is sent in valid format.
Methods included from CommandBase
get, get_connection, handle_argument_error, post, post_file, rest_url, rotate_args
Constructor Details
#initialize(data, data_type, forced_metadata, print_error_table) ⇒ DtkResponse
when adding class to table view you need to define mapping and order to be displayed in table this can be fixed with facets, but that is todo for now TODO: use facets with ordered hashes
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/view_processor/table_print.rb', line 64 def initialize(data, data_type, , print_error_table) # if there is no custom metadata, then we use metadata predefined in meta-response.json file if .nil? # get all table definitions from json file @table_defintions = () # e.g. data type ASSEMBLY @command_name = data_type # e.g. ASSEMBLY => TableDefintions::ASSEMBLY table_defintion = get_table_defintion(@command_name) # e.g. ASSEMBLY => TableDefintions::ASSEMBLY_ORDER @order_definition = get_table_defintion(@command_name, true) else # if there is custom metadata, check if it is in valid format () table_defintion = ['mapping'] @order_definition = ['order'] end # if one defintion is missing we stop the execution if table_defintion.nil? || @order_definition.nil? raise DTK::Client::DtkError,"Missing table definition(s) for data type #{data_type}." end # transforms data to DtkOpenStruct structured_data = [] # very important since rest of the code expect array to be used data = [data] unless data.kind_of?(Array) data.each do |data_element| # special flag to filter out data not needed here next if data_element['dtk_client_hidden'] structured_data << to_ostruct(data_element) end # we use array of OpenStruct to hold our evaluated values @evaluated_data = [] @error_data = [] @action_data = [] structured_data.each do |structured_element| evaluated_element = DtkOpenStruct.new error_element = DtkOpenStruct.new # based on mapping we set key = eval(value) table_defintion.each do |k,v| begin # due to problems with space we have special way of handling error columns # in such a way that those error will be specially printed later on if print_error_table && k.include?('error') = value_of(structured_element, v) server_error = nil # here we see if there was an error if not we will skip this # if so we add it to @error_data if .empty? # no error message just add it as regular element evaluated_element.send("#{k}=",value_of(structured_element, v)) else error_index = "" error_type = value_of(structured_element,'errors.dtk_type') || "" val = value_of(structured_element,'dtk_type')||'' # extract e.g. 3.1.1.1 from '3.1.1.1 action' etc. error_index = "[ #{val.scan( /\d+[,.]?\d?[,.]?\d?[,.]?\d?[,.]?\d?/ ).first} ]" # original table takes that index evaluated_element.send("#{k}=", error_index) # we set new error element error_element.id = error_index if error_type == "user_error" error_element. = "[USER ERROR] " + elsif error_type == "test_error" error_element. = "[TEST ERROR] " + else error_element. = "[SERVER ERROR] " + end # add it with other @error_data << error_element end else evaluated_element.send("#{k}=", value_of(structured_element, v)) # eval "evaluated_element.#{k}=structured_element.#{v}" end rescue NoMethodError => e unless e..include? "nil:NilClass" # when chaining comands there are situations where more complex strcture # e.g. external_ref.region will not be there. So we are handling that case # make sure when in development to disable this TODO: better solution needed raise DTK::Client::DtkError,"Error with missing metadata occurred. There is a mistake in table metadata or unexpected data presented to table view." end end end @order_definition.delete('errors') @evaluated_data << evaluated_element end end |
Instance Attribute Details
#command_name ⇒ Object
Returns the value of attribute command_name.
59 60 61 |
# File 'lib/view_processor/table_print.rb', line 59 def command_name @command_name end |
#evaluated_data ⇒ Object
Returns the value of attribute evaluated_data.
59 60 61 |
# File 'lib/view_processor/table_print.rb', line 59 def evaluated_data @evaluated_data end |
#order_defintion ⇒ Object
Returns the value of attribute order_defintion.
59 60 61 |
# File 'lib/view_processor/table_print.rb', line 59 def order_defintion @order_defintion end |
Instance Method Details
#filter_remove_underscore(field) ⇒ Object
217 218 219 |
# File 'lib/view_processor/table_print.rb', line 217 def filter_remove_underscore(field) end |
#get_metadata ⇒ Object
170 171 172 173 174 |
# File 'lib/view_processor/table_print.rb', line 170 def content = DiskCacher.new.fetch("table_metadata", ::DTK::Configuration.get(:meta_table_ttl)) raise DTK::Client::DtkError, "Table metadata is empty, please contact DTK team." if content.empty? return JSON.parse(content) end |
#get_table_defintion(name, is_order = false) ⇒ Object
199 200 201 202 203 204 205 |
# File 'lib/view_processor/table_print.rb', line 199 def get_table_defintion(name,is_order=false) begin @table_defintions[name.downcase][(is_order ? 'order' : 'mapping')] rescue NameError => e return nil end end |
#print ⇒ Object
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 |
# File 'lib/view_processor/table_print.rb', line 221 def print filter_remove_underscore = Proc.new { |header| header.gsub('_',' ').upcase } # hirb print out of our evaluated data in order defined # Available options can be viewed here: http://tagaholic.me/hirb/doc/classes/Hirb/Helpers/Table.html#M000008 table(@evaluated_data,{:fields => @order_definition,:escape_special_chars => true, :resize => false, :vertical => false, :header_filter => filter_remove_underscore }) # in case there were error we print those errors unless @error_data.empty? printf "\nERRORS: \n\n" #table(@error_data,{:fields => [ :id, :message ]}) @error_data.each do |error_row| printf "%15s %s\n", error_row.id.colorize(:yellow), error_row..colorize(:red) end end unless @action_data.empty? printf " \n" #table(@error_data,{:fields => [ :id, :message ]}) printed = [] @action_data.each do |action_row| # printf "%15s\n" # printf(" INFO: #{action_row.message.colorize(:yellow)} \n") #, action_row.id.colorize(:yellow), action_row.message.colorize(:yellow) = action_row. printf "%15s %s\n", "INFO:".colorize(:yellow), .colorize(:yellow) unless printed.include?() printed << end end end |
#safe_name(identifier) ⇒ Object
195 196 197 |
# File 'lib/view_processor/table_print.rb', line 195 def safe_name(identifier) (identifier == 'id' || identifier == 'type') ? "dtk_#{identifier}" : identifier end |
#to_ostruct(data) ⇒ Object
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/view_processor/table_print.rb', line 176 def to_ostruct(data) result = data.inject({}) do |res, (k, v)| k = safe_name(k) case v when Hash res.store(k, to_ostruct(v)) res when Array res.store(k, v.each { |el| Hash === el ? to_ostruct(el) : el }) res else res.store(k,v) res end end DtkOpenStruct.new(result) end |
#validate_forced_metadata(forced_metadata) ⇒ Object
Check if custom metadata is sent in valid format
208 209 210 211 212 213 214 215 |
# File 'lib/view_processor/table_print.rb', line 208 def () # if custom metadata does not contain order(Array) or mapping(Hash),then it's not valid metadata unless (['order'].nil? || ['mapping'].nil?) return if (['order'].class.eql?(Array) && ['mapping'].class.eql?(Hash)) end raise DTK::Client::DtkError,"Provided table definition is not valid. Please review your order and mapping for provided definition: \n #{.inspect}" end |