Skip to content

Commit

Permalink
Add string constants for data-sources and for requiring them
Browse files Browse the repository at this point in the history
  • Loading branch information
Enrico B committed Aug 1, 2017
1 parent 54b060e commit 7e8e640
Show file tree
Hide file tree
Showing 19 changed files with 63 additions and 49 deletions.
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
"body-parser": "^1.17.2",
"express": "^4.15.3",
"feedparser-promised": "^1.3.0",
"jsonfile": "^3.0.1"
"jsonfile": "^3.0.1",
"rethinkdb": "^2.3.3"
},
"scripts": {
"start": "nodemon src/server.js"
Expand Down
40 changes: 6 additions & 34 deletions src/data/index.js
Original file line number Diff line number Diff line change
@@ -1,36 +1,8 @@
module.exports = {
NewsAPI: require('./sources/news-api'),
CoinMarketCap: require('./sources/coin-market-cap'),
HackerNews: require('./sources/hacker-news'),
Sidebar: require('./sources/sidebar'),
Reddit: require('./sources/reddit'),
ProductHunt: require('./sources/product-hunt'),
IndieHackers: require('./sources/indie-hackers'),
DesignerNews: require('./sources/designer-news'),
BetaList: require('./sources/beta-list'),
TheOutline: require('./sources/the-outline'),
AVClub: require('./sources/av-club'),
MacRumors: require('./sources/mac-rumors'),
FiveThirtyEight: require('./sources/538'),
};
const types = require('./types');

/*
Refactor feeds to use pubsubhhubbub
module.exports = Object.keys(types).reduce((acc, type) => {
let typeString = types[type];
acc[type] = require(`./sources/${typeString}`);
return acc;
}, {});

Things that should be feeds:
hackernews
sidebar
DONE:
producthunt: https://www.producthunt.com/
SCRAP - indiehackers: https://www.indiehackers.com/
designernews: https://www.designernews.co/?format=rss
betalist: https://betalist.com/
theoutline: https://theoutline.com/feeds/recent.rss
avclub: http://www.avclub.com/rss/
fivethirtyeight: https://fivethirtyeight.com/features/feed/
TODOS:
macrumors: https://www.macrumors.com/
*/
3 changes: 2 additions & 1 deletion src/data/sources/538.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
const Feed = require('./feed');
const types = require('../types');

class FiveThirtyEight extends Feed {
constructor() {
super('https://fivethirtyeight.com/features/feed/');
super('https://fivethirtyeight.com/features/feed/', types.FiveThirtyEight);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/data/sources/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class API {
};
}

constructor(baseURL, apiKey) {
constructor(baseURL, type, apiKey) {
const axiosConfig = API.createAxiosConfig(baseURL, apiKey);
this.fetch = API.fetch(axiosConfig);
}
Expand Down
3 changes: 2 additions & 1 deletion src/data/sources/av-club.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
const Feed = require('./feed');
const types = require('../types');

class AVClub extends Feed {
constructor() {
super('http://www.avclub.com/feeds/rss/');
super('http://www.avclub.com/feeds/rss/', types.AVClub);
}
}

Expand Down
3 changes: 2 additions & 1 deletion src/data/sources/beta-list.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
const Feed = require('./feed');
const types = require('../types');

class BetaList extends Feed {
constructor() {
super('http://feeds.feedburner.com/BetaList');
super('http://feeds.feedburner.com/BetaList', types.BetaList);
}
}

Expand Down
3 changes: 2 additions & 1 deletion src/data/sources/coin-market-cap.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
const API = require('./api');
const types = require('../types');

class CoinMarketCap extends API {
constructor() {
const baseURL = 'https://api.coinmarketcap.com/v1/'
super(baseURL);
super(baseURL, types.CoinMarketCap);
}

getLatestTicker(limit = 5) {
Expand Down
3 changes: 2 additions & 1 deletion src/data/sources/designer-news.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
const Feed = require('./feed');
const types = require('../types');

class DesignerNews extends Feed {
constructor() {
super('https://www.designernews.co/?format=rss');
super('https://www.designernews.co/?format=rss', types.DesignerNews);
}
}

Expand Down
1 change: 0 additions & 1 deletion src/data/sources/feed.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
const FeedParser = require('feedparser-promised');

class Feed {

constructor(uri, type) {
const options = {
uri,
Expand Down
3 changes: 2 additions & 1 deletion src/data/sources/hacker-news.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
const API = require('./api');
const types = require('../types');

class HackerNews extends API {
constructor() {
const baseURL = 'https://hacker-news.firebaseio.com/v0/';
super(baseURL);
super(baseURL, types.HackerNews);
}

async getTopStories() {
Expand Down
1 change: 1 addition & 0 deletions src/data/sources/indie-hackers.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const Feed = require('./feed');
const types = require('../types');

// All their articles are published at the same time so they'd apprear
// grouped together
Expand Down
3 changes: 2 additions & 1 deletion src/data/sources/mac-rumors.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
const Feed = require('./feed');
const types = require('../types');

class MacRumors extends Feed {
constructor() {
super('http://feeds.macrumors.com/MacRumors-All');
super('http://feeds.macrumors.com/MacRumors-All', 'mac-rumors', types.MacRumors);
}
}

Expand Down
3 changes: 2 additions & 1 deletion src/data/sources/product-hunt.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
const Feed = require('./feed');
const types = require('../types');

class ProductHunt extends Feed {
constructor() {
super('https://www.producthunt.com/feed');
super('https://www.producthunt.com/feed', types.ProductHunt);
}
}

Expand Down
3 changes: 2 additions & 1 deletion src/data/sources/reddit.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
const API = require('./api');
const types = require('../types');

class Reddit extends API {
constructor() {
const baseURL = 'http://reddit.com/api/v1';
super(baseURL);
super(baseURL, types.Reddit);
}

getHotListings() {
Expand Down
3 changes: 2 additions & 1 deletion src/data/sources/sidebar.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
const API = require('./api');
const types = require('../types');

class Sidebar extends API {
constructor() {
const baseURL = 'https://sidebar.io/';
super(baseURL);
super(baseURL, types.Sidebar);
}

getListing() {
Expand Down
3 changes: 2 additions & 1 deletion src/data/sources/the-outline.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
const Feed = require('./feed');
const types = require('../types');

class TheOutline extends Feed {
constructor() {
super('https://theoutline.com/feeds/recent.rss');
super('https://theoutline.com/feeds/recent.rss', types.TheOutline);
}
}

Expand Down
20 changes: 20 additions & 0 deletions src/data/types.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
Constants of our data sources and their string representations. The strings
are tied to file name, since index.js requires each type's class
based on these strings.
*/
module.exports = {
538: '538',
AVClub: 'av-club',
BetaList: 'beta-list',
CoinMarketCap: 'coin-market-cap',
DesignerNews: 'designer-news',
HackerNews: 'hacker-news',
IndieHackers: 'indie-hackers',
MacRumors: 'mac-rumors',
ProductHunt: 'product-hunt',
Reddit: 'reddit',
Sidebar: 'sidebar',
TheOutline: 'the-outline',
NewsAPI: 'news-api'
};
2 changes: 1 addition & 1 deletion src/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const app = express();
const PORT = process.env.PORT || 9999;

const data = require('./data');

const types = require('./data/types');

// Middleware
app.use(bodyParser.urlencoded({ extended: false }));
Expand Down
10 changes: 10 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,10 @@ bcrypt-pbkdf@^1.0.0:
dependencies:
tweetnacl "^0.14.3"

"bluebird@>= 2.3.2 < 3":
version "2.11.0"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"

body-parser@^1.17.2:
version "1.17.2"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.2.tgz#f8892abc8f9e627d42aedafbca66bf5ab99104ee"
Expand Down Expand Up @@ -569,6 +573,12 @@ request@^2.79.0:
tunnel-agent "^0.6.0"
uuid "^3.0.0"

rethinkdb@^2.3.3:
version "2.3.3"
resolved "https://registry.yarnpkg.com/rethinkdb/-/rethinkdb-2.3.3.tgz#3dc6586e22fa1dabee0d254e64bd0e379fad2f72"
dependencies:
bluebird ">= 2.3.2 < 3"

safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
Expand Down

0 comments on commit 7e8e640

Please sign in to comment.