framework_gem 0.1.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/lib/EXECUTION_ENGINE.md +282 -0
- data/lib/Gemfile +12 -0
- data/lib/README.md +138 -0
- data/lib/User_Lib/helpers/helpers.rb +13 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_black_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_color_rois.rb +9 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_image_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_text_rois.rb +48 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_video_rois.rb +11 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_black_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_color_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_image_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_rois.rb +23 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_text_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_video_rois.rb +11 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_black_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_color_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_image_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_rois.rb +23 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_text_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_video_rois.rb +7 -0
- data/lib/User_Lib/rois/black_rois.rb +33 -0
- data/lib/User_Lib/rois/color_rois.rb +38 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_black_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_color_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_image_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_rois.rb +26 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_text_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_video_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_black_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_color_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_image_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_rois.rb +26 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_text_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_video_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_black_rois.rb +9 -0
- data/lib/User_Lib/rois/dta/dta_color_rois.rb +9 -0
- data/lib/User_Lib/rois/dta/dta_image_rois.rb +9 -0
- data/lib/User_Lib/rois/dta/dta_rois.rb +26 -0
- data/lib/User_Lib/rois/dta/dta_text_rois.rb +9 -0
- data/lib/User_Lib/rois/dta/dta_video_rois.rb +9 -0
- data/lib/User_Lib/rois/image_rois.rb +38 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_rois.rb +26 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_rois.rb +26 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_black_rois.rb +9 -0
- data/lib/User_Lib/rois/mdn/mdn_color_rois.rb +9 -0
- data/lib/User_Lib/rois/mdn/mdn_image_rois.rb +9 -0
- data/lib/User_Lib/rois/mdn/mdn_rois.rb +26 -0
- data/lib/User_Lib/rois/mdn/mdn_text_rois.rb +13 -0
- data/lib/User_Lib/rois/mdn/mdn_video_rois.rb +9 -0
- data/lib/User_Lib/rois/mobile/android/android_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_image_rois.rb +43 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_image_rois.rb +54 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/mobile_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/mobile_color_rois.rb +12 -0
- data/lib/User_Lib/rois/mobile/mobile_image_rois.rb +38 -0
- data/lib/User_Lib/rois/mobile/mobile_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/mobile_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/mobile_video_rois.rb +8 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_black_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_color_rois.rb +9 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_image_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_text_rois.rb +8 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_video_rois.rb +8 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_black_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_color_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_image_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_rois.rb +23 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_text_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_video_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_black_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_color_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_image_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_rois.rb +23 -0
- data/lib/User_Lib/rois/passport/passport_text_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_video_rois.rb +7 -0
- data/lib/User_Lib/rois/rois.rb +22 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_black_rois.rb +37 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_color_rois.rb +336 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_image_rois.rb +235 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_rois.rb +23 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_text_rois.rb +1523 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_video_rois.rb +32 -0
- data/lib/User_Lib/rois/roku/roku_black_rois.rb +14 -0
- data/lib/User_Lib/rois/roku/roku_color_rois.rb +9 -0
- data/lib/User_Lib/rois/roku/roku_image_rois.rb +13 -0
- data/lib/User_Lib/rois/roku/roku_rois.rb +23 -0
- data/lib/User_Lib/rois/roku/roku_text_rois.rb +9 -0
- data/lib/User_Lib/rois/roku/roku_video_rois.rb +9 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_black_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_color_rois.rb +11 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_image_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_text_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_video_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_black_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_color_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_image_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_rois.rb +23 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_text_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_video_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_black_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_color_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_image_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_rois.rb +23 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_text_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_video_rois.rb +12 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_black_rois.rb +13 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_color_rois.rb +29 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_image_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_text_rois.rb +92 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_video_rois.rb +11 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_black_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_color_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_image_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_rois.rb +23 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_text_rois.rb +12 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_video_rois.rb +11 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_black_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_color_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_image_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_rois.rb +23 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_text_rois.rb +12 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_video_rois.rb +9 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_black_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_color_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_image_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_rois.rb +26 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_text_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_video_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_black_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_color_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_image_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_rois.rb +26 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_text_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_video_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_black_rois.rb +9 -0
- data/lib/User_Lib/rois/sara/sara_color_rois.rb +9 -0
- data/lib/User_Lib/rois/sara/sara_image_rois.rb +9 -0
- data/lib/User_Lib/rois/sara/sara_rois.rb +26 -0
- data/lib/User_Lib/rois/sara/sara_text_rois.rb +9 -0
- data/lib/User_Lib/rois/sara/sara_video_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_black_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_color_rois.rb +17 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_image_rois.rb +19 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_text_rois.rb +47 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_video_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_black_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_color_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_image_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_text_rois.rb +17 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_video_rois.rb +11 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_black_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_color_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_image_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_text_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_video_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_image_rois.rb +12 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_text_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_video_rois.rb +11 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_black_rois.rb +46 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_color_rois.rb +142 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_image_rois.rb +103 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_black_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_color_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_image_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_text_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_video_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_black_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_color_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_image_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_text_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_video_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_black_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_color_rois.rb +77 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_image_rois.rb +67 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_text_rois.rb +159 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_video_rois.rb +17 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_text_rois.rb +221 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_video_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/odn/odn_black_rois.rb +10 -0
- data/lib/User_Lib/rois/stb/odn/odn_color_rois.rb +10 -0
- data/lib/User_Lib/rois/stb/odn/odn_image_rois.rb +58 -0
- data/lib/User_Lib/rois/stb/odn/odn_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_text_rois.rb +70 -0
- data/lib/User_Lib/rois/stb/odn/odn_video_rois.rb +19 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_black_rois.rb +16 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_color_rois.rb +373 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_black_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_color_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_image_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_text_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_video_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_image_rois.rb +1592 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_black_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_color_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_image_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_text_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_video_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_text_rois.rb +2489 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_video_rois.rb +64 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_black_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_color_rois.rb +63 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_image_rois.rb +117 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_text_rois.rb +84 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_video_rois.rb +35 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_black_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_color_rois.rb +17 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_image_rois.rb +49 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_text_rois.rb +51 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_video_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/stb_black_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/stb_color_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/stb_image_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/stb_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/stb_text_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/stb_video_rois.rb +9 -0
- data/lib/User_Lib/rois/template.txt +23 -0
- data/lib/User_Lib/rois/text_rois.rb +36 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_black_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_color_rois.rb +9 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_image_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_text_rois.rb +9 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_video_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_black_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_color_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_image_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_rois.rb +23 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_text_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_video_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_black_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_color_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_image_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_rois.rb +23 -0
- data/lib/User_Lib/rois/tivo/tivo_text_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_video_rois.rb +7 -0
- data/lib/User_Lib/rois/video_rois.rb +33 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_dvr.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_guide.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_library.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_live_tv.rb +17 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_login.rb +24 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_main_menu.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_mini_guide.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_movies.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_on_demand.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_parental_controls.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_product_page.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_screen.rb +23 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_search.rb +31 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_settings.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_tv_shows.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_video_store.rb +25 -0
- data/lib/User_Lib/screen/dta/dta_dvr.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_guide.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_library.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_live_tv.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_log_in.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_main_menu.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_mini_guide.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_movies.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_on_demand.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_parental_controls.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_product_page.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_screen.rb +24 -0
- data/lib/User_Lib/screen/dta/dta_search.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_settings.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_tv_shows.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_video_store.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_dvr.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_guide.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_library.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_live_tv.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_log_in.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_main_menu.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_mini_guide.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_movies.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_on_demand.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_parental_controls.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_product_page.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_screen.rb +24 -0
- data/lib/User_Lib/screen/mdn/mdn_search.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_settings.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_tv_shows.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_video_store.rb +26 -0
- data/lib/User_Lib/screen/mobile/android/android_devices.rb +35 -0
- data/lib/User_Lib/screen/mobile/android/android_dvr.rb +337 -0
- data/lib/User_Lib/screen/mobile/android/android_favorites.rb +164 -0
- data/lib/User_Lib/screen/mobile/android/android_guide.rb +256 -0
- data/lib/User_Lib/screen/mobile/android/android_live_tv.rb +372 -0
- data/lib/User_Lib/screen/mobile/android/android_login.rb +111 -0
- data/lib/User_Lib/screen/mobile/android/android_main_menu.rb +53 -0
- data/lib/User_Lib/screen/mobile/android/android_on_demand.rb +402 -0
- data/lib/User_Lib/screen/mobile/android/android_parental_controls.rb +73 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_dvr.rb +31 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_guide.rb +39 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_live_tv.rb +104 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_main_menu.rb +27 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_on_demand.rb +35 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_product_page.rb +7 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_search.rb +26 -0
- data/lib/User_Lib/screen/mobile/android/android_privacy_legal.rb +54 -0
- data/lib/User_Lib/screen/mobile/android/android_product_page.rb +484 -0
- data/lib/User_Lib/screen/mobile/android/android_screen.rb +56 -0
- data/lib/User_Lib/screen/mobile/android/android_search.rb +39 -0
- data/lib/User_Lib/screen/mobile/android/android_settings.rb +90 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_dvr.rb +58 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_guide.rb +24 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_live_tv.rb +24 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_main_menu.rb +19 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_on_demand.rb +16 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_product_page.rb +45 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_search.rb +14 -0
- data/lib/User_Lib/screen/mobile/devices_mobile.rb +53 -0
- data/lib/User_Lib/screen/mobile/dvr_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/favorites_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/guide_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/ios/ios_devices.rb +43 -0
- data/lib/User_Lib/screen/mobile/ios/ios_dvr.rb +231 -0
- data/lib/User_Lib/screen/mobile/ios/ios_favorites.rb +79 -0
- data/lib/User_Lib/screen/mobile/ios/ios_guide.rb +53 -0
- data/lib/User_Lib/screen/mobile/ios/ios_live_tv.rb +413 -0
- data/lib/User_Lib/screen/mobile/ios/ios_login.rb +76 -0
- data/lib/User_Lib/screen/mobile/ios/ios_main_menu.rb +38 -0
- data/lib/User_Lib/screen/mobile/ios/ios_on_demand.rb +371 -0
- data/lib/User_Lib/screen/mobile/ios/ios_parental_controls.rb +104 -0
- data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_dvr.rb +14 -0
- data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_live_tv.rb +36 -0
- data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_main_menu.rb +7 -0
- data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_on_demand.rb +7 -0
- data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_search.rb +13 -0
- data/lib/User_Lib/screen/mobile/ios/ios_privacy_legal.rb +56 -0
- data/lib/User_Lib/screen/mobile/ios/ios_product_page.rb +441 -0
- data/lib/User_Lib/screen/mobile/ios/ios_screen.rb +60 -0
- data/lib/User_Lib/screen/mobile/ios/ios_search.rb +145 -0
- data/lib/User_Lib/screen/mobile/ios/ios_settings.rb +34 -0
- data/lib/User_Lib/screen/mobile/ios/ios_tablet/ios_tablet_live_tv.rb +34 -0
- data/lib/User_Lib/screen/mobile/ios/ios_tablet/ios_tablet_main_menu.rb +7 -0
- data/lib/User_Lib/screen/mobile/ios/ios_tablet/ios_tablet_on_demand.rb +7 -0
- data/lib/User_Lib/screen/mobile/ios/ios_tablet/ios_tablet_search.rb +13 -0
- data/lib/User_Lib/screen/mobile/live_tv_mobile.rb +73 -0
- data/lib/User_Lib/screen/mobile/login_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/main_menu_mobile.rb +83 -0
- data/lib/User_Lib/screen/mobile/mobile_screen.rb +232 -0
- data/lib/User_Lib/screen/mobile/on_demand_mobile.rb +70 -0
- data/lib/User_Lib/screen/mobile/parental_controls_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/privacy_legal_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/product_page_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/search_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/settings_mobile.rb +33 -0
- data/lib/User_Lib/screen/passport/passport_dvr.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_guide.rb +37 -0
- data/lib/User_Lib/screen/passport/passport_library.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_live_tv.rb +17 -0
- data/lib/User_Lib/screen/passport/passport_main_menu.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_mini_guide.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_movies.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_on_demand.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_parental_controls.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_product_page.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_screen.rb +23 -0
- data/lib/User_Lib/screen/passport/passport_search.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_settings.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_tv_shows.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_video_store.rb +25 -0
- data/lib/User_Lib/screen/roku/brs/roku_guide_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_home_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_live_tv_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_login_brs.rb +103 -0
- data/lib/User_Lib/screen/roku/brs/roku_main_menu_brs.rb +46 -0
- data/lib/User_Lib/screen/roku/brs/roku_on_demand_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_product_page_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_screen_brs.rb +9 -0
- data/lib/User_Lib/screen/roku/brs/roku_search_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_settings_brs.rb +42 -0
- data/lib/User_Lib/screen/roku/brs/roku_watch_later_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_welcome_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/roku_dvr.rb +7 -0
- data/lib/User_Lib/screen/roku/roku_guide.rb +590 -0
- data/lib/User_Lib/screen/roku/roku_home.rb +346 -0
- data/lib/User_Lib/screen/roku/roku_library.rb +26 -0
- data/lib/User_Lib/screen/roku/roku_live_tv.rb +210 -0
- data/lib/User_Lib/screen/roku/roku_login.rb +795 -0
- data/lib/User_Lib/screen/roku/roku_main_menu.rb +425 -0
- data/lib/User_Lib/screen/roku/roku_mini_guide.rb +7 -0
- data/lib/User_Lib/screen/roku/roku_on_demand.rb +479 -0
- data/lib/User_Lib/screen/roku/roku_product_page.rb +483 -0
- data/lib/User_Lib/screen/roku/roku_screen.rb +85 -0
- data/lib/User_Lib/screen/roku/roku_search.rb +229 -0
- data/lib/User_Lib/screen/roku/roku_settings.rb +304 -0
- data/lib/User_Lib/screen/roku/roku_watch_later.rb +51 -0
- data/lib/User_Lib/screen/roku/roku_welcome.rb +10 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_dvr.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_guide.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_home.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_library.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_live_tv.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_login.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_main_menu.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_mini_guide.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_on_demand.rb +26 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_product_page.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_screen.rb +7 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_search.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_settings.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_watch_later.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_welcome.rb +14 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_dvr.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_guide.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_library.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_live_tv.rb +21 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_login.rb +13 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_main_menu.rb +64 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_mini_guide.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_movies.rb +140 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_on_demand.rb +76 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_parental_controls.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_product_page.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_screen.rb +74 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_search.rb +29 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_settings.rb +189 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_tv_shows.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_video_store.rb +24 -0
- data/lib/User_Lib/screen/sara/sara_dvr.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_guide.rb +43 -0
- data/lib/User_Lib/screen/sara/sara_library.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_live_tv.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_log_in.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_main_menu.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_mini_guide.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_movies.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_on_demand.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_parental_controls.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_product_page.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_screen.rb +24 -0
- data/lib/User_Lib/screen/sara/sara_search.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_settings.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_tv_shows.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_video_store.rb +26 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_devices.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_dvr.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_favorites.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_guide.rb +39 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_home.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_library.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_live_tv.rb +59 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_login.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_main_menu.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_mini_guide.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_movies.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_on_demand.rb +531 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_parental_controls.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_privacy_legal.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_product_page.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_quick_menu.rb +7 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_screen.rb +21 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_search.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_settings.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_tv_shows.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_video_store.rb +10 -0
- data/lib/User_Lib/screen/stb/login_stb.rb +5 -0
- data/lib/User_Lib/screen/stb/odn/odn_dvr.rb +59 -0
- data/lib/User_Lib/screen/stb/odn/odn_favorites.rb +8 -0
- data/lib/User_Lib/screen/stb/odn/odn_guide.rb +177 -0
- data/lib/User_Lib/screen/stb/odn/odn_live_tv.rb +115 -0
- data/lib/User_Lib/screen/stb/odn/odn_login.rb +8 -0
- data/lib/User_Lib/screen/stb/odn/odn_main_menu.rb +175 -0
- data/lib/User_Lib/screen/stb/odn/odn_on_demand.rb +1170 -0
- data/lib/User_Lib/screen/stb/odn/odn_on_demand_kids.rb +23 -0
- data/lib/User_Lib/screen/stb/odn/odn_on_demand_left_menu.rb +180 -0
- data/lib/User_Lib/screen/stb/odn/odn_parental_controls.rb +9 -0
- data/lib/User_Lib/screen/stb/odn/odn_product_page.rb +8 -0
- data/lib/User_Lib/screen/stb/odn/odn_screen.rb +111 -0
- data/lib/User_Lib/screen/stb/odn/odn_search.rb +167 -0
- data/lib/User_Lib/screen/stb/odn/odn_settings.rb +142 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_diagnostics.rb +27 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_docsis/screen_spectrum_docsis.rb +12 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_docsis/spectrum_1080_docsis_guide.rb +10 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_docsis/spectrum_1080_docsis_main_menu.rb +10 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_docsis/spectrum_1080_docsis_settings.rb +10 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_dvr.rb +1781 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_guide.rb +841 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_library.rb +384 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_live_tv.rb +259 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_main_menu.rb +223 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_mini_guide.rb +404 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_movies.rb +420 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_netflix.rb +37 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_on_demand.rb +2137 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_parental_controls.rb +528 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_pay_per_view.rb +26 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_product_page.rb +58 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_screen.rb +48 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_search.rb +92 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_settings.rb +1657 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_tv_shows.rb +1532 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_video_store.rb +1598 -0
- data/lib/User_Lib/screen/stb/stb_screen.rb +7 -0
- data/lib/User_Lib/screen/tivo/tivo_dvr.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_guide.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_library.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_live_tv.rb +17 -0
- data/lib/User_Lib/screen/tivo/tivo_login.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_main_menu.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_mini_guide.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_movies.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_on_demand.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_parental_controls.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_product_page.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_screen.rb +20 -0
- data/lib/User_Lib/screen/tivo/tivo_search.rb +31 -0
- data/lib/User_Lib/screen/tivo/tivo_settings.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_tv_shows.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_video_store.rb +25 -0
- data/lib/config/ConfigParams.xml +96 -0
- data/lib/config/ImageROI.xml +45 -0
- data/lib/config/ROI.xml +150 -0
- data/lib/config/Userlog4j.xml +62 -0
- data/lib/config/schema-docs/mode.xsd +12 -0
- data/lib/config/schema-docs/processTestJobs.xsd +63 -0
- data/lib/config/schema-docs/rackip.xsd +24 -0
- data/lib/copy_ref_images.rb +199 -0
- data/lib/copy_repo.rb +136 -0
- data/lib/diagnostics/conductor/conductor_checkup.tmc +24 -0
- data/lib/diagnostics/db/mad_db_check.tmc +56 -0
- data/lib/diagnostics/db/mas_db_checkup.tmc +24 -0
- data/lib/diagnostics/db/mas_db_checkup_gem.tmc +20 -0
- data/lib/diagnostics/db/mas_db_checkup_jar.tmc +50 -0
- data/lib/diagnostics/iguide/iguide_nvram_reset.tmc +23 -0
- data/lib/diagnostics/iguide/iguide_prepare_stb.tmc +33 -0
- data/lib/diagnostics/iguide/iguide_prepare_stb_and_health_check.tmc +63 -0
- data/lib/diagnostics/iguide/iguide_stb_health_check.tmc +54 -0
- data/lib/diagnostics/prepare_stb.tmc +30 -0
- data/lib/diagnostics/prepare_stb_and_health_check.tmc +56 -0
- data/lib/diagnostics/script_options/options_checkup.tmc +145 -0
- data/lib/diagnostics/server_components_check.tmc +62 -0
- data/lib/diagnostics/ssh/dncs_checkup.tmc +24 -0
- data/lib/diagnostics/ssh/mas_checkup.tmc +24 -0
- data/lib/diagnostics/stb_health_check.tmc +46 -0
- data/lib/diagnostics/stb_ip_check.tmc +120 -0
- data/lib/diagnostics/webservices/mas_rest_services_checkup.tmc +24 -0
- data/lib/diagnostics/webservices/mas_soap_services_checkup.tmc +24 -0
- data/lib/dsllib/common/dncs/dncs_utils.rb +449 -0
- data/lib/dsllib/common/mas_db/mas_conductor.rb +1328 -0
- data/lib/dsllib/common/mas_db/mas_db.rb +154 -0
- data/lib/dsllib/common/mas_db/mas_publish.rb +2349 -0
- data/lib/dsllib/common/mas_db/mas_rest_services.rb +75 -0
- data/lib/dsllib/common/mas_db/mas_soap_services.rb +540 -0
- data/lib/dsllib/common/mas_db/mas_utils.rb +422 -0
- data/lib/dsllib/common/remote_diagnostics/mdn_remote_diagnostics.rb +1335 -0
- data/lib/dsllib/common/remote_diagnostics/odn_web_server.rb +269 -0
- data/lib/dsllib/common/utils/excel_export.rb +273 -0
- data/lib/dsllib/common/utils/excel_module.rb +890 -0
- data/lib/dsllib/common/utils/server_components_utils.rb +130 -0
- data/lib/dsllib/common/utils/stb_health_check_utils.rb +92 -0
- data/lib/dsllib/common/utils/sword_utils.rb +393 -0
- data/lib/dsllib/common/utils/tmc_utils.rb +2944 -0
- data/lib/dsllib/common/utils/virtual_keyboard_navigator.rb +208 -0
- data/lib/dsllib/common/utils/virtual_keyboard_vp_navigator.rb +195 -0
- data/lib/dsllib/performance/DTA/roi.rb +214 -0
- data/lib/dsllib/performance/DTA/utils.rb +96 -0
- data/lib/dsllib/performance/iguide_concurrent_test/ROI.rb +236 -0
- data/lib/dsllib/performance/iguide_concurrent_test/utils.rb +533 -0
- data/lib/dsllib/performance/measure_tune.rb +438 -0
- data/lib/dsllib/performance/perf_lib.rb +660 -0
- data/lib/end_iteration.rb +4 -0
- data/lib/lib/data_services/channel.rb +39 -0
- data/lib/lib/data_services/data_services.rb +14 -0
- data/lib/lib/data_services/guide.rb +104 -0
- data/lib/lib/data_services/lineup.rb +114 -0
- data/lib/lib/data_services/program.rb +48 -0
- data/lib/lib/data_services/schedule.rb +18 -0
- data/lib/lib/data_services/splunk_connector.rb +135 -0
- data/lib/lib/data_services/splunk_data_reader.rb +77 -0
- data/lib/lib/element/element.rb +79 -0
- data/lib/lib/extensions/array_extensions.rb +32 -0
- data/lib/lib/extensions/datetime_extensions.rb +8 -0
- data/lib/lib/extensions/extensions.rb +51 -0
- data/lib/lib/extensions/file_extensions.rb +32 -0
- data/lib/lib/extensions/float_extensions.rb +32 -0
- data/lib/lib/extensions/integer_extensions.rb +39 -0
- data/lib/lib/extensions/nethttp_extensions.rb +11 -0
- data/lib/lib/extensions/object_extensions.rb +7 -0
- data/lib/lib/extensions/string_extensions.rb +35 -0
- data/lib/lib/helpers/tmc_helpers/csv_helper/csv_helper.rb +85 -0
- data/lib/lib/helpers/tmc_helpers/email_helper/email_helper.rb +71 -0
- data/lib/lib/helpers/tmc_helpers/http_helper/http_helper.rb +133 -0
- data/lib/lib/helpers/tmc_helpers/roi_helper/roi_helper.rb +17 -0
- data/lib/lib/helpers/tmc_helpers/snmp_helper/snmp_helper.rb +71 -0
- data/lib/lib/helpers/tmc_helpers/ssh_helper/ssh_helper.rb +337 -0
- data/lib/lib/helpers/tmc_helpers/tmc_helpers.rb +1260 -0
- data/lib/lib/keyboard/apple_tv/apple_tv_password_keyboard.rb +102 -0
- data/lib/lib/keyboard/apple_tv/apple_tv_search_keyboard.rb +103 -0
- data/lib/lib/keyboard/apple_tv/apple_tv_username_keyboard.rb +105 -0
- data/lib/lib/keyboard/keyboard.rb +504 -0
- data/lib/lib/keyboard/keyboard_layout.rb +51 -0
- data/lib/lib/keyboard/roku/roku_reset_pin_keyboard.rb +12 -0
- data/lib/lib/keyboard/roku/roku_rsg_search_keyboard.rb +67 -0
- data/lib/lib/keyboard/roku/roku_rsg_signin_keyboard.rb +106 -0
- data/lib/lib/keyboard/roku/roku_search_keyboard.rb +10 -0
- data/lib/lib/keyboard/roku/roku_signin_keyboard.rb +42 -0
- data/lib/lib/keyboard/samsung_tv/samsung_tv_search_keyboard.rb +50 -0
- data/lib/lib/keyboard/samsung_tv/samsung_tv_signin_keyboard.rb +52 -0
- data/lib/lib/keyboard/stb/odn/odn_on_demand_search_keyboard.rb +10 -0
- data/lib/lib/keyboard/stb/odn/odn_search_keyboard.rb +10 -0
- data/lib/lib/keyboard/stb/spectrum/spectrum_netflix_email_keyboard.rb +50 -0
- data/lib/lib/keyboard/stb/spectrum/spectrum_netflix_keyboard.rb +43 -0
- data/lib/lib/keyboard/stb/spectrum/spectrum_netflix_name_keyboard.rb +16 -0
- data/lib/lib/keyboard/stb/spectrum/spectrum_search_keyboard.rb +32 -0
- data/lib/lib/keyboard/tivo/tivo_password_keyboard.rb +0 -0
- data/lib/lib/keyboard/tivo/tivo_search_keyboard.rb +0 -0
- data/lib/lib/keyboard/tivo/tivo_username_keyboard.rb +0 -0
- data/lib/lib/keys/apple_tv/apple_tv_keys.rb +26 -0
- data/lib/lib/keys/base_keys.rb +14 -0
- data/lib/lib/keys/dta/dta_keys.rb +60 -0
- data/lib/lib/keys/mdn/mdn_keys.rb +60 -0
- data/lib/lib/keys/passport/passport_keys.rb +59 -0
- data/lib/lib/keys/roku/roku_keys.rb +31 -0
- data/lib/lib/keys/roku_tv/roku_tv_keys.rb +32 -0
- data/lib/lib/keys/samsung_tv/samsung_tv_keys.rb +58 -0
- data/lib/lib/keys/sara/sara_keys.rb +60 -0
- data/lib/lib/keys/stb/iguide/iguide_keys.rb +56 -0
- data/lib/lib/keys/stb/odn/odn_keys.rb +63 -0
- data/lib/lib/keys/stb/spectrum/spectrum_keys.rb +59 -0
- data/lib/lib/keys/stb/stb_keys.rb +13 -0
- data/lib/lib/keys/tivo/tivo_keys.rb +26 -0
- data/lib/lib/logger/multi_io.rb +14 -0
- data/lib/lib/logger/tmc_dut_logger.rb +251 -0
- data/lib/lib/logger/tmc_logger.rb +30 -0
- data/lib/lib/mixins/assignable.rb +19 -0
- data/lib/lib/mixins/can_have_special_methods.rb +50 -0
- data/lib/lib/mixins/enumish.rb +16 -0
- data/lib/lib/new_platform.rb +302 -0
- data/lib/lib/new_sub_platform.rb +90 -0
- data/lib/lib/platform/apple_tv/apple_tv.rb +33 -0
- data/lib/lib/platform/apple_tv/apple_tv_1080/apple_tv_1080.rb +54 -0
- data/lib/lib/platform/apple_tv/apple_tv_720/apple_tv_720.rb +14 -0
- data/lib/lib/platform/dta/dta.rb +35 -0
- data/lib/lib/platform/dta/dta_1080/dta_1080.rb +15 -0
- data/lib/lib/platform/dta/dta_720/dta_720.rb +15 -0
- data/lib/lib/platform/mdn/mdn.rb +35 -0
- data/lib/lib/platform/mdn/mdn_1080/mdn_1080.rb +15 -0
- data/lib/lib/platform/mdn/mdn_720/mdn_720.rb +15 -0
- data/lib/lib/platform/mobile/android/android.rb +23 -0
- data/lib/lib/platform/mobile/android/android_phone/android_phone.rb +23 -0
- data/lib/lib/platform/mobile/android/android_tablet/android_tablet.rb +23 -0
- data/lib/lib/platform/mobile/ios/ios.rb +23 -0
- data/lib/lib/platform/mobile/ios/ios_phone/ios_phone.rb +23 -0
- data/lib/lib/platform/mobile/ios/ios_tablet/ios_tablet.rb +23 -0
- data/lib/lib/platform/mobile/mobile.rb +102 -0
- data/lib/lib/platform/passport/passport.rb +41 -0
- data/lib/lib/platform/passport/passport1080/passport_1080.rb +15 -0
- data/lib/lib/platform/passport/passport_720/passport_720.rb +14 -0
- data/lib/lib/platform/platform.rb +884 -0
- data/lib/lib/platform/roku/roku.rb +96 -0
- data/lib/lib/platform/roku/roku_720/roku_720.rb +16 -0
- data/lib/lib/platform/roku_tv/roku_tv.rb +33 -0
- data/lib/lib/platform/roku_tv/roku_tv_1080/roku_tv_1080.rb +14 -0
- data/lib/lib/platform/roku_tv/roku_tv_720/roku_tv_720.rb +14 -0
- data/lib/lib/platform/samsung_tv/samsung_tv.rb +31 -0
- data/lib/lib/platform/samsung_tv/samsung_tv_1080/samsung_tv_1080.rb +14 -0
- data/lib/lib/platform/samsung_tv/samsung_tv_720/samsung_tv_720.rb +14 -0
- data/lib/lib/platform/sara/sara.rb +42 -0
- data/lib/lib/platform/sara/sara_1080/sara_1080.rb +15 -0
- data/lib/lib/platform/sara/sara_720/sara_720.rb +15 -0
- data/lib/lib/platform/stb/iguide/iguide.rb +18 -0
- data/lib/lib/platform/stb/iguide/iguide_1080/iguide_1080.rb +14 -0
- data/lib/lib/platform/stb/iguide/iguide_720/iguide_720.rb +14 -0
- data/lib/lib/platform/stb/odn/odn.rb +480 -0
- data/lib/lib/platform/stb/odn/odn_1080/odn_1080.rb +14 -0
- data/lib/lib/platform/stb/odn/odn_720/odn_720.rb +14 -0
- data/lib/lib/platform/stb/odn/odn_720/odn_720_moto/odn_720_moto.rb +14 -0
- data/lib/lib/platform/stb/odn/odn_720/odn_720_sa/odn_720_sa.rb +14 -0
- data/lib/lib/platform/stb/odn/odn_720/odn_720_samsung/odn_720_samsung.rb +14 -0
- data/lib/lib/platform/stb/spectrum/spectrum.rb +48 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080.rb +14 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis.rb +16 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris.rb +15 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax.rb +15 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch.rb +15 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace.rb +14 -0
- data/lib/lib/platform/stb/spectrum/spectrum_720/spectrum_720.rb +14 -0
- data/lib/lib/platform/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris.rb +15 -0
- data/lib/lib/platform/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax.rb +15 -0
- data/lib/lib/platform/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch.rb +15 -0
- data/lib/lib/platform/stb/stb.rb +93 -0
- data/lib/lib/platform/template.txt +16 -0
- data/lib/lib/platform/tivo/tivo.rb +28 -0
- data/lib/lib/platform/tivo/tivo_1080/tivo_1080.rb +15 -0
- data/lib/lib/platform/tivo/tivo_720/tivo_720.rb +14 -0
- data/lib/lib/platform/web/web.rb +51 -0
- data/lib/lib/platform_libs/roku/roku_controller.rb +254 -0
- data/lib/lib/prereqs/prereqs.rb +17 -0
- data/lib/lib/prereqs/prereqs_for_dut.rb +14 -0
- data/lib/lib/prereqs/prereqs_for_test.rb +14 -0
- data/lib/lib/remotes/remotes.rb +8 -0
- data/lib/lib/remotes/stb/spectrum/spectrum_remotes.rb +22 -0
- data/lib/lib/roi/black/black_roi.rb +125 -0
- data/lib/lib/roi/color/color_roi.rb +138 -0
- data/lib/lib/roi/image/image_roi.rb +187 -0
- data/lib/lib/roi/roi.rb +1064 -0
- data/lib/lib/roi/template_roi.txt +9 -0
- data/lib/lib/roi/text/text_roi.rb +187 -0
- data/lib/lib/roi/video/video_roi.rb +98 -0
- data/lib/lib/screen/screen.rb +183 -0
- data/lib/lib/screen/template.txt +7 -0
- data/lib/lib/screen/template_screen.txt +10 -0
- data/lib/lib/screens/apple_tv/apple_tv_screens.rb +44 -0
- data/lib/lib/screens/dta/dta_screens.rb +49 -0
- data/lib/lib/screens/mdn/mdn_screens.rb +49 -0
- data/lib/lib/screens/mobile/android/android_phone/android_phone_screens.rb +28 -0
- data/lib/lib/screens/mobile/android/android_screens.rb +40 -0
- data/lib/lib/screens/mobile/android/android_tablet/android_tablet_screens.rb +29 -0
- data/lib/lib/screens/mobile/ios/ios_phone/ios_phone_screens.rb +22 -0
- data/lib/lib/screens/mobile/ios/ios_screens.rb +39 -0
- data/lib/lib/screens/mobile/ios/ios_tablet/ios_tablet_screens.rb +20 -0
- data/lib/lib/screens/mobile/mobile_screens.rb +18 -0
- data/lib/lib/screens/passport/passport_screens.rb +42 -0
- data/lib/lib/screens/roku/roku_screens.rb +72 -0
- data/lib/lib/screens/roku_tv/roku_tv_screens.rb +43 -0
- data/lib/lib/screens/samsung_tv/samsung_tv_screens.rb +44 -0
- data/lib/lib/screens/sara/sara_screens.rb +49 -0
- data/lib/lib/screens/screens.rb +23 -0
- data/lib/lib/screens/stb/iguide/iguide_1080/iguide_1080_screens.rb +56 -0
- data/lib/lib/screens/stb/iguide/iguide_720/iguide_720_screens.rb +56 -0
- data/lib/lib/screens/stb/iguide/iguide_screens.rb +54 -0
- data/lib/lib/screens/stb/odn/odn_screens.rb +40 -0
- data/lib/lib/screens/stb/spectrum/spectrum_docsis/spectrum_1080_docsis_screens.rb +18 -0
- data/lib/lib/screens/stb/spectrum/spectrum_screens.rb +48 -0
- data/lib/lib/screens/stb/stb_screens.rb +13 -0
- data/lib/lib/screens/template.txt +52 -0
- data/lib/lib/screens/tivo/tivo_screens.rb +44 -0
- data/lib/lib/selenium/appium/appium.rb +388 -0
- data/lib/lib/selenium/selenium.rb +466 -0
- data/lib/lib/selenium/webdriver/webdriver.rb +254 -0
- data/lib/lib/test_case/boilerplate/functional.rb +7 -0
- data/lib/lib/test_case/boilerplate/performance.rb +7 -0
- data/lib/lib/test_case/ci_test.rb +47 -0
- data/lib/lib/test_case/functional_test_case.rb +27 -0
- data/lib/lib/test_case/make_boilerplate.rb +32 -0
- data/lib/lib/test_case/monitoring/apple_monitor.rb +104 -0
- data/lib/lib/test_case/monitoring/base_monitor.rb +140 -0
- data/lib/lib/test_case/monitoring/dta_monitor.rb +53 -0
- data/lib/lib/test_case/monitoring/iguide_monitor.rb +72 -0
- data/lib/lib/test_case/monitoring/mdn_monitor.rb +28 -0
- data/lib/lib/test_case/monitoring/monitoring_test.rb +111 -0
- data/lib/lib/test_case/monitoring/odn_monitor.rb +137 -0
- data/lib/lib/test_case/monitoring/passport_monitor.rb +50 -0
- data/lib/lib/test_case/monitoring/report_monitor.rb +178 -0
- data/lib/lib/test_case/monitoring/roku_monitor.rb +102 -0
- data/lib/lib/test_case/monitoring/sara_monitor.rb +33 -0
- data/lib/lib/test_case/monitoring/spec_monitor.rb +154 -0
- data/lib/lib/test_case/performance_test_case.rb +29 -0
- data/lib/lib/test_case/test_case.rb +1055 -0
- data/lib/lib/test_case/test_error.rb +29 -0
- data/lib/lib/test_case/test_exception.rb +9 -0
- data/lib/lib/test_case/test_status.rb +39 -0
- data/lib/lib/test_case/test_step.rb +156 -0
- data/lib/lib/test_case/test_trace.rb +80 -0
- data/lib/lib/test_data.rb +222 -0
- data/lib/lib/test_wrapper.rb +146 -0
- data/lib/misc/get_latest_android.sh +14 -0
- data/lib/misc/get_latest_ios.sh +14 -0
- data/lib/package-lock.json +3 -0
- data/lib/run_test.rb +4 -0
- data/lib/script_validator.rb +48 -0
- data/lib/syntax_eval.rb +151 -0
- data/lib/tools/convert_old_scripts.rb +100 -0
- data/lib/tools/find_duplicate_rois.rb +27 -0
- data/lib/tools/roku/inspector.rb +130 -0
- data/lib/tools/syntax_checker.rb +83 -0
- data/lib/upload_ref_images.rb +255 -0
- metadata +912 -0
@@ -0,0 +1,1260 @@
|
|
1
|
+
require 'time'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'pathname'
|
4
|
+
require './lib/helpers/tmc_helpers/ssh_helper/ssh_helper'
|
5
|
+
require './lib/helpers/tmc_helpers/snmp_helper/snmp_helper'
|
6
|
+
require './lib/helpers/tmc_helpers/email_helper/email_helper'
|
7
|
+
require './lib/helpers/tmc_helpers/csv_helper/csv_helper'
|
8
|
+
require './lib/helpers/tmc_helpers/http_helper/http_helper'
|
9
|
+
|
10
|
+
# AWS defaults
|
11
|
+
ENV['AWS_ACCESS_KEY_ID'] = 'AKIAJR4GME4RASTKVXXQ'
|
12
|
+
ENV['AWS_SECRET_ACCESS_KEY'] = 'Giekd7LXDGZBog+Yyno2m3yIryrbDZtnqThUTKxA'
|
13
|
+
ENV['AWS_REGION'] = 'us-west-2'
|
14
|
+
ENV['AWS_DEFAULT_BUCKET'] = 'charter-testworkbench-com'
|
15
|
+
|
16
|
+
# The Helpers module contains methods that can be used in test cases, methods, and prerequisites
|
17
|
+
|
18
|
+
module TmcHelpers
|
19
|
+
include SnmpHelper
|
20
|
+
include EmailHelper
|
21
|
+
include SshHelper
|
22
|
+
include CsvHelper
|
23
|
+
include HttpHelper
|
24
|
+
|
25
|
+
# Public: Configures AWS.
|
26
|
+
#
|
27
|
+
# region - String region (default: nil).
|
28
|
+
# access_key_id - String S3 access key ID (default: nil).
|
29
|
+
# secret_access_key - String S3 secret access key (default: nil).
|
30
|
+
#
|
31
|
+
# Returns nothing.
|
32
|
+
def aws_config(region: nil, access_key_id: nil, secret_access_key: nil)
|
33
|
+
with_aws do
|
34
|
+
if access_key_id.nil? || secret_access_key.nil?
|
35
|
+
logger.warn("AWS not configured: Missing `access_key_id' or `secret_access_key'")
|
36
|
+
return
|
37
|
+
end
|
38
|
+
Aws.config.update(credentials: Aws::Credentials.new(access_key_id, secret_access_key))
|
39
|
+
Aws.config.update(region: region) unless region.nil?
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Public: Creates an AWS S3 bucket. TODO: VERIFY FUNCTIONALITY
|
44
|
+
#
|
45
|
+
# bucket - String name of bucket.
|
46
|
+
# options - Hash of options to pass to create (default: {}).
|
47
|
+
#
|
48
|
+
# Returns nothing.
|
49
|
+
def aws_create_s3_bucket(bucket, options={})
|
50
|
+
logger.info("Creating S3 bucket: #{bucket}")
|
51
|
+
aws do |s3|
|
52
|
+
b = s3.bucket(bucket)
|
53
|
+
if b.exists?
|
54
|
+
raise 'Bucket already exists!'
|
55
|
+
end
|
56
|
+
b.create(options)
|
57
|
+
end
|
58
|
+
nil
|
59
|
+
end
|
60
|
+
|
61
|
+
# Public: Deletes an AWS S3 bucket. TODO: VERIFY FUNCTIONALITY
|
62
|
+
#
|
63
|
+
# bucket - String name of bucket.
|
64
|
+
#
|
65
|
+
# Returns nothing.
|
66
|
+
def aws_delete_s3_bucket(bucket)
|
67
|
+
logger.info("Deleting S3 bucket: #{bucket}")
|
68
|
+
aws do |s3|
|
69
|
+
b = s3.bucket(bucket)
|
70
|
+
unless b.exists?
|
71
|
+
raise 'Bucket does not exist!'
|
72
|
+
end
|
73
|
+
b.delete!
|
74
|
+
end
|
75
|
+
nil
|
76
|
+
end
|
77
|
+
|
78
|
+
# Public: Uploads an object to an AWS S3 bucket.
|
79
|
+
#
|
80
|
+
# bucket - String name of bucket. The bucket will be created if it does not exist.
|
81
|
+
# name - String name of object to write. The object will be overwritten if it already exists.
|
82
|
+
# path - String path to object.
|
83
|
+
# options - Hash of options to pass to upload (default: {}).
|
84
|
+
#
|
85
|
+
# Returns the public URI::HTTP for the object.
|
86
|
+
def aws_upload_s3(bucket, name, path, options={})
|
87
|
+
logger.info("Uploading file to S3 bucket '#{bucket}': #{path} (#{get_readable_size(File.size(path))})")
|
88
|
+
aws do |s3|
|
89
|
+
o = get_or_create_s3_bucket(s3, bucket).object(name)
|
90
|
+
o.upload_file(Pathname.new(path), {acl: 'public-read'}.merge(options))
|
91
|
+
url = o.public_url
|
92
|
+
logger.info("New file URL: #{url}")
|
93
|
+
url
|
94
|
+
# do the upload this way to protect the file after N seconds (1 week in this case)
|
95
|
+
#o.upload_file(Pathname.new(path), options)
|
96
|
+
#o.presigned_url(:get, expires_in: 604800)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# Public: Writes an object to an AWS S3 bucket.
|
101
|
+
#
|
102
|
+
# bucket - String name of bucket. The bucket will be created if it does not exist.
|
103
|
+
# name - String name of object to write. The object will be overwritten if it already exists.
|
104
|
+
# data - String data to write to object.
|
105
|
+
# options - Hash of options to pass to put (default: {}).
|
106
|
+
#
|
107
|
+
# Returns the public URI::HTTP for the object.
|
108
|
+
def aws_write_s3(bucket, name, data, options={})
|
109
|
+
logger.info("Writing object to S3 bucket '#{bucket}': #{name} (#{get_readable_size(data.size)})")
|
110
|
+
aws do |s3|
|
111
|
+
o = get_or_create_s3_bucket(s3, bucket).object(name)
|
112
|
+
o.put({body: data, acl: 'public-read'}.merge(options))
|
113
|
+
url = o.public_url
|
114
|
+
logger.info("New object URL: #{url}")
|
115
|
+
url
|
116
|
+
# do the PUT this way to protect the file after N seconds (1 week in this case)
|
117
|
+
#o.put(options.merge(body: data))
|
118
|
+
#o.presigned_url(:get, expires_in: 604800)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
# Public: Reads an object from an AWS S3 bucket.
|
123
|
+
#
|
124
|
+
# bucket - String name of bucket.
|
125
|
+
# name - String name of object to read.
|
126
|
+
# options - Hash of options to pass to read (default: {}).
|
127
|
+
#
|
128
|
+
# Returns the String object value.
|
129
|
+
def aws_read_s3(bucket, name, options={})
|
130
|
+
logger.info("Reading object from S3 bucket '#{bucket}': #{name}")
|
131
|
+
aws do |s3|
|
132
|
+
b = s3.bucket(bucket)
|
133
|
+
unless b.exists?
|
134
|
+
raise 'Bucket does not exist!'
|
135
|
+
end
|
136
|
+
o = b.object(name)
|
137
|
+
unless o.exists?
|
138
|
+
raise 'Object does not exist!'
|
139
|
+
end
|
140
|
+
o.get(options).body.string
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
# Public: Deletes an object from an AWS S3 bucket.
|
145
|
+
#
|
146
|
+
# bucket - String name of bucket.
|
147
|
+
# name - String name of object to delete.
|
148
|
+
# options - Hash of options to pass to delete (default: {}).
|
149
|
+
#
|
150
|
+
# Returns nothing.
|
151
|
+
def aws_delete_s3(bucket, name, options={})
|
152
|
+
logger.info("Deleting object from S3 bucket '#{bucket}': #{name}")
|
153
|
+
aws do |s3|
|
154
|
+
b = s3.bucket(bucket)
|
155
|
+
unless b.exists?
|
156
|
+
raise 'Bucket does not exist!'
|
157
|
+
end
|
158
|
+
o = b.object(name)
|
159
|
+
unless o.exists?
|
160
|
+
raise 'Object does not exist!'
|
161
|
+
end
|
162
|
+
o.delete(options)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
# Public: Yields the given block until the result is not empty.
|
167
|
+
#
|
168
|
+
# timeout - Integer total milliseconds to try meeting the criteria before timing out (default: 30.sec).
|
169
|
+
# message - String custom message to log (default: 'executing provided block').
|
170
|
+
# block - Block to yield.
|
171
|
+
#
|
172
|
+
# Returns the final result of yielding the block.
|
173
|
+
def until_not_empty(args={}, &block)
|
174
|
+
until_condition(:not_empty, args, &block)
|
175
|
+
end
|
176
|
+
|
177
|
+
# Public: Yields the given block until the result is not nil.
|
178
|
+
#
|
179
|
+
# timeout - Integer total milliseconds to try meeting the criteria before timing out (default: 30.sec).
|
180
|
+
# message - String custom message to log (default: 'executing provided block').
|
181
|
+
# block - Block to yield.
|
182
|
+
#
|
183
|
+
# Returns the final result of yielding the block.
|
184
|
+
def until_not_nil(args={}, &block)
|
185
|
+
until_condition(:not_nil, args, &block)
|
186
|
+
end
|
187
|
+
|
188
|
+
# Public: Yields the given block until the result is the same twice in a row.
|
189
|
+
#
|
190
|
+
# timeout - Integer total milliseconds to try meeting the criteria before timing out (default: 30.sec).
|
191
|
+
# message - String custom message to log (default: 'executing provided block').
|
192
|
+
# allow_empty - Boolean indicating whether to consider empty objects (String, Array, etc.) matching (default: false).
|
193
|
+
# block - Block to yield.
|
194
|
+
#
|
195
|
+
# Returns the final result of yielding the block.
|
196
|
+
def until_same(args={}, &block)
|
197
|
+
until_condition(:same, args, &block)
|
198
|
+
end
|
199
|
+
|
200
|
+
# Public: Yields the given block until the result equals the specified value.
|
201
|
+
#
|
202
|
+
# value - Object value that must equal the result of the block.
|
203
|
+
# timeout - Integer total milliseconds to try meeting the criteria before timing out (default: 30.sec).
|
204
|
+
# message - String custom message to log (default: 'executing provided block').
|
205
|
+
# block - Block to yield.
|
206
|
+
#
|
207
|
+
# Returns the final result of yielding the block.
|
208
|
+
def until_equals(value, args={}, &block)
|
209
|
+
args[:value] = value
|
210
|
+
until_condition(:equals, args, &block)
|
211
|
+
end
|
212
|
+
|
213
|
+
# Public: Yields the given block until the result does not equal the specified value.
|
214
|
+
#
|
215
|
+
# value - Object value that must equal the result of the block.
|
216
|
+
# timeout - Integer total milliseconds to try meeting the criteria before timing out (default: 30.sec).
|
217
|
+
# message - String custom message to log (default: 'executing provided block').
|
218
|
+
# block - Block to yield.
|
219
|
+
#
|
220
|
+
# Returns the final result of yielding the block.
|
221
|
+
def until_not_equals(value, args={}, &block)
|
222
|
+
args[:value] = value
|
223
|
+
until_condition(:not_equals, args, &block)
|
224
|
+
end
|
225
|
+
|
226
|
+
# Public: Yields the given block until the result includes the specified value.
|
227
|
+
#
|
228
|
+
# value - Object value that must be included in the result of the block.
|
229
|
+
# timeout - Integer total milliseconds to try meeting the criteria before timing out (default: 30.sec).
|
230
|
+
# message - String custom message to log (default: 'executing provided block').
|
231
|
+
# block - Block to yield.
|
232
|
+
#
|
233
|
+
# Returns the final result of yielding the block.
|
234
|
+
def until_includes(value, args={}, &block)
|
235
|
+
args[:value] = value
|
236
|
+
until_condition(:includes, args, &block)
|
237
|
+
end
|
238
|
+
|
239
|
+
# Public: Yields the given block until the result does not include the specified value.
|
240
|
+
#
|
241
|
+
# value - Object value that must not be included in the result of the block.
|
242
|
+
# timeout - Integer total milliseconds to try meeting the criteria before timing out (default: 30.sec).
|
243
|
+
# message - String custom message to log (default: 'executing provided block').
|
244
|
+
# block - Block to yield.
|
245
|
+
#
|
246
|
+
# Returns the final result of yielding the block.
|
247
|
+
def until_not_includes(value, args={}, &block)
|
248
|
+
args[:value] = value
|
249
|
+
until_condition(:not_includes, args, &block)
|
250
|
+
end
|
251
|
+
|
252
|
+
# Public: Yields the given block until the specified criteria are met or times out.
|
253
|
+
#
|
254
|
+
# condition - Symbol condition to test. May be one of the following:
|
255
|
+
# :not_empty - Returns when the result of the block is not empty.
|
256
|
+
# :not_nil - Returns when the result of the block is not nil.
|
257
|
+
# :same - Returns when the result of the block is the same twice in a row.
|
258
|
+
# :equals - Returns when the given value equals the result of the block.
|
259
|
+
# :not_equals - Returns when the given value does not equal the result of the block.
|
260
|
+
# :includes - Returns when the given value is included in the result of the block.
|
261
|
+
# :not_includes - Returns when the given value is not included in the result of the block.
|
262
|
+
# value - Object value (default: nil). Required if needed to test condition.
|
263
|
+
# timeout - Integer total milliseconds to try meeting the criteria before timing out (default: 30.sec).
|
264
|
+
# message - String custom message to log (default: 'executing provided block').
|
265
|
+
# allow_empty - Boolean indicating whether to consider empty objects (String, Array, etc.)
|
266
|
+
# matching when the criteria is :same (default: false).
|
267
|
+
# block - Block to yield.
|
268
|
+
#
|
269
|
+
# Returns the final result of yielding the block.
|
270
|
+
def until_condition(condition, args={}, &block)
|
271
|
+
message = args.fetch(:message, 'executing provided block')
|
272
|
+
timeout = args.fetch(:timeout, 30.sec)
|
273
|
+
value_str = args[:value].nil? ? '' : " #{args[:value].inspect}"
|
274
|
+
logger.info("#{message.capitalize} until #{condition}#{value_str} or timeout (#{timeout} ms)")
|
275
|
+
ret = nil
|
276
|
+
last_ret = -1
|
277
|
+
start_time = Time.now
|
278
|
+
while (Time.now - start_time) <= (timeout / 1.sec)
|
279
|
+
ret = block.call
|
280
|
+
case condition
|
281
|
+
when :not_empty
|
282
|
+
break unless ret.nil? || ret.empty?
|
283
|
+
when :not_nil
|
284
|
+
break unless ret.nil?
|
285
|
+
when :same
|
286
|
+
break if ret == last_ret && (args[:allow_empty] || !ret.empty?)
|
287
|
+
last_ret = ret
|
288
|
+
when :equals
|
289
|
+
if args[:value].is_a?(Regexp)
|
290
|
+
break if !ret.nil? && ret =~ args[:value]
|
291
|
+
else
|
292
|
+
break if ret == args[:value]
|
293
|
+
end
|
294
|
+
when :not_equals
|
295
|
+
if args[:value].is_a?(Regexp)
|
296
|
+
break unless ret.nil? || ret =~ args[:value]
|
297
|
+
else
|
298
|
+
break unless ret == args[:value]
|
299
|
+
end
|
300
|
+
when :includes
|
301
|
+
unless ret.nil?
|
302
|
+
if args[:value].is_a?(Regexp)
|
303
|
+
break unless ret.select { |val| val =~ args[:value] }.empty?
|
304
|
+
else
|
305
|
+
break if ret.include?(args[:value])
|
306
|
+
end
|
307
|
+
end
|
308
|
+
when :not_includes
|
309
|
+
unless ret.nil?
|
310
|
+
if args[:value].is_a?(Regexp)
|
311
|
+
break if ret.select { |val| val =~ args[:value] }.empty?
|
312
|
+
else
|
313
|
+
break unless ret.include?(args[:value])
|
314
|
+
end
|
315
|
+
end
|
316
|
+
else
|
317
|
+
raise "Invalid condition: #{condition}"
|
318
|
+
end
|
319
|
+
sleep(100)
|
320
|
+
end
|
321
|
+
ret
|
322
|
+
end
|
323
|
+
|
324
|
+
# Public: Picks a random item from the given array.
|
325
|
+
#
|
326
|
+
# items - Splat Array of items from which to pick.
|
327
|
+
#
|
328
|
+
# Returns the randomly-chosen item Object.
|
329
|
+
def pick_random(*items)
|
330
|
+
if items.first.is_a?(Array)
|
331
|
+
items = items.first
|
332
|
+
end
|
333
|
+
logger.info("Picking random item from: #{items.inspect}")
|
334
|
+
item = items[items.count > 1 ? rand(items.count) : 0]
|
335
|
+
logger.info("Picked #{item.inspect}")
|
336
|
+
item
|
337
|
+
end
|
338
|
+
|
339
|
+
# Public: Checks if the given number looks like a modern year (1900 - 2999).
|
340
|
+
#
|
341
|
+
# yyyy - Integer number to validate.
|
342
|
+
#
|
343
|
+
# Returns a Boolean true if the number looks like a year, otherwise false.
|
344
|
+
def is_year?(yyyy)
|
345
|
+
min = 1900
|
346
|
+
max = 2999
|
347
|
+
logger.info("Checking if #{yyyy.inspect} is a valid year (#{min} - #{max})")
|
348
|
+
yyyy.to_i >= min && yyyy.to_i < max
|
349
|
+
end
|
350
|
+
|
351
|
+
# Public: Checks if the given value is a valid movie/series rating.
|
352
|
+
#
|
353
|
+
# rating - String rating to validate.
|
354
|
+
#
|
355
|
+
# Returns a Boolean true if the rating is valid, otherwise false.
|
356
|
+
def is_rating?(rating)
|
357
|
+
valid_ratings = %w(TV-G TV-PG TV-14 TV-MA G PG PG-13 R NC-17 NR)
|
358
|
+
logger.info("Checking if #{rating.inspect} is a valid rating (#{valid_ratings.join(', ')})")
|
359
|
+
valid_ratings.include?(rating)
|
360
|
+
end
|
361
|
+
|
362
|
+
# Public: Checks to see if a Suite Instance ID exists for the current twb_suite_name.
|
363
|
+
#
|
364
|
+
# Returns a Boolean true if a Suite Instance ID exists for the current suite. Else, returns a Boolean false.
|
365
|
+
def twb_suite_exists?
|
366
|
+
test_data.refresh
|
367
|
+
if test_data[:report_per_slot]
|
368
|
+
return true if test_data.fetch("twb_suite_id_slot#{dut.slot}_iter#{iteration}".to_sym, false)
|
369
|
+
return false
|
370
|
+
end
|
371
|
+
return true if test_data.fetch(:twb_suite_id, false)
|
372
|
+
return false
|
373
|
+
end
|
374
|
+
|
375
|
+
# Public: Checks to see if a Case Instance ID exists for the current Slot and Test Case in the Job.
|
376
|
+
#
|
377
|
+
# Returns a Boolean true if a Case Instance ID exists for the current suite. Else, returns a Boolean false.
|
378
|
+
def twb_case_exists?
|
379
|
+
test_data.refresh
|
380
|
+
return true if test_data.fetch("twb_case_id#{id}_slot#{dut.slot}_iter#{iteration}".to_sym, false)
|
381
|
+
return false
|
382
|
+
end
|
383
|
+
|
384
|
+
# Public: Gets a Suite Instance ID for the current twb_suite_name. If one exists already it is used, otherwise a POST to TWB retrieves a new one.
|
385
|
+
#
|
386
|
+
# twb_suite_name - String name of the test suite (default: test_data[:twb_suite_name]).
|
387
|
+
# program_application_name - String name of the program application (default: test_data[:program_application_name]).
|
388
|
+
#
|
389
|
+
# Returns the String suite_instance_id for the suite or current Job if successful. Else, returns nil.
|
390
|
+
def twb_get_suite_instance_id(args={})
|
391
|
+
test_suite_name = args.fetch(:twb_suite_name, test_data[:twb_suite_name])
|
392
|
+
# Check to see if the Suite Instance Id has already been written to disk
|
393
|
+
test_data.refresh
|
394
|
+
if twb_suite_exists?
|
395
|
+
return test_data.fetch("twb_suite_id_slot#{dut.slot}_iter#{iteration}".to_sym, nil) if test_data[:report_per_slot]
|
396
|
+
return test_data.fetch(:twb_suite_id, false)
|
397
|
+
else
|
398
|
+
program_application_name = args.fetch(:program_application_name, test_data[:program_application_name])
|
399
|
+
return twb_post_suite(:twb_suite_name => test_suite_name, :program_application_name => program_application_name)
|
400
|
+
end
|
401
|
+
end
|
402
|
+
|
403
|
+
# Public: Gets a Case Instance ID for the current twb_suite_name. If one exists already it is used, otherwise a POST to TWB retrieves a new one.
|
404
|
+
#
|
405
|
+
# twb_suite_name - String name of the test suite (default: test_data[:twb_suite_name]).
|
406
|
+
#
|
407
|
+
# Returns the String case_instance_id for the current test case if successful. Else, returns nil.
|
408
|
+
def twb_get_case_instance_id(args={})
|
409
|
+
test_suite_name = args.fetch(:twb_suite_name, test_data[:twb_suite_name])
|
410
|
+
# Check if the Suite & Case Instance Id has already been written to disk
|
411
|
+
if twb_case_exists?
|
412
|
+
test_data.refresh
|
413
|
+
return test_data.fetch("twb_case_id#{id}_slot#{dut.slot}_iter#{iteration}".to_sym, false)
|
414
|
+
else
|
415
|
+
suite_instance_id = twb_get_suite_instance_id
|
416
|
+
return twb_post_testcase(:twb_suite_name => test_suite_name, :suite_instance_id => suite_instance_id)
|
417
|
+
end
|
418
|
+
end
|
419
|
+
|
420
|
+
# Public: Takes a screenshot on current STB and POSTS to TWB. The user has the ability to set the Suite & Case instance ID or if a Suite &/or Case ID already exists for the twb_suite_name or current Job Name, those will be used. In the case where neither a Suite & Case instance ID are provided and they don't already exist for the twb_suite_name or Job Name, new ones will be retrieved from TWB.
|
421
|
+
#
|
422
|
+
# twb_suite_name - String name of the Test Suite Name to report to (default: test_data[:twb_suite_name])
|
423
|
+
# program_application_name - String name of the Program Application to report to (default: test_data[:program_application_name]).
|
424
|
+
# ss_filename - String filename of image to POST. If none is provided a screenshot on active stb will be captured (default: nil)
|
425
|
+
# timeout - Integer total milliseconds to wait for a response (default: 5.min).
|
426
|
+
# verify_mode - Integer desired HTTP verify mode (default: nil).
|
427
|
+
# uri - String full URI for the resource to request(default: "http://charter.testworkbench.com/ords/test/postScreenshots/#{case_instance_id}").
|
428
|
+
# case_instance_id - result of twb_get_case_instance_id
|
429
|
+
# suite_instance_id - result of twb_get_suite_instance_id
|
430
|
+
# size - number from 0 to 100 for percentage size of the image
|
431
|
+
# quality - number from 0 to 100 for image quality
|
432
|
+
#
|
433
|
+
# Returns the path to the screenshot file, ss_filename
|
434
|
+
def twb_post_screenshot(args={})
|
435
|
+
test_suite_name = (args.key?(:twb_suite_name)) ? args[:twb_suite_name] : test_data[:twb_suite_name]
|
436
|
+
program_application_name = (args.key?(:program_application_name)) ? args[:program_application_name] : test_data[:program_application_name]
|
437
|
+
suite_instance_id = (args.key?(:suite_instance_id)) ? args[:suite_instance_id] : twb_get_suite_instance_id(:twb_suite_name => test_suite_name, :program_application_name => program_application_name)
|
438
|
+
|
439
|
+
image_size = args.fetch(:size, 100).to_i
|
440
|
+
image_size = (image_size > 100) ? 100 : image_size
|
441
|
+
image_size = (image_size < 0) ? 0 : image_size
|
442
|
+
|
443
|
+
image_quality = args.fetch(:quality, 100).to_i
|
444
|
+
image_quality = (image_quality > 100) ? 100 : image_quality
|
445
|
+
image_quality = (image_quality < 0) ? 0 : image_quality
|
446
|
+
|
447
|
+
|
448
|
+
case_instance_id = (args.key?(:case_instance_id)) ? args[:case_instance_id] : twb_get_case_instance_id(:twb_suite_name => test_suite_name)
|
449
|
+
ss_filename = args.fetch(:ss_filename, nil)
|
450
|
+
timeout = args.fetch(:timeout, 5.min)
|
451
|
+
verify_mode = args.fetch(:verify_mode, 0)
|
452
|
+
headers = {'Content-Type' => 'image/jpeg'}
|
453
|
+
uri = args.fetch(
|
454
|
+
:uri,
|
455
|
+
"http://charter.testworkbench.com/ords/test/postScreenshots/#{case_instance_id}"
|
456
|
+
)
|
457
|
+
tmc_current_screenshots = Hash[test_data.fetch(:tmc_current_screenshots, [])]
|
458
|
+
if tmc_current_screenshots[id].nil?
|
459
|
+
test_data[:tmc_current_screenshots] = tmc_current_screenshots.update(id => 1).to_a # can't use hash because of integer keys
|
460
|
+
else
|
461
|
+
tmc_current_screenshots[id] += 1
|
462
|
+
test_data[:tmc_current_screenshots] = tmc_current_screenshots.to_a # can't use hash because of integer keys
|
463
|
+
end
|
464
|
+
if ss_filename.nil?
|
465
|
+
ss_filename = "twb_suite_#{suite_instance_id}_case_#{case_instance_id}_screenshot_#{tmc_current_screenshots[id]}.jpg"
|
466
|
+
data = dut.capture_screen(:filename => ss_filename, :format => :raw, :size => image_size, :quality => image_quality)
|
467
|
+
else
|
468
|
+
data = ss_filename
|
469
|
+
end
|
470
|
+
web_post(uri, :headers => headers,
|
471
|
+
:verify_mode => verify_mode, :timeout => timeout, :body => data
|
472
|
+
).json
|
473
|
+
return ss_filename
|
474
|
+
end
|
475
|
+
|
476
|
+
# Public: Writes a screenshot to an AWS S3 bucket in preparation for reporting to TWB.
|
477
|
+
#
|
478
|
+
# access_key_id - String S3 access key ID (default: TWB access key).
|
479
|
+
# secret_access_key - String S3 secret access key (default: TWB secret access key).
|
480
|
+
# region - Symbol S3 region (default: us-west-2).
|
481
|
+
# :us-east-1 - N. Virginia
|
482
|
+
# :us-east-2 - Ohio
|
483
|
+
# :us-west-1 - N. California
|
484
|
+
# :us-west-2 - Oregon
|
485
|
+
# bucket_name - String S3 bucket name (default: 'charter-testworkbench-com').
|
486
|
+
# aws_folder - String folder name where image will POST (default: TMC_Screenshots).
|
487
|
+
# ss_filename - String filename of image to POST. If none is provided a screenshot on active stb will be captured (default: nil)
|
488
|
+
# size - number from 0 to 100 for percentage size of the image
|
489
|
+
# quality - number from 0 to 100 for image quality
|
490
|
+
#
|
491
|
+
# Returns the public URI::HTTP for the object.
|
492
|
+
def twb_prep_s3_screenshot(args={})
|
493
|
+
suite_instance_id = (args.key?(:suite_instance_id)) ? args[:suite_instance_id] : twb_get_suite_instance_id
|
494
|
+
case_instance_id = (args.key?(:case_instance_id)) ? args[:case_instance_id] : twb_get_case_instance_id
|
495
|
+
|
496
|
+
image_size = args.fetch(:size, 100).to_i
|
497
|
+
image_size = (image_size > 100) ? 100 : image_size
|
498
|
+
image_size = (image_size < 1) ? 1 : image_size
|
499
|
+
|
500
|
+
image_quality = args.fetch(:quality, 100).to_i
|
501
|
+
image_quality = (image_quality > 100) ? 100 : image_quality
|
502
|
+
image_quality = (image_quality < 0) ? 0 : image_quality
|
503
|
+
|
504
|
+
access_key_id = args.fetch(:access_key_id, 'AKIAJR4GME4RASTKVXXQ')
|
505
|
+
secret_access_key = args.fetch(:secret_access_key, 'Giekd7LXDGZBog+Yyno2m3yIryrbDZtnqThUTKxA')
|
506
|
+
region = args.fetch(:region, 'us-east-2')
|
507
|
+
bucket_name = args.fetch(:bucket_name, 'charter-testworkbench-com')
|
508
|
+
aws_folder = args.fetch(:aws_folder, 'TMC_Screenshots')
|
509
|
+
ss_filename = args.fetch(:ss_filename, nil)
|
510
|
+
tmc_current_screenshots = Hash[test_data.fetch(:tmc_current_screenshots, [])]
|
511
|
+
if tmc_current_screenshots[id].nil?
|
512
|
+
test_data[:tmc_current_screenshots] = tmc_current_screenshots.update(id => 1).to_a # can't use hash because of integer keys
|
513
|
+
else
|
514
|
+
tmc_current_screenshots[id] += 1
|
515
|
+
test_data[:tmc_current_screenshots] = tmc_current_screenshots.to_a # can't use hash because of integer keys
|
516
|
+
end
|
517
|
+
filename = "twb_suite_#{suite_instance_id}_case_#{case_instance_id}_screenshot_#{tmc_current_screenshots[id]}.jpg"
|
518
|
+
# Prep the screenshot
|
519
|
+
if ss_filename.nil?
|
520
|
+
data = dut.capture_screen(:filename => filename, :format => :raw, :size => image_size, :quality => image_quality)
|
521
|
+
else
|
522
|
+
data = ss_filename
|
523
|
+
end
|
524
|
+
aws_write_s3(bucket_name, "#{aws_folder}/#{filename}", data)
|
525
|
+
return "#{aws_folder}/#{filename}"
|
526
|
+
end
|
527
|
+
|
528
|
+
# Public: POSTs the Suite level results to TWB and retrieves the Suite Instance ID. If there is already a Suite Instance ID associated with the current test_suite_name it will be used instead.
|
529
|
+
#
|
530
|
+
# tester_name - String name of tester (default: current_user['name']).
|
531
|
+
# report_to_scorecard - String value of 'Y' or 'N' indicating scorecard is/isn't used (default: 'N').
|
532
|
+
# footprints - String comma separated list of values (default '').
|
533
|
+
#
|
534
|
+
# Returns the String suite_instance_id for the suite if successful. Else, returns nil.
|
535
|
+
def twb_post_suite(args={})
|
536
|
+
# Check to see if the Suite Instance Id has already been written to Test Data
|
537
|
+
return twb_get_suite_instance_id if twb_suite_exists?
|
538
|
+
|
539
|
+
test_suite_name = args.fetch(:twb_suite_name, test_data[:twb_suite_name])
|
540
|
+
tester_name = args.fetch(:tester_name, current_user['name'])
|
541
|
+
program_application_name = args.fetch(:program_application_name, test_data[:program_application_name])
|
542
|
+
report_to_score_card = args.fetch(:report_to_score_card, test_data[:report_to_score_card])
|
543
|
+
report_to_score_card = 'N' if report_to_score_card.to_s.empty?
|
544
|
+
footprints = args.fetch(:footprints, test_data[:footprints])
|
545
|
+
footprints = '' if footprints.to_s.empty?
|
546
|
+
environment = args.fetch(:spectrum_environment, current_workspace)
|
547
|
+
device = args.fetch(:device, 'undefined') # dvr or non-dvr
|
548
|
+
device = 'dvr' if dut.model.include?('210')
|
549
|
+
device = 'non-dvr' if dut.model.include?('110')
|
550
|
+
slot = args.fetch(:slot, dut.slot)
|
551
|
+
mac_address = args.fetch(:mac_address, dut.mac_address)
|
552
|
+
mac_address = 'undefined' if mac_address.to_s.empty?
|
553
|
+
machine_name = args.fetch(:machine_name, server_name)
|
554
|
+
uri = args.fetch(:uri, 'http://charter.testworkbench.com/ords/test/suite/')
|
555
|
+
# Build hash for required params
|
556
|
+
rb_hash = {
|
557
|
+
:test_suite_name => test_suite_name,
|
558
|
+
:tester_name => tester_name,
|
559
|
+
:program_application_name => program_application_name,
|
560
|
+
:report_to_score_card => report_to_score_card,
|
561
|
+
:footprints => footprints,
|
562
|
+
:environment => environment,
|
563
|
+
:device => device,
|
564
|
+
:tmc_slot => slot,
|
565
|
+
:box_mac_address => mac_address,
|
566
|
+
:machine_name => machine_name
|
567
|
+
}
|
568
|
+
# Add optional params to hash (these aren't published in TomDocs)
|
569
|
+
project_release = args.fetch(:project_release, nil)
|
570
|
+
rb_hash[:project_release] = project_release unless project_release.nil?
|
571
|
+
device_version = args.fetch(:device_version, nil)
|
572
|
+
rb_hash[:device_version] = device_version unless device_version.nil?
|
573
|
+
browser = args.fetch(:browser, nil)
|
574
|
+
rb_hash[:browser] = browser unless browser.nil?
|
575
|
+
browser_version = args.fetch(:browser_version, nil)
|
576
|
+
rb_hash[:browser_version] = browser_version unless browser_version.nil?
|
577
|
+
operating_system = args.fetch(:operating_system, nil)
|
578
|
+
rb_hash[:operating_system] = operating_system unless operating_system.nil?
|
579
|
+
operating_system_version = args.fetch(:operating_system_version, nil)
|
580
|
+
rb_hash[:operating_system_version] = operating_system_version unless operating_system_version.nil?
|
581
|
+
target_test_plan_name = args.fetch(:target_test_plan_name, nil)
|
582
|
+
rb_hash[:target_test_plan_name] = target_test_plan_name unless target_test_plan_name.nil?
|
583
|
+
custom_1 = args.fetch(:custom_1, nil)
|
584
|
+
rb_hash[:custom_1] = custom_1 unless custom_1.nil?
|
585
|
+
custom_2 = args.fetch(:custom_2, nil)
|
586
|
+
rb_hash[:custom_2] = custom_2 unless custom_2.nil?
|
587
|
+
custom_3 = args.fetch(:custom_3, nil)
|
588
|
+
rb_hash[:custom_3] = custom_3 unless custom_3.nil?
|
589
|
+
eligible_to_report = args.fetch(:eligible_to_report, nil)
|
590
|
+
rb_hash[:eligible_to_report] = eligible_to_report unless eligible_to_report.nil?
|
591
|
+
device_type = args.fetch(:device_type, nil)
|
592
|
+
rb_hash[:device_type] = device_type unless device_type.nil?
|
593
|
+
# POST /suite/
|
594
|
+
logger.debug('POST /suite/')
|
595
|
+
resp = web_post(uri, :verify_mode => 0, :json => rb_hash).json
|
596
|
+
logger.warn("Failed to connect to Test Work Bench") if resp.nil?
|
597
|
+
suite_instance_id = resp['suite_instance_id']
|
598
|
+
if suite_instance_id.nil?
|
599
|
+
logger.warn('Failed to retrieve Suite Instance ID from TWB!')
|
600
|
+
logger.warn("Error Message: #{resp['error_message']}")
|
601
|
+
logger.warn("Program List: #{resp['program_list']}") if resp['program_list']
|
602
|
+
return nil
|
603
|
+
else
|
604
|
+
logger.debug("Suite Instance ID Retrieved: #{suite_instance_id}")
|
605
|
+
test_data.refresh
|
606
|
+
if test_data[:report_per_slot] # if users want to report to individual suites for individual slots
|
607
|
+
test_data["twb_suite_id_slot#{dut.slot}_iter#{iteration}".to_sym] = suite_instance_id
|
608
|
+
else
|
609
|
+
test_data[:twb_suite_id] = suite_instance_id
|
610
|
+
end
|
611
|
+
return suite_instance_id
|
612
|
+
end
|
613
|
+
end
|
614
|
+
|
615
|
+
# Public: POSTs the Case level results to TWB and retrieves the Case Instance ID.
|
616
|
+
#
|
617
|
+
# uri - String full URI for the resource to request (default: "https://twb.dev-charter.net/ords/preprod/testcase/").
|
618
|
+
# test_case_name - String name of the test case (default: test_data[:test_case_name]).
|
619
|
+
# suite_instance_id - result of twb_get_suite_instance_id
|
620
|
+
#
|
621
|
+
# Returns the String Case Instance ID if successful. Else, returns nil.
|
622
|
+
def twb_post_testcase(args={})
|
623
|
+
# Check to see if the Case Instance Id has already been written to disk
|
624
|
+
return twb_get_case_instance_id if twb_case_exists?
|
625
|
+
|
626
|
+
test_case_name = args.fetch(:test_case_name, self.name)
|
627
|
+
test_suite_name = (args.key?(:twb_suite_name)) ? args[:twb_suite_name] : test_data[:twb_suite_name]
|
628
|
+
program_application_name = (args.key?(:program_application_name)) ? args[:program_application_name] : test_data[:program_application_name]
|
629
|
+
|
630
|
+
suite_instance_id = (args.key?(:suite_instance_id)) ? args[:suite_instance_id] : twb_get_suite_instance_id(:twb_suite_name => test_suite_name,:program_application_name => program_application_name)
|
631
|
+
|
632
|
+
uri = args.fetch(
|
633
|
+
:uri,
|
634
|
+
'http://charter.testworkbench.com/ords/test/testcase/'
|
635
|
+
)
|
636
|
+
# Build hash for required params
|
637
|
+
rb_hash = {
|
638
|
+
:test_case_name => test_case_name,
|
639
|
+
:suite_instance_id => suite_instance_id
|
640
|
+
}
|
641
|
+
# Add optional params to hash (these aren't published in TomDocs)
|
642
|
+
head_end = args.fetch(:head_end, nil)
|
643
|
+
rb_hash[:head_end] = head_end unless head_end.nil?
|
644
|
+
stb_id = args.fetch(:stb_id, nil)
|
645
|
+
rb_hash[:stb_id] = stb_id unless stb_id.nil?
|
646
|
+
box_serial_no = args.fetch(:box_serial_no, nil)
|
647
|
+
rb_hash[:box_serial_no] = box_serial_no unless box_serial_no.nil?
|
648
|
+
box_mac_address = args.fetch(:box_mac_address, nil)
|
649
|
+
rb_hash[:box_mac_address] = box_mac_address unless box_mac_address.nil?
|
650
|
+
box_model_number = args.fetch(:box_model_number, nil)
|
651
|
+
rb_hash[:box_model_number] = box_model_number unless box_model_number.nil?
|
652
|
+
ams_number = args.fetch(:ams_number, nil)
|
653
|
+
rb_hash[:ams_number] = ams_number unless ams_number.nil?
|
654
|
+
sgui_id = args.fetch(:sgui_id, nil)
|
655
|
+
rb_hash[:sgui_id] = sgui_id unless sgui_id.nil?
|
656
|
+
zodiac_version = args.fetch(:zodiac_version, nil)
|
657
|
+
rb_hash[:zodiac_version] = zodiac_version unless zodiac_version.nil?
|
658
|
+
custom_1 = args.fetch(:custom_1, nil)
|
659
|
+
rb_hash[:custom_1] = custom_1 unless custom_1.nil?
|
660
|
+
custom_2 = args.fetch(:custom_2, nil)
|
661
|
+
rb_hash[:custom_2] = custom_2 unless custom_2.nil?
|
662
|
+
custom_3 = args.fetch(:custom_3, nil)
|
663
|
+
rb_hash[:custom_3] = custom_3 unless custom_3.nil?
|
664
|
+
# POST /testcase/
|
665
|
+
logger.debug('POST /testcase/')
|
666
|
+
resp = web_post(uri, :verify_mode => 0, :json => rb_hash).json
|
667
|
+
case_instance_id = resp['case_instance_id']
|
668
|
+
if case_instance_id.nil?
|
669
|
+
logger.warn("Failed to POST Testcase and retrieve Case Instance ID for Suite Instance ID #{suite_instance_id}")
|
670
|
+
logger.warn("Error Message: #{resp['error_message']}")
|
671
|
+
return nil
|
672
|
+
else
|
673
|
+
logger.debug("Case Instance ID Retrieved: #{case_instance_id}")
|
674
|
+
# Write Case ID to Test Data
|
675
|
+
test_data.refresh
|
676
|
+
test_data["twb_case_id#{id}_slot#{dut.slot}_iter#{iteration}".to_sym] = case_instance_id
|
677
|
+
return case_instance_id
|
678
|
+
end
|
679
|
+
end
|
680
|
+
|
681
|
+
# Public: POSTs the Step level results to TWB.
|
682
|
+
#
|
683
|
+
# s3_screenshot - Boolean true/false indicating if a screenshot should be saved to S3 bucket (default: false).
|
684
|
+
# description - String description of results (default: 'Step Passed.').
|
685
|
+
# twb_suite_name - String name of the test suite (default: test_data[:twb_suite_name]).
|
686
|
+
# program_application_name - String name of the program application (default: test_data[:program_application_name]).
|
687
|
+
# screenshot - Boolean true/false indicating a screenshot is/isn't sent (default: false).
|
688
|
+
# ss_filename - String filename of image to POST. If none is provided a screenshot on active stb will be captured (default: nil)
|
689
|
+
# access_key_id - String S3 access key ID (default: TWB access key).
|
690
|
+
# secret_access_key - String S3 secret access key (default: TWB secret access key).
|
691
|
+
# bucket_name - String S3 bucket name (default: 'charter-testworkbench-com').
|
692
|
+
# aws_folder - String folder name where image will POST (default: TMC_Screenshots).
|
693
|
+
# case_instance_id - result of twb_get_case_instance_id
|
694
|
+
# suite_instance_id - result of twb_get_suite_instance_id
|
695
|
+
#
|
696
|
+
# Returns String return message if successful. Else, returns nil.
|
697
|
+
def twb_post_teststep(args={})
|
698
|
+
tcr_auto_detail_text = args.fetch(:description, 'Step Passed.')
|
699
|
+
post_screenshot = args.fetch(:screenshot, false)
|
700
|
+
post_s3_screenshot = args.fetch(:s3_screenshot, false)
|
701
|
+
ss_filename = args.fetch(:ss_filename, nil)
|
702
|
+
test_suite_name = (args.key?(:twb_suite_name)) ? args[:twb_suite_name] : test_data[:twb_suite_name]
|
703
|
+
program_application_name = (args.key?(:program_application_name)) ? args[:program_application_name] : test_data[:program_application_name]
|
704
|
+
|
705
|
+
suite_instance_id = (args.key?(:suite_instance_id)) ? args[:suite_instance_id] : twb_get_suite_instance_id(:twb_suite_name => test_suite_name,:program_application_name => program_application_name)
|
706
|
+
|
707
|
+
case_instance_id = (args.key?(:case_instance_id)) ? args[:case_instance_id] : twb_get_case_instance_id(:twb_suite_name => test_suite_name)
|
708
|
+
|
709
|
+
# POST /teststep/
|
710
|
+
logger.debug('POST /teststep/')
|
711
|
+
uri = args.fetch(
|
712
|
+
:uri,
|
713
|
+
'http://charter.testworkbench.com/ords/test/teststep/'
|
714
|
+
)
|
715
|
+
result = args.fetch(:result_value, 'Passed')
|
716
|
+
result = 'Passed' if result == :PASS
|
717
|
+
result = 'Failed' if result == :FAIL
|
718
|
+
if post_s3_screenshot
|
719
|
+
access_key_id = args.fetch(:access_key_id, 'AKIAJR4GME4RASTKVXXQ')
|
720
|
+
secret_access_key = args.fetch(:secret_access_key, 'Giekd7LXDGZBog+Yyno2m3yIryrbDZtnqThUTKxA')
|
721
|
+
bucket_name = args.fetch(:bucket_name, 'charter-testworkbench-com')
|
722
|
+
aws_folder = args.fetch(:aws_folder, 'TMC_Screenshots')
|
723
|
+
image_path = twb_prep_s3_screenshot(:access_key_id => access_key_id,
|
724
|
+
:secret_access_key => secret_access_key,
|
725
|
+
:bucket_name => bucket_name,
|
726
|
+
:suite_instance_id => suite_instance_id,
|
727
|
+
:case_instance_id => case_instance_id,
|
728
|
+
:aws_folder => aws_folder,
|
729
|
+
:ss_filename => ss_filename)
|
730
|
+
resp = web_post(uri, :verify_mode => 0, :json => {
|
731
|
+
:suite_instance_id => suite_instance_id,
|
732
|
+
:case_instance_id => case_instance_id,
|
733
|
+
:step_status => result,
|
734
|
+
:actual_description => tcr_auto_detail_text,
|
735
|
+
#:component => 'at mail',
|
736
|
+
:image_path => image_path
|
737
|
+
}).json
|
738
|
+
else
|
739
|
+
resp = web_post(uri, :verify_mode => 0, :json => {
|
740
|
+
:suite_instance_id => suite_instance_id,
|
741
|
+
:case_instance_id => case_instance_id,
|
742
|
+
:step_status => result,
|
743
|
+
:actual_description => tcr_auto_detail_text,
|
744
|
+
#:component => 'at mail',
|
745
|
+
#:image_path => 'S3 server location'
|
746
|
+
}).json
|
747
|
+
end
|
748
|
+
if post_screenshot
|
749
|
+
twb_post_screenshot(
|
750
|
+
:twb_suite_name => test_suite_name,
|
751
|
+
:program_application_name => program_application_name,
|
752
|
+
:suite_instance_id => suite_instance_id,
|
753
|
+
:case_instance_id => case_instance_id,
|
754
|
+
:ss_filename => ss_filename
|
755
|
+
)
|
756
|
+
end
|
757
|
+
return_msg = resp['return_msg']
|
758
|
+
if return_msg.nil?
|
759
|
+
logger.warn('Failed to POST Teststep to TWB!')
|
760
|
+
return nil
|
761
|
+
else
|
762
|
+
logger.debug("Return Msg: #{return_msg}")
|
763
|
+
return return_msg
|
764
|
+
end
|
765
|
+
end
|
766
|
+
|
767
|
+
|
768
|
+
# Public: Takes a screenshot on current STB and POSTS to TWB. The user has the ability to set the Suite & Case instance ID or if a Suite &/or Case ID already exists for the twb_suite_name or current Job Name, those will be used. In the case where neither a Suite & Case instance ID are provided and they don't already exist for the twb_suite_name or Job Name, new ones will be retrieved from TWB and added to the args.
|
769
|
+
#
|
770
|
+
# twb_suite_name - String name of the Test Suite Name to report to (default: test_data[:twb_suite_name])
|
771
|
+
# program_application_name - String name of the Program Application to report to (default: test_data[:program_application_name]).
|
772
|
+
# ss_filename - String filename of image to POST. If none is provided a screenshot on active stb will be captured (default: nil)
|
773
|
+
# timeout - Integer total milliseconds to wait for a response (default: 5.min).
|
774
|
+
# verify_mode - Integer desired HTTP verify mode (default: nil).
|
775
|
+
# uri - String full URI for the resource to request(default: "http://charter.testworkbench.com/ords/test/postScreenshots/#{case_instance_id}").
|
776
|
+
# case_instance_id - result of twb_get_case_instance_id
|
777
|
+
# suite_instance_id - result of twb_get_suite_instance_id
|
778
|
+
# size - number from 0 to 100 for percentage size of the image
|
779
|
+
# quality - number from 0 to 100 for image quality
|
780
|
+
#
|
781
|
+
# Returns the path to the screenshot file, ss_filename
|
782
|
+
def twb_post_screenshot!(args={})
|
783
|
+
args[:twb_suite_name] = test_data[:twb_suite_name] unless args.key?(:twb_suite_name)
|
784
|
+
test_suite_name = args[:twb_suite_name]
|
785
|
+
args[:program_application_name] = test_data[:program_application_name] unless args.key?(:program_application_name)
|
786
|
+
program_application_name = args[:program_application_name]
|
787
|
+
description = args[:description]
|
788
|
+
description = 'Starting Test...' if description.nil?
|
789
|
+
unless args.key?(:suite_instance_id)
|
790
|
+
args[:suite_instance_id] = twb_get_suite_instance_id(
|
791
|
+
:twb_suite_name => test_suite_name,
|
792
|
+
:program_application_name => program_application_name,
|
793
|
+
:description => description
|
794
|
+
)
|
795
|
+
end
|
796
|
+
args[:case_instance_id] = twb_get_case_instance_id(:twb_suite_name => test_suite_name) unless args.key?(:case_instance_id)
|
797
|
+
twb_post_screenshot(args)
|
798
|
+
end
|
799
|
+
|
800
|
+
# Public: POSTs the Step level results to TWB. Edits the args to add missing data
|
801
|
+
#
|
802
|
+
# s3_screenshot - Boolean true/false indicating if a screenshot should be saved to S3 bucket (default: false).
|
803
|
+
# description - String description of results (default: 'Step Passed.').
|
804
|
+
# twb_suite_name - String name of the test suite (default: test_data[:twb_suite_name]).
|
805
|
+
# program_application_name - String name of the program application (default: test_data[:program_application_name]).
|
806
|
+
# screenshot - Boolean true/false indicating a screenshot is/isn't sent (default: false).
|
807
|
+
# ss_filename - String filename of image to POST. If none is provided a screenshot on active stb will be captured (default: nil)
|
808
|
+
# access_key_id - String S3 access key ID (default: TWB access key).
|
809
|
+
# secret_access_key - String S3 secret access key (default: TWB secret access key).
|
810
|
+
# bucket_name - String S3 bucket name (default: 'charter-testworkbench-com').
|
811
|
+
# aws_folder - String folder name where image will POST (default: TMC_Screenshots).
|
812
|
+
# case_instance_id - result of twb_get_case_instance_id
|
813
|
+
# suite_instance_id - result of twb_get_suite_instance_id
|
814
|
+
#
|
815
|
+
# Returns String return message if successful. Else, returns nil.
|
816
|
+
def twb_post_teststep!(args={})
|
817
|
+
args[:twb_suite_name] = test_data[:twb_suite_name] unless args.key?(:twb_suite_name)
|
818
|
+
test_suite_name = args[:twb_suite_name]
|
819
|
+
args[:program_application_name] = test_data[:program_application_name] unless args.key?(:program_application_name)
|
820
|
+
program_application_name = args[:program_application_name]
|
821
|
+
description = args[:description]
|
822
|
+
description = 'Starting Test...' if description.nil?
|
823
|
+
unless args.key?(:suite_instance_id)
|
824
|
+
args[:suite_instance_id] = twb_get_suite_instance_id(
|
825
|
+
:twb_suite_name => test_suite_name,
|
826
|
+
:program_application_name => program_application_name,
|
827
|
+
:description => description
|
828
|
+
)
|
829
|
+
end
|
830
|
+
args[:case_instance_id] = twb_get_case_instance_id(:twb_suite_name => test_suite_name) unless args.key?(:case_instance_id)
|
831
|
+
twb_post_teststep(args)
|
832
|
+
end
|
833
|
+
|
834
|
+
# Public: Performs a GET request for the given URI.
|
835
|
+
#
|
836
|
+
# uri - String full URI for the resource to GET.
|
837
|
+
# body - String data to populate the request body (default: nil).
|
838
|
+
# headers - Hash of headers to add to the request (default: {}).
|
839
|
+
# basic_auth - Hash of basic authentication :username and :password to use (default: nil).
|
840
|
+
# timeout - Integer total milliseconds to wait for a response (default: 5.min).
|
841
|
+
#
|
842
|
+
# Returns the Hash JSON response, or nil if there was an error.
|
843
|
+
def web_get(uri, args={})
|
844
|
+
web_request(:get, uri, args)
|
845
|
+
end
|
846
|
+
|
847
|
+
# Public: Performs a POST request for the given URI.
|
848
|
+
#
|
849
|
+
# uri - String full URI for the resource to POST.
|
850
|
+
# body - String data to populate the request body (default: nil).
|
851
|
+
# json - Hash JSON object to send in the request body (default: nil). By default no JSON will be included.
|
852
|
+
# form_data - Hash form data to send in the request (default: nil). By default no form data will be included.
|
853
|
+
# basic_auth - Hash of basic authentication :username and :password to use (default: nil).
|
854
|
+
# headers - Hash of headers to add to the request (default: {}).
|
855
|
+
# timeout - Integer total milliseconds to wait for a response (default: 5.min).
|
856
|
+
#
|
857
|
+
# Returns the Hash JSON response, or nil if there was an error.
|
858
|
+
def web_post(uri, args={})
|
859
|
+
web_request(:post, uri, args)
|
860
|
+
end
|
861
|
+
|
862
|
+
# Public: Performs a PUT request for the given URI.
|
863
|
+
#
|
864
|
+
# uri - String full URI for the resource to PUT.
|
865
|
+
# body - String data to populate the request body (default: nil).
|
866
|
+
# json - Hash JSON object to send in the request body (default: nil). By default no JSON will be included.
|
867
|
+
# form_data - Hash form data to send in the request (default: nil). By default no form data will be included.
|
868
|
+
# basic_auth - Hash of basic authentication :username and :password to use (default: nil).
|
869
|
+
# headers - Hash of headers to add to the request (default: {}).
|
870
|
+
# timeout - Integer total milliseconds to wait for a response (default: 5.min).
|
871
|
+
#
|
872
|
+
# Returns the Hash JSON response, or nil if there was an error.
|
873
|
+
def web_put(uri, args={})
|
874
|
+
web_request(:put, uri, args)
|
875
|
+
end
|
876
|
+
|
877
|
+
# Public: Performs a DELETE request for the given URI.
|
878
|
+
#
|
879
|
+
# uri - String full URI for the resource to DELETE.
|
880
|
+
# body - String data to populate the request body (default: nil).
|
881
|
+
# json - Hash JSON object to send in the request body (default: nil). By default no JSON will be included.
|
882
|
+
# form_data - Hash form data to send in the request (default: nil). By default no form data will be included.
|
883
|
+
# basic_auth - Hash of basic authentication :username and :password to use (default: nil).
|
884
|
+
# headers - Hash of headers to add to the request (default: {}).
|
885
|
+
# timeout - Integer total milliseconds to wait for a response (default: 5.min).
|
886
|
+
#
|
887
|
+
# Returns the Hash JSON response, or nil if there was an error.
|
888
|
+
def web_delete(uri, args={})
|
889
|
+
web_request(:delete, uri, args)
|
890
|
+
end
|
891
|
+
|
892
|
+
# Public: Computes the similarity of two strings by searching the read string for
|
893
|
+
# the expected string within
|
894
|
+
# expected - the string expected by the test
|
895
|
+
# read - the string read from screen
|
896
|
+
# options - options for cleaning common OCR text errors. see get_clean_ocr_text
|
897
|
+
def get_substring_similarity(expected, read, options = {})
|
898
|
+
expected = get_clean_ocr_text(expected, options)
|
899
|
+
read = get_clean_ocr_text(read, options)
|
900
|
+
|
901
|
+
max_similarity = 0
|
902
|
+
|
903
|
+
# if the expected string is longer than the read string
|
904
|
+
# padding will need to be added
|
905
|
+
if expected.length > read.length
|
906
|
+
read = read.ljust(expected.length, ' ')
|
907
|
+
end
|
908
|
+
|
909
|
+
i = 0
|
910
|
+
until i > read.length - expected.length do
|
911
|
+
substring = read[i, expected.length]
|
912
|
+
similarity = get_string_similarity(expected, substring)
|
913
|
+
max_similarity = [similarity, max_similarity].max
|
914
|
+
i += 1
|
915
|
+
end
|
916
|
+
|
917
|
+
return max_similarity
|
918
|
+
end
|
919
|
+
|
920
|
+
# Public: Computes the similarity of two strings and returns a value of 1.0 for
|
921
|
+
# identical strings. This is based on the Levenshtein distance algorithm
|
922
|
+
# s1 - string to compare
|
923
|
+
# s2 - string to compare
|
924
|
+
# options - options to process strings (see: get_clean_ocr_text)
|
925
|
+
def get_string_similarity(s1, s2, options = {})
|
926
|
+
s1 = get_clean_ocr_text(s1, options)
|
927
|
+
s2 = get_clean_ocr_text(s2, options)
|
928
|
+
|
929
|
+
if s1 == s2
|
930
|
+
return 1.0
|
931
|
+
end
|
932
|
+
|
933
|
+
n = s1.length
|
934
|
+
m = s2.length
|
935
|
+
d = Array.new(n + 1) { Array.new(m +1) }
|
936
|
+
|
937
|
+
(0..n).each {|i| d[i][0] = i}
|
938
|
+
(0..m).each {|j| d[0][j] = j}
|
939
|
+
|
940
|
+
for i in 1..n
|
941
|
+
for j in 1..m
|
942
|
+
cost = s2[j - 1] == s1[i - 1] ? 0 : 1
|
943
|
+
d[i][j] = [d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost].min
|
944
|
+
end
|
945
|
+
end
|
946
|
+
|
947
|
+
denom = [n, m].max
|
948
|
+
return 1.0 - (d[n][m] / denom.to_f)
|
949
|
+
end
|
950
|
+
|
951
|
+
# Public: Returns a modified string with common OCR replacements
|
952
|
+
# inputString - string to be cleaned
|
953
|
+
# options - operations to be applied to the input string
|
954
|
+
def get_clean_ocr_text(inputString, options = {:removeSpaces => false,
|
955
|
+
:toUppercase => false,
|
956
|
+
:removeSpecials => false,
|
957
|
+
:replaceB3 => false,
|
958
|
+
:replaceB8 => false,
|
959
|
+
:replaceG6 => false,
|
960
|
+
:replaceO0 => false,
|
961
|
+
:replaceTL => false,
|
962
|
+
:replaceS5 => false})
|
963
|
+
modifiedString = inputString
|
964
|
+
if options[:removeSpaces]
|
965
|
+
modifiedString = modifiedString.gsub(/\s+/, '')
|
966
|
+
end
|
967
|
+
if options[:toUppercase]
|
968
|
+
modifiedString = modifiedString.upcase
|
969
|
+
end
|
970
|
+
if options[:removeSpecials]
|
971
|
+
modifiedString = modifiedString.gsub(/[^A-Za-z0-9]/, '')
|
972
|
+
end
|
973
|
+
if options[:replaceB3]
|
974
|
+
modifiedString = modifiedString.gsub(/[3B]/, 'B')
|
975
|
+
end
|
976
|
+
if options[:replaceB8]
|
977
|
+
modifiedString = modifiedString.gsub(/[8B]/, 'B')
|
978
|
+
end
|
979
|
+
if options[:replaceG6]
|
980
|
+
modifiedString = modifiedString.gsub(/[G6]/, 'G')
|
981
|
+
end
|
982
|
+
if options[:replaceO0]
|
983
|
+
modifiedString = modifiedString.gsub(/[0O]/, 'O')
|
984
|
+
end
|
985
|
+
if options[:replaceTL]
|
986
|
+
modifiedString = modifiedString.gsub(/[LlT]/, 'L')
|
987
|
+
end
|
988
|
+
if options[:replaceS5]
|
989
|
+
modifiedString = modifiedString.gsub(/[S5]/, 'S')
|
990
|
+
end
|
991
|
+
|
992
|
+
return modifiedString
|
993
|
+
end
|
994
|
+
|
995
|
+
# Public: Converts a Ruby object to standard JSON format, i.e. :is_on_screen becomes :isOnScreen, etc.
|
996
|
+
#
|
997
|
+
# obj - Object to convert.
|
998
|
+
#
|
999
|
+
# Returns the converted Object.
|
1000
|
+
def jsonify(obj, camel_case: true)
|
1001
|
+
if obj.is_a?(Hash)
|
1002
|
+
Hash[obj.map {|k,v| [jsonify(k.to_sym, camel_case: camel_case), jsonify(v, camel_case: camel_case)]}]
|
1003
|
+
elsif obj.is_a?(Array)
|
1004
|
+
obj.map {|v| jsonify(v, camel_case: camel_case)}
|
1005
|
+
elsif obj.is_a?(Symbol)
|
1006
|
+
camel_case ? to_camel_case(obj) : obj
|
1007
|
+
else
|
1008
|
+
obj
|
1009
|
+
end
|
1010
|
+
end
|
1011
|
+
|
1012
|
+
# Public: Converts a JSON object to standard Ruby format, i.e. 'isOnScreen' becomes :is_on_screen, etc.
|
1013
|
+
#
|
1014
|
+
# obj - Object to convert.
|
1015
|
+
#
|
1016
|
+
# Returns the converted Object.
|
1017
|
+
def rubify(json, snake_case: true)
|
1018
|
+
if json.is_a?(Hash)
|
1019
|
+
Hash[json.map {|k,v| [rubify(k.to_sym, snake_case: snake_case), rubify(v, snake_case: snake_case)]}]
|
1020
|
+
elsif json.is_a?(Array)
|
1021
|
+
json.map {|v| self.rubify(v, snake_case: snake_case)}
|
1022
|
+
elsif json.is_a?(Symbol)
|
1023
|
+
snake_case ? to_snake_case(json) : json
|
1024
|
+
else
|
1025
|
+
json
|
1026
|
+
end
|
1027
|
+
end
|
1028
|
+
|
1029
|
+
# Public: Converts a value into snake_case
|
1030
|
+
#
|
1031
|
+
# value - String or Symbol to convert
|
1032
|
+
#
|
1033
|
+
# Returns the String or Symbol converted to snake_case.
|
1034
|
+
def to_snake_case(value)
|
1035
|
+
snake_case = value.to_s.gsub(/(?<!^)([A-Z])/, '_\1').downcase
|
1036
|
+
value.is_a?(Symbol) ? snake_case.to_sym : snake_case
|
1037
|
+
end
|
1038
|
+
|
1039
|
+
# Public: Converts a value into PascalCase
|
1040
|
+
#
|
1041
|
+
# value - String or Symbol value to convert
|
1042
|
+
#
|
1043
|
+
# Returns the String or Symbol converted to PascalCase.
|
1044
|
+
def to_pascal_case(value)
|
1045
|
+
pascal_case = value.to_s.split('_').map { |part| part.slice(0, 1).upcase + part.slice(1..-1) }.join
|
1046
|
+
value.is_a?(Symbol) ? pascal_case.to_sym : pascal_case
|
1047
|
+
end
|
1048
|
+
|
1049
|
+
# Public: Converts a value into camelCase
|
1050
|
+
#
|
1051
|
+
# value - String or Symbol value to convert
|
1052
|
+
#
|
1053
|
+
# Returns the String or Symbol converted to camelCase.
|
1054
|
+
def to_camel_case(value)
|
1055
|
+
parts = value.to_s.split('_').reject {|part| part.empty?}
|
1056
|
+
camel_case = parts[0].slice(0, 1).downcase + parts[0].slice(1..-1) +
|
1057
|
+
parts[1..-1].map { |part| part.slice(0, 1).upcase + part.slice(1..-1) }.join
|
1058
|
+
value.is_a?(Symbol) ? camel_case.to_sym : camel_case
|
1059
|
+
end
|
1060
|
+
|
1061
|
+
# Public: Gets a readable string for the given size in bytes.
|
1062
|
+
#
|
1063
|
+
# size_bytes - Integer size in bytes.
|
1064
|
+
#
|
1065
|
+
# Returns a String readable size in bytes.
|
1066
|
+
def get_readable_size(size_bytes)
|
1067
|
+
units = %w(B KB MB GB TB)
|
1068
|
+
Array(0..units.length - 1).reverse.each do |i|
|
1069
|
+
mult = 1000.0 ** i
|
1070
|
+
if size_bytes >= (mult == 1 ? 0 : mult)
|
1071
|
+
return "#{(size_bytes / mult).round(1)} #{units[i]}"
|
1072
|
+
end
|
1073
|
+
end
|
1074
|
+
end
|
1075
|
+
|
1076
|
+
# Public: Gets a readable string for the given time in seconds.
|
1077
|
+
#
|
1078
|
+
# time_sec - Numeric seconds.
|
1079
|
+
#
|
1080
|
+
# Returns a String readable time.
|
1081
|
+
def get_readable_time(time_sec)
|
1082
|
+
parts = []
|
1083
|
+
h = (time_sec / 3600.0).to_i
|
1084
|
+
parts << "#{h}h" if h > 0
|
1085
|
+
time_sec -= (h * 3600)
|
1086
|
+
m = (time_sec / 60.0).to_i
|
1087
|
+
parts << "#{m}m" if m > 0
|
1088
|
+
time_sec -= (m * 60)
|
1089
|
+
s = time_sec.to_i
|
1090
|
+
parts << "#{s}s" if s > 0
|
1091
|
+
ms = ((time_sec - s) * 1000.0).round
|
1092
|
+
parts << "#{ms}ms" if ms > 0 || parts.empty?
|
1093
|
+
parts.join(', ')
|
1094
|
+
end
|
1095
|
+
|
1096
|
+
# Public: Can send an alert to a WebEx room. Must have token to pass into first param.
|
1097
|
+
#
|
1098
|
+
# token - Obtain token by creating bot @ https://developer.webex.com/docs/bots
|
1099
|
+
# room_id - Create room in webex, add bot to room. Then, can get roomId here: https://developer.webex.com/docs/api/v1/rooms/list-rooms
|
1100
|
+
# text - text to send into message body (default: nil)
|
1101
|
+
# markdown - useful if you would like to create markdown text instead of plain. (default: nil)
|
1102
|
+
|
1103
|
+
def send_webex_alert(token, room_id, text: nil, markdown: nil)
|
1104
|
+
web_post("https://api.ciscospark.com/v1/messages", { json: {
|
1105
|
+
text: text.to_s, # to_s incase user doesn't sanitize.
|
1106
|
+
roomId: room_id.to_s,
|
1107
|
+
markdown: markdown.to_s
|
1108
|
+
},
|
1109
|
+
# pass token into header
|
1110
|
+
headers: {
|
1111
|
+
"Authorization": "Bearer #{token}"
|
1112
|
+
}
|
1113
|
+
})
|
1114
|
+
end
|
1115
|
+
|
1116
|
+
private
|
1117
|
+
|
1118
|
+
# Internal: Gets the specified bucket from the given S3 instance, or creates the bucket if it does not exist.
|
1119
|
+
def get_or_create_s3_bucket(s3, bucket)
|
1120
|
+
b = s3.bucket(bucket)
|
1121
|
+
unless b.exists?
|
1122
|
+
b.create
|
1123
|
+
logger.debug('Created bucket')
|
1124
|
+
end
|
1125
|
+
b
|
1126
|
+
end
|
1127
|
+
|
1128
|
+
# Internal: Requires the AWS gem and executes the given block.
|
1129
|
+
def with_aws(&block)
|
1130
|
+
require 'aws-sdk-s3' # require here as it takes some time, to avoid impacting syntax eval
|
1131
|
+
block.call
|
1132
|
+
end
|
1133
|
+
|
1134
|
+
# Internal: Passes an AWS S3 instance to the given block.
|
1135
|
+
def aws(&block)
|
1136
|
+
with_aws { block.call(Aws::S3::Resource.new) }
|
1137
|
+
end
|
1138
|
+
|
1139
|
+
# Internal: Gets the current user.
|
1140
|
+
def current_user
|
1141
|
+
if @current_user.nil?
|
1142
|
+
@current_user = tmc_get('/api/login') || {}
|
1143
|
+
end
|
1144
|
+
@current_user
|
1145
|
+
end
|
1146
|
+
|
1147
|
+
# Internal: Gets the results path.
|
1148
|
+
def results_path
|
1149
|
+
if @results_path.nil?
|
1150
|
+
# Bad idea to build absolute paths in the Ruby framework. Maybe get them from TMC (new endpoint).
|
1151
|
+
user = current_user['shortName']
|
1152
|
+
@results_path = "C:\\Program Files\\Time Warner Cable\\users\\#{user}\\results"
|
1153
|
+
end
|
1154
|
+
@results_path
|
1155
|
+
end
|
1156
|
+
|
1157
|
+
# Internal: Gets the image samples path.
|
1158
|
+
def image_samples_path
|
1159
|
+
if @image_samples_path.nil?
|
1160
|
+
# Bad idea to build absolute paths in the Ruby framework. Maybe get them from TMC (new endpoint).
|
1161
|
+
user = current_user['shortName']
|
1162
|
+
@image_samples_path = "C:\\Program Files\\Time Warner Cable\\users\\#{user}\\images"
|
1163
|
+
end
|
1164
|
+
@image_samples_path
|
1165
|
+
end
|
1166
|
+
|
1167
|
+
# Internal: Gets the current workspace.
|
1168
|
+
def current_workspace
|
1169
|
+
if @current_workspace.nil?
|
1170
|
+
@current_workspace = tmc_get('/api/workspaces/current')['name'] rescue nil
|
1171
|
+
end
|
1172
|
+
@current_workspace
|
1173
|
+
end
|
1174
|
+
|
1175
|
+
# Internal: Gets the server info.
|
1176
|
+
def server_info
|
1177
|
+
if @tmc_server_info.nil?
|
1178
|
+
@tmc_server_info = tmc_get('/api/info')
|
1179
|
+
end
|
1180
|
+
@tmc_server_info
|
1181
|
+
end
|
1182
|
+
|
1183
|
+
# Internal: Gets the TMC software version.
|
1184
|
+
def tmc_software_version
|
1185
|
+
if @tmc_server_version.nil?
|
1186
|
+
@tmc_server_version = server_info['version']
|
1187
|
+
end
|
1188
|
+
@tmc_server_version
|
1189
|
+
end
|
1190
|
+
|
1191
|
+
# Internal: Performs a GET request for the given TMC resource.
|
1192
|
+
#
|
1193
|
+
# resource - String URI of resource to GET. Exclude the protocol, host, and port.
|
1194
|
+
# port - Integer alternate port to use (default: 80).
|
1195
|
+
# timeout - Integer total milliseconds to wait for a response (default: 5.min).
|
1196
|
+
# attr - Symbol name of response attribute to get (default: :json).
|
1197
|
+
#
|
1198
|
+
# Returns the Hash JSON response, or nil if there was an error.
|
1199
|
+
def tmc_get(resource, args={})
|
1200
|
+
tmc_request(:get, resource, args)
|
1201
|
+
end
|
1202
|
+
|
1203
|
+
# Internal: Performs a POST request for the given TMC resource.
|
1204
|
+
#
|
1205
|
+
# resource - String URI of resource to POST. Exclude the protocol, host, and port.
|
1206
|
+
# port - Integer alternate port to use (default: 80).
|
1207
|
+
# json - Hash JSON object to send in the request body (default: nil). By default no JSON will be included.
|
1208
|
+
# timeout - Integer total milliseconds to wait for a response (default: 5.min).
|
1209
|
+
#
|
1210
|
+
# Returns the Hash JSON response, or nil if there was an error.
|
1211
|
+
def tmc_post(resource, args={})
|
1212
|
+
tmc_request(:post, resource, args)
|
1213
|
+
end
|
1214
|
+
|
1215
|
+
# Internal: Performs a PUT request for the given TMC resource.
|
1216
|
+
#
|
1217
|
+
# resource - String URI of resource to PUT. Exclude the protocol, host, and port.
|
1218
|
+
# port - Integer alternate port to use (default: 80).
|
1219
|
+
# json - Hash JSON object to send in the request body (default: nil). By default no JSON will be included.
|
1220
|
+
# timeout - Integer total milliseconds to wait for a response (default: 5.min).
|
1221
|
+
#
|
1222
|
+
# Returns the Hash JSON response, or nil if there was an error.
|
1223
|
+
def tmc_put(resource, args={})
|
1224
|
+
tmc_request(:put, resource, args)
|
1225
|
+
end
|
1226
|
+
|
1227
|
+
# Internal: Performs a DELETE request for the given TMC resource.
|
1228
|
+
#
|
1229
|
+
# resource - String URI of resource to DELETE. Exclude the protocol, host, and port.
|
1230
|
+
# port - Integer alternate port to use (default: 80).
|
1231
|
+
# json - Hash JSON object to send in the request body (default: nil). By default no JSON will be included.
|
1232
|
+
# timeout - Integer total milliseconds to wait for a response (default: 5.min).
|
1233
|
+
#
|
1234
|
+
# Returns the Hash JSON response, or nil if there was an error.
|
1235
|
+
def tmc_delete(resource, args={})
|
1236
|
+
tmc_request(:delete, resource, args)
|
1237
|
+
end
|
1238
|
+
|
1239
|
+
# Internal: Performs a web request for the given TMC resource.
|
1240
|
+
#
|
1241
|
+
# http_method - Symbol HTTP method to use from :get, :post, :put, :delete.
|
1242
|
+
# resource - String URI of resource to request. Exclude the protocol, host, and port.
|
1243
|
+
# port - Integer alternate port to use (default: 443).
|
1244
|
+
# json - Hash JSON object to send in the request body (default: nil). By default no JSON will be included.
|
1245
|
+
# attr - Symbol attribute to return (default: :json).
|
1246
|
+
# timeout - Integer total milliseconds to wait for a response (default: 5.min).
|
1247
|
+
#
|
1248
|
+
# Returns the Hash JSON response, or nil if there was an error.
|
1249
|
+
def tmc_request(http_method, resource, args={})
|
1250
|
+
uri = "https://#{host}:#{args.fetch(:port, 443)}#{resource}"
|
1251
|
+
args[:headers] = {'TMC-Identity-GUID': identity}
|
1252
|
+
return_attr = args.delete(:attr) || :json
|
1253
|
+
resp = web_request(http_method, uri, args)
|
1254
|
+
if !resp.json.nil? && resp.json['status'] == -1
|
1255
|
+
raise "#{resp.json['statusMessage'] || ''}\n#{resp.json['statusDetail'] || ''}".strip
|
1256
|
+
end
|
1257
|
+
resp.send(return_attr)
|
1258
|
+
end
|
1259
|
+
|
1260
|
+
end
|