post_haste 1.0 → 1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 05490abd909ec30075a32d308a96e03fe2f66529
4
- data.tar.gz: 432fd9eea944f66b1026582646a501a981b5d510
3
+ metadata.gz: 149170b0b2ba322778fbdec9963b070bb8af71ed
4
+ data.tar.gz: a52aa7534b87109a1417d6575a31486c09b99369
5
5
  SHA512:
6
- metadata.gz: 4f9911869cf547f279080a9aaf31aa664e476dfcfdbe0fb94a4f5a10193b042a4852e89b4f14bd0673dc040caa7069a3254e616fba1d1523f43b7693e761d6da
7
- data.tar.gz: 589708016c6043afc6591b925d8478df3b6585e6e3a868cb418661b107a66ad6582eae9bf33a0ec570a05003ca91c5e52461d3428df7902f0e8a0c31c47bf732
6
+ metadata.gz: bf83597199e73298315263f66c0e23b1da525fd9dc7edb4d3155089284525837fc136a9e945b4f7846a12b1d45a1125ca7e90c4399ff577e73d4037e765eb657
7
+ data.tar.gz: d789bb2dd126b19912ba5de504c8c9cc71eef468ca12da28b928cf1d93298daa0c84ef202f3ec4b22e0fd05d74ef3a58818b3d0eddc728c378abb42dd4691b58
data/README.md CHANGED
@@ -22,6 +22,7 @@ Or install it yourself as:
22
22
 
23
23
  Post Haste currently can accept a URL of a Washington Post article or blog post, and converts that URL into a Ruby object with a number of methods that describe it, including its title, byline, published and updated datetimes, and more:
24
24
 
25
+ ```ruby
25
26
  require 'post_haste'
26
27
  include PostHaste
27
28
 
@@ -44,6 +45,7 @@ Post Haste currently can accept a URL of a Washington Post article or blog post,
44
45
  @article.comments.first.permalink(@article)
45
46
 
46
47
  => "http://www.washingtonpost.com/blogs/the-fix/post/republicans-on-the-2012-gop-field-blah/2012/03/15/gIQAT7CSFS_comment.html?commentID=washingtonpost.com/ECHO/item/1332046095-915-174"
48
+ ```
47
49
 
48
50
  See the full list of `Article` instance methods in article.rb.
49
51
 
@@ -5,49 +5,49 @@ require 'json'
5
5
  module PostHaste
6
6
  class Article
7
7
  # Represents a single Washington Post story or blog post.
8
-
8
+
9
9
  attr_reader :uuid, :type, :title, :summary, :mobile_headline, :web_headline, :permalink, :short_url, :keywords, :email, :bio_page,
10
10
  :comments_url, :byline, :created_datetime, :published_datetime, :display_datetime, :updated_datetime, :section, :tags, :comments
11
-
11
+
12
12
  def initialize(params={})
13
13
  params.each_pair do |k,v|
14
14
  instance_variable_set("@#{k}", v)
15
15
  end
16
16
  end
17
-
17
+
18
18
  def self.latest_comments_url(url, limit)
19
19
  escaped_uri = URI.escape(url)
20
- "http://echoapi.wpdigital.net/api/v1/search?q=((childrenof%3A+#{escaped_uri}+source%3Awashpost.com+(((state%3AUntouched+user.state%3AModeratorApproved)+OR+(state%3ACommunityFlagged%2CModeratorApproved%2CModeratorDeleted+-user.state%3AModeratorBanned%2CModeratorDeleted)+)+)+++))+itemsPerPage%3A+#{limit}+sortOrder%3A+reverseChronological+safeHTML%3Aaggressive+childrenSortOrder%3Achronological+childrenItemsPerPage%3A10+children%3A+1++(((state%3AUntouched+user.state%3AModeratorApproved)+OR+(state%3ACommunityFlagged%2CModeratorApproved+-user.state%3AModeratorBanned%2CModeratorDeleted)+)+)++&appkey=prod.washpost.com"
20
+ "https://comments-api.ext.nile.works/v1/search?q=((childrenof%3A+#{escaped_uri}+source%3Awashpost.com+(((state%3AUntouched++AND+user.state%3AModeratorApproved)+OR+(state%3ACommunityFlagged%2CModeratorApproved%2CModeratorDeleted+AND+-user.state%3AModeratorBanned%2CModeratorDeleted)+)++AND+(+-markers%3Aignore+)+)+++))+itemsPerPage%3A+15+sortOrder%3AreverseChronological+safeHTML%3Aaggressive+children%3A+2+childrenSortOrder%3Achronological+childrenItemsPerPage%3A3++(((state%3AUntouched++AND+user.state%3AModeratorApproved)+OR+(state%3ACommunityFlagged%2CModeratorApproved+AND+-user.state%3AModeratorBanned%2CModeratorDeleted)+)++AND+(+-markers%3Aignore+)+)+&appkey=prod.washpost.com"
21
21
  end
22
-
22
+
23
23
  def self.parse_latest_comments(article, comments_url)
24
24
  results = JSON.parse(open(comments_url).read)
25
25
  Comment.create_comments_from_objects(article, results['entries'])
26
26
  end
27
-
27
+
28
28
  # comment limit defaults to 15, but can be set higher or lower
29
29
  def self.create_from_url(url, comment_limit=15)
30
30
  result = parse_json(get_json(url))
31
31
  create(result, comment_limit)
32
32
  end
33
-
33
+
34
34
  # Given a Washington Post story or blog url, can turn that url into a JSON API endpoint
35
35
  # returns the url and the source used in Article creation
36
36
  def self.get_json(url)
37
- "http://apps-origin.washingtonpost.com/f/story-builder/api/url?url=#{url}"
37
+ "http://apps-origin.washingtonpost.com/f/story-builder/api/url/?url=#{url}"
38
38
  end
39
-
39
+
40
40
  # parses a Washington Post story or blog JSON response
41
41
  def self.parse_json(url)
42
42
  JSON.parse(open(url).read)
43
43
  end
44
-
44
+
45
45
  # Post CMS produces unix timestamps, but with extra zeroes
46
46
  def self.parse_datetime(seconds)
47
47
  seconds = seconds.to_s[0..9]
48
48
  Time.at(seconds.to_i).to_datetime
49
49
  end
50
-
50
+
51
51
  # creates an Article object from a JSON response
52
52
  # with 25 latest comments, can be configured.
53
53
  def self.create(result={}, limit=25)
@@ -70,7 +70,7 @@ module PostHaste
70
70
  section: result['kicker']['name'],
71
71
  tags: result['tags'],
72
72
  comments: parse_latest_comments(result['_id'], latest_comments_url(result['_id'], limit=limit))
73
-
73
+
74
74
  end
75
75
  end
76
- end
76
+ end
@@ -5,24 +5,24 @@ require 'json'
5
5
  module PostHaste
6
6
  class Comment
7
7
  # Represents a comment on a Washington Post story
8
-
8
+
9
9
  attr_reader :id, :article_url, :author, :content, :status, :published , :permalink
10
-
10
+
11
11
  def initialize(params={})
12
12
  params.each_pair do |k,v|
13
13
  instance_variable_set("@#{k}", v)
14
14
  end
15
15
  end
16
-
16
+
17
17
  def self.create_comments_from_objects(article_url, comments)
18
18
  results = []
19
19
  comments.each do |comment|
20
- c = Comment.new({:id => comment['object']['id'].gsub('http://',''), :article_url => article_url, :author => comment['actor']['title'], :content => comment['object']['content'], :status => comment['object']['status'], :published => DateTime.parse(comment['object']['published'])})
20
+ c = Comment.new({:id => comment['object']['id'], :article_url => article_url, :author => comment['actor']['title'], :content => comment['object']['content'], :status => comment['object']['status'], :published => DateTime.parse(comment['object']['published'])})
21
21
  results << c
22
22
  end
23
23
  results
24
24
  end
25
-
25
+
26
26
  def permalink(article)
27
27
  if article.type == 'BlogStory'
28
28
  article_url.gsub('_blog','_comment')+'?commentID='+id
@@ -32,6 +32,6 @@ module PostHaste
32
32
  article_url+'?commentID='+id
33
33
  end
34
34
  end
35
-
35
+
36
36
  end
37
- end
37
+ end
@@ -1,3 +1,3 @@
1
1
  module PostHaste
2
- VERSION = "1.0"
2
+ VERSION = "1.1"
3
3
  end
@@ -2,7 +2,7 @@ require 'test_helper'
2
2
 
3
3
  class TestPostHaste::TestArticle < Minitest::Test
4
4
  include PostHaste
5
-
5
+
6
6
  context "Article.create from article" do
7
7
  setup do
8
8
  url = "http://www.washingtonpost.com/politics/joe-biden-digging-back-into-his-roots-to-move-obama-forward/2012/03/14/gIQARwYBDS_story.html"
@@ -10,12 +10,12 @@ class TestPostHaste::TestArticle < Minitest::Test
10
10
  @result = Article.parse_json(json_url)
11
11
  @article = Article.create(@result)
12
12
  end
13
-
13
+
14
14
  should "return an object of the Article type" do
15
15
  assert_kind_of(Article, @article)
16
16
  assert_equal(@article.type, 'article')
17
17
  end
18
-
18
+
19
19
  %w(uuid type title summary).each do |attr|
20
20
  should "assign the value of the @#{attr} attribute from the '#{attr}' key in the hash" do
21
21
  assert_equal(@result[attr], @article.send(attr))
@@ -30,19 +30,19 @@ class TestPostHaste::TestArticle < Minitest::Test
30
30
  @result = Article.parse_json(json_url)
31
31
  @article = Article.create(@result)
32
32
  end
33
-
33
+
34
34
  should "return an object of the Article type" do
35
35
  assert_kind_of(Article, @article)
36
- assert_equal(@article.type, 'article')
36
+ assert_equal(@article.type, 'BlogStory')
37
37
  end
38
-
38
+
39
39
  %w(uuid type title summary).each do |attr|
40
40
  should "assign the value of the @#{attr} attribute from the '#{attr}' key in the hash" do
41
41
  assert_equal(@result[attr], @article.send(attr))
42
42
  end
43
43
  end
44
44
  end
45
-
45
+
46
46
  context "Article.create from Wordpress blog post" do
47
47
  setup do
48
48
  url = "http://www.washingtonpost.com/blogs/wonkblog/wp/2013/01/18/breaking-inside-the-feds-2007-crisis-response/"
@@ -50,13 +50,13 @@ class TestPostHaste::TestArticle < Minitest::Test
50
50
  @result = Article.parse_json(json_url)
51
51
  @article = Article.create(@result)
52
52
  end
53
-
53
+
54
54
  should "return an object of the Article type" do
55
55
  assert_kind_of(Article, @article)
56
56
  assert_equal(@article.type, 'blog')
57
57
  end
58
-
58
+
59
59
 
60
60
  end
61
-
62
- end
61
+
62
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: post_haste
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.0'
4
+ version: '1.1'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Derek Willis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-14 00:00:00.000000000 Z
11
+ date: 2015-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -133,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
133
  version: 1.3.6
134
134
  requirements: []
135
135
  rubyforge_project: post_haste
136
- rubygems_version: 2.2.1
136
+ rubygems_version: 2.4.5
137
137
  signing_key:
138
138
  specification_version: 4
139
139
  summary: Because it was there.