consummo 0.4.4 → 1.0.2
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 +5 -5
- data/.gitignore +1 -0
- data/.travis.yml +12 -5
- data/README.md +26 -5
- data/consummo.gemspec +8 -9
- data/lib/consummo.rb +10 -10
- data/lib/consummo/enrichers/content_scorer.rb +8 -0
- data/lib/consummo/enrichers/facebook_like_enricher.rb +15 -0
- data/lib/consummo/enrichers/keyword_hint_enricher.rb +24 -0
- data/lib/consummo/enrichers/readability_enricher.rb +14 -0
- data/lib/consummo/enrichers/simple_enricher.rb +7 -0
- data/lib/consummo/enrichers/social_media_metric_enricher.rb +28 -0
- data/lib/consummo/enrichers/twitter_share_enricher.rb +15 -0
- data/lib/consummo/enrichers/url_enricher.rb +12 -0
- data/lib/consummo/enrichers/url_resolver.rb +15 -0
- data/lib/consummo/enrichers/word_count_enricher.rb +8 -0
- data/lib/consummo/feed.rb +12 -10
- data/lib/consummo/feed_client.rb +7 -5
- data/lib/consummo/feed_fetcher.rb +19 -17
- data/lib/consummo/feed_item.rb +9 -7
- data/lib/consummo/feed_item_factory.rb +21 -19
- data/lib/consummo/feed_processor.rb +16 -14
- data/lib/consummo/http_client.rb +6 -4
- data/lib/consummo/item_consumer.rb +12 -10
- data/lib/consummo/item_producer.rb +11 -9
- data/lib/consummo/simple_item.rb +23 -21
- data/lib/consummo/version.rb +1 -1
- metadata +29 -44
- data/lib/consummo/content_scorer.rb +0 -6
- data/lib/consummo/facebook_like_enricher.rb +0 -13
- data/lib/consummo/keyword_hint_enricher.rb +0 -22
- data/lib/consummo/readability_enricher.rb +0 -12
- data/lib/consummo/simple_enricher.rb +0 -5
- data/lib/consummo/social_media_metric_enricher.rb +0 -26
- data/lib/consummo/twitter_share_enricher.rb +0 -13
- data/lib/consummo/url_enricher.rb +0 -10
- data/lib/consummo/url_resolver.rb +0 -13
- data/lib/consummo/word_count_enricher.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c506313299e8036dc9715ed16e8b554dc90e03dc57d4aee7c1c4300fea165049
|
4
|
+
data.tar.gz: 7f29bc1f72c4a2120a50e918de5f5bdafcccbbac50f84a41f4dc026ca29cd623
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fccbf7e5583f5064abd2905f1178959aefce440ebd90c3aaff90b891caadcb6bf6bb6f6a1adaa9a593e7972fb65b164692d4164777f6878059e9440055dd4f40
|
7
|
+
data.tar.gz: e1df75348d5e74476b7a123db042bd955973a610b4c60daa5368bf4bf0caf8ff5e807da062ffbbb0bcf5a9b1594eb6ccf375af6ffb32207b3cfda92c69379cb9
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,7 +1,14 @@
|
|
1
|
+
env:
|
2
|
+
global:
|
3
|
+
- CC_TEST_REPORTER_ID=28b27ad187b2bf12010e7cd376210d72c1ccee56494288417855970bc5e32613
|
1
4
|
language: ruby
|
2
5
|
rvm:
|
3
|
-
- 2.
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
6
|
+
- 2.7.0
|
7
|
+
before_script:
|
8
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
9
|
+
- chmod +x ./cc-test-reporter
|
10
|
+
- ./cc-test-reporter before-build
|
11
|
+
script:
|
12
|
+
- bundle exec rspec
|
13
|
+
after_script:
|
14
|
+
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
data/README.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Consummo
|
2
2
|
|
3
|
+
[](https://travis-ci.org/clayton/consummo)
|
4
|
+
[](https://gemnasium.com/clayton/consummo)
|
5
|
+
[](https://codeclimate.com/github/clayton/consummo)
|
6
|
+
[](https://codeclimate.com/github/clayton/consummo/coverage)
|
7
|
+
[](https://codeclimate.com/github/clayton/consummo)
|
8
|
+
[](https://rubygems.org/gems/consummo)
|
9
|
+
[](http://clayton.mit-license.org)
|
10
|
+
|
3
11
|
Consummo is an engine for consuming, enriching and producing pieces of content from RSS feeds.
|
4
12
|
|
5
13
|
## Quick Start
|
@@ -50,6 +58,23 @@ An `Item Enricher` enriches the details and data from a `Feed Item`. For example
|
|
50
58
|
|
51
59
|
The intent of `Item Enrichers` is that they are extensible and easy to implement such that multiple custom enrichments are possible.
|
52
60
|
|
61
|
+
## Existing Enrichers
|
62
|
+
|
63
|
+
### Working
|
64
|
+
|
65
|
+
| Name | Description | Class |
|
66
|
+
|:---------------|:-----------------------------------------------------------------------------------------------------------------------------------|:-----------------------|
|
67
|
+
| Facebook Likes | Enriches the item with the current number of Facebook likes based on the items's `URI` | `FacebookLikeEnricher` |
|
68
|
+
| Readability | Enriches the item with the [Flesch–Kincaid readability test](https://en.wikipedia.org/wiki/Flesch–Kincaid_readability_tests) score | `ReadabilityEnricher` |
|
69
|
+
| URL | Enriches the item with the true final URI by following all redirects | `UrlEnricher` |
|
70
|
+
| Keyword Hint | Enriches the item by wrapping any discovered keywords (passed in to the enrichment) with `<strong>` tags | `KeywordHintEnricher` |
|
71
|
+
|
72
|
+
### In Need of Updates
|
73
|
+
|
74
|
+
| Name | Description | Class | Needs |
|
75
|
+
|:---------------|:------------------------------------------------------------|:-----------------------|:-----------------------------------------|
|
76
|
+
| Twitter Shares | Enriches the item with the current number of twitter shares | `TwitterShareEnricher` | Update to work with the Twitter v1.1 API |
|
77
|
+
|
53
78
|
## Custom Enrichment
|
54
79
|
|
55
80
|
Enrichers follow a very simple interface:
|
@@ -79,10 +104,6 @@ Or install it yourself as:
|
|
79
104
|
|
80
105
|
$ gem install consummo
|
81
106
|
|
82
|
-
## Usage
|
83
|
-
|
84
|
-
TODO: Write usage instructions here
|
85
|
-
|
86
107
|
## Development
|
87
108
|
|
88
109
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -91,7 +112,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
91
112
|
|
92
113
|
## Contributing
|
93
114
|
|
94
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
115
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/clayton/consummo.
|
95
116
|
|
96
117
|
|
97
118
|
## License
|
data/consummo.gemspec
CHANGED
@@ -20,14 +20,13 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
22
|
spec.add_runtime_dependency "feedjira", "~> 2.0"
|
23
|
-
spec.add_runtime_dependency "activesupport", "~>
|
24
|
-
spec.add_runtime_dependency "odyssey", "~> 0.
|
25
|
-
spec.add_runtime_dependency "httparty", "~> 0.
|
23
|
+
spec.add_runtime_dependency "activesupport", "~> 6"
|
24
|
+
spec.add_runtime_dependency "odyssey", "~> 0.3"
|
25
|
+
spec.add_runtime_dependency "httparty", "~> 0.18"
|
26
26
|
|
27
|
-
spec.add_development_dependency "bundler", "~>
|
28
|
-
spec.add_development_dependency "rake", "~>
|
29
|
-
spec.add_development_dependency "rspec", "~> 3
|
30
|
-
spec.add_development_dependency "vcr", "~>
|
31
|
-
spec.add_development_dependency "simplecov", "~> 0.
|
32
|
-
spec.add_development_dependency "codeclimate-test-reporter", "~> 0.5"
|
27
|
+
spec.add_development_dependency "bundler", "~> 2"
|
28
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
29
|
+
spec.add_development_dependency "rspec", "~> 3"
|
30
|
+
spec.add_development_dependency "vcr", "~> 6"
|
31
|
+
spec.add_development_dependency "simplecov", "~> 0.18"
|
33
32
|
end
|
data/lib/consummo.rb
CHANGED
@@ -3,9 +3,9 @@ require 'active_support/core_ext/object/blank'
|
|
3
3
|
|
4
4
|
require "consummo/version"
|
5
5
|
|
6
|
-
require "consummo/social_media_metric_enricher"
|
7
|
-
require "consummo/content_scorer"
|
8
|
-
require "consummo/facebook_like_enricher"
|
6
|
+
require "consummo/enrichers/social_media_metric_enricher"
|
7
|
+
require "consummo/enrichers/content_scorer"
|
8
|
+
require "consummo/enrichers/facebook_like_enricher"
|
9
9
|
require "consummo/feed"
|
10
10
|
require "consummo/feed_client"
|
11
11
|
require "consummo/feed_fetcher"
|
@@ -15,15 +15,15 @@ require "consummo/feed_processor"
|
|
15
15
|
require "consummo/http_client"
|
16
16
|
require "consummo/item_consumer"
|
17
17
|
require "consummo/item_producer"
|
18
|
-
require "consummo/keyword_hint_enricher"
|
19
|
-
require "consummo/readability_enricher"
|
18
|
+
require "consummo/enrichers/keyword_hint_enricher"
|
19
|
+
require "consummo/enrichers/readability_enricher"
|
20
20
|
require "consummo/simple_item"
|
21
|
-
require "consummo/social_media_metric_enricher"
|
22
|
-
require "consummo/twitter_share_enricher"
|
23
|
-
require "consummo/url_enricher"
|
24
|
-
require "consummo/url_resolver"
|
21
|
+
require "consummo/enrichers/social_media_metric_enricher"
|
22
|
+
require "consummo/enrichers/twitter_share_enricher"
|
23
|
+
require "consummo/enrichers/url_enricher"
|
24
|
+
require "consummo/enrichers/url_resolver"
|
25
25
|
require "consummo/version"
|
26
|
-
require "consummo/word_count_enricher"
|
26
|
+
require "consummo/enrichers/word_count_enricher"
|
27
27
|
|
28
28
|
|
29
29
|
module Consummo
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Consummo
|
2
|
+
class KeywordHintEnricher
|
3
|
+
def initialize(keywords:[])
|
4
|
+
@keywords = keywords
|
5
|
+
end
|
6
|
+
|
7
|
+
def enrich(item, keywords=[])
|
8
|
+
modified = item.title
|
9
|
+
list = keywords.empty? ? @keywords : keywords
|
10
|
+
|
11
|
+
for keyword in list do
|
12
|
+
modified = make_replacements(modified, keyword)
|
13
|
+
end
|
14
|
+
{hinted_title: modified}
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def make_replacements(text, keyword)
|
19
|
+
return nil if text.blank?
|
20
|
+
return text unless text.match(/#{keyword}/i)
|
21
|
+
text.gsub(/(#{keyword})/i, '<strong>\1</strong>')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Consummo
|
2
|
+
class SocialMediaMetricEnricher
|
3
|
+
def initialize(client: HttpClient.new)
|
4
|
+
@client = client
|
5
|
+
end
|
6
|
+
|
7
|
+
def enrich(item)
|
8
|
+
begin
|
9
|
+
result = @client.get("#{metric_endpoint}#{URI.encode(item.url)}")
|
10
|
+
{metric_name.to_sym => result[metric_key]}
|
11
|
+
rescue Exception => e
|
12
|
+
{}
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def metric_endpoint
|
17
|
+
"http://example.com?id="
|
18
|
+
end
|
19
|
+
|
20
|
+
def metric_name
|
21
|
+
"shares"
|
22
|
+
end
|
23
|
+
|
24
|
+
def metric_key
|
25
|
+
metric_name
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Consummo
|
2
|
+
class TwitterShareEnricher < SocialMediaMetricEnricher
|
3
|
+
def metric_endpoint
|
4
|
+
"http://urls.api.twitter.com/1/urls/count.json?url="
|
5
|
+
end
|
6
|
+
|
7
|
+
def metric_name
|
8
|
+
"twitter_shares"
|
9
|
+
end
|
10
|
+
|
11
|
+
def metric_key
|
12
|
+
"count"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module Consummo
|
4
|
+
class UrlResolver
|
5
|
+
def resolve(url)
|
6
|
+
return url if url.blank?
|
7
|
+
begin
|
8
|
+
response = HTTParty.head(url, follow_redirects: true)
|
9
|
+
response.request.last_uri
|
10
|
+
rescue Errno::ECONNREFUSED, URI::InvalidURIError, HTTParty::RedirectionTooDeep
|
11
|
+
url
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/consummo/feed.rb
CHANGED
@@ -1,15 +1,17 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
module Consummo
|
2
|
+
class Feed
|
3
|
+
attr_accessor :uri
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
5
|
+
def self.create(args={})
|
6
|
+
Feed.new(args)
|
7
|
+
end
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
def initialize(attrs={})
|
10
|
+
self.uri = attrs[:uri]
|
11
|
+
end
|
11
12
|
|
12
|
-
|
13
|
-
|
13
|
+
def id
|
14
|
+
return self.to_s
|
15
|
+
end
|
14
16
|
end
|
15
17
|
end
|
data/lib/consummo/feed_client.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'feedjira'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
module Consummo
|
4
|
+
class FeedClient
|
5
|
+
def fetch_and_parse(uri)
|
6
|
+
feed = Feedjira::Feed.fetch_and_parse(uri)
|
7
|
+
return [] if feed.is_a?(Fixnum)
|
8
|
+
feed.entries
|
9
|
+
end
|
8
10
|
end
|
9
11
|
end
|
@@ -1,22 +1,24 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module Consummo
|
2
|
+
class FeedFetcher
|
3
|
+
def initialize(client: FeedClient.new, factory: FeedItemFactory.new)
|
4
|
+
@client = client
|
5
|
+
@factory = factory
|
6
|
+
end
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
def fetch(feed, last_modified = nil)
|
9
|
+
@client.fetch_and_parse(feed.uri).map do |entry|
|
10
|
+
next if old_entry?(entry, last_modified)
|
11
|
+
item = @factory.build(entry)
|
12
|
+
item.attributes = {:feed_id => feed.id}
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
item
|
15
|
+
end.compact
|
16
|
+
end
|
16
17
|
|
17
|
-
private
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
private
|
19
|
+
def old_entry?(entry, last_modified)
|
20
|
+
return false if last_modified.nil?
|
21
|
+
last_modified > entry.last_modified
|
22
|
+
end
|
21
23
|
end
|
22
24
|
end
|
data/lib/consummo/feed_item.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
module Consummo
|
2
|
+
class FeedItem
|
3
|
+
attr_accessor :title
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
5
|
+
def initialize(attrs={})
|
6
|
+
self.title = attrs[:title]
|
7
|
+
end
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
def self.create(attributes={})
|
10
|
+
#
|
11
|
+
end
|
10
12
|
end
|
11
13
|
end
|
@@ -1,24 +1,26 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
1
|
+
module Consummo
|
2
|
+
class FeedItemFactory
|
3
|
+
def build(entry)
|
4
|
+
item = SimpleItem.new({
|
5
|
+
:title => entry.title,
|
6
|
+
:hinted_title => entry.title,
|
7
|
+
:url => entry.url,
|
8
|
+
:author => entry.author,
|
9
|
+
:summary => entry.summary,
|
10
|
+
:published_at => sanitize_published_at(entry.published),
|
11
|
+
:guid => entry.id
|
12
|
+
})
|
12
13
|
|
13
|
-
|
14
|
+
item.attributes = {:categories => entry.categories.join(";")} unless entry.is_a?(Feedjira::Parser::ITunesRSSItem)
|
14
15
|
|
15
|
-
|
16
|
-
|
16
|
+
item
|
17
|
+
end
|
17
18
|
|
18
|
-
private
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
private
|
20
|
+
def sanitize_published_at(published)
|
21
|
+
return Time.now if published.blank?
|
22
|
+
return Time.now if Time.parse(published.to_s) < Time.parse('1979-01-01-01 00:00:00')
|
23
|
+
published
|
24
|
+
end
|
23
25
|
end
|
24
26
|
end
|
@@ -1,19 +1,21 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module Consummo
|
2
|
+
class FeedProcessor
|
3
|
+
def initialize(feeds = [], enrichers: [])
|
4
|
+
@feeds = feeds
|
5
|
+
@enrichers = enrichers
|
6
|
+
end
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
def process
|
9
|
+
producer = ItemProducer.new(feeds: @feeds)
|
10
|
+
consumer = ItemConsumer.new(items: producer.produce, enrichers: @enrichers)
|
11
|
+
persist(consumer.consume)
|
12
|
+
end
|
12
13
|
|
13
|
-
private
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
private
|
15
|
+
def persist(items)
|
16
|
+
items.each do |item|
|
17
|
+
FeedItem.create(item.attributes)
|
18
|
+
end
|
17
19
|
end
|
18
20
|
end
|
19
21
|
end
|
data/lib/consummo/http_client.rb
CHANGED
@@ -1,15 +1,17 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module Consummo
|
2
|
+
class ItemConsumer
|
3
|
+
def initialize(items: [], enrichers: [])
|
4
|
+
@items = items
|
5
|
+
@enrichers = enrichers
|
6
|
+
end
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
def consume
|
9
|
+
@items.flat_map do |item|
|
10
|
+
@enrichers.each do |enricher|
|
11
|
+
item.attributes = enricher.enrich(item)
|
12
|
+
end
|
13
|
+
item
|
11
14
|
end
|
12
|
-
item
|
13
15
|
end
|
14
16
|
end
|
15
17
|
end
|
@@ -1,12 +1,14 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module Consummo
|
2
|
+
class ItemProducer
|
3
|
+
def initialize(feeds: [], fetcher: FeedFetcher.new)
|
4
|
+
@feeds = feeds
|
5
|
+
@fetcher = fetcher
|
6
|
+
end
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
def produce
|
9
|
+
@feeds.flat_map do |feed|
|
10
|
+
@fetcher.fetch(feed)
|
11
|
+
end.shuffle
|
12
|
+
end
|
11
13
|
end
|
12
14
|
end
|
data/lib/consummo/simple_item.rb
CHANGED
@@ -1,29 +1,31 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
module Consummo
|
2
|
+
class SimpleItem
|
3
|
+
def initialize(attributes={})
|
4
|
+
@attributes = attributes
|
5
|
+
end
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
def attributes
|
8
|
+
@attributes
|
9
|
+
end
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
11
|
+
def attributes=(attrs)
|
12
|
+
@attributes.merge!(attrs)
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
def title
|
16
|
+
@attributes[:title]
|
17
|
+
end
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
def url
|
20
|
+
@attributes[:url]
|
21
|
+
end
|
21
22
|
|
22
|
-
|
23
|
-
|
24
|
-
|
23
|
+
def guid
|
24
|
+
@attributes[:guid] || @attributes[:url] || nil
|
25
|
+
end
|
25
26
|
|
26
|
-
|
27
|
-
|
27
|
+
def content
|
28
|
+
@attributes[:content] || ""
|
29
|
+
end
|
28
30
|
end
|
29
31
|
end
|
data/lib/consummo/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: consummo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Clayton Lengel-Zigich
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: feedjira
|
@@ -30,126 +30,112 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '6'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '6'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: odyssey
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0.
|
47
|
+
version: '0.3'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0.
|
54
|
+
version: '0.3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: httparty
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0.
|
61
|
+
version: '0.18'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0.
|
68
|
+
version: '0.18'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: bundler
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '2'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '2'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '13.0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '13.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rspec
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '3
|
103
|
+
version: '3'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '3
|
110
|
+
version: '3'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: vcr
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
117
|
+
version: '6'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '6'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: simplecov
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '0.
|
131
|
+
version: '0.18'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '0.
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: codeclimate-test-reporter
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - "~>"
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0.5'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - "~>"
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '0.5'
|
138
|
+
version: '0.18'
|
153
139
|
description: Consummo is a small ruby library that provides item producers, consumers
|
154
140
|
and enrichers to take items from RSS feeds and turn them into persistable feed items.
|
155
141
|
Consummo was extracted from https://consummo.io where it was used to find and process
|
@@ -174,8 +160,16 @@ files:
|
|
174
160
|
- consummo.gemspec
|
175
161
|
- lib/consummo.rb
|
176
162
|
- lib/consummo/.keep
|
177
|
-
- lib/consummo/content_scorer.rb
|
178
|
-
- lib/consummo/facebook_like_enricher.rb
|
163
|
+
- lib/consummo/enrichers/content_scorer.rb
|
164
|
+
- lib/consummo/enrichers/facebook_like_enricher.rb
|
165
|
+
- lib/consummo/enrichers/keyword_hint_enricher.rb
|
166
|
+
- lib/consummo/enrichers/readability_enricher.rb
|
167
|
+
- lib/consummo/enrichers/simple_enricher.rb
|
168
|
+
- lib/consummo/enrichers/social_media_metric_enricher.rb
|
169
|
+
- lib/consummo/enrichers/twitter_share_enricher.rb
|
170
|
+
- lib/consummo/enrichers/url_enricher.rb
|
171
|
+
- lib/consummo/enrichers/url_resolver.rb
|
172
|
+
- lib/consummo/enrichers/word_count_enricher.rb
|
179
173
|
- lib/consummo/feed.rb
|
180
174
|
- lib/consummo/feed_client.rb
|
181
175
|
- lib/consummo/feed_fetcher.rb
|
@@ -185,16 +179,8 @@ files:
|
|
185
179
|
- lib/consummo/http_client.rb
|
186
180
|
- lib/consummo/item_consumer.rb
|
187
181
|
- lib/consummo/item_producer.rb
|
188
|
-
- lib/consummo/keyword_hint_enricher.rb
|
189
|
-
- lib/consummo/readability_enricher.rb
|
190
|
-
- lib/consummo/simple_enricher.rb
|
191
182
|
- lib/consummo/simple_item.rb
|
192
|
-
- lib/consummo/social_media_metric_enricher.rb
|
193
|
-
- lib/consummo/twitter_share_enricher.rb
|
194
|
-
- lib/consummo/url_enricher.rb
|
195
|
-
- lib/consummo/url_resolver.rb
|
196
183
|
- lib/consummo/version.rb
|
197
|
-
- lib/consummo/word_count_enricher.rb
|
198
184
|
homepage: https://github.com/clayton/consummo
|
199
185
|
licenses:
|
200
186
|
- MIT
|
@@ -214,8 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
200
|
- !ruby/object:Gem::Version
|
215
201
|
version: '0'
|
216
202
|
requirements: []
|
217
|
-
|
218
|
-
rubygems_version: 2.5.1
|
203
|
+
rubygems_version: 3.1.3
|
219
204
|
signing_key:
|
220
205
|
specification_version: 4
|
221
206
|
summary: An engine for producing, consuming and enriching items from RSS Feeds.
|
@@ -1,22 +0,0 @@
|
|
1
|
-
class KeywordHintEnricher
|
2
|
-
def initialize(keywords:[])
|
3
|
-
@keywords = keywords
|
4
|
-
end
|
5
|
-
|
6
|
-
def enrich(item, keywords=[])
|
7
|
-
modified = item.title
|
8
|
-
list = keywords.empty? ? @keywords : keywords
|
9
|
-
|
10
|
-
for keyword in list do
|
11
|
-
modified = make_replacements(modified, keyword)
|
12
|
-
end
|
13
|
-
{hinted_title: modified}
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
17
|
-
def make_replacements(text, keyword)
|
18
|
-
return nil if text.blank?
|
19
|
-
return text unless text.match(/#{keyword}/i)
|
20
|
-
text.gsub(/(#{keyword})/i, '<strong>\1</strong>')
|
21
|
-
end
|
22
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
class SocialMediaMetricEnricher
|
2
|
-
def initialize(client: HttpClient.new)
|
3
|
-
@client = client
|
4
|
-
end
|
5
|
-
|
6
|
-
def enrich(item)
|
7
|
-
begin
|
8
|
-
result = @client.get("#{metric_endpoint}#{URI.encode(item.url)}")
|
9
|
-
{metric_name.to_sym => result[metric_key]}
|
10
|
-
rescue Exception => e
|
11
|
-
{}
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def metric_endpoint
|
16
|
-
"http://example.com?id="
|
17
|
-
end
|
18
|
-
|
19
|
-
def metric_name
|
20
|
-
"shares"
|
21
|
-
end
|
22
|
-
|
23
|
-
def metric_key
|
24
|
-
metric_name
|
25
|
-
end
|
26
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'httparty'
|
2
|
-
|
3
|
-
class UrlResolver
|
4
|
-
def resolve(url)
|
5
|
-
return url if url.blank?
|
6
|
-
begin
|
7
|
-
response = HTTParty.head(url, follow_redirects: true)
|
8
|
-
response.request.last_uri
|
9
|
-
rescue Errno::ECONNREFUSED, URI::InvalidURIError, HTTParty::RedirectionTooDeep
|
10
|
-
url
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|