jekyll-action-network 0.2.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f925a540d595bae5d52294f40fad85b4ab45bb5ef98ae6dd41b343d753ca433e
4
+ data.tar.gz: 6a60b65be56cfa0fdc36313c4e7c00793c5985ffda6c3570c2a1516177e9bed0
5
+ SHA512:
6
+ metadata.gz: 69c5c92a8d307173cd5c2d90b2ec3513a19b82936c1f397993db6bd23a0bd78e2e5f43cb737f9d46f188d1d39e23dfb2e97a6c851a287718fc047550a686700b
7
+ data.tar.gz: 9ee072992fc8321b2fee437af90f7281178ed7c619afde34a082974ac4894d98bc45be6f0e67b0e196f9d60617b636a791c65916c491ee19c0265d274dd96445
@@ -0,0 +1,155 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "action_network_rest"
4
+ require "jekyll"
5
+ require "yaml"
6
+ require "dotenv/load"
7
+
8
+ ##
9
+ # This class is a Jekyll::Generator that creates collections from
10
+ # Action Network
11
+ module Jekyll
12
+ ##
13
+ # This sub class is a Jekyll::Generator that creates collections from
14
+ # Action Network
15
+ class ActionNetworkGenerator < Jekyll::Generator
16
+ def generate(site)
17
+ return unless site.config["action_network"]
18
+
19
+ @site = site
20
+ @log_name = "Action Network:"
21
+ @settings ||= settings
22
+ @config = site.config["action_network"]
23
+ return unless authenticate
24
+
25
+ @actions = Jekyll::Collection.new(site, "actions") if @config["actions"]
26
+ @config.each do |name, _config|
27
+ next unless @defaults[name]
28
+
29
+ make_collection(name)
30
+ end
31
+ site.collections["actions"] = @actions if @actions
32
+ end
33
+
34
+ def settings
35
+ @settings = YAML.load_file("#{File.expand_path(__dir__)}/settings.yaml")
36
+ @defaults = @settings["defaults"]
37
+ @fields = @settings["fields"]
38
+ @filters = @settings["filters"]
39
+ @settings
40
+ end
41
+
42
+ def make_collection(name)
43
+ if @config[name].is_a?(Hash)
44
+ config = @defaults[name].merge(@config[name])
45
+ config["mappings"] = @defaults[name]["mappings"].merge(@config[name]["mappings"] || {})
46
+ end
47
+ config ||= @defaults[name]
48
+ Jekyll.logger.info @log_name, "Processing #{name}"
49
+ actions = get_full_list(name)
50
+ Jekyll.logger.warn "#{name} before filter: #{actions.length}"
51
+ filtered_actions = filter_actions(name, actions, config)
52
+ Jekyll.logger.warn "#{name} after filter: #{filtered_actions.length}"
53
+ collection = @site.collections[name] if @site.collections[name]
54
+ collection ||= Jekyll::Collection.new(@site, config["collection"])
55
+ filtered_actions.each do |action|
56
+ slug = action["browser_url"].split("/")[-1]
57
+ path = File.join(@site.source, "_#{config["collection"]}", "#{slug}.md")
58
+ doc = Jekyll::Document.new(path, collection: collection, site: @site)
59
+ doc.content = action[config["content"]]
60
+ frontmattter_data = {}
61
+ config["mappings"].each do |a, d|
62
+ frontmattter_data[d] = action[a]
63
+ end
64
+ frontmattter_data.merge!({
65
+ "layout" => config["layout"],
66
+ "slug" => slug,
67
+ "embed_code" => make_embed_code(action["browser_url"]),
68
+ "action_type" => name
69
+ })
70
+ doc.merge_data!(frontmattter_data)
71
+ collection.docs << doc
72
+ @actions.docs << doc if @actions
73
+ end
74
+ @site.collections[config["collection"]] = collection
75
+ end
76
+
77
+ def make_embed_code(browser_url, style = nil)
78
+ relative_url = browser_url.split("://")[1].sub("actionnetwork.org/", "")
79
+ split_url = relative_url.split("/")
80
+ css = @settings["embed"]["styles"][style] if style
81
+ resource = @settings["embed"]["resources"][split_url[0]]
82
+ slug = split_url[1]
83
+ "#{css}<script src='https://actionnetwork.org/widgets/v5/#{resource}/#{slug}?format=js&source=widget'></script>
84
+ <div id='can-#{resource}-area-#{slug}' style='width: 100%'></div>"
85
+ end
86
+
87
+ def get_full_list(name)
88
+ page = 1
89
+ actions = []
90
+ loop do
91
+ action_page = @client.send(name).list(page: page)
92
+ break if action_page.empty?
93
+
94
+ actions.concat(action_page)
95
+ page += 1
96
+ end
97
+ actions
98
+ end
99
+
100
+ def filter_actions(name, actions, _config)
101
+ public = []
102
+ puts @filters["all"]
103
+ puts @filters[name] || {}
104
+ filters = @filters["all"].merge(@filters[name] || {})
105
+ filters = filters.merge(@config["filters"] || {}) if @config.is_a? Hash
106
+ puts filters
107
+ actions.each do |action|
108
+ filtered = true
109
+ filters.each do |key, value|
110
+ unless action[key] == value
111
+ if value == "%" && action[key]
112
+ filtered = false if action[key].length.positive?
113
+ else
114
+ Jekyll.logger.warn @log_name, "#{name} filtered because #{action[key]} == #{value}"
115
+ filtered = true
116
+ break
117
+ end
118
+ end
119
+ filtered = false
120
+ end
121
+ public << reduce_fields(action) unless filtered
122
+ end
123
+ public
124
+ end
125
+
126
+ def reduce_fields(action)
127
+ reduced_action = {}
128
+ @fields.each do |field|
129
+ reduced_action[field] = action[field] if action[field]
130
+ end
131
+ reduced_action
132
+ end
133
+
134
+ def get_api_key(key)
135
+ return unless key
136
+ return ENV.fetch(key[4..key.length - 1], nil) if key[0..3] == "ENV_"
137
+ return ENV["ACTION_NETWORK_API_KEY"] if ENV["ACTION_NETWORK_API_KEY"]
138
+
139
+ key
140
+ end
141
+
142
+ def authenticate
143
+ api_key = get_api_key(@config["key"])
144
+ Jekyll.logger.warn "Action Network API Key not found." unless api_key
145
+ return unless api_key
146
+
147
+ @client = ActionNetworkRest.new(api_key: api_key)
148
+ unless @client.entry_point.authenticated_successfully?
149
+ Jekyll.logger.warn "Action Network Authentication Unsucessful"
150
+ return
151
+ end
152
+ true
153
+ end
154
+ end
155
+ end
@@ -0,0 +1,115 @@
1
+ filters:
2
+ all:
3
+ "action_network:hidden": false
4
+ browser_url: "%"
5
+ events:
6
+ visibility: public
7
+ fields:
8
+ - title
9
+ - description
10
+ - petition_text
11
+ - browser_url
12
+ - image
13
+ - target
14
+ - actions
15
+ - "action_network:sponsor"
16
+ - start_date
17
+ - end_date
18
+ - location
19
+ - visibility
20
+ - capacity
21
+ - host_url
22
+ - total_events
23
+ - total_rsvps
24
+ - call_to_action
25
+ - "action_network:event_campaign_id"
26
+ - type
27
+ embed:
28
+ resources:
29
+ forms: form
30
+ events: event
31
+ petitions: petition
32
+ letters: letter
33
+ call_campaigns: call_campaign
34
+ event_campaigns: event_campaign
35
+ styles:
36
+ standard: <link href='https://actionnetwork.org/css/style-embed-v3.css' rel='stylesheet' type='text/css' />
37
+ layout_only: <link href='https://actionnetwork.org/css/style-embed-whitelabel-v3.css' rel='stylesheet' type='text/css' />
38
+ defaults:
39
+ petitions:
40
+ collection: petitions
41
+ layout: an-petition
42
+ content: description
43
+ mappings:
44
+ title: title
45
+ description: description
46
+ petition_text: petition_text
47
+ browser_url: browser_url
48
+ featured_image_url: image
49
+ target: target
50
+ "action_network:sponsor": sponsor
51
+ campaigns:
52
+ collection: campaigns
53
+ layout: an-campaign
54
+ content: description
55
+ mappings:
56
+ title: title
57
+ description: description
58
+ browser_url: browser_url
59
+ featured_image_url: image
60
+ actions: actions
61
+ "action_network:sponsor": sponsor
62
+ events:
63
+ collection: events
64
+ layout: an-event
65
+ content: description
66
+ mappings:
67
+ title: title
68
+ description: description
69
+ browser_url: browser_url
70
+ featured_image_url: image
71
+ start_date: start_date
72
+ end_date: end_date
73
+ location: location
74
+ "action_network:event_campaign_id": event_campaign_id
75
+ status: status
76
+ visibility: visibility
77
+ capacity: capacity
78
+ "action_network:sponsor": sponsor
79
+ event_campaigns:
80
+ collection: event_campaigns
81
+ layout: an-event_campaign
82
+ content: description
83
+ mappings:
84
+ title: title
85
+ description: description
86
+ browser_url: browser_url
87
+ featured_image_url: image
88
+ host_url: host_url
89
+ total_events: total_events
90
+ total_rsvps: total_rsvps
91
+ "action_network:sponsor": sponsor
92
+ advocacy_campaigns:
93
+ collection: advocacy_campaigns
94
+ layout: an-advocacy_campaign
95
+ content: description
96
+ mappings:
97
+ title: title
98
+ description: description
99
+ type: type
100
+ browser_url: browser_url
101
+ featured_image_url: image
102
+ "action_network:sponsor": sponsor
103
+ targets: targets
104
+ total_outreaches: total_outreaches
105
+ forms:
106
+ collection: forms
107
+ layout: an-form
108
+ content: description
109
+ mappings:
110
+ title: title
111
+ description: description
112
+ call_to_action: call_to_action
113
+ browser_url: browser_url
114
+ featured_image_url: image
115
+ "action_network:sponsor": sponsor
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module ActionNetwork
5
+ VERSION = "0.2.0"
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "jekyll/action-network/version"
4
+ require "jekyll/action-network/generator"
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-action-network
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Joe Irving
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2022-09-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dotenv
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.8'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.8.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.8'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.8.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: jekyll
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '4.2'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 4.2.0
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '4.2'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 4.2.0
53
+ - !ruby/object:Gem::Dependency
54
+ name: bundler
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '2.0'
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '2.0'
67
+ - !ruby/object:Gem::Dependency
68
+ name: rake
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: 12.3.3
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: 12.3.3
81
+ description: ''
82
+ email:
83
+ - joe@tippingpointuk.org
84
+ executables: []
85
+ extensions: []
86
+ extra_rdoc_files: []
87
+ files:
88
+ - lib/jekyll-action-network.rb
89
+ - lib/jekyll/action-network/generator.rb
90
+ - lib/jekyll/action-network/settings.yaml
91
+ - lib/jekyll/action-network/version.rb
92
+ homepage: https://github.com/tippingpointuk/jekyll-action-network/
93
+ licenses:
94
+ - MIT
95
+ metadata:
96
+ rubygems_mfa_required: 'true'
97
+ post_install_message:
98
+ rdoc_options: []
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubygems_version: 3.1.2
113
+ signing_key:
114
+ specification_version: 4
115
+ summary: Generate Jekyll collection(s) from Action Network
116
+ test_files: []