google-dfp-api 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (469) hide show
  1. checksums.yaml +4 -4
  2. data/COPYING +0 -0
  3. data/ChangeLog +12 -3
  4. data/README.md +0 -0
  5. data/dfp_api.yml +2 -0
  6. data/lib/dfp_api.rb +45 -0
  7. data/lib/dfp_api/api_config.rb +6 -30
  8. data/lib/dfp_api/credential_handler.rb +7 -2
  9. data/lib/dfp_api/dfp_api_datetime.rb +182 -0
  10. data/lib/dfp_api/dfp_api_statement.rb +9 -0
  11. data/lib/dfp_api/errors.rb +0 -0
  12. data/lib/dfp_api/pql_statement_utils.rb +193 -0
  13. data/lib/dfp_api/utils.rb +56 -0
  14. data/lib/dfp_api/utils_reporter.rb +52 -0
  15. data/lib/dfp_api/v201705/activity_group_service.rb +0 -0
  16. data/lib/dfp_api/v201705/activity_group_service_registry.rb +0 -0
  17. data/lib/dfp_api/v201705/activity_service.rb +0 -0
  18. data/lib/dfp_api/v201705/activity_service_registry.rb +0 -0
  19. data/lib/dfp_api/v201705/ad_exclusion_rule_service.rb +0 -0
  20. data/lib/dfp_api/v201705/ad_exclusion_rule_service_registry.rb +0 -0
  21. data/lib/dfp_api/v201705/ad_rule_service.rb +0 -0
  22. data/lib/dfp_api/v201705/ad_rule_service_registry.rb +0 -0
  23. data/lib/dfp_api/v201705/audience_segment_service.rb +0 -0
  24. data/lib/dfp_api/v201705/audience_segment_service_registry.rb +0 -0
  25. data/lib/dfp_api/v201705/base_rate_service.rb +0 -0
  26. data/lib/dfp_api/v201705/base_rate_service_registry.rb +0 -0
  27. data/lib/dfp_api/v201705/company_service.rb +0 -0
  28. data/lib/dfp_api/v201705/company_service_registry.rb +0 -0
  29. data/lib/dfp_api/v201705/contact_service.rb +0 -0
  30. data/lib/dfp_api/v201705/contact_service_registry.rb +0 -0
  31. data/lib/dfp_api/v201705/content_bundle_service.rb +0 -0
  32. data/lib/dfp_api/v201705/content_bundle_service_registry.rb +0 -0
  33. data/lib/dfp_api/v201705/content_metadata_key_hierarchy_service.rb +0 -0
  34. data/lib/dfp_api/v201705/content_metadata_key_hierarchy_service_registry.rb +0 -0
  35. data/lib/dfp_api/v201705/content_service.rb +0 -0
  36. data/lib/dfp_api/v201705/content_service_registry.rb +0 -0
  37. data/lib/dfp_api/v201705/creative_service.rb +0 -0
  38. data/lib/dfp_api/v201705/creative_service_registry.rb +0 -0
  39. data/lib/dfp_api/v201705/creative_set_service.rb +0 -0
  40. data/lib/dfp_api/v201705/creative_set_service_registry.rb +0 -0
  41. data/lib/dfp_api/v201705/creative_template_service.rb +0 -0
  42. data/lib/dfp_api/v201705/creative_template_service_registry.rb +0 -0
  43. data/lib/dfp_api/v201705/creative_wrapper_service.rb +0 -0
  44. data/lib/dfp_api/v201705/creative_wrapper_service_registry.rb +0 -0
  45. data/lib/dfp_api/v201705/custom_field_service.rb +0 -0
  46. data/lib/dfp_api/v201705/custom_field_service_registry.rb +0 -0
  47. data/lib/dfp_api/v201705/custom_targeting_service.rb +0 -0
  48. data/lib/dfp_api/v201705/custom_targeting_service_registry.rb +0 -0
  49. data/lib/dfp_api/v201705/exchange_rate_service.rb +0 -0
  50. data/lib/dfp_api/v201705/exchange_rate_service_registry.rb +0 -0
  51. data/lib/dfp_api/v201705/forecast_service.rb +0 -0
  52. data/lib/dfp_api/v201705/forecast_service_registry.rb +0 -0
  53. data/lib/dfp_api/v201705/inventory_service.rb +0 -0
  54. data/lib/dfp_api/v201705/inventory_service_registry.rb +0 -0
  55. data/lib/dfp_api/v201705/label_service.rb +0 -0
  56. data/lib/dfp_api/v201705/label_service_registry.rb +0 -0
  57. data/lib/dfp_api/v201705/line_item_creative_association_service.rb +0 -0
  58. data/lib/dfp_api/v201705/line_item_creative_association_service_registry.rb +0 -0
  59. data/lib/dfp_api/v201705/line_item_service.rb +0 -0
  60. data/lib/dfp_api/v201705/line_item_service_registry.rb +0 -0
  61. data/lib/dfp_api/v201705/line_item_template_service.rb +0 -0
  62. data/lib/dfp_api/v201705/line_item_template_service_registry.rb +0 -0
  63. data/lib/dfp_api/v201705/live_stream_event_service.rb +0 -0
  64. data/lib/dfp_api/v201705/live_stream_event_service_registry.rb +0 -0
  65. data/lib/dfp_api/v201705/mobile_application_service.rb +0 -0
  66. data/lib/dfp_api/v201705/mobile_application_service_registry.rb +0 -0
  67. data/lib/dfp_api/v201705/native_style_service.rb +0 -0
  68. data/lib/dfp_api/v201705/native_style_service_registry.rb +0 -0
  69. data/lib/dfp_api/v201705/network_service.rb +0 -0
  70. data/lib/dfp_api/v201705/network_service_registry.rb +0 -0
  71. data/lib/dfp_api/v201705/order_service.rb +0 -0
  72. data/lib/dfp_api/v201705/order_service_registry.rb +0 -0
  73. data/lib/dfp_api/v201705/package_service.rb +0 -0
  74. data/lib/dfp_api/v201705/package_service_registry.rb +0 -0
  75. data/lib/dfp_api/v201705/placement_service.rb +0 -0
  76. data/lib/dfp_api/v201705/placement_service_registry.rb +0 -0
  77. data/lib/dfp_api/v201705/premium_rate_service.rb +0 -0
  78. data/lib/dfp_api/v201705/premium_rate_service_registry.rb +0 -0
  79. data/lib/dfp_api/v201705/product_package_item_service.rb +0 -0
  80. data/lib/dfp_api/v201705/product_package_item_service_registry.rb +0 -0
  81. data/lib/dfp_api/v201705/product_package_service.rb +0 -0
  82. data/lib/dfp_api/v201705/product_package_service_registry.rb +0 -0
  83. data/lib/dfp_api/v201705/product_service.rb +0 -0
  84. data/lib/dfp_api/v201705/product_service_registry.rb +0 -0
  85. data/lib/dfp_api/v201705/product_template_service.rb +0 -0
  86. data/lib/dfp_api/v201705/product_template_service_registry.rb +0 -0
  87. data/lib/dfp_api/v201705/proposal_line_item_service.rb +0 -0
  88. data/lib/dfp_api/v201705/proposal_line_item_service_registry.rb +0 -0
  89. data/lib/dfp_api/v201705/proposal_service.rb +0 -0
  90. data/lib/dfp_api/v201705/proposal_service_registry.rb +0 -0
  91. data/lib/dfp_api/v201705/publisher_query_language_service.rb +0 -0
  92. data/lib/dfp_api/v201705/publisher_query_language_service_registry.rb +0 -0
  93. data/lib/dfp_api/v201705/rate_card_service.rb +0 -0
  94. data/lib/dfp_api/v201705/rate_card_service_registry.rb +0 -0
  95. data/lib/dfp_api/v201705/reconciliation_line_item_report_service.rb +0 -0
  96. data/lib/dfp_api/v201705/reconciliation_line_item_report_service_registry.rb +0 -0
  97. data/lib/dfp_api/v201705/reconciliation_order_report_service.rb +0 -0
  98. data/lib/dfp_api/v201705/reconciliation_order_report_service_registry.rb +0 -0
  99. data/lib/dfp_api/v201705/reconciliation_report_row_service.rb +0 -0
  100. data/lib/dfp_api/v201705/reconciliation_report_row_service_registry.rb +0 -0
  101. data/lib/dfp_api/v201705/reconciliation_report_service.rb +0 -0
  102. data/lib/dfp_api/v201705/reconciliation_report_service_registry.rb +0 -0
  103. data/lib/dfp_api/v201705/report_service.rb +0 -0
  104. data/lib/dfp_api/v201705/report_service_registry.rb +0 -0
  105. data/lib/dfp_api/v201705/suggested_ad_unit_service.rb +0 -0
  106. data/lib/dfp_api/v201705/suggested_ad_unit_service_registry.rb +0 -0
  107. data/lib/dfp_api/v201705/team_service.rb +0 -0
  108. data/lib/dfp_api/v201705/team_service_registry.rb +0 -0
  109. data/lib/dfp_api/v201705/user_service.rb +0 -0
  110. data/lib/dfp_api/v201705/user_service_registry.rb +0 -0
  111. data/lib/dfp_api/v201705/user_team_association_service.rb +0 -0
  112. data/lib/dfp_api/v201705/user_team_association_service_registry.rb +0 -0
  113. data/lib/dfp_api/v201705/workflow_request_service.rb +0 -0
  114. data/lib/dfp_api/v201705/workflow_request_service_registry.rb +0 -0
  115. data/lib/dfp_api/v201708/activity_group_service.rb +0 -0
  116. data/lib/dfp_api/v201708/activity_group_service_registry.rb +0 -0
  117. data/lib/dfp_api/v201708/activity_service.rb +0 -0
  118. data/lib/dfp_api/v201708/activity_service_registry.rb +0 -0
  119. data/lib/dfp_api/v201708/ad_exclusion_rule_service.rb +0 -0
  120. data/lib/dfp_api/v201708/ad_exclusion_rule_service_registry.rb +0 -0
  121. data/lib/dfp_api/v201708/ad_rule_service.rb +0 -0
  122. data/lib/dfp_api/v201708/ad_rule_service_registry.rb +0 -0
  123. data/lib/dfp_api/v201708/audience_segment_service.rb +0 -0
  124. data/lib/dfp_api/v201708/audience_segment_service_registry.rb +0 -0
  125. data/lib/dfp_api/v201708/base_rate_service.rb +0 -0
  126. data/lib/dfp_api/v201708/base_rate_service_registry.rb +0 -0
  127. data/lib/dfp_api/v201708/company_service.rb +0 -0
  128. data/lib/dfp_api/v201708/company_service_registry.rb +0 -0
  129. data/lib/dfp_api/v201708/contact_service.rb +0 -0
  130. data/lib/dfp_api/v201708/contact_service_registry.rb +0 -0
  131. data/lib/dfp_api/v201708/content_bundle_service.rb +0 -0
  132. data/lib/dfp_api/v201708/content_bundle_service_registry.rb +0 -0
  133. data/lib/dfp_api/v201708/content_metadata_key_hierarchy_service.rb +0 -0
  134. data/lib/dfp_api/v201708/content_metadata_key_hierarchy_service_registry.rb +0 -0
  135. data/lib/dfp_api/v201708/content_service.rb +0 -0
  136. data/lib/dfp_api/v201708/content_service_registry.rb +0 -0
  137. data/lib/dfp_api/v201708/creative_service.rb +0 -0
  138. data/lib/dfp_api/v201708/creative_service_registry.rb +0 -0
  139. data/lib/dfp_api/v201708/creative_set_service.rb +0 -0
  140. data/lib/dfp_api/v201708/creative_set_service_registry.rb +0 -0
  141. data/lib/dfp_api/v201708/creative_template_service.rb +0 -0
  142. data/lib/dfp_api/v201708/creative_template_service_registry.rb +0 -0
  143. data/lib/dfp_api/v201708/creative_wrapper_service.rb +0 -0
  144. data/lib/dfp_api/v201708/creative_wrapper_service_registry.rb +0 -0
  145. data/lib/dfp_api/v201708/custom_field_service.rb +0 -0
  146. data/lib/dfp_api/v201708/custom_field_service_registry.rb +0 -0
  147. data/lib/dfp_api/v201708/custom_targeting_service.rb +0 -0
  148. data/lib/dfp_api/v201708/custom_targeting_service_registry.rb +0 -0
  149. data/lib/dfp_api/v201708/exchange_rate_service.rb +0 -0
  150. data/lib/dfp_api/v201708/exchange_rate_service_registry.rb +0 -0
  151. data/lib/dfp_api/v201708/forecast_service.rb +0 -0
  152. data/lib/dfp_api/v201708/forecast_service_registry.rb +0 -0
  153. data/lib/dfp_api/v201708/inventory_service.rb +0 -0
  154. data/lib/dfp_api/v201708/inventory_service_registry.rb +0 -0
  155. data/lib/dfp_api/v201708/label_service.rb +0 -0
  156. data/lib/dfp_api/v201708/label_service_registry.rb +0 -0
  157. data/lib/dfp_api/v201708/line_item_creative_association_service.rb +0 -0
  158. data/lib/dfp_api/v201708/line_item_creative_association_service_registry.rb +0 -0
  159. data/lib/dfp_api/v201708/line_item_service.rb +0 -0
  160. data/lib/dfp_api/v201708/line_item_service_registry.rb +0 -0
  161. data/lib/dfp_api/v201708/line_item_template_service.rb +0 -0
  162. data/lib/dfp_api/v201708/line_item_template_service_registry.rb +0 -0
  163. data/lib/dfp_api/v201708/live_stream_event_service.rb +0 -0
  164. data/lib/dfp_api/v201708/live_stream_event_service_registry.rb +0 -0
  165. data/lib/dfp_api/v201708/mobile_application_service.rb +0 -0
  166. data/lib/dfp_api/v201708/mobile_application_service_registry.rb +0 -0
  167. data/lib/dfp_api/v201708/native_style_service.rb +0 -0
  168. data/lib/dfp_api/v201708/native_style_service_registry.rb +0 -0
  169. data/lib/dfp_api/v201708/network_service.rb +0 -0
  170. data/lib/dfp_api/v201708/network_service_registry.rb +0 -0
  171. data/lib/dfp_api/v201708/order_service.rb +0 -0
  172. data/lib/dfp_api/v201708/order_service_registry.rb +0 -0
  173. data/lib/dfp_api/v201708/package_service.rb +0 -0
  174. data/lib/dfp_api/v201708/package_service_registry.rb +0 -0
  175. data/lib/dfp_api/v201708/placement_service.rb +0 -0
  176. data/lib/dfp_api/v201708/placement_service_registry.rb +0 -0
  177. data/lib/dfp_api/v201708/premium_rate_service.rb +0 -0
  178. data/lib/dfp_api/v201708/premium_rate_service_registry.rb +0 -0
  179. data/lib/dfp_api/v201708/product_package_item_service.rb +0 -0
  180. data/lib/dfp_api/v201708/product_package_item_service_registry.rb +0 -0
  181. data/lib/dfp_api/v201708/product_package_service.rb +0 -0
  182. data/lib/dfp_api/v201708/product_package_service_registry.rb +0 -0
  183. data/lib/dfp_api/v201708/product_service.rb +0 -0
  184. data/lib/dfp_api/v201708/product_service_registry.rb +0 -0
  185. data/lib/dfp_api/v201708/product_template_service.rb +0 -0
  186. data/lib/dfp_api/v201708/product_template_service_registry.rb +0 -0
  187. data/lib/dfp_api/v201708/proposal_line_item_service.rb +0 -0
  188. data/lib/dfp_api/v201708/proposal_line_item_service_registry.rb +0 -0
  189. data/lib/dfp_api/v201708/proposal_service.rb +0 -0
  190. data/lib/dfp_api/v201708/proposal_service_registry.rb +0 -0
  191. data/lib/dfp_api/v201708/publisher_query_language_service.rb +0 -0
  192. data/lib/dfp_api/v201708/publisher_query_language_service_registry.rb +0 -0
  193. data/lib/dfp_api/v201708/rate_card_service.rb +0 -0
  194. data/lib/dfp_api/v201708/rate_card_service_registry.rb +0 -0
  195. data/lib/dfp_api/v201708/reconciliation_line_item_report_service.rb +0 -0
  196. data/lib/dfp_api/v201708/reconciliation_line_item_report_service_registry.rb +0 -0
  197. data/lib/dfp_api/v201708/reconciliation_order_report_service.rb +0 -0
  198. data/lib/dfp_api/v201708/reconciliation_order_report_service_registry.rb +0 -0
  199. data/lib/dfp_api/v201708/reconciliation_report_row_service.rb +0 -0
  200. data/lib/dfp_api/v201708/reconciliation_report_row_service_registry.rb +0 -0
  201. data/lib/dfp_api/v201708/reconciliation_report_service.rb +0 -0
  202. data/lib/dfp_api/v201708/reconciliation_report_service_registry.rb +0 -0
  203. data/lib/dfp_api/v201708/report_service.rb +0 -0
  204. data/lib/dfp_api/v201708/report_service_registry.rb +0 -0
  205. data/lib/dfp_api/v201708/suggested_ad_unit_service.rb +0 -0
  206. data/lib/dfp_api/v201708/suggested_ad_unit_service_registry.rb +0 -0
  207. data/lib/dfp_api/v201708/team_service.rb +0 -0
  208. data/lib/dfp_api/v201708/team_service_registry.rb +0 -0
  209. data/lib/dfp_api/v201708/user_service.rb +0 -0
  210. data/lib/dfp_api/v201708/user_service_registry.rb +0 -0
  211. data/lib/dfp_api/v201708/user_team_association_service.rb +0 -0
  212. data/lib/dfp_api/v201708/user_team_association_service_registry.rb +0 -0
  213. data/lib/dfp_api/v201708/workflow_request_service.rb +0 -0
  214. data/lib/dfp_api/v201708/workflow_request_service_registry.rb +0 -0
  215. data/lib/dfp_api/v201711/activity_group_service.rb +0 -0
  216. data/lib/dfp_api/v201711/activity_group_service_registry.rb +0 -0
  217. data/lib/dfp_api/v201711/activity_service.rb +0 -0
  218. data/lib/dfp_api/v201711/activity_service_registry.rb +0 -0
  219. data/lib/dfp_api/v201711/ad_exclusion_rule_service.rb +0 -0
  220. data/lib/dfp_api/v201711/ad_exclusion_rule_service_registry.rb +0 -0
  221. data/lib/dfp_api/v201711/ad_rule_service.rb +0 -0
  222. data/lib/dfp_api/v201711/ad_rule_service_registry.rb +0 -0
  223. data/lib/dfp_api/v201711/audience_segment_service.rb +0 -0
  224. data/lib/dfp_api/v201711/audience_segment_service_registry.rb +0 -0
  225. data/lib/dfp_api/v201711/base_rate_service.rb +0 -0
  226. data/lib/dfp_api/v201711/base_rate_service_registry.rb +0 -0
  227. data/lib/dfp_api/v201711/cdn_configuration_service.rb +0 -0
  228. data/lib/dfp_api/v201711/cdn_configuration_service_registry.rb +0 -0
  229. data/lib/dfp_api/v201711/company_service.rb +0 -0
  230. data/lib/dfp_api/v201711/company_service_registry.rb +0 -0
  231. data/lib/dfp_api/v201711/contact_service.rb +0 -0
  232. data/lib/dfp_api/v201711/contact_service_registry.rb +0 -0
  233. data/lib/dfp_api/v201711/content_bundle_service.rb +0 -0
  234. data/lib/dfp_api/v201711/content_bundle_service_registry.rb +0 -0
  235. data/lib/dfp_api/v201711/content_metadata_key_hierarchy_service.rb +0 -0
  236. data/lib/dfp_api/v201711/content_metadata_key_hierarchy_service_registry.rb +0 -0
  237. data/lib/dfp_api/v201711/content_service.rb +0 -0
  238. data/lib/dfp_api/v201711/content_service_registry.rb +0 -0
  239. data/lib/dfp_api/v201711/creative_service.rb +0 -0
  240. data/lib/dfp_api/v201711/creative_service_registry.rb +0 -0
  241. data/lib/dfp_api/v201711/creative_set_service.rb +0 -0
  242. data/lib/dfp_api/v201711/creative_set_service_registry.rb +0 -0
  243. data/lib/dfp_api/v201711/creative_template_service.rb +0 -0
  244. data/lib/dfp_api/v201711/creative_template_service_registry.rb +0 -0
  245. data/lib/dfp_api/v201711/creative_wrapper_service.rb +0 -0
  246. data/lib/dfp_api/v201711/creative_wrapper_service_registry.rb +0 -0
  247. data/lib/dfp_api/v201711/custom_field_service.rb +0 -0
  248. data/lib/dfp_api/v201711/custom_field_service_registry.rb +0 -0
  249. data/lib/dfp_api/v201711/custom_targeting_service.rb +0 -0
  250. data/lib/dfp_api/v201711/custom_targeting_service_registry.rb +0 -0
  251. data/lib/dfp_api/v201711/exchange_rate_service.rb +0 -0
  252. data/lib/dfp_api/v201711/exchange_rate_service_registry.rb +0 -0
  253. data/lib/dfp_api/v201711/forecast_service.rb +0 -0
  254. data/lib/dfp_api/v201711/forecast_service_registry.rb +0 -0
  255. data/lib/dfp_api/v201711/inventory_service.rb +0 -0
  256. data/lib/dfp_api/v201711/inventory_service_registry.rb +0 -0
  257. data/lib/dfp_api/v201711/label_service.rb +0 -0
  258. data/lib/dfp_api/v201711/label_service_registry.rb +0 -0
  259. data/lib/dfp_api/v201711/line_item_creative_association_service.rb +0 -0
  260. data/lib/dfp_api/v201711/line_item_creative_association_service_registry.rb +0 -0
  261. data/lib/dfp_api/v201711/line_item_service.rb +0 -0
  262. data/lib/dfp_api/v201711/line_item_service_registry.rb +0 -0
  263. data/lib/dfp_api/v201711/line_item_template_service.rb +0 -0
  264. data/lib/dfp_api/v201711/line_item_template_service_registry.rb +0 -0
  265. data/lib/dfp_api/v201711/live_stream_event_service.rb +0 -0
  266. data/lib/dfp_api/v201711/live_stream_event_service_registry.rb +0 -0
  267. data/lib/dfp_api/v201711/mobile_application_service.rb +0 -0
  268. data/lib/dfp_api/v201711/mobile_application_service_registry.rb +0 -0
  269. data/lib/dfp_api/v201711/native_style_service.rb +0 -0
  270. data/lib/dfp_api/v201711/native_style_service_registry.rb +0 -0
  271. data/lib/dfp_api/v201711/network_service.rb +0 -0
  272. data/lib/dfp_api/v201711/network_service_registry.rb +0 -0
  273. data/lib/dfp_api/v201711/order_service.rb +0 -0
  274. data/lib/dfp_api/v201711/order_service_registry.rb +0 -0
  275. data/lib/dfp_api/v201711/package_service.rb +0 -0
  276. data/lib/dfp_api/v201711/package_service_registry.rb +0 -0
  277. data/lib/dfp_api/v201711/placement_service.rb +0 -0
  278. data/lib/dfp_api/v201711/placement_service_registry.rb +0 -0
  279. data/lib/dfp_api/v201711/premium_rate_service.rb +0 -0
  280. data/lib/dfp_api/v201711/premium_rate_service_registry.rb +0 -0
  281. data/lib/dfp_api/v201711/product_package_item_service.rb +0 -0
  282. data/lib/dfp_api/v201711/product_package_item_service_registry.rb +0 -0
  283. data/lib/dfp_api/v201711/product_package_service.rb +0 -0
  284. data/lib/dfp_api/v201711/product_package_service_registry.rb +0 -0
  285. data/lib/dfp_api/v201711/product_service.rb +0 -0
  286. data/lib/dfp_api/v201711/product_service_registry.rb +0 -0
  287. data/lib/dfp_api/v201711/product_template_service.rb +0 -0
  288. data/lib/dfp_api/v201711/product_template_service_registry.rb +0 -0
  289. data/lib/dfp_api/v201711/proposal_line_item_service.rb +0 -0
  290. data/lib/dfp_api/v201711/proposal_line_item_service_registry.rb +0 -0
  291. data/lib/dfp_api/v201711/proposal_service.rb +0 -0
  292. data/lib/dfp_api/v201711/proposal_service_registry.rb +0 -0
  293. data/lib/dfp_api/v201711/publisher_query_language_service.rb +0 -0
  294. data/lib/dfp_api/v201711/publisher_query_language_service_registry.rb +0 -0
  295. data/lib/dfp_api/v201711/rate_card_service.rb +0 -0
  296. data/lib/dfp_api/v201711/rate_card_service_registry.rb +0 -0
  297. data/lib/dfp_api/v201711/reconciliation_line_item_report_service.rb +0 -0
  298. data/lib/dfp_api/v201711/reconciliation_line_item_report_service_registry.rb +0 -0
  299. data/lib/dfp_api/v201711/reconciliation_order_report_service.rb +0 -0
  300. data/lib/dfp_api/v201711/reconciliation_order_report_service_registry.rb +0 -0
  301. data/lib/dfp_api/v201711/reconciliation_report_row_service.rb +0 -0
  302. data/lib/dfp_api/v201711/reconciliation_report_row_service_registry.rb +0 -0
  303. data/lib/dfp_api/v201711/reconciliation_report_service.rb +0 -0
  304. data/lib/dfp_api/v201711/reconciliation_report_service_registry.rb +0 -0
  305. data/lib/dfp_api/v201711/report_service.rb +0 -0
  306. data/lib/dfp_api/v201711/report_service_registry.rb +0 -0
  307. data/lib/dfp_api/v201711/suggested_ad_unit_service.rb +0 -0
  308. data/lib/dfp_api/v201711/suggested_ad_unit_service_registry.rb +0 -0
  309. data/lib/dfp_api/v201711/team_service.rb +0 -0
  310. data/lib/dfp_api/v201711/team_service_registry.rb +0 -0
  311. data/lib/dfp_api/v201711/user_service.rb +0 -0
  312. data/lib/dfp_api/v201711/user_service_registry.rb +0 -0
  313. data/lib/dfp_api/v201711/user_team_association_service.rb +0 -0
  314. data/lib/dfp_api/v201711/user_team_association_service_registry.rb +0 -0
  315. data/lib/dfp_api/v201711/workflow_request_service.rb +0 -0
  316. data/lib/dfp_api/v201711/workflow_request_service_registry.rb +0 -0
  317. data/lib/dfp_api/{v201702 → v201802}/activity_group_service.rb +7 -7
  318. data/lib/dfp_api/v201802/activity_group_service_registry.rb +45 -0
  319. data/lib/dfp_api/{v201702 → v201802}/activity_service.rb +7 -7
  320. data/lib/dfp_api/v201802/activity_service_registry.rb +45 -0
  321. data/lib/dfp_api/{v201702 → v201802}/ad_exclusion_rule_service.rb +7 -7
  322. data/lib/dfp_api/v201802/ad_exclusion_rule_service_registry.rb +45 -0
  323. data/lib/dfp_api/{v201702 → v201802}/ad_rule_service.rb +7 -7
  324. data/lib/dfp_api/v201802/ad_rule_service_registry.rb +45 -0
  325. data/lib/dfp_api/{v201702 → v201802}/audience_segment_service.rb +7 -7
  326. data/lib/dfp_api/v201802/audience_segment_service_registry.rb +45 -0
  327. data/lib/dfp_api/{v201702 → v201802}/base_rate_service.rb +7 -7
  328. data/lib/dfp_api/v201802/base_rate_service_registry.rb +45 -0
  329. data/lib/dfp_api/v201802/cdn_configuration_service.rb +54 -0
  330. data/lib/dfp_api/v201802/cdn_configuration_service_registry.rb +45 -0
  331. data/lib/dfp_api/{v201702 → v201802}/company_service.rb +7 -7
  332. data/lib/dfp_api/v201802/company_service_registry.rb +45 -0
  333. data/lib/dfp_api/{v201702 → v201802}/contact_service.rb +7 -7
  334. data/lib/dfp_api/v201802/contact_service_registry.rb +45 -0
  335. data/lib/dfp_api/{v201702 → v201802}/content_bundle_service.rb +7 -7
  336. data/lib/dfp_api/v201802/content_bundle_service_registry.rb +45 -0
  337. data/lib/dfp_api/{v201702 → v201802}/content_metadata_key_hierarchy_service.rb +7 -7
  338. data/lib/dfp_api/v201802/content_metadata_key_hierarchy_service_registry.rb +45 -0
  339. data/lib/dfp_api/{v201702 → v201802}/content_service.rb +7 -7
  340. data/lib/dfp_api/v201802/content_service_registry.rb +45 -0
  341. data/lib/dfp_api/{v201702 → v201802}/creative_service.rb +7 -7
  342. data/lib/dfp_api/v201802/creative_service_registry.rb +45 -0
  343. data/lib/dfp_api/{v201702 → v201802}/creative_set_service.rb +7 -7
  344. data/lib/dfp_api/v201802/creative_set_service_registry.rb +45 -0
  345. data/lib/dfp_api/{v201702 → v201802}/creative_template_service.rb +7 -7
  346. data/lib/dfp_api/v201802/creative_template_service_registry.rb +45 -0
  347. data/lib/dfp_api/{v201702 → v201802}/creative_wrapper_service.rb +7 -7
  348. data/lib/dfp_api/v201802/creative_wrapper_service_registry.rb +45 -0
  349. data/lib/dfp_api/{v201702 → v201802}/custom_field_service.rb +7 -7
  350. data/lib/dfp_api/v201802/custom_field_service_registry.rb +45 -0
  351. data/lib/dfp_api/{v201702 → v201802}/custom_targeting_service.rb +7 -7
  352. data/lib/dfp_api/v201802/custom_targeting_service_registry.rb +45 -0
  353. data/lib/dfp_api/{v201702 → v201802}/exchange_rate_service.rb +7 -7
  354. data/lib/dfp_api/v201802/exchange_rate_service_registry.rb +45 -0
  355. data/lib/dfp_api/{v201702 → v201802}/forecast_service.rb +7 -7
  356. data/lib/dfp_api/v201802/forecast_service_registry.rb +45 -0
  357. data/lib/dfp_api/{v201702 → v201802}/inventory_service.rb +7 -7
  358. data/lib/dfp_api/v201802/inventory_service_registry.rb +45 -0
  359. data/lib/dfp_api/{v201702 → v201802}/label_service.rb +7 -7
  360. data/lib/dfp_api/v201802/label_service_registry.rb +45 -0
  361. data/lib/dfp_api/{v201702 → v201802}/line_item_creative_association_service.rb +15 -7
  362. data/lib/dfp_api/{v201702 → v201802}/line_item_creative_association_service_registry.rb +5 -5
  363. data/lib/dfp_api/{v201702 → v201802}/line_item_service.rb +7 -7
  364. data/lib/dfp_api/v201802/line_item_service_registry.rb +45 -0
  365. data/lib/dfp_api/{v201702 → v201802}/line_item_template_service.rb +7 -7
  366. data/lib/dfp_api/v201802/line_item_template_service_registry.rb +45 -0
  367. data/lib/dfp_api/{v201702 → v201802}/live_stream_event_service.rb +7 -7
  368. data/lib/dfp_api/v201802/live_stream_event_service_registry.rb +45 -0
  369. data/lib/dfp_api/{v201702 → v201802}/mobile_application_service.rb +7 -7
  370. data/lib/dfp_api/v201802/mobile_application_service_registry.rb +45 -0
  371. data/lib/dfp_api/{v201702 → v201802}/native_style_service.rb +7 -7
  372. data/lib/dfp_api/v201802/native_style_service_registry.rb +45 -0
  373. data/lib/dfp_api/{v201702 → v201802}/network_service.rb +7 -7
  374. data/lib/dfp_api/v201802/network_service_registry.rb +45 -0
  375. data/lib/dfp_api/{v201702 → v201802}/order_service.rb +7 -7
  376. data/lib/dfp_api/v201802/order_service_registry.rb +45 -0
  377. data/lib/dfp_api/{v201702 → v201802}/package_service.rb +7 -7
  378. data/lib/dfp_api/v201802/package_service_registry.rb +45 -0
  379. data/lib/dfp_api/{v201702 → v201802}/placement_service.rb +7 -7
  380. data/lib/dfp_api/v201802/placement_service_registry.rb +45 -0
  381. data/lib/dfp_api/{v201702 → v201802}/premium_rate_service.rb +7 -7
  382. data/lib/dfp_api/v201802/premium_rate_service_registry.rb +45 -0
  383. data/lib/dfp_api/{v201702 → v201802}/product_package_item_service.rb +7 -7
  384. data/lib/dfp_api/v201802/product_package_item_service_registry.rb +45 -0
  385. data/lib/dfp_api/{v201702 → v201802}/product_package_service.rb +7 -7
  386. data/lib/dfp_api/v201802/product_package_service_registry.rb +45 -0
  387. data/lib/dfp_api/{v201702 → v201802}/product_service.rb +7 -7
  388. data/lib/dfp_api/v201802/product_service_registry.rb +45 -0
  389. data/lib/dfp_api/{v201702 → v201802}/product_template_service.rb +7 -7
  390. data/lib/dfp_api/v201802/product_template_service_registry.rb +45 -0
  391. data/lib/dfp_api/{v201702 → v201802}/proposal_line_item_service.rb +7 -7
  392. data/lib/dfp_api/v201802/proposal_line_item_service_registry.rb +45 -0
  393. data/lib/dfp_api/{v201702 → v201802}/proposal_service.rb +7 -7
  394. data/lib/dfp_api/v201802/proposal_service_registry.rb +45 -0
  395. data/lib/dfp_api/{v201702 → v201802}/publisher_query_language_service.rb +7 -7
  396. data/lib/dfp_api/v201802/publisher_query_language_service_registry.rb +45 -0
  397. data/lib/dfp_api/{v201702 → v201802}/rate_card_service.rb +7 -7
  398. data/lib/dfp_api/v201802/rate_card_service_registry.rb +45 -0
  399. data/lib/dfp_api/{v201702 → v201802}/reconciliation_line_item_report_service.rb +7 -7
  400. data/lib/dfp_api/v201802/reconciliation_line_item_report_service_registry.rb +45 -0
  401. data/lib/dfp_api/{v201702 → v201802}/reconciliation_order_report_service.rb +7 -7
  402. data/lib/dfp_api/v201802/reconciliation_order_report_service_registry.rb +45 -0
  403. data/lib/dfp_api/{v201702 → v201802}/reconciliation_report_row_service.rb +7 -7
  404. data/lib/dfp_api/v201802/reconciliation_report_row_service_registry.rb +45 -0
  405. data/lib/dfp_api/{v201702 → v201802}/reconciliation_report_service.rb +7 -7
  406. data/lib/dfp_api/v201802/reconciliation_report_service_registry.rb +45 -0
  407. data/lib/dfp_api/{v201702 → v201802}/report_service.rb +7 -7
  408. data/lib/dfp_api/v201802/report_service_registry.rb +45 -0
  409. data/lib/dfp_api/{v201702 → v201802}/suggested_ad_unit_service.rb +7 -7
  410. data/lib/dfp_api/v201802/suggested_ad_unit_service_registry.rb +45 -0
  411. data/lib/dfp_api/{v201702 → v201802}/team_service.rb +15 -7
  412. data/lib/dfp_api/v201802/team_service_registry.rb +45 -0
  413. data/lib/dfp_api/{v201702 → v201802}/user_service.rb +7 -7
  414. data/lib/dfp_api/v201802/user_service_registry.rb +45 -0
  415. data/lib/dfp_api/{v201702 → v201802}/user_team_association_service.rb +7 -7
  416. data/lib/dfp_api/v201802/user_team_association_service_registry.rb +45 -0
  417. data/lib/dfp_api/{v201702 → v201802}/workflow_request_service.rb +7 -7
  418. data/lib/dfp_api/v201802/workflow_request_service_registry.rb +45 -0
  419. data/lib/dfp_api/version.rb +1 -1
  420. metadata +122 -102
  421. data/lib/dfp_api/v201702/activity_group_service_registry.rb +0 -45
  422. data/lib/dfp_api/v201702/activity_service_registry.rb +0 -45
  423. data/lib/dfp_api/v201702/ad_exclusion_rule_service_registry.rb +0 -45
  424. data/lib/dfp_api/v201702/ad_rule_service_registry.rb +0 -45
  425. data/lib/dfp_api/v201702/audience_segment_service_registry.rb +0 -45
  426. data/lib/dfp_api/v201702/base_rate_service_registry.rb +0 -45
  427. data/lib/dfp_api/v201702/company_service_registry.rb +0 -45
  428. data/lib/dfp_api/v201702/contact_service_registry.rb +0 -45
  429. data/lib/dfp_api/v201702/content_bundle_service_registry.rb +0 -45
  430. data/lib/dfp_api/v201702/content_metadata_key_hierarchy_service_registry.rb +0 -45
  431. data/lib/dfp_api/v201702/content_service_registry.rb +0 -45
  432. data/lib/dfp_api/v201702/creative_service_registry.rb +0 -45
  433. data/lib/dfp_api/v201702/creative_set_service_registry.rb +0 -45
  434. data/lib/dfp_api/v201702/creative_template_service_registry.rb +0 -45
  435. data/lib/dfp_api/v201702/creative_wrapper_service_registry.rb +0 -45
  436. data/lib/dfp_api/v201702/custom_field_service_registry.rb +0 -45
  437. data/lib/dfp_api/v201702/custom_targeting_service_registry.rb +0 -45
  438. data/lib/dfp_api/v201702/exchange_rate_service_registry.rb +0 -45
  439. data/lib/dfp_api/v201702/forecast_service_registry.rb +0 -45
  440. data/lib/dfp_api/v201702/inventory_service_registry.rb +0 -45
  441. data/lib/dfp_api/v201702/label_service_registry.rb +0 -45
  442. data/lib/dfp_api/v201702/line_item_service_registry.rb +0 -45
  443. data/lib/dfp_api/v201702/line_item_template_service_registry.rb +0 -45
  444. data/lib/dfp_api/v201702/live_stream_event_service_registry.rb +0 -45
  445. data/lib/dfp_api/v201702/mobile_application_service_registry.rb +0 -45
  446. data/lib/dfp_api/v201702/native_style_service_registry.rb +0 -45
  447. data/lib/dfp_api/v201702/network_service_registry.rb +0 -45
  448. data/lib/dfp_api/v201702/order_service_registry.rb +0 -45
  449. data/lib/dfp_api/v201702/package_service_registry.rb +0 -45
  450. data/lib/dfp_api/v201702/placement_service_registry.rb +0 -45
  451. data/lib/dfp_api/v201702/premium_rate_service_registry.rb +0 -45
  452. data/lib/dfp_api/v201702/product_package_item_service_registry.rb +0 -45
  453. data/lib/dfp_api/v201702/product_package_service_registry.rb +0 -45
  454. data/lib/dfp_api/v201702/product_service_registry.rb +0 -45
  455. data/lib/dfp_api/v201702/product_template_service_registry.rb +0 -45
  456. data/lib/dfp_api/v201702/proposal_line_item_service_registry.rb +0 -45
  457. data/lib/dfp_api/v201702/proposal_service_registry.rb +0 -45
  458. data/lib/dfp_api/v201702/publisher_query_language_service_registry.rb +0 -45
  459. data/lib/dfp_api/v201702/rate_card_service_registry.rb +0 -45
  460. data/lib/dfp_api/v201702/reconciliation_line_item_report_service_registry.rb +0 -45
  461. data/lib/dfp_api/v201702/reconciliation_order_report_service_registry.rb +0 -45
  462. data/lib/dfp_api/v201702/reconciliation_report_row_service_registry.rb +0 -45
  463. data/lib/dfp_api/v201702/reconciliation_report_service_registry.rb +0 -45
  464. data/lib/dfp_api/v201702/report_service_registry.rb +0 -45
  465. data/lib/dfp_api/v201702/suggested_ad_unit_service_registry.rb +0 -45
  466. data/lib/dfp_api/v201702/team_service_registry.rb +0 -45
  467. data/lib/dfp_api/v201702/user_service_registry.rb +0 -45
  468. data/lib/dfp_api/v201702/user_team_association_service_registry.rb +0 -45
  469. data/lib/dfp_api/v201702/workflow_request_service_registry.rb +0 -45
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2c39e1d31ae64f6e6beab6d065790bad6b39c904
4
- data.tar.gz: a01a5e853c6c4ce4e4d36355160a335b9bc4a603
3
+ metadata.gz: 76dcba9593eb8099843bdbfd4f5e0667fe68083b
4
+ data.tar.gz: e34fe0017255d433493d10a7490b32b167ee054b
5
5
  SHA512:
6
- metadata.gz: 9c29297d56691d1ad0b93943c6bf28e4add3040b3fa812717a96d81fa4a4427ce4488817fda8c3b8bb21407daf7724a4f68ad1fdef5fc6f0dc37da8e3001254d
7
- data.tar.gz: 1e0f7af46183d3a1932c38ae92b51b3cd7da0d004ffb170345d4a094ddd541053d49a6c1315616033f90409018fa077744fe91c96f4b9659607a0bde8a8c19ff
6
+ metadata.gz: ef6fa87936a5079b73923bc26f9d10441586ce19e76672004f8a3c16af79d407b436a094cf39506465baa146d86c65dd95afdf792f9e43f19dff124fc388b1fc
7
+ data.tar.gz: 71117d2b974fd3e351ee58d8038057addaa8a722d64a3c765399b8e514fe7d681dd409d29440ac316b63f9c1301a27d9d1098e4c4f51fa639811ef961bcda521
data/COPYING CHANGED
File without changes
data/ChangeLog CHANGED
@@ -1,7 +1,16 @@
1
+ 1.2.0:
2
+ - Added support for v201802.
3
+ - Removed support for v201702.
4
+ - Removed examples for v201705.
5
+ - Added StatementBuilder for easier PQL statement generation.
6
+ - Added DfpDate and DfpDateTime to make using Date and Time objects easier
7
+ in the DFP API.
8
+ - Deprecated FilterStatement.
9
+
1
10
  1.1.0:
2
- - Added support for v201711
3
- - Removed support for v201611
4
- - Removed examples for v201702
11
+ - Added support for v201711.
12
+ - Removed support for v201611.
13
+ - Removed examples for v201702.
5
14
 
6
15
  1.0.0:
7
16
  - Major version bump. The library has been stable and feature complete for
data/README.md CHANGED
File without changes
@@ -47,3 +47,5 @@
47
47
  #:proxy: INSERT_PROXY_HERE
48
48
  :library:
49
49
  :log_level: INFO
50
+ # Optional: uncomment to disable user agent showing used utilities.
51
+ #:include_utilities_in_user_agent: false
@@ -23,6 +23,9 @@ require 'dfp_api/api_config'
23
23
  require 'dfp_api/credential_handler'
24
24
  require 'dfp_api/errors'
25
25
  require 'dfp_api/dfp_api_statement'
26
+ require 'dfp_api/dfp_api_datetime'
27
+ require 'dfp_api/pql_statement_utils'
28
+ require 'dfp_api/utils_reporter'
26
29
 
27
30
  # Main namespace for all the client library's modules and classes.
28
31
  module DfpApi
@@ -32,10 +35,13 @@ module DfpApi
32
35
  # Holds all the services, as well as login credentials.
33
36
  #
34
37
  class Api < AdsCommon::Api
38
+ attr_reader :utils_reporter
39
+
35
40
  # Constructor for API.
36
41
  def initialize(provided_config = nil)
37
42
  super(provided_config)
38
43
  @credential_handler = DfpApi::CredentialHandler.new(@config)
44
+ @utils_reporter = DfpApi::UtilsReporter.new(@credential_handler)
39
45
  end
40
46
 
41
47
  # Getter for the API service configurations.
@@ -43,6 +49,45 @@ module DfpApi
43
49
  DfpApi::ApiConfig
44
50
  end
45
51
 
52
+ # Returns an instance of StatementBuilder object.
53
+ def new_statement_builder(&block)
54
+ return DfpApi::StatementBuilder.new(self, &block)
55
+ end
56
+
57
+ def new_report_statement_builder(&block)
58
+ statement = DfpApi::StatementBuilder.new(self) do |sb|
59
+ sb.limit = nil
60
+ sb.offset = nil
61
+ end
62
+ statement.configure(&block)
63
+ return statement
64
+ end
65
+
66
+ # Returns an instance of DfpDate.
67
+ def date(*args)
68
+ return DfpApi::DfpDate.new(self, *args)
69
+ end
70
+
71
+ # Returns an instance of DfpDate representing the current day.
72
+ def today(*args)
73
+ return DfpApi::DfpDate.today(self, *args)
74
+ end
75
+
76
+ # Returns an instance of DfpDateTime.
77
+ def datetime(*args)
78
+ return DfpApi::DfpDateTime.new(self, *args)
79
+ end
80
+
81
+ # Returns an instance of DfpDateTime representing the current time.
82
+ def now(*args)
83
+ return DfpApi::DfpDateTime.now(self, *args)
84
+ end
85
+
86
+ # Returns an instance of DfpDateTime in the UTC timezone.
87
+ def utc(*args)
88
+ return DfpApi::DfpDateTime.utc(self, *args)
89
+ end
90
+
46
91
  private
47
92
 
48
93
  # Retrieve DFP HeaderHandler per credential.
@@ -31,8 +31,8 @@ module DfpApi
31
31
  end
32
32
 
33
33
  # Set defaults
34
- DEFAULT_VERSION = :v201711
35
- LATEST_VERSION = :v201711
34
+ DEFAULT_VERSION = :v201802
35
+ LATEST_VERSION = :v201802
36
36
 
37
37
  # Set other constants
38
38
  API_NAME = 'DfpApi'
@@ -40,30 +40,6 @@ module DfpApi
40
40
 
41
41
  # Configure the services available to each version
42
42
  @@service_config = {
43
- :v201702 => [:ActivityGroupService, :ActivityService,
44
- :AdExclusionRuleService, :AdRuleService,
45
- :AudienceSegmentService, :BaseRateService, :CompanyService,
46
- :ContactService, :ContentBundleService,
47
- :ContentMetadataKeyHierarchyService, :ContentService,
48
- :CreativeService, :CreativeSetService,
49
- :CreativeTemplateService, :CreativeWrapperService,
50
- :CustomFieldService, :CustomTargetingService,
51
- :ExchangeRateService, :ForecastService, :InventoryService,
52
- :LabelService, :LineItemCreativeAssociationService,
53
- :LineItemService, :LineItemTemplateService,
54
- :LiveStreamEventService, :MobileApplicationService,
55
- :NativeStyleService, :NetworkService, :OrderService,
56
- :PackageService, :ProductPackageService,
57
- :ProductPackageItemService, :PlacementService,
58
- :PremiumRateService, :ProductService,
59
- :ProductTemplateService, :ProposalLineItemService,
60
- :ProposalService, :PublisherQueryLanguageService,
61
- :RateCardService, :ReconciliationOrderReportService,
62
- :ReconciliationLineItemReportService,
63
- :ReconciliationReportRowService,
64
- :ReconciliationReportService, :ReportService,
65
- :SuggestedAdUnitService, :TeamService, :UserService,
66
- :UserTeamAssociationService, :WorkflowRequestService],
67
43
  :v201705 => [:ActivityGroupService, :ActivityService,
68
44
  :AdExclusionRuleService, :AdRuleService,
69
45
  :AudienceSegmentService, :BaseRateService, :CompanyService,
@@ -136,7 +112,7 @@ module DfpApi
136
112
  :ReconciliationReportService, :ReportService,
137
113
  :SuggestedAdUnitService, :TeamService, :UserService,
138
114
  :UserTeamAssociationService, :WorkflowRequestService],
139
- :v201711 => [:ActivityGroupService, :ActivityService,
115
+ :v201802 => [:ActivityGroupService, :ActivityService,
140
116
  :AdExclusionRuleService, :AdRuleService,
141
117
  :AudienceSegmentService, :BaseRateService, :CompanyService,
142
118
  :CdnConfigurationService, :ContactService,
@@ -159,17 +135,17 @@ module DfpApi
159
135
  :ReconciliationReportRowService,
160
136
  :ReconciliationReportService, :ReportService,
161
137
  :SuggestedAdUnitService, :TeamService, :UserService,
162
- :UserTeamAssociationService, :WorkflowRequestService],
138
+ :UserTeamAssociationService, :WorkflowRequestService]
163
139
  }
164
140
 
165
141
  # Configure the base URL for each version and scope.
166
142
  @@config = {
167
143
  :oauth_scope => 'https://www.googleapis.com/auth/dfp',
168
144
  :header_ns => 'https://www.google.com/apis/ads/publisher/',
169
- :v201702 => 'https://ads.google.com/apis/ads/publisher/',
170
145
  :v201705 => 'https://ads.google.com/apis/ads/publisher/',
171
146
  :v201708 => 'https://ads.google.com/apis/ads/publisher/',
172
- :v201711 => 'https://ads.google.com/apis/ads/publisher/'
147
+ :v201711 => 'https://ads.google.com/apis/ads/publisher/',
148
+ :v201802 => 'https://ads.google.com/apis/ads/publisher/'
173
149
  }
174
150
 
175
151
  public
@@ -19,6 +19,7 @@
19
19
 
20
20
  require 'ads_common/credential_handler'
21
21
  require 'dfp_api/api_config'
22
+ require 'dfp_api/utils'
22
23
 
23
24
  module DfpApi
24
25
 
@@ -31,17 +32,21 @@ module DfpApi
31
32
  def credentials(credentials_override = nil)
32
33
  result = super(credentials_override)
33
34
  validate_headers_for_server(result)
35
+ include_utils = @config.read('library.include_utilities_in_user_agent',
36
+ true)
34
37
  result[:extra_headers] = {
35
- 'applicationName' => generate_user_agent(),
38
+ 'applicationName' => generate_user_agent([], include_utils),
36
39
  'networkCode' => result[:network_code]
37
40
  }
38
41
  return result
39
42
  end
40
43
 
41
44
  # Generates string to use as user agent in headers.
42
- def generate_user_agent(extra_ids = [])
45
+ def generate_user_agent(extra_ids = [], include_utilities = true)
43
46
  agent_app = @config.read('authentication.application_name')
44
47
  extra_ids << ["DfpApi-Ruby/%s" % DfpApi::ApiConfig::CLIENT_LIB_VERSION]
48
+ utility_registry = DfpApi::Utils::UtilityRegistry.instance
49
+ extra_ids += utility_registry.extract!.to_a if include_utilities
45
50
  super(extra_ids, agent_app)
46
51
  end
47
52
 
@@ -0,0 +1,182 @@
1
+ # Encoding: utf-8
2
+ #
3
+ # Copyright:: Copyright 2017, Google Inc. All Rights Reserved.
4
+ #
5
+ # License:: Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
14
+ # implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ # DfpDate and DfpDateTime convert between native ruby Date and Time objects and
19
+ # the DFP API's Date and DateTime objects.
20
+
21
+ require 'date'
22
+ require 'tzinfo'
23
+
24
+
25
+ module DfpApi
26
+ class DfpDate
27
+ # Create a new DfpDate, a utility class that allows for interoperability
28
+ # between the DFP API's Date objects and ruby's Date class.
29
+ #
30
+ # Args:
31
+ # - args:
32
+ # - ([year, [month, [day]]]), integer values, uses Date defaults
33
+ # - (date), a native ruby Date object
34
+ # - (dfp_date), a DFP Date hash representation
35
+ # Returns:
36
+ # - dfp_date: an instance of DfpDate
37
+ def initialize(api, *args)
38
+ @api = api
39
+ @api.utils_reporter.dfp_date_used()
40
+
41
+ case args.first
42
+ when Hash
43
+ hash = args.first
44
+ date_args = [hash[:year], hash[:month], hash[:day]]
45
+ when Date
46
+ date = args.first
47
+ date_args = [date.year, date.month, date.day]
48
+ else
49
+ date_args = args
50
+ end
51
+ @date = Date.new(*date_args)
52
+ end
53
+
54
+ # Creates a DfpDate object denoting the present day.
55
+ def self.today(api, *args)
56
+ self.new(api, Date.today(*args))
57
+ end
58
+
59
+ # When an unrecognized method is applied to DfpDate, pass it through to the
60
+ # internal ruby Date.
61
+ def method_missing(name, *args, &block)
62
+ result = @date.send(name, *args, &block)
63
+ return self.class.new(@api, result) if result.is_a? Date
64
+ return result
65
+ end
66
+
67
+ # Convert DfpDate into a hash representation which can be consumed by
68
+ # the DFP API. E.g., a hash that can be passed as PQL Date variables.
69
+ #
70
+ # Returns:
71
+ # - dfp_datetime: a DFP Date hash representation
72
+ def to_h()
73
+ return {:year => @date.year, :month => @date.month, :day => @date.day}
74
+ end
75
+ end
76
+
77
+ class DfpDateTime
78
+ attr_accessor :timezone
79
+
80
+ # Create a new DfpDateTime, a utility class that allows for interoperability
81
+ # between the DFP API's DateTime objects and ruby's Time class. The last
82
+ # argument must be a valid timezone identifier, e.g. "America/New_York".
83
+ #
84
+ # Args:
85
+ # - args:
86
+ # - ([year, [month, [day, [hour, [minute, [second,]]]]]] timezone)
87
+ # - (time, timezone), a native Time object and a timezone identifier
88
+ # - (dfp_datetime), a DFP DateTime hash representation
89
+ #
90
+ # Returns:
91
+ # - dfp_datetime: an instance of DfpDateTime
92
+ def initialize(api, *args)
93
+ @api = api
94
+ @api.utils_reporter.dfp_date_time_used()
95
+
96
+ # Handle special cases when a DFP DateTime hash or ruby Time instance are
97
+ # passed as the first argument to the constructor.
98
+ case args.first
99
+ when Hash
100
+ hash = args.first
101
+ datetime_args = [hash[:date][:year], hash[:date][:month],
102
+ hash[:date][:day], hash[:hour], hash[:minute], hash[:second],
103
+ hash[:time_zone_id]]
104
+ when DfpDateTime, Time, DateTime
105
+ time = args.first
106
+ datetime_args = [args.last]
107
+ [:sec, :min, :hour, :day, :month, :year].each do |duration|
108
+ datetime_args.unshift(time.send(duration))
109
+ end
110
+ else
111
+ datetime_args = args
112
+ end
113
+ # Check the validity of the timezone parameter, which is required.
114
+ if not TZInfo::Timezone.all_identifiers.include?(datetime_args.last)
115
+ raise "Last argument to DfpDateTime constructor must be valid timezone"
116
+ end
117
+ # Set timezone attribute and pass its utc offset into the Time
118
+ # constructor.
119
+ @timezone = TZInfo::Timezone.get(datetime_args.pop)
120
+ @time = Time.new(*datetime_args,
121
+ utc_offset=@timezone.current_period.utc_offset)
122
+ end
123
+
124
+ # Create a DfpDateTime for the current time in the specified timezone.
125
+ #
126
+ # Args:
127
+ # - timezone: a valid timezone identifier, e.g. "America/New_York"
128
+ #
129
+ # Returns:
130
+ # - dfp_datetime: an instance of DfpDateTime
131
+ def self.now(api, timezone)
132
+ new(api, TZInfo::Timezone.get(timezone).now, timezone)
133
+ end
134
+
135
+ # Create a DfpDateTime in the "UTC" timezone. Calls the DfpDateTime
136
+ # contstructor with timezone identifier "UTC".
137
+ #
138
+ # Args:
139
+ # - ([year, [month, [day, [hour, [minute, [second]]]]]])
140
+ #
141
+ # Returns:
142
+ # - dfp_datetime: an instance of DfpDateTime
143
+ def self.utc(api, *args)
144
+ new(api, *args + ['UTC'])
145
+ end
146
+
147
+ # Convert DfpDateTime into a hash representation which can be consumed by
148
+ # the DFP API. E.g., a hash that can be passed as PQL DateTime variables.
149
+ #
150
+ # Returns:
151
+ # - dfp_datetime_hash: a hash representation of a DfpDateTime
152
+ def to_h
153
+ {
154
+ :date => DfpApi::DfpDate.new(
155
+ @api, @time.year, @time.month, @time.day
156
+ ).to_h,
157
+ :hour => @time.hour,
158
+ :minute => @time.min,
159
+ :second => @time.sec,
160
+ :time_zone_id => @timezone.identifier
161
+ }
162
+ end
163
+
164
+ # When an unrecognized method is applied to DfpDateTime, pass it through to
165
+ # the internal ruby Time.
166
+ def method_missing(name, *args, &block)
167
+ # Restrict time zone related functions from being passed to internal ruby
168
+ # Time attribute, since DfpDateTime handles timezones its own way
169
+ restricted_functions = [:dst?, :getgm, :getlocal, :getutc, :gmt,
170
+ :gmtime, :gmtoff, :isdst, :localtime, :utc]
171
+ if restricted_functions.include? name
172
+ raise NoMethodError, 'undefined method %s for %s' % [name, self]
173
+ end
174
+ result = @time.send(name, *args, &block)
175
+ if result.is_a? Time
176
+ return self.class.new(@api, result, @timezone.identifier)
177
+ else
178
+ return result
179
+ end
180
+ end
181
+ end
182
+ end
@@ -23,6 +23,7 @@ module DfpApi
23
23
  SUGGESTED_PAGE_LIMIT = 500
24
24
 
25
25
  # A statement object for PQL and get*ByStatement queries.
26
+ # Deprecated. Use StatementBuilder instead.
26
27
  class FilterStatement
27
28
  # Constructor for a Filter Statement.
28
29
  def initialize(query_statement='', values=[], limit=SUGGESTED_PAGE_LIMIT,
@@ -37,17 +38,25 @@ module DfpApi
37
38
  attr_accessor :offset
38
39
 
39
40
  def toStatement()
41
+ register_filter_statement_util()
40
42
  statement = @query_statement + ' LIMIT %d OFFSET %d' % [@limit, @offset]
41
43
  return {:query => statement, :values => @values}
42
44
  end
43
45
 
44
46
  def toStatementForAction()
47
+ register_filter_statement_util()
45
48
  return {:query => @query_statement.dup(), :values => @values}
46
49
  end
47
50
 
48
51
  def toStatementWithoutOffset()
52
+ register_filter_statement_util()
49
53
  statement = @query_statement + ' LIMIT %d' % [@limit]
50
54
  return {:query => statement, :values => @values}
51
55
  end
56
+
57
+ private
58
+ def register_filter_statement_util()
59
+ DfpApi::Utils::UtilityRegistry.instance.add('FilterStatement')
60
+ end
52
61
  end
53
62
  end
File without changes
@@ -0,0 +1,193 @@
1
+ # Encoding: utf-8
2
+ #
3
+ # Copyright:: Copyright 2017, Google Inc. All Rights Reserved.
4
+ #
5
+ # License:: Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
14
+ # implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ # StatementBuilder object to allow for simpler PQL statement generation.
19
+
20
+ require 'dfp_api/dfp_api_datetime'
21
+
22
+
23
+ module DfpApi
24
+ # Default page size to use with the StatementBuilder.
25
+ SUGGESTED_PAGE_LIMIT = 500
26
+
27
+ # Query class used by StatementBuilder.
28
+ class PQLQuery
29
+ # Create a new query.
30
+ def initialize(query = nil)
31
+ @query = (query.nil?) ? nil : query.dup()
32
+ end
33
+
34
+ # Concatenate a new clause onto the current query.
35
+ def <<(clause)
36
+ @query = (@query.nil?) ? clause : @query << ' ' << clause
37
+ end
38
+
39
+ # Return the query string for a PQLQuery
40
+ def to_s()
41
+ @query.dup()
42
+ end
43
+ end
44
+
45
+ # Values class used by StatementBuilder.
46
+ class PQLValues
47
+ VALUE_TYPES = {
48
+ Numeric => 'NumberValue',
49
+ Integer => 'NumberValue',
50
+ Float => 'NumberValue',
51
+ String => 'TextValue',
52
+ TrueClass => 'BooleanValue',
53
+ FalseClass => 'BooleanValue',
54
+ Array => 'SetValue',
55
+ DfpApi::DfpDate => 'DateValue',
56
+ DfpApi::DfpDateTime => 'DateTimeValue'
57
+ }
58
+
59
+ # Create a new values object.
60
+ def initialize(values = {})
61
+ @values = values || {}
62
+ end
63
+
64
+ # Add a value to the current values object on the provided key.
65
+ def add_value(key, value)
66
+ @values[key.to_sym] = generate_value_object(value)
67
+ end
68
+
69
+ # Get values as an array, the format the DFP API expects.
70
+ def values()
71
+ # values_array is a DFP compliant list of values of the following form:
72
+ # [:key => ..., :value => {:xsi_type => ..., :value => ...}]
73
+ values_array = @values.map do |key, value|
74
+ raise 'Missing value in StatementBuilder.' if value.nil?
75
+ raise 'Value cannot be nil on StatementBuilder.' if value[:value].nil?
76
+ raise 'Missing value type for %s.' % key if value[:xsi_type].nil?
77
+ unless VALUE_TYPES.values.include?(value[:xsi_type])
78
+ raise 'Unknown value type for %s.' % key
79
+ end
80
+ if value[:xsi_type] == 'SetValue'
81
+ if value[:value].map {|v| v.class}.to_set.size > 1
82
+ raise 'Cannot pass more than one type in set variable, %s.' % key
83
+ end
84
+ end
85
+ if value[:xsi_type] == 'DateTimeValue'
86
+ unless value[:value][:time_zone_id]
87
+ raise 'Missing timezone on DateTimeValue variable, %s.' %key
88
+ end
89
+ end
90
+ {:key => key.to_s(), :value => value}
91
+ end
92
+ return values_array
93
+ end
94
+
95
+ # Create an individual value object by inferring the xsi_type. If the value
96
+ # type isn't recognized, return the original value parameter.
97
+ def generate_value_object(value)
98
+ type = VALUE_TYPES[value.class]
99
+ if [DfpApi::DfpDate, DfpApi::DfpDateTime].include?(value.class)
100
+ value = value.to_h
101
+ end
102
+ return value if type.nil?
103
+ return {:xsi_type => type, :value => value}
104
+ end
105
+ end
106
+
107
+ # A utility class for building PQL statements, used by the
108
+ # PublisherQueryLanguageService and other services' get*ByStatement and
109
+ # perform*Action requsts.
110
+ #
111
+ # Example usage:
112
+ # sb = DfpApi::StatementBuilder.new do |b|
113
+ # b.select = 'ChangeDateTime, EntityId, EntityType, Operation'
114
+ # b.from = 'Change_History'
115
+ # b.where = 'ChangeDateTime < :start_date_time ' +
116
+ # 'AND ChangeDateTime > :end_date_time'
117
+ # b.with_bind_variable('start_date_time', DfpApi::DfpDate.today-1)
118
+ # b.with_bind_variable('end_date_time', DfpApi::Date.today)
119
+ # b.order_by = 'ChangeDateTime'
120
+ # b.ascending = false
121
+ # end
122
+ # sb.to_statement()
123
+ #
124
+ class StatementBuilder
125
+ SELECT = 'SELECT %s'
126
+ FROM = 'FROM %s'
127
+ WHERE = 'WHERE %s'
128
+ ORDER = 'ORDER BY %s %s'
129
+ LIMIT = 'LIMIT %d'
130
+ OFFSET = 'OFFSET %d'
131
+
132
+ attr_accessor :select, :from, :where, :order_by, :ascending, :limit, :offset
133
+
134
+ # Create a StatementBuilder object.
135
+ def initialize(api, &block)
136
+ @api = api
137
+ @select = nil
138
+ @from = nil
139
+ @where = nil
140
+ @order_by = nil
141
+ @ascending = true
142
+ @limit = SUGGESTED_PAGE_LIMIT
143
+ @offset = 0
144
+ @pql_values = PQLValues.new
145
+ yield self if block_given?
146
+ end
147
+
148
+ # Edit a StatmentBuilder object with a block.
149
+ def configure(&block)
150
+ yield self
151
+ end
152
+
153
+ # Add a value to be matched to bind a variable in WHERE conditions.
154
+ def with_bind_variable(key, value)
155
+ @pql_values.add_value(key, value)
156
+ return self
157
+ end
158
+
159
+ # Return a list of validation errors.
160
+ def validate()
161
+ if !@select.to_s.strip.empty? and @from.to_s.strip.empty?
162
+ raise 'FROM clause is required with SELECT'
163
+ end
164
+ if !@from.to_s.strip.empty? and @select.to_s.strip.empty?
165
+ raise 'SELECT clause is required with FROM'
166
+ end
167
+ if !@offset.nil? and @limit.nil?
168
+ raise 'LIMIT clause is required with OFFSET'
169
+ end
170
+ unless @limit.is_a? Integer or @limit.nil?
171
+ raise 'LIMIT must be an integer'
172
+ end
173
+ unless @offset.is_a? Integer or @offset.nil?
174
+ raise 'OFFSET must be an integer'
175
+ end
176
+ end
177
+
178
+ # Create a statement object that can be sent in a DFP API request.
179
+ def to_statement()
180
+ @api.utils_reporter.statement_builder_used()
181
+ validate()
182
+ ordering = @ascending ? 'ASC' : 'DESC'
183
+ pql_query = PQLQuery.new
184
+ pql_query << SELECT % @select unless @select.to_s.empty?
185
+ pql_query << FROM % @from unless @from.to_s.empty?
186
+ pql_query << WHERE % @where unless @where.to_s.empty?
187
+ pql_query << ORDER % [@order_by, ordering] unless @order_by.to_s.empty?
188
+ pql_query << LIMIT % @limit unless @limit.nil?
189
+ pql_query << OFFSET % @offset unless @offset.nil?
190
+ return {:query => pql_query.to_s(), :values => @pql_values.values}
191
+ end
192
+ end
193
+ end