apollo_commons_ruby_cli 1.0.0
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/.DS_Store +0 -0
- data/.gitignore +9 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +19 -0
- data/README.md +40 -0
- data/Rakefile +2 -0
- data/apollo_commons_ruby.gemspec +26 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/apollo_commons_ruby/AtroposSubscription.rb +88 -0
- data/lib/apollo_commons_ruby/BackfillSampleData.rb +41 -0
- data/lib/apollo_commons_ruby/DomainEvent.rb +181 -0
- data/lib/apollo_commons_ruby/ExecuteCommand.rb +20 -0
- data/lib/apollo_commons_ruby/FileUtils.rb +136 -0
- data/lib/apollo_commons_ruby/MarioConfigsStability.rb +181 -0
- data/lib/apollo_commons_ruby/MarioEvent.rb +45 -0
- data/lib/apollo_commons_ruby/NetworkUtils.rb +188 -0
- data/lib/apollo_commons_ruby/Operation.rb +5 -0
- data/lib/apollo_commons_ruby/Permission.rb +51 -0
- data/lib/apollo_commons_ruby/RequestDataUtils.rb +28 -0
- data/lib/apollo_commons_ruby/ResolveTemplate.rb +40 -0
- data/lib/apollo_commons_ruby/SecretConfig.rb +65 -0
- data/lib/apollo_commons_ruby/ShopHook.rb +79 -0
- data/lib/apollo_commons_ruby/TemplateDebug.rb +207 -0
- data/lib/apollo_commons_ruby/TemplatePusher.rb +159 -0
- data/lib/apollo_commons_ruby/TemplatesHelper.rb +808 -0
- data/lib/apollo_commons_ruby/TemplatesRakefile.rb +864 -0
- data/lib/apollo_commons_ruby/TenantInfo.rb +26 -0
- data/lib/apollo_commons_ruby/TenantTokenCreator.rb +16 -0
- data/lib/apollo_commons_ruby/VerifyMarioConfig.rb +220 -0
- data/lib/apollo_commons_ruby/ViewGroup.rb +64 -0
- data/lib/apollo_commons_ruby/ViewGroupComponent.rb +73 -0
- data/lib/apollo_commons_ruby/ViewGroupDefinition.rb +68 -0
- data/lib/apollo_commons_ruby/WebhookReporting.rb +13 -0
- data/lib/apollo_commons_ruby/Zebugger.rb +125 -0
- data/lib/apollo_commons_ruby.rb +60 -0
- data/lib/jar/v1_atroposDevTools.jar +0 -0
- data/lib/tasks/add_translations.rake +9 -0
- data/lib/tasks/backfill_sample_data.rake +7 -0
- data/lib/tasks/checkValidJson.rake +17 -0
- data/lib/tasks/delete_domain_event.rake +7 -0
- data/lib/tasks/delete_view_group.rake +7 -0
- data/lib/tasks/delete_view_group_component.rake +21 -0
- data/lib/tasks/delete_view_group_definition.rake +26 -0
- data/lib/tasks/deploy_all_templates.rake +7 -0
- data/lib/tasks/deploy_permissions.rake +6 -0
- data/lib/tasks/deploy_shophooks.rake +6 -0
- data/lib/tasks/display_on_zebugger.rake +19 -0
- data/lib/tasks/get_tenant_token.rake +6 -0
- data/lib/tasks/runTests.rake +27 -0
- data/lib/tasks/template_debug.rake +32 -0
- data/lib/tasks/update_all.rake +36 -0
- data/lib/tasks/update_all_domain_events.rake +24 -0
- data/lib/tasks/update_all_view_group_components.rake +18 -0
- data/lib/tasks/update_domain_event.rake +12 -0
- data/lib/tasks/update_one_template.rake +42 -0
- data/lib/tasks/update_translations.rake +24 -0
- data/lib/tasks/update_view_group_component.rake +9 -0
- data/lib/tasks/update_view_group_definition.rake +7 -0
- data/lib/tasks/update_view_group_for_user_0.rake +36 -0
- data/lib/tasks/validate_mario_configs.rake +10 -0
- data/lib/tasks/verify_mario_config.rake +15 -0
- data/lib/version.rb +3 -0
- metadata +109 -0
| @@ -0,0 +1,808 @@ | |
| 1 | 
            +
            require 'json'
         | 
| 2 | 
            +
            require 'net/http'
         | 
| 3 | 
            +
            require 'uri'
         | 
| 4 | 
            +
            require 'openssl'
         | 
| 5 | 
            +
            require 'base64'
         | 
| 6 | 
            +
            require_relative './NetworkUtils'
         | 
| 7 | 
            +
            require_relative 'SecretConfig'
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            module HTTP
         | 
| 10 | 
            +
              GET = 1
         | 
| 11 | 
            +
              POST = 2
         | 
| 12 | 
            +
              DELETE = 3
         | 
| 13 | 
            +
              PUT = 4
         | 
| 14 | 
            +
            end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            class String
         | 
| 17 | 
            +
              def black;          "\e[30m#{self}\e[0m" end
         | 
| 18 | 
            +
              def red;            "\e[31m#{self}\e[0m" end
         | 
| 19 | 
            +
              def green;          "\e[32m#{self}\e[0m" end
         | 
| 20 | 
            +
              def brown;          "\e[33m#{self}\e[0m" end
         | 
| 21 | 
            +
              def blue;           "\e[34m#{self}\e[0m" end
         | 
| 22 | 
            +
              def magenta;        "\e[35m#{self}\e[0m" end
         | 
| 23 | 
            +
              def cyan;           "\e[36m#{self}\e[0m" end
         | 
| 24 | 
            +
              def gray;           "\e[37m#{self}\e[0m" end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              def bg_black;       "\e[40m#{self}\e[0m" end
         | 
| 27 | 
            +
              def bg_red;         "\e[41m#{self}\e[0m" end
         | 
| 28 | 
            +
              def bg_green;       "\e[42m#{self}\e[0m" end
         | 
| 29 | 
            +
              def bg_brown;       "\e[43m#{self}\e[0m" end
         | 
| 30 | 
            +
              def bg_blue;        "\e[44m#{self}\e[0m" end
         | 
| 31 | 
            +
              def bg_magenta;     "\e[45m#{self}\e[0m" end
         | 
| 32 | 
            +
              def bg_cyan;        "\e[46m#{self}\e[0m" end
         | 
| 33 | 
            +
              def bg_gray;        "\e[47m#{self}\e[0m" end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              def bold;           "\e[1m#{self}\e[22m" end
         | 
| 36 | 
            +
              def italic;         "\e[3m#{self}\e[23m" end
         | 
| 37 | 
            +
              def underline;      "\e[4m#{self}\e[24m" end
         | 
| 38 | 
            +
              def blink;          "\e[5m#{self}\e[25m" end
         | 
| 39 | 
            +
              def reverse_color;  "\e[7m#{self}\e[27m" end
         | 
| 40 | 
            +
            end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            class LineReplacementProperties
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  attr_reader :file_path
         | 
| 45 | 
            +
                  attr_reader :redundant_line_prefix
         | 
| 46 | 
            +
                  attr_reader :updated_line
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  def initialize(file_path, redundant_line_prefix, updated_line)
         | 
| 49 | 
            +
                      @file_path = file_path
         | 
| 50 | 
            +
                      @redundant_line_prefix = redundant_line_prefix
         | 
| 51 | 
            +
                      @updated_line = updated_line
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
            end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
             | 
| 56 | 
            +
            class CreateTemplatePayload
         | 
| 57 | 
            +
              def initialize(template_group, language, view, templates, version)
         | 
| 58 | 
            +
                @template_group = template_group
         | 
| 59 | 
            +
                @language = language
         | 
| 60 | 
            +
                @view = view
         | 
| 61 | 
            +
                @templates = templates
         | 
| 62 | 
            +
                @version = version
         | 
| 63 | 
            +
              end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
              def to_json
         | 
| 66 | 
            +
                body = {
         | 
| 67 | 
            +
                    "templateGroup"=> @template_group,
         | 
| 68 | 
            +
                    "language"=> @language,
         | 
| 69 | 
            +
                    "viewType"=> @view,
         | 
| 70 | 
            +
                    "templates"=> @templates,
         | 
| 71 | 
            +
                    "version" => @version
         | 
| 72 | 
            +
                }
         | 
| 73 | 
            +
                body.to_json
         | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
            end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
            class TemplateMapping
         | 
| 79 | 
            +
             | 
| 80 | 
            +
              def initialize(template_name, template_path, template_mapping)
         | 
| 81 | 
            +
                @template_name = template_name
         | 
| 82 | 
            +
                @template_path = template_path
         | 
| 83 | 
            +
                @template_mapping = template_mapping
         | 
| 84 | 
            +
              end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
              def create_hash
         | 
| 87 | 
            +
                {
         | 
| 88 | 
            +
                    "template_name"=> @template_name,
         | 
| 89 | 
            +
                    "template_path"=> @template_path,
         | 
| 90 | 
            +
                    "template_mapping"=> @template_mapping
         | 
| 91 | 
            +
                }
         | 
| 92 | 
            +
              end
         | 
| 93 | 
            +
             | 
| 94 | 
            +
              def create_mapping
         | 
| 95 | 
            +
                {
         | 
| 96 | 
            +
                  @template_mapping => @template_name
         | 
| 97 | 
            +
                }
         | 
| 98 | 
            +
              end
         | 
| 99 | 
            +
            end
         | 
| 100 | 
            +
             | 
| 101 | 
            +
            class Template
         | 
| 102 | 
            +
             | 
| 103 | 
            +
              attr_reader :data_template
         | 
| 104 | 
            +
             | 
| 105 | 
            +
              def initialize(template_name, default_content, data_template, presentation, attrs)
         | 
| 106 | 
            +
                @default_content = default_content
         | 
| 107 | 
            +
                @data_template = data_template
         | 
| 108 | 
            +
                @presentation = presentation
         | 
| 109 | 
            +
                @template_name = template_name
         | 
| 110 | 
            +
                @attrs = attrs
         | 
| 111 | 
            +
              end
         | 
| 112 | 
            +
             | 
| 113 | 
            +
              def create_hash
         | 
| 114 | 
            +
                {
         | 
| 115 | 
            +
                    @template_name => {
         | 
| 116 | 
            +
                        "defaultContent"=> @default_content,
         | 
| 117 | 
            +
                        "dataTemplateBase64"=> @data_template,
         | 
| 118 | 
            +
                        "presentationBase64"=> @presentation,
         | 
| 119 | 
            +
                        "attrs"=> @attrs
         | 
| 120 | 
            +
                    }
         | 
| 121 | 
            +
                }
         | 
| 122 | 
            +
              end
         | 
| 123 | 
            +
             | 
| 124 | 
            +
            end
         | 
| 125 | 
            +
             | 
| 126 | 
            +
            class CreateTemplatePayload
         | 
| 127 | 
            +
              def initialize(template_group, language, view, templates, version)
         | 
| 128 | 
            +
                @template_group = template_group
         | 
| 129 | 
            +
                @language = language
         | 
| 130 | 
            +
                @view = view
         | 
| 131 | 
            +
                @templates = templates
         | 
| 132 | 
            +
                @version = version
         | 
| 133 | 
            +
              end
         | 
| 134 | 
            +
             | 
| 135 | 
            +
              def to_json
         | 
| 136 | 
            +
                body = {
         | 
| 137 | 
            +
                    "templateGroup"=> @template_group,
         | 
| 138 | 
            +
                    "language"=> @language,
         | 
| 139 | 
            +
                    "viewType"=> @view,
         | 
| 140 | 
            +
                    "templates"=> @templates,
         | 
| 141 | 
            +
                    "version" => @version
         | 
| 142 | 
            +
                }
         | 
| 143 | 
            +
                body.to_json
         | 
| 144 | 
            +
              end
         | 
| 145 | 
            +
             | 
| 146 | 
            +
            end
         | 
| 147 | 
            +
             | 
| 148 | 
            +
            class ConvertPresentationPayload
         | 
| 149 | 
            +
              def initialize(presentation, sourcePresentationType, targetPresentationType)
         | 
| 150 | 
            +
                @presentation = presentation
         | 
| 151 | 
            +
                @sourcePresentationType = sourcePresentationType
         | 
| 152 | 
            +
                @targetPresentationType = targetPresentationType
         | 
| 153 | 
            +
              end
         | 
| 154 | 
            +
             | 
| 155 | 
            +
              def to_json
         | 
| 156 | 
            +
                body = {
         | 
| 157 | 
            +
                    "presentation"=> @presentation,
         | 
| 158 | 
            +
                    "sourcePresentationType"=> @sourcePresentationType,
         | 
| 159 | 
            +
                    "targetPresentationType"=> @targetPresentationType
         | 
| 160 | 
            +
                }
         | 
| 161 | 
            +
                body.to_json
         | 
| 162 | 
            +
              end
         | 
| 163 | 
            +
             | 
| 164 | 
            +
            end
         | 
| 165 | 
            +
             | 
| 166 | 
            +
            module JSON
         | 
| 167 | 
            +
              def self.is_valid_json?(json)
         | 
| 168 | 
            +
                begin
         | 
| 169 | 
            +
                  JSON.parse(json)
         | 
| 170 | 
            +
                  return true
         | 
| 171 | 
            +
                rescue JSON::ParserError => e
         | 
| 172 | 
            +
                  return false
         | 
| 173 | 
            +
                end
         | 
| 174 | 
            +
              end
         | 
| 175 | 
            +
            end
         | 
| 176 | 
            +
             | 
| 177 | 
            +
            class TemplateConfig
         | 
| 178 | 
            +
              BaseAppID = "1005"
         | 
| 179 | 
            +
              SupportedLanguages = "supportedLanguages"
         | 
| 180 | 
            +
              BaseLanguageResource = "VI"
         | 
| 181 | 
            +
             | 
| 182 | 
            +
              def self.language_resource_path(language)
         | 
| 183 | 
            +
                return "Resources/#{language}.json"
         | 
| 184 | 
            +
              end
         | 
| 185 | 
            +
             | 
| 186 | 
            +
              def self.base_language_resource_path()
         | 
| 187 | 
            +
                return language_resource_path("#{TemplateConfig::BaseLanguageResource}")
         | 
| 188 | 
            +
              end
         | 
| 189 | 
            +
             | 
| 190 | 
            +
              def self.template_group_contents_path_for_base_app(template_group)
         | 
| 191 | 
            +
                return template_group_contents_path_for_appID(template_group, BaseAppID)
         | 
| 192 | 
            +
              end
         | 
| 193 | 
            +
             | 
| 194 | 
            +
              def self.template_group_contents_path_for_appID(template_group, appID)
         | 
| 195 | 
            +
                parent_dir_path = template_group_parent_directory_path_for_appID(template_group, appID)
         | 
| 196 | 
            +
                return "#{parent_dir_path}/#{appID}"
         | 
| 197 | 
            +
              end
         | 
| 198 | 
            +
             | 
| 199 | 
            +
              def self.template_group_parent_directory_path_for_appID(template_group, appID)
         | 
| 200 | 
            +
                template_group_parent_path = template_group_parent_directory_path(template_group)
         | 
| 201 | 
            +
                return "#{template_group_parent_path}/common/UIVIEW/appID_#{appID}"
         | 
| 202 | 
            +
              end
         | 
| 203 | 
            +
             | 
| 204 | 
            +
              def self.template_group_parent_directory_path(template_group)
         | 
| 205 | 
            +
                return "Templates/#{template_group}"
         | 
| 206 | 
            +
              end
         | 
| 207 | 
            +
             | 
| 208 | 
            +
              def self.template_group_details_path_for_template_group(template_group)
         | 
| 209 | 
            +
                template_group_parent_path = template_group_parent_directory_path(template_group)
         | 
| 210 | 
            +
                return "#{template_group_parent_path}/templateGroupDetails.json"
         | 
| 211 | 
            +
              end
         | 
| 212 | 
            +
             | 
| 213 | 
            +
              def self.template_group_details_for_template_group(template_group)
         | 
| 214 | 
            +
                file_path = template_group_details_path_for_template_group(template_group)
         | 
| 215 | 
            +
                return read_raw_json_data_from_file_path(file_path)
         | 
| 216 | 
            +
              end
         | 
| 217 | 
            +
             | 
| 218 | 
            +
              def self.supported_languages_for_template_group(template_group)
         | 
| 219 | 
            +
                return template_group_details_for_template_group(template_group)["#{TemplateConfig::SupportedLanguages}"]
         | 
| 220 | 
            +
              end
         | 
| 221 | 
            +
             | 
| 222 | 
            +
              def self.update_template_group_details_for_template_group(template_group, key, value)
         | 
| 223 | 
            +
                template_group_details = template_group_details_for_template_group(template_group)
         | 
| 224 | 
            +
                template_group_details[key] = value
         | 
| 225 | 
            +
                template_group_details_file_path = template_group_details_path_for_template_group(template_group)
         | 
| 226 | 
            +
                puts "updated template group details: #{JSON.pretty_generate template_group_details}"
         | 
| 227 | 
            +
                write_data_to_file(template_group_details_file_path, template_group_details)
         | 
| 228 | 
            +
              end
         | 
| 229 | 
            +
             | 
| 230 | 
            +
              def self.add_language_to_supported_languages_for_template_group(template_group, language)
         | 
| 231 | 
            +
                if language == nil
         | 
| 232 | 
            +
                  log_error("Cannot add nil lanugage to supportedLanguages")
         | 
| 233 | 
            +
                  return
         | 
| 234 | 
            +
                end
         | 
| 235 | 
            +
                supported_languages = supported_languages_for_template_group(template_group)
         | 
| 236 | 
            +
                if supported_languages.include?(language)
         | 
| 237 | 
            +
                  log_info("Language #{language} already exists in supported languages. Skipping adding language")
         | 
| 238 | 
            +
                else
         | 
| 239 | 
            +
                  puts "Adding language #{language} to supported languages"
         | 
| 240 | 
            +
                  supported_languages.push(language)
         | 
| 241 | 
            +
                  update_template_group_details_for_template_group(template_group, "#{TemplateConfig::SupportedLanguages}", supported_languages)
         | 
| 242 | 
            +
                end
         | 
| 243 | 
            +
              end
         | 
| 244 | 
            +
            end
         | 
| 245 | 
            +
             | 
| 246 | 
            +
            class String
         | 
| 247 | 
            +
              def newline
         | 
| 248 | 
            +
                self.gsub(/\n/,"")
         | 
| 249 | 
            +
              end
         | 
| 250 | 
            +
              def tabs
         | 
| 251 | 
            +
                self.gsub(/\t/," ")
         | 
| 252 | 
            +
              end
         | 
| 253 | 
            +
              def esc
         | 
| 254 | 
            +
                self.gsub(/\"/,"\\\"")
         | 
| 255 | 
            +
              end
         | 
| 256 | 
            +
              def escnewline
         | 
| 257 | 
            +
                self.gsub(/\n/,"\\n")
         | 
| 258 | 
            +
              end
         | 
| 259 | 
            +
              def unesc
         | 
| 260 | 
            +
                self.gsub(/\\\"/,"\"")
         | 
| 261 | 
            +
              end
         | 
| 262 | 
            +
            end
         | 
| 263 | 
            +
             | 
| 264 | 
            +
            class CreateCollectionItem
         | 
| 265 | 
            +
              def initialize(item_id, data)
         | 
| 266 | 
            +
                @itemID = item_id
         | 
| 267 | 
            +
                @data = data
         | 
| 268 | 
            +
              end
         | 
| 269 | 
            +
             | 
| 270 | 
            +
              def to_json
         | 
| 271 | 
            +
                body = {
         | 
| 272 | 
            +
                  "itemID"=> @itemID,
         | 
| 273 | 
            +
                  "data"=> @data,
         | 
| 274 | 
            +
                  "isBase64Encoded"=> "true"
         | 
| 275 | 
            +
                }
         | 
| 276 | 
            +
                body.to_json
         | 
| 277 | 
            +
              end
         | 
| 278 | 
            +
            end
         | 
| 279 | 
            +
             | 
| 280 | 
            +
            class Configuration
         | 
| 281 | 
            +
             | 
| 282 | 
            +
              attr_reader :environment
         | 
| 283 | 
            +
              attr_reader :base_folder_path
         | 
| 284 | 
            +
              attr_reader :templated_data_file_path
         | 
| 285 | 
            +
              attr_reader :env_data_file_path
         | 
| 286 | 
            +
              attr_reader :resources_file_path
         | 
| 287 | 
            +
              attr_reader :apollo_config_base_url
         | 
| 288 | 
            +
              attr_reader :post_insert_templates_url
         | 
| 289 | 
            +
              attr_reader :post_update_templates_url
         | 
| 290 | 
            +
              attr_reader :get_templates_for_view_url
         | 
| 291 | 
            +
              attr_reader :post_upsert_template_mappings_url
         | 
| 292 | 
            +
              attr_reader :get_template_group_details_url
         | 
| 293 | 
            +
              attr_reader :post_update_template_group_url
         | 
| 294 | 
            +
              attr_reader :post_insert_template_group_url
         | 
| 295 | 
            +
             | 
| 296 | 
            +
              def setup(environment, tenantId, projectId)
         | 
| 297 | 
            +
                if file_exists?("./.apollo/#{environment}.json")
         | 
| 298 | 
            +
                  environmentFile = File.read("./.apollo/#{environment}.json")
         | 
| 299 | 
            +
                  envFile = "./environments/#{environment}.json"
         | 
| 300 | 
            +
                else
         | 
| 301 | 
            +
                  if (environment == 'PreProd')
         | 
| 302 | 
            +
                    environment = 'Preprod'
         | 
| 303 | 
            +
                  end
         | 
| 304 | 
            +
                  if (tenantId != nil && projectId != nil)
         | 
| 305 | 
            +
                    envFile = "./environments/" + environment + "/env_" + tenantId + "_" + projectId + ".json"
         | 
| 306 | 
            +
                    if(file_exists?(envFile))
         | 
| 307 | 
            +
                      environmentFile = File.read(envFile)
         | 
| 308 | 
            +
                    end
         | 
| 309 | 
            +
                  else
         | 
| 310 | 
            +
                    envFile = "./environments/" + environment + "/env.json"
         | 
| 311 | 
            +
                    if(file_exists?(envFile))
         | 
| 312 | 
            +
                      environmentFile = File.read(envFile)
         | 
| 313 | 
            +
                    end
         | 
| 314 | 
            +
                  end
         | 
| 315 | 
            +
                end
         | 
| 316 | 
            +
             | 
| 317 | 
            +
                conf = JSON.parse environmentFile
         | 
| 318 | 
            +
                if (conf["apolloConfigBaseUrl"] == nil)
         | 
| 319 | 
            +
                  puts "Required configurations are missing"
         | 
| 320 | 
            +
                  raise "Required configurations are missing"
         | 
| 321 | 
            +
                  return nil
         | 
| 322 | 
            +
                end
         | 
| 323 | 
            +
             | 
| 324 | 
            +
                @base_folder_path = "./Templates"
         | 
| 325 | 
            +
                @templated_data_file_path = "./scripts/commonData/generatedTemplatedData.json"
         | 
| 326 | 
            +
                @environment = environment
         | 
| 327 | 
            +
                @resources_file_path = "./Resources"
         | 
| 328 | 
            +
                @env_data_file_path = envFile
         | 
| 329 | 
            +
                @apollo_config_base_url = conf["apolloConfigBaseUrl"]
         | 
| 330 | 
            +
              end
         | 
| 331 | 
            +
             | 
| 332 | 
            +
              def initialize(environment, base_path)
         | 
| 333 | 
            +
                if file_exists?("./.apollo/#{environment}.json")
         | 
| 334 | 
            +
                  conf_file = File.read(File.expand_path("./.apollo/#{environment}.json"))
         | 
| 335 | 
            +
                  conf = JSON.parse conf_file
         | 
| 336 | 
            +
             | 
| 337 | 
            +
                  if (conf["apolloConfigBaseUrl"] == nil)
         | 
| 338 | 
            +
                    puts "Required configurations are missing"
         | 
| 339 | 
            +
                    raise "Required configurations are missing"
         | 
| 340 | 
            +
                    return nil
         | 
| 341 | 
            +
                  end
         | 
| 342 | 
            +
                  
         | 
| 343 | 
            +
                  @environment = environment
         | 
| 344 | 
            +
                  @base_folder_path = "./Templates"
         | 
| 345 | 
            +
                  @templated_data_file_path = "./scripts/commonData/generatedTemplatedData.json"
         | 
| 346 | 
            +
                  @env_data_file_path = "./environments/#{environment}.json"
         | 
| 347 | 
            +
                  @apollo_config_base_url = conf["apolloConfigBaseUrl"]
         | 
| 348 | 
            +
                  @resources_file_path = "./Resources"
         | 
| 349 | 
            +
                  
         | 
| 350 | 
            +
                else
         | 
| 351 | 
            +
                  puts base_path
         | 
| 352 | 
            +
             | 
| 353 | 
            +
                  if base_path == nil
         | 
| 354 | 
            +
                    conf_file = File.read(File.expand_path("/var/jenkins_home/template_config/config.json"));
         | 
| 355 | 
            +
                  else
         | 
| 356 | 
            +
                    conf_file = File.read(File.expand_path(base_path));
         | 
| 357 | 
            +
                  end
         | 
| 358 | 
            +
             | 
| 359 | 
            +
                  conf = JSON.parse conf_file
         | 
| 360 | 
            +
                  if (base_path == nil)
         | 
| 361 | 
            +
                    conf = conf[environment.downcase]
         | 
| 362 | 
            +
                  end
         | 
| 363 | 
            +
             | 
| 364 | 
            +
                  if (conf["apolloConfigBaseUrl"] == nil)
         | 
| 365 | 
            +
                    puts "Required configurations are missing"
         | 
| 366 | 
            +
                    raise "Required configurations are missing"
         | 
| 367 | 
            +
                    return nil
         | 
| 368 | 
            +
                  end
         | 
| 369 | 
            +
             | 
| 370 | 
            +
                  @environment = environment
         | 
| 371 | 
            +
                  @base_folder_path = "./Templates"
         | 
| 372 | 
            +
                  @templated_data_file_path = "./scripts/commonData/generatedTemplatedData.json"
         | 
| 373 | 
            +
                  @env_data_file_path = conf["env_data_file_path"]
         | 
| 374 | 
            +
                  @apollo_config_base_url = conf["apolloConfigBaseUrl"]
         | 
| 375 | 
            +
                  @resources_file_path = "./Resources"
         | 
| 376 | 
            +
                  @post_insert_templates_url = conf["omsBaseUrl"] + conf["postInsertTemplatesUrl"]
         | 
| 377 | 
            +
                  @post_update_templates_url = conf["omsBaseUrl"] + conf["postUpdateTemplatesUrl"]
         | 
| 378 | 
            +
                  @get_templates_for_view_url = conf["omsBaseUrl"] + conf["getTemplatesForViewUrl"]
         | 
| 379 | 
            +
                  @post_upsert_template_mappings_url = conf["omsBaseUrl"] + conf["postUpsertTemplateMappingsUrl"]
         | 
| 380 | 
            +
                  @get_template_group_details_url = conf["omsBaseUrl"] + conf["getTemplateGroupDetailsUrl"]
         | 
| 381 | 
            +
                  @post_update_template_group_url = conf["omsBaseUrl"] + conf["postUpdateTemplateGroupUrl"]
         | 
| 382 | 
            +
                  @post_insert_template_group_url = conf["omsBaseUrl"] + conf["postInsertTemplateGroupUrl"]
         | 
| 383 | 
            +
             | 
| 384 | 
            +
                end
         | 
| 385 | 
            +
              end
         | 
| 386 | 
            +
             | 
| 387 | 
            +
              def get_stringified_value(str)
         | 
| 388 | 
            +
                if str == nil
         | 
| 389 | 
            +
                  return ""
         | 
| 390 | 
            +
                end
         | 
| 391 | 
            +
                return str
         | 
| 392 | 
            +
              end
         | 
| 393 | 
            +
              def data_template_file_path_for_template(template_group, lang, view_type, template_name)
         | 
| 394 | 
            +
                "#{@base_folder_path}/#{template_group}/#{lang}/#{view_type}/#{template_name}/dataTemplate.json"
         | 
| 395 | 
            +
              end
         | 
| 396 | 
            +
             | 
| 397 | 
            +
              def presentation_file_path_for_template(template_group, lang, view_type, template_name)
         | 
| 398 | 
            +
                "#{@base_folder_path}/#{template_group}/#{lang}/#{view_type}/#{template_name}/presentation.json"
         | 
| 399 | 
            +
              end
         | 
| 400 | 
            +
             | 
| 401 | 
            +
              def default_content_file_path_for_template(template_group, lang, view_type, template_name)
         | 
| 402 | 
            +
                "#{@base_folder_path}/#{template_group}/#{lang}/#{view_type}/#{template_name}/defaultContent.json"
         | 
| 403 | 
            +
              end
         | 
| 404 | 
            +
             | 
| 405 | 
            +
              def template_name_dir_path_for_template(template_group, language, view_type, template_name)
         | 
| 406 | 
            +
                "#{@base_folder_path}/#{template_group}/#{language}/#{view_type}/#{template_name}"
         | 
| 407 | 
            +
              end
         | 
| 408 | 
            +
             | 
| 409 | 
            +
              def view_type_dir_path_for_template(template_group, language, view_type)
         | 
| 410 | 
            +
                "#{@base_folder_path}/#{template_group}/#{language}/#{view_type}"
         | 
| 411 | 
            +
              end
         | 
| 412 | 
            +
             | 
| 413 | 
            +
              def view_type_dir_path_for_template_with_version(template_group, language, view_type, version)
         | 
| 414 | 
            +
                "#{@base_folder_path}/#{template_group}/#{language}/#{view_type}/#{version}"
         | 
| 415 | 
            +
              end
         | 
| 416 | 
            +
             | 
| 417 | 
            +
              def language_dir_path_for_template(template_group, language)
         | 
| 418 | 
            +
                "#{@base_folder_path}/#{template_group}/#{language}"
         | 
| 419 | 
            +
              end
         | 
| 420 | 
            +
             | 
| 421 | 
            +
              def transfomer_file_path_for_template(template_group)
         | 
| 422 | 
            +
                "#{@base_folder_path}/#{template_group}/transformer.js"
         | 
| 423 | 
            +
              end
         | 
| 424 | 
            +
             | 
| 425 | 
            +
              def client_transfomer_file_path_for_template(template_group)
         | 
| 426 | 
            +
                "#{@base_folder_path}/#{template_group}/clientTransformer.js"
         | 
| 427 | 
            +
              end
         | 
| 428 | 
            +
             | 
| 429 | 
            +
              def template_group_details_file_path_for_template(template_group)
         | 
| 430 | 
            +
                "#{@base_folder_path}/#{template_group}/templateGroupDetails.json"
         | 
| 431 | 
            +
              end
         | 
| 432 | 
            +
             | 
| 433 | 
            +
              def template_group_dir_path_for_template(template_group)
         | 
| 434 | 
            +
                "#{@base_folder_path}/#{template_group}"
         | 
| 435 | 
            +
              end
         | 
| 436 | 
            +
             | 
| 437 | 
            +
              def language_file_path_for_template(language)
         | 
| 438 | 
            +
                "#{@resources_file_path}/#{language}.json"
         | 
| 439 | 
            +
              end
         | 
| 440 | 
            +
             | 
| 441 | 
            +
              def env_file_path(tenant_id, project_id)
         | 
| 442 | 
            +
                if file_exists?("./environments/#{@environment}.json")
         | 
| 443 | 
            +
                  "./environments/#{@environment}.json"
         | 
| 444 | 
            +
                elsif file_exists?("./environments/#{@environment}/env_#{tenant_id}_#{project_id}.json")
         | 
| 445 | 
            +
                  "./environments/#{@environment}/env_#{tenant_id}_#{project_id}.json"
         | 
| 446 | 
            +
                else
         | 
| 447 | 
            +
                  "#{@env_data_file_path}"
         | 
| 448 | 
            +
                end
         | 
| 449 | 
            +
              end
         | 
| 450 | 
            +
             | 
| 451 | 
            +
            end
         | 
| 452 | 
            +
             | 
| 453 | 
            +
            def directory_exists?(directory)
         | 
| 454 | 
            +
              File.directory?(directory)
         | 
| 455 | 
            +
            end
         | 
| 456 | 
            +
             | 
| 457 | 
            +
            def file_exists?(file_name)
         | 
| 458 | 
            +
              File.file?(file_name)
         | 
| 459 | 
            +
            end
         | 
| 460 | 
            +
             | 
| 461 | 
            +
            def invoke_API(environment, url, type, query_params = nil, body = nil, authToken = nil)
         | 
| 462 | 
            +
              secretConfig = SecretConfig.new(environment);
         | 
| 463 | 
            +
              query_params = query_params == nil ? {} : query_params
         | 
| 464 | 
            +
              if type == HTTP::GET
         | 
| 465 | 
            +
                code, response = make_GET_request(url, authToken == nil ? secretConfig.authToken : authToken, query_params, true)
         | 
| 466 | 
            +
              elsif type == HTTP::POST
         | 
| 467 | 
            +
                response = make_POST_request(url, body, authToken == nil ? secretConfig.authToken : authToken, query_params, true)
         | 
| 468 | 
            +
              elsif type == HTTP::DELETE
         | 
| 469 | 
            +
                response = make_DELETE_request(url, body, authToken == nil ? secretConfig.authToken : authToken, query_params, true)
         | 
| 470 | 
            +
              end
         | 
| 471 | 
            +
              if response
         | 
| 472 | 
            +
                JSON.parse response
         | 
| 473 | 
            +
              end
         | 
| 474 | 
            +
            end
         | 
| 475 | 
            +
             | 
| 476 | 
            +
            def make_collection_POST_request (url, body, authToken, query_params = nil)
         | 
| 477 | 
            +
              uri = URI.parse(url)
         | 
| 478 | 
            +
              uri.query = URI.encode_www_form(query_params) if query_params != nil
         | 
| 479 | 
            +
             | 
| 480 | 
            +
              http = Net::HTTP.new(uri.host, uri.port)
         | 
| 481 | 
            +
              http.use_ssl = true
         | 
| 482 | 
            +
              request = Net::HTTP::Post.new(uri.request_uri,
         | 
| 483 | 
            +
                initheader = {'Content-Type' =>'application/json', 'X-Zeta-AuthToken' => authToken})
         | 
| 484 | 
            +
              request.body = body
         | 
| 485 | 
            +
             | 
| 486 | 
            +
              puts "#{uri}\n\n"
         | 
| 487 | 
            +
              puts "#{request.body}\n\n"
         | 
| 488 | 
            +
              http.request(request).body
         | 
| 489 | 
            +
            end
         | 
| 490 | 
            +
             | 
| 491 | 
            +
            def make_collection_GET_request (url, query_params = nil)
         | 
| 492 | 
            +
              uri = URI(url)
         | 
| 493 | 
            +
              uri.query = URI.encode_www_form(query_params) if query_params != nil
         | 
| 494 | 
            +
             | 
| 495 | 
            +
              response = Net::HTTP.get_response(uri)
         | 
| 496 | 
            +
              if response.is_a?(Net::HTTPSuccess)
         | 
| 497 | 
            +
                utf8_encoded = response.body.force_encoding("UTF-8")
         | 
| 498 | 
            +
                JSON.parse utf8_encoded
         | 
| 499 | 
            +
              else
         | 
| 500 | 
            +
                puts "Error occured while loading #{url}\nquery_params: #{query_params}
         | 
| 501 | 
            +
                Error: #{response.inspect}, #{response.body}"
         | 
| 502 | 
            +
              end
         | 
| 503 | 
            +
            end
         | 
| 504 | 
            +
             | 
| 505 | 
            +
            def write_data_to_file(file_path, data)
         | 
| 506 | 
            +
              out_file = File.new(file_path, "w")
         | 
| 507 | 
            +
              out_file.truncate(0)
         | 
| 508 | 
            +
              out_file.puts JSON.pretty_generate data
         | 
| 509 | 
            +
              out_file.close
         | 
| 510 | 
            +
            end
         | 
| 511 | 
            +
             | 
| 512 | 
            +
            def write_templated_data_to_file(configuration, collection_data)
         | 
| 513 | 
            +
              out_file = File.new(configuration.templated_data_file_path, "w")
         | 
| 514 | 
            +
              out_file.puts JSON.pretty_generate collection_data
         | 
| 515 | 
            +
              out_file.close
         | 
| 516 | 
            +
            end
         | 
| 517 | 
            +
             | 
| 518 | 
            +
            def file_of_name_in_dir_path(dir_path, file_name)
         | 
| 519 | 
            +
              file_path = ""
         | 
| 520 | 
            +
              begin
         | 
| 521 | 
            +
                file_path = Dir.entries(dir_path).select {
         | 
| 522 | 
            +
                  |entry| entry.include? file_name
         | 
| 523 | 
            +
                }.first
         | 
| 524 | 
            +
                if !(file_path == nil)
         | 
| 525 | 
            +
                  file_path = File.join(dir_path,file_path)
         | 
| 526 | 
            +
                end
         | 
| 527 | 
            +
              rescue Exception => e
         | 
| 528 | 
            +
                puts "ERROR: file_of_name_in_dir_path #{dir_path} #{file_name} #{e}"
         | 
| 529 | 
            +
              end
         | 
| 530 | 
            +
              return file_path
         | 
| 531 | 
            +
            end
         | 
| 532 | 
            +
             | 
| 533 | 
            +
            def read_data_from_file_of_name_in_dir_path(dir_path, file_name)
         | 
| 534 | 
            +
              file_data = {}
         | 
| 535 | 
            +
              begin
         | 
| 536 | 
            +
                file_path = Dir.entries(dir_path).select {
         | 
| 537 | 
            +
                  |entry| entry.include? file_name
         | 
| 538 | 
            +
                }.first
         | 
| 539 | 
            +
                file_path = File.join(dir_path,file_path)
         | 
| 540 | 
            +
                file_data = File.read(file_path)
         | 
| 541 | 
            +
              rescue Exception => e
         | 
| 542 | 
            +
                puts "Reading from #{file_path} failed with error: #{e}"
         | 
| 543 | 
            +
              end
         | 
| 544 | 
            +
              return file_data
         | 
| 545 | 
            +
            end
         | 
| 546 | 
            +
             | 
| 547 | 
            +
            def read_data_from_file_path(file_path)
         | 
| 548 | 
            +
              file_data = {}
         | 
| 549 | 
            +
              begin
         | 
| 550 | 
            +
                if (file_exists?(file_path))
         | 
| 551 | 
            +
                  in_file = File.read(file_path)
         | 
| 552 | 
            +
                  return if in_file == nil
         | 
| 553 | 
            +
                  file_data = in_file
         | 
| 554 | 
            +
                else
         | 
| 555 | 
            +
                  file_data = {}
         | 
| 556 | 
            +
                end
         | 
| 557 | 
            +
              rescue Exception => e
         | 
| 558 | 
            +
                puts "Reading from #{file_path} failed with error: #{e}"
         | 
| 559 | 
            +
                file_data = {}
         | 
| 560 | 
            +
              end
         | 
| 561 | 
            +
              return file_data
         | 
| 562 | 
            +
            end
         | 
| 563 | 
            +
             | 
| 564 | 
            +
            def read_plain_text_data_from_file_path(file_path)
         | 
| 565 | 
            +
              file_data = ""
         | 
| 566 | 
            +
              begin
         | 
| 567 | 
            +
                if (file_exists?(file_path))
         | 
| 568 | 
            +
                  in_file = File.read(file_path)
         | 
| 569 | 
            +
                  return if in_file == nil
         | 
| 570 | 
            +
                  file_data = in_file
         | 
| 571 | 
            +
                end
         | 
| 572 | 
            +
              rescue Exception => e
         | 
| 573 | 
            +
                puts "Reading from #{file_path} failed with error: #{e}"
         | 
| 574 | 
            +
              end
         | 
| 575 | 
            +
              return file_data
         | 
| 576 | 
            +
            end
         | 
| 577 | 
            +
             | 
| 578 | 
            +
            def read_res_data_from_file_path(file_path)
         | 
| 579 | 
            +
              file_data = {}
         | 
| 580 | 
            +
              if (!file_exists?(file_path))
         | 
| 581 | 
            +
                file_path = "./Resources/EN.json"
         | 
| 582 | 
            +
              end
         | 
| 583 | 
            +
              file_data = read_data_from_file_path(file_path)
         | 
| 584 | 
            +
              return file_data
         | 
| 585 | 
            +
            end
         | 
| 586 | 
            +
             | 
| 587 | 
            +
            def setup_appID_uiview_template_group_directory(template_group, appID)
         | 
| 588 | 
            +
              base_path = TemplateConfig.template_group_parent_directory_path_for_appID(template_group, appID)
         | 
| 589 | 
            +
              contents_path = TemplateConfig.template_group_contents_path_for_appID(template_group, appID)
         | 
| 590 | 
            +
              if (directory_exists?(base_path))
         | 
| 591 | 
            +
                puts "Template parent directory for appID: #{appID} already exists at path: #{base_path}"
         | 
| 592 | 
            +
              else
         | 
| 593 | 
            +
                Dir.mkdir base_path
         | 
| 594 | 
            +
              end
         | 
| 595 | 
            +
             | 
| 596 | 
            +
              if (directory_exists?(contents_path))
         | 
| 597 | 
            +
                puts "Template contents directory for appID: #{appID} already exists at path: #{contents_path}"
         | 
| 598 | 
            +
              else
         | 
| 599 | 
            +
                Dir.mkdir contents_path
         | 
| 600 | 
            +
              end
         | 
| 601 | 
            +
            end
         | 
| 602 | 
            +
             | 
| 603 | 
            +
            def print_separator()
         | 
| 604 | 
            +
              puts "------------------------------------------------------------------------------------------------".green
         | 
| 605 | 
            +
            end
         | 
| 606 | 
            +
             | 
| 607 | 
            +
            def print_header(message)
         | 
| 608 | 
            +
              print_separator()
         | 
| 609 | 
            +
              puts message.bold.magenta
         | 
| 610 | 
            +
              print_separator()
         | 
| 611 | 
            +
            end
         | 
| 612 | 
            +
             | 
| 613 | 
            +
            def log_error(message)
         | 
| 614 | 
            +
              puts "ERROR: #{message}".bold.red
         | 
| 615 | 
            +
            end
         | 
| 616 | 
            +
             | 
| 617 | 
            +
            def log_info(message)
         | 
| 618 | 
            +
              puts "INFO: #{message}".bold
         | 
| 619 | 
            +
            end
         | 
| 620 | 
            +
             | 
| 621 | 
            +
            def read_new_app_template_groups_from_config()
         | 
| 622 | 
            +
              new_app_template_groups = Array.new
         | 
| 623 | 
            +
              file_path = "new_app_template_groups.json"
         | 
| 624 | 
            +
             | 
| 625 | 
            +
              begin
         | 
| 626 | 
            +
                new_app_templates_config = read_raw_json_data_from_file_path(file_path)
         | 
| 627 | 
            +
                if new_app_templates_config["templateGroups"].is_a?(Array)
         | 
| 628 | 
            +
                  new_app_template_groups = new_app_templates_config["templateGroups"]
         | 
| 629 | 
            +
                else
         | 
| 630 | 
            +
                  throw "templateGroups inside config is not an array"
         | 
| 631 | 
            +
                end
         | 
| 632 | 
            +
              rescue Exception => e
         | 
| 633 | 
            +
                log_error("Failed to read new_app_template_groups_config with error: #{e}")
         | 
| 634 | 
            +
              end
         | 
| 635 | 
            +
              return new_app_template_groups
         | 
| 636 | 
            +
            end
         | 
| 637 | 
            +
             | 
| 638 | 
            +
            def read_raw_json_data_from_file_path(file_path)
         | 
| 639 | 
            +
              data = Hash.new
         | 
| 640 | 
            +
              begin
         | 
| 641 | 
            +
                if(file_exists?(file_path))
         | 
| 642 | 
            +
                  in_file = File.read(file_path)
         | 
| 643 | 
            +
                  if in_file != nil
         | 
| 644 | 
            +
                    data = JSON.parse(in_file)
         | 
| 645 | 
            +
                  else
         | 
| 646 | 
            +
                    throw "Contents are nil"
         | 
| 647 | 
            +
                  end
         | 
| 648 | 
            +
                end
         | 
| 649 | 
            +
              rescue Exception => e
         | 
| 650 | 
            +
                log_error("Failed to read contents of file at path [#{file_path}]with error: #{e}")
         | 
| 651 | 
            +
              end
         | 
| 652 | 
            +
              return data
         | 
| 653 | 
            +
            end
         | 
| 654 | 
            +
             | 
| 655 | 
            +
            def read_json_data_from_file_path(file_path)
         | 
| 656 | 
            +
              file_data = {}
         | 
| 657 | 
            +
              begin
         | 
| 658 | 
            +
                if (file_exists?(file_path))
         | 
| 659 | 
            +
                  in_file = File.read(file_path)
         | 
| 660 | 
            +
                  return if in_file == nil
         | 
| 661 | 
            +
                  data = JSON.parse(in_file)
         | 
| 662 | 
            +
                  data = data.to_json
         | 
| 663 | 
            +
                  file_data = data
         | 
| 664 | 
            +
                else
         | 
| 665 | 
            +
                  file_data = {}
         | 
| 666 | 
            +
                end
         | 
| 667 | 
            +
              rescue Exception => e
         | 
| 668 | 
            +
                puts "Reading from #{file_path} failed with error: #{e}"
         | 
| 669 | 
            +
                file_data = {}
         | 
| 670 | 
            +
              end
         | 
| 671 | 
            +
              return file_data
         | 
| 672 | 
            +
            end
         | 
| 673 | 
            +
             | 
| 674 | 
            +
            def print_separator_line()
         | 
| 675 | 
            +
              puts "--------------------------------------------------------------------------------------------------------------------------------------"
         | 
| 676 | 
            +
            end
         | 
| 677 | 
            +
             | 
| 678 | 
            +
            def does_templated_data_has_payment_instrument_as_states(templated_data, activePaymentInstrumentID, os)
         | 
| 679 | 
            +
              if os == "android"
         | 
| 680 | 
            +
                outer_states = templated_data["states"]
         | 
| 681 | 
            +
                if outer_states
         | 
| 682 | 
            +
                  if !outer_states.empty?
         | 
| 683 | 
            +
                    inner_states = outer_states["states"]
         | 
| 684 | 
            +
                    if !inner_states.empty?
         | 
| 685 | 
            +
                      keys = inner_states.keys
         | 
| 686 | 
            +
                      return keys.include? activePaymentInstrumentID
         | 
| 687 | 
            +
                    end
         | 
| 688 | 
            +
                  end
         | 
| 689 | 
            +
                end
         | 
| 690 | 
            +
              end
         | 
| 691 | 
            +
              if os == "ios"
         | 
| 692 | 
            +
                outer_states = templated_data["states"]
         | 
| 693 | 
            +
                keys = outer_states.keys
         | 
| 694 | 
            +
                return keys.include? activePaymentInstrumentID
         | 
| 695 | 
            +
              end
         | 
| 696 | 
            +
            end
         | 
| 697 | 
            +
             | 
| 698 | 
            +
            def directory_list(dir_path)
         | 
| 699 | 
            +
              dirNames = []
         | 
| 700 | 
            +
              Dir.entries(dir_path).select {
         | 
| 701 | 
            +
                |entry| File.directory? File.join(dir_path,entry) and !(entry =='.' || entry == '..')
         | 
| 702 | 
            +
              }.each do |item|
         | 
| 703 | 
            +
                dirNames.push(item)
         | 
| 704 | 
            +
              end
         | 
| 705 | 
            +
              return dirNames
         | 
| 706 | 
            +
            end
         | 
| 707 | 
            +
             | 
| 708 | 
            +
            def all_directory_and_sub_directory_with_character_not_in_dir_path(dir_path, character)
         | 
| 709 | 
            +
              dirNames = Hash.new
         | 
| 710 | 
            +
              Dir.entries(dir_path).select {
         | 
| 711 | 
            +
                |entry| File.directory? File.join(dir_path,entry) and !(entry =='.' || entry == '..')
         | 
| 712 | 
            +
              }.each do |item|
         | 
| 713 | 
            +
                indexOfCharacter = item.index(character)
         | 
| 714 | 
            +
                indexOfTemplater = item.index("{{")
         | 
| 715 | 
            +
                if indexOfCharacter and indexOfCharacter >= 0 and (!indexOfTemplater || indexOfCharacter < indexOfTemplater)
         | 
| 716 | 
            +
                  dirNames = dirNames.merge(all_directory_and_sub_directory_with_character_not_in_dir_path(File.join(dir_path,item), character))
         | 
| 717 | 
            +
                else
         | 
| 718 | 
            +
                  dirNames[item] = File.join(dir_path,item)
         | 
| 719 | 
            +
                end
         | 
| 720 | 
            +
              end
         | 
| 721 | 
            +
              return dirNames
         | 
| 722 | 
            +
            end
         | 
| 723 | 
            +
             | 
| 724 | 
            +
            def all_directory_and_sub_directory_in_dir_path(dir_path)
         | 
| 725 | 
            +
              dirNames = Hash.new
         | 
| 726 | 
            +
              Dir.entries(dir_path).select {
         | 
| 727 | 
            +
                |entry| File.directory? File.join(dir_path,entry) and !(entry =='.' || entry == '..')
         | 
| 728 | 
            +
              }.each do |item|
         | 
| 729 | 
            +
                dir_path_of_item = File.join(dir_path,item)
         | 
| 730 | 
            +
                dir_names_of_item = directory_list(dir_path_of_item)
         | 
| 731 | 
            +
                if dir_names_of_item.count > 0
         | 
| 732 | 
            +
                  dirNames[item] = File.join(dir_path,item)
         | 
| 733 | 
            +
                  dirNames = dirNames.merge(all_directory_and_sub_directory_in_dir_path(dir_path_of_item))
         | 
| 734 | 
            +
                else
         | 
| 735 | 
            +
                  dirNames[item] = File.join(dir_path,item)
         | 
| 736 | 
            +
                end
         | 
| 737 | 
            +
              end
         | 
| 738 | 
            +
              return dirNames
         | 
| 739 | 
            +
            end
         | 
| 740 | 
            +
             | 
| 741 | 
            +
            def template_mapping_in_dir_path_file_path_with_character(dir_path, file_path, character)
         | 
| 742 | 
            +
              dir_path += "/"
         | 
| 743 | 
            +
              file_path.slice! dir_path
         | 
| 744 | 
            +
              mapping_components = file_path.split('/')
         | 
| 745 | 
            +
              template_mapping = "";
         | 
| 746 | 
            +
              mapping_components.each do |item|
         | 
| 747 | 
            +
                if item == "default"
         | 
| 748 | 
            +
                  template_mapping = "*"
         | 
| 749 | 
            +
                else
         | 
| 750 | 
            +
                  length = item.length
         | 
| 751 | 
            +
                  indexOfCharacter = item.index(character)
         | 
| 752 | 
            +
                  indexOfTemplater = item.index("{{")
         | 
| 753 | 
            +
                  if indexOfCharacter and indexOfCharacter >= 0 and (!indexOfTemplater || indexOfCharacter < indexOfTemplater)
         | 
| 754 | 
            +
                    item_component = item.slice!(indexOfCharacter+1..length-1)
         | 
| 755 | 
            +
                    if template_mapping.empty?
         | 
| 756 | 
            +
                      mapping = item_component
         | 
| 757 | 
            +
                    else
         | 
| 758 | 
            +
                      mapping = "_" + item_component
         | 
| 759 | 
            +
                    end
         | 
| 760 | 
            +
                    template_mapping += mapping
         | 
| 761 | 
            +
                  end
         | 
| 762 | 
            +
                end
         | 
| 763 | 
            +
              end
         | 
| 764 | 
            +
              return template_mapping
         | 
| 765 | 
            +
            end
         | 
| 766 | 
            +
             | 
| 767 | 
            +
            def get_presentation_after_conversion_if_neeeded(apolloConfigBaseUrl, environment, template_path)
         | 
| 768 | 
            +
              begin
         | 
| 769 | 
            +
                #Parsing Presentation
         | 
| 770 | 
            +
                presentation_file_path = file_of_name_in_dir_path(template_path,"presentation")
         | 
| 771 | 
            +
                puts "presentation_file_path #{presentation_file_path}"
         | 
| 772 | 
            +
                presentation = read_data_from_file_path(presentation_file_path)
         | 
| 773 | 
            +
             | 
| 774 | 
            +
                #template should fail if presentation file is not present at all
         | 
| 775 | 
            +
                if presentation_file_path == nil
         | 
| 776 | 
            +
                  raise "ERROR: Presentation file not found at path: #{presentation_file_path}"
         | 
| 777 | 
            +
                end
         | 
| 778 | 
            +
             | 
| 779 | 
            +
                if presentation_file_path.end_with? ".json"
         | 
| 780 | 
            +
                  #if presentation file is json, then enforce proper json
         | 
| 781 | 
            +
                  if !JSON.is_valid_json?(presentation)
         | 
| 782 | 
            +
                    raise "ERROR: Presentation is not a valid JSON"
         | 
| 783 | 
            +
                  end
         | 
| 784 | 
            +
                  presentation = JSON.parse(presentation, :quirks_mode => true).to_json
         | 
| 785 | 
            +
                  return presentation
         | 
| 786 | 
            +
                elsif presentation_file_path.end_with? ".xml"
         | 
| 787 | 
            +
                  presentation = presentation.newline
         | 
| 788 | 
            +
                  puts "converting presentation xml #{presentation}"
         | 
| 789 | 
            +
                  json_presentation_string = convert_xml_presentation_to_json(environment, apolloConfigBaseUrl, presentation)
         | 
| 790 | 
            +
                  puts "converted presentation to json #{json_presentation_string}"
         | 
| 791 | 
            +
                  return json_presentation_string
         | 
| 792 | 
            +
                end
         | 
| 793 | 
            +
              rescue Exception => e
         | 
| 794 | 
            +
                puts "ERROR: Template loading from #{template_path} failed with error: #{e}"
         | 
| 795 | 
            +
              end
         | 
| 796 | 
            +
            end
         | 
| 797 | 
            +
             | 
| 798 | 
            +
            def convert_xml_presentation_to_json(environment, apolloConfigBaseUrl, presentation)
         | 
| 799 | 
            +
              request_payload = ConvertPresentationPayload.new(presentation, "XML", "JSON")
         | 
| 800 | 
            +
              endpoint = "#{apolloConfigBaseUrl}/1.0/presentation/convert"
         | 
| 801 | 
            +
              converted_presentation = invoke_API(environment, endpoint, HTTP::POST, nil, request_payload.to_json)
         | 
| 802 | 
            +
              return converted_presentation["presentation"].unesc
         | 
| 803 | 
            +
            end
         | 
| 804 | 
            +
             | 
| 805 | 
            +
            module ApolloCommonsRuby
         | 
| 806 | 
            +
              class Error < StandardError; end
         | 
| 807 | 
            +
              # Your code goes here...
         | 
| 808 | 
            +
            end
         |