consummo 0.4.4 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Build Status](http://img.shields.io/travis/clayton/consummo.svg?style=flat-square)](https://travis-ci.org/clayton/consummo)
|
4
|
+
[![Dependency Status](http://img.shields.io/gemnasium/clayton/consummo.svg?style=flat-square)](https://gemnasium.com/clayton/consummo)
|
5
|
+
[![Code Climate](http://img.shields.io/codeclimate/github/clayton/consummo.svg?style=flat-square)](https://codeclimate.com/github/clayton/consummo)
|
6
|
+
[![Test Coverage](https://codeclimate.com/github/clayton/consummo/badges/coverage.svg)](https://codeclimate.com/github/clayton/consummo/coverage)
|
7
|
+
[![Issue Count](https://codeclimate.com/github/clayton/consummo/badges/issue_count.svg)](https://codeclimate.com/github/clayton/consummo)
|
8
|
+
[![Gem Version](http://img.shields.io/gem/v/consummo.svg?style=flat-square)](https://rubygems.org/gems/consummo)
|
9
|
+
[![License](http://img.shields.io/:license-mit-blue.svg?style=flat-square)](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
|