Module: FetchUtil::Regulatory::TdmPolicy
- Included in:
- FetchUtil::Regulatory
- Defined in:
- lib/fetch_util/regulatory/tdm_policy.rb
Instance Method Summary collapse
- #expanded_tdm_policy_signals(policy_refs) ⇒ Object
- #extract_tdm_policy_signals(body) ⇒ Object
- #tdm_policy_record(url) ⇒ Object
Instance Method Details
#expanded_tdm_policy_signals(policy_refs) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/fetch_util/regulatory/tdm_policy.rb', line 6 def (policy_refs) dedupe_policy_refs(policy_refs).flat_map do |policy_ref| record = tdm_policy_record(policy_ref["url"]) Array(record["signals"]).map do |template| signal = deep_copy(template) signal["path"] ||= policy_ref["path"] conditions = signal["conditions"] || {} conditions["policy"] = policy_ref["url"] signal["conditions"] = conditions signal end end end |
#extract_tdm_policy_signals(body) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/fetch_util/regulatory/tdm_policy.rb', line 31 def extract_tdm_policy_signals(body) payload = JSON.parse(body.to_s) = array_value(payload, "permission") .filter_map do || next unless .is_a?(Hash) next unless tdm_policy_action?(["action"]) conditions = {} duties = array_value(, "duty").filter_map { |item| duty_name(item) } conditions["duty"] = duties if duties.any? purpose = () conditions["purpose"] = purpose if purpose signal = build_signal("allow", "text-and-data-mining", conditions: conditions) target_path = policy_target_path(["target"]) signal["path"] = target_path if target_path signal end rescue JSON::ParserError [] end |
#tdm_policy_record(url) ⇒ Object
20 21 22 23 24 25 26 27 28 29 |
# File 'lib/fetch_util/regulatory/tdm_policy.rb', line 20 def tdm_policy_record(url) cache_fetch("tdmpolicy:#{url}") do response = safe_get(url) signals = [] if response&.status&.between?(200, 299) && json_like_response?(response.headers, response.body) signals = extract_tdm_policy_signals(response.body) end { "signals" => sort_specificity_signals(signals) } end end |