hatenablog 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cf376e1c7bc165c96b04d31cdca1c7ad519eee6d
4
- data.tar.gz: 47dbbe4a2e6e7efff7208a418424a224e74a2ee0
3
+ metadata.gz: 8b3523997853851a6cfaf4a4d00230dd4f6b8b06
4
+ data.tar.gz: bcfa0433a24776cabbb92b16add175064bf7983d
5
5
  SHA512:
6
- metadata.gz: 1a20f773e2c91639daa1f3c446edcaae4206f83f547ae552381afbd3d6912565b75d87f2dd8cdae3ee7bed4bd773b81f4c97f2319e5041d924a263fc6d8e4d2a
7
- data.tar.gz: a839ae31b99284ea6b40e9d736d1375afa90ccd66fcabb872decdb5ad727fd838ee46daaabb507ca702840b2a35b024e0f8cc1d561f18db94b0bf0039051b1a9
6
+ metadata.gz: 83c65f0473fd3f11b137b329a7af1d14916262383ef090b4e11da81d9519820068971623b33459199e99b1be1ad0847150bec7230987fa8bd519f2ed2e7b9b61
7
+ data.tar.gz: 479bfb1f32b41e701f23ef8c3f5da750177d4894a4154a34f350fb681db8f5557d8bb80445e2c59c26577c86cdf61e856f112b14e6022cd87d72a209ba5f5d4b
@@ -3,3 +3,5 @@ rvm:
3
3
  - 2.0.0
4
4
  - 2.1.0
5
5
  - 2.2.0
6
+ env:
7
+ - TZ=Asia/Tokyo
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Hatenablog
1
+ # Hatenablog [![Build Status](https://travis-ci.org/kymmt90/hatenablog.svg?branch=master)](https://travis-ci.org/kymmt90/hatenablog)
2
2
 
3
3
  A library for Hatenablog AtomPub API.
4
4
  This gem supports following operations using OAuth authorization:
@@ -44,7 +44,7 @@ Execute this command:
44
44
 
45
45
  #### 3. Set up the YAML configuration file
46
46
 
47
- The default configuration file name is `conf.yml`:
47
+ The default configuration file name is `config.yml`:
48
48
 
49
49
  ```yml
50
50
  consumer_key: <Hatena application consumer key>
@@ -60,7 +60,7 @@ blog_id: <Hatenablog ID>
60
60
  ```ruby
61
61
  require 'hatenablog'
62
62
 
63
- # Read the OAuth configuration from 'conf.yml'
63
+ # Read the OAuth configuration from 'config.yml'
64
64
  Hatenablog::Client.create do |blog|
65
65
  # Get each entry's content
66
66
  blog.entries.each do |entry|
data/Rakefile CHANGED
@@ -14,6 +14,6 @@ Rake::TestTask.new do |t|
14
14
  end
15
15
 
16
16
  YARD::Rake::YardocTask.new do |t|
17
- t.files = Dir["lib/*.rb"]
17
+ t.files = Dir["lib/*.rb lib/hatenablog/*.rb"]
18
18
  t.options = %w(--debug --verbose) if $trace
19
19
  end
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.required_ruby_version = '>= 2.0'
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.10"
24
+ spec.add_development_dependency "bundler", "~> 1.6"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
26
  spec.add_development_dependency "rr", "~> 1.1.2"
27
27
  spec.add_development_dependency "test-unit", "~> 3.1.4"
@@ -45,20 +45,28 @@ module Hatenablog
45
45
  # @param [Fixnum] page page number to get
46
46
  # @return [Array] blog entries
47
47
  def entries(page = 0)
48
- next_page_uri = collection_uri
49
- current_page = 0
50
- entries = []
51
- while current_page <= page
52
- feed = Feed.load_xml(get_collection(next_page_uri).body)
53
- entries += feed.entries
48
+ feed = Feed.load_xml(get_collection(collection_uri).body)
49
+ entries = feed.entries
54
50
 
55
- break unless feed.has_next?
56
- next_page_uri = feed.next_uri
57
- current_page += 1
51
+ (1..page).each do
52
+ feed = next_feed(feed)
53
+ break if feed.nil?
54
+ entries += feed.entries
58
55
  end
56
+
59
57
  entries
60
58
  end
61
59
 
60
+ # Get the next feed of the given feed.
61
+ # Return the first feed if no argument is passed.
62
+ # @param [Hatenablog::Feed] feed blog feed
63
+ # @return [Hatenablog::Feed] next blog feed
64
+ def next_feed(feed = nil)
65
+ return Feed.load_xml(get_collection(collection_uri).body) if feed.nil?
66
+ return nil unless feed.has_next?
67
+ Feed.load_xml(get_collection(feed.next_uri).body)
68
+ end
69
+
62
70
  # Get blog categories array.
63
71
  # @return [Array] blog categories
64
72
  def categories
@@ -92,9 +100,10 @@ module Hatenablog
92
100
  # @param [String] content entry content
93
101
  # @param [Array] categories entry categories
94
102
  # @param [String] draft this entry is draft if 'yes', otherwise it is not draft
103
+ # @param [String] updated entry updated datetime (ISO 8601)
95
104
  # @return [Hatenablog::BlogEntry] updated entry
96
- def update_entry(entry_id, title = '', content = '', categories = [], draft = 'no')
97
- entry_xml = entry_xml(title, content, categories, draft)
105
+ def update_entry(entry_id, title = '', content = '', categories = [], draft = 'no', updated = '')
106
+ entry_xml = entry_xml(title, content, categories, draft, updated)
98
107
  response = put(entry_xml, member_uri(entry_id))
99
108
  Entry.load_xml(response.body)
100
109
  end
@@ -135,9 +144,10 @@ module Hatenablog
135
144
  # @param [String] content entry content
136
145
  # @param [Array] categories entry categories
137
146
  # @param [String] draft this entry is draft if 'yes', otherwise it is not draft
147
+ # @param [String] updated entry updated datetime (ISO 8601)
138
148
  # @param [String] author_name entry author name
139
149
  # @return [String] XML string
140
- def entry_xml(title = '', content = '', categories = [], draft = 'no', author_name = @user_id)
150
+ def entry_xml(title = '', content = '', categories = [], draft = 'no', updated = '', author_name = @user_id)
141
151
  xml = <<XML
142
152
  <?xml version="1.0" encoding="utf-8"?>
143
153
  <entry xmlns="http://www.w3.org/2005/Atom"
@@ -145,17 +155,20 @@ module Hatenablog
145
155
  <title>%s</title>
146
156
  <author><name>%s</name></author>
147
157
  <content type="text/x-markdown">%s</content>
148
- %s
158
+ %s%s
149
159
  <app:control>
150
160
  <app:draft>%s</app:draft>
151
161
  </app:control>
152
162
  </entry>
153
163
  XML
154
164
 
165
+ unless updated.empty?
166
+ updated = '<updated>' + updated + '</updated>'
167
+ end
155
168
  categories_tag = categories.inject('') do |s, c|
156
169
  s + "<category term=\"#{c}\" />\n"
157
170
  end
158
- xml % [title, author_name, content, categories_tag, draft]
171
+ xml % [title, author_name, content, updated, categories_tag, draft]
159
172
  end
160
173
 
161
174
 
@@ -2,7 +2,7 @@ require 'nokogiri'
2
2
 
3
3
  module Hatenablog
4
4
  class Entry
5
- attr_reader :uri, :edit_uri, :id, :author_name, :title, :content
5
+ attr_reader :uri, :edit_uri, :id, :author_name, :title, :content, :updated
6
6
 
7
7
  # Create a new blog entry from a XML string.
8
8
  # @param [String] xml XML string representation
@@ -19,11 +19,12 @@ module Hatenablog
19
19
  # @param [String] content entry content
20
20
  # @param [String] draft this entry is draft if 'yes', otherwise it is not draft
21
21
  # @param [Array] categories categories array
22
+ # @param [String] updated entry updated datetime (ISO 8601)
22
23
  # @return [Hatenablog::Entry]
23
24
  def self.create(uri: '', edit_uri: '', author_name: '', title: '',
24
- content: '', draft: 'no', categories: [])
25
+ content: '', draft: 'no', categories: [], updated: '')
25
26
  Hatenablog::Entry.new(self.build_xml(uri, edit_uri, author_name, title,
26
- content, draft, categories))
27
+ content, draft, categories, updated))
27
28
  end
28
29
 
29
30
  # @return [Boolean]
@@ -50,7 +51,7 @@ module Hatenablog
50
51
 
51
52
  private
52
53
 
53
- def self.build_xml(uri, edit_uri, author_name, title, content, draft, categories)
54
+ def self.build_xml(uri, edit_uri, author_name, title, content, draft, categories, updated)
54
55
  xml = <<XML
55
56
  <?xml version='1.0' encoding='UTF-8'?>
56
57
  <entry xmlns:app='http://www.w3.org/2007/app' xmlns='http://www.w3.org/2005/Atom'>
@@ -59,17 +60,20 @@ module Hatenablog
59
60
  <author><name>%s</name></author>
60
61
  <title>%s</title>
61
62
  <content type='text/x-markdown'>%s</content>
62
- %s
63
+ %s%s
63
64
  <app:control>
64
65
  <app:draft>%s</app:draft>
65
66
  </app:control>
66
67
  </entry>
67
68
  XML
68
69
 
70
+ unless updated.nil?
71
+ updated = '<updated>' + updated + '</updated>'
72
+ end
69
73
  categories_tag = categories.inject('') do |s, c|
70
74
  s + "<category term=\"#{c}\" />\n"
71
75
  end
72
- xml % [edit_uri, uri, author_name, title, content, categories_tag, draft]
76
+ xml % [edit_uri, uri, author_name, title, content, updated, categories_tag, draft]
73
77
  end
74
78
 
75
79
  def initialize(xml)
@@ -86,6 +90,9 @@ XML
86
90
  @content = @document.at_css('content').content
87
91
  @draft = @document.at_css('entry app|control app|draft').content
88
92
  @categories = parse_categories
93
+ unless @document.at_css('entry updated').nil?
94
+ @updated = Time.parse(@document.at_css('entry updated').content)
95
+ end
89
96
  end
90
97
 
91
98
  def parse_categories
@@ -1,3 +1,3 @@
1
1
  module Hatenablog
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hatenablog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kohei Yamamoto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-10-11 00:00:00.000000000 Z
11
+ date: 2015-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.10'
19
+ version: '1.6'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.10'
26
+ version: '1.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -167,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
167
  version: '0'
168
168
  requirements: []
169
169
  rubyforge_project:
170
- rubygems_version: 2.4.5.1
170
+ rubygems_version: 2.4.8
171
171
  signing_key:
172
172
  specification_version: 4
173
173
  summary: Hatenablog AtomPub API library