philologic-client 0.0.4 → 0.0.5

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.
data/HISTORY.rdoc CHANGED
@@ -1,5 +1,10 @@
1
1
  = Philologic::Client History
2
2
 
3
+ == 2012-01-03 v0.0.5
4
+
5
+ * Added +Philologic::Link#document()+
6
+ * Added +Philologic::Client#encoding+ accessor
7
+
3
8
  == 2011-12-30 v0.0.4
4
9
 
5
10
  * Set +endpoint+ in +Philologic::Client+ initializer
data/README.rdoc CHANGED
@@ -13,7 +13,7 @@
13
13
 
14
14
  # Get document
15
15
  first = client.children.first
16
- doc = client.document( first['href'] )
16
+ doc = first.document
17
17
  txt = doc.text
18
18
 
19
19
  # Search (currently only limited support)
@@ -21,6 +21,10 @@
21
21
  puts [ child['href'], child['author'], child['title'] ].join("\t")
22
22
  end
23
23
 
24
+ # Get/Set encoding
25
+ encoding = client.encoding
26
+ client.encoding = 'utf-8' # Default
27
+
24
28
  # Get/Set endpoint
25
29
  endpoint = client.endpoint
26
30
  client.endpoint = 'http://philologic.example.org'
@@ -42,11 +46,10 @@ https://github.com/blairc/philologic-client/
42
46
 
43
47
  == To Do
44
48
 
45
- * Add +document+ to Philologic::Link
49
+ * Expand search support
50
+ * Switch to MiniTest::Mock?
46
51
  * Add +children+ to Philologic::Document
47
52
  * Add +parent+ to Philologic::Document
48
- * Make Nokogiri encoding configurable
49
- * Expand search support
50
- * Unifiy Philologic::Link and Philologic::Document
53
+ * Unify Philologic::Link and Philologic::Document
51
54
  * Build +RDoc+
52
55
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Philologic
4
4
  class Client
5
- VERSION = '0.0.4'
5
+ VERSION = '0.0.5'
6
6
  end
7
7
  end
@@ -21,7 +21,7 @@ require 'open-uri'
21
21
  #
22
22
  # # Get document
23
23
  # first = client.children.first
24
- # doc = client.document( first['href'] )
24
+ # doc = first.document
25
25
  # txt = doc.text
26
26
  #
27
27
  # # Search (currently only limited support)
@@ -29,6 +29,10 @@ require 'open-uri'
29
29
  # puts [ child['href'], child['author'], child['title'] ].join("\t")
30
30
  # end
31
31
  #
32
+ # # Get/Set encoding
33
+ # encoding = client.encoding
34
+ # client.encoding = 'utf-8' # Default
35
+ #
32
36
  # # Get/Set endpoint
33
37
  # endpoint = client.endpoint
34
38
  # client.endpoint = 'http://philologic.example.org'
@@ -50,12 +54,11 @@ require 'open-uri'
50
54
  #
51
55
  # == To Do
52
56
  #
53
- # * Add +document+ to Philologic::Link
57
+ # * Expand search support
58
+ # * Switch to MiniTest::Mock?
54
59
  # * Add +children+ to Philologic::Document
55
60
  # * Add +parent+ to Philologic::Document
56
- # * Make Nokogiri encoding configurable
57
- # * Expand search support
58
- # * Unifiy Philologic::Link and Philologic::Document
61
+ # * Unify Philologic::Link and Philologic::Document
59
62
  # * Build +RDoc+
60
63
  #
61
64
  module Philologic
@@ -65,11 +68,15 @@ module Philologic
65
68
  #
66
69
  class Client
67
70
 
71
+ #
72
+ # Get/Set +encoding+
73
+ #
74
+ attr_accessor :encoding
75
+
68
76
  #
69
77
  # Get/Set +endpoint+
70
78
  #
71
79
  attr_accessor :endpoint
72
-
73
80
 
74
81
  #
75
82
  # Initialize Philologic::Client
@@ -78,6 +85,7 @@ module Philologic
78
85
  # +endpoint+:: Philologic endpoint (defaults to +nil+)
79
86
  #
80
87
  def initialize( endpoint = nil )
88
+ @encoding = 'utf-8'
81
89
  @endpoint = endpoint
82
90
  yield self if block_given?
83
91
  self
@@ -129,20 +137,20 @@ module Philologic
129
137
  def _get(path)
130
138
  raise('no endpoint specified') if @endpoint.nil?
131
139
  uri = "#{ @endpoint }#{ @endpoint =~ /\/$/ || '/' }#{ path }"
132
- _parse( Nokogiri::HTML( open(uri).read, nil, 'utf-8' ) )
140
+ _parse( Nokogiri::HTML( open(uri).read, nil, @encoding ) )
133
141
  end
134
142
 
135
143
  def _parse(doc)
136
144
  if !doc.css('div.philologic_cite_list').first.nil?
137
145
  children = []
138
146
  doc.css('div.philologic_cite_list').css('a.philologic_cite').each do |cite|
139
- children << Philologic::Link.new(cite) # TODO Why not a select?
147
+ children << Philologic::Link.new(self, cite) # TODO Why not a select?
140
148
  end
141
149
  return children
142
150
  elsif !doc.css('div.philologic_concordance').first.nil?
143
151
  results = []
144
152
  doc.css('div.philologic_concordance').css('a.philologic_cite').each do |cite|
145
- results << Philologic::Link.new(cite) # TODO Why not a select?
153
+ results << Philologic::Link.new(self, cite) # TODO Why not a select?
146
154
  end
147
155
  return results
148
156
  elsif !doc.css('div.philologic_object').first.nil?
@@ -191,7 +199,8 @@ module Philologic
191
199
  #
192
200
  class Link
193
201
 
194
- def initialize(document)
202
+ def initialize(client, document)
203
+ @client = client
195
204
  @doc = document
196
205
  # TODO Prefer lazy initialization?
197
206
  @properties = {}
@@ -207,6 +216,12 @@ module Philologic
207
216
  @doc.attributes.key?(key) ? @doc.attributes[key].value : @properties[key]
208
217
  end
209
218
 
219
+ #
220
+ # Returns Philologic::Document referenced by this Philologic::Link object.
221
+ def document
222
+ @client.document( self['href'] )
223
+ end
224
+
210
225
  end # class Philologic::Link
211
226
 
212
227
 
@@ -50,6 +50,18 @@ class TestPhilologicClient < Test::Unit::TestCase
50
50
  assert_equal @endpoint, client.endpoint
51
51
  end
52
52
 
53
+ def test_encoding_accessor
54
+ Philologic::Client.new do |client|
55
+ assert_equal 'utf-8', client.encoding
56
+ assert_equal 'foo', client.encoding = 'foo'
57
+ assert_equal 'foo', client.encoding
58
+ #
59
+ # assert_nil client.endpoint, 'defaults to nil'
60
+ # assert_equal @endpoint, client.endpoint = @endpoint, 'returns value on set'
61
+ # assert_equal @endpoint, client.endpoint, 'returns value on get'
62
+ end
63
+ end
64
+
53
65
  def test_endpoint_accessor
54
66
  Philologic::Client.new do |client|
55
67
  assert_nil client.endpoint, 'defaults to nil'
@@ -133,7 +145,7 @@ class TestPhilologicClient < Test::Unit::TestCase
133
145
  end
134
146
  end
135
147
 
136
- def test_get_document_from_cite
148
+ def test_get_document_from_cite_through_client
137
149
  Philologic::Client.new do |client|
138
150
  client.endpoint = @endpoint
139
151
  child = client.children(@root_path).first
@@ -145,6 +157,18 @@ class TestPhilologicClient < Test::Unit::TestCase
145
157
  end
146
158
  end
147
159
 
160
+ def test_get_document_from_cite
161
+ Philologic::Client.new do |client|
162
+ client.endpoint = @endpoint
163
+ child = client.children(@root_path).first
164
+ assert_not_nil child
165
+ assert_kind_of Philologic::Link, child
166
+ doc = client.send( :_parse, Nokogiri::HTML( open(@doc_file) ) )
167
+ client.stubs(:_get).with('./1/0/0/0/0/0/0').returns(doc) # TODO Improve
168
+ assert_equal doc, child.document
169
+ end
170
+ end
171
+
148
172
  def test_nil_search
149
173
  Philologic::Client.new(@endpoint) do |client|
150
174
  assert_raise(RuntimeError, 'no query specified') { client.search(nil) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: philologic-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-30 00:00:00.000000000Z
12
+ date: 2012-01-03 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70149535209220 !ruby/object:Gem::Requirement
16
+ requirement: &70270934047440 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70149535209220
24
+ version_requirements: *70270934047440
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mocha
27
- requirement: &70149535208780 !ruby/object:Gem::Requirement
27
+ requirement: &70270934047000 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70149535208780
35
+ version_requirements: *70270934047000
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rdoc-readme
38
- requirement: &70149535208360 !ruby/object:Gem::Requirement
38
+ requirement: &70270934046580 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70149535208360
46
+ version_requirements: *70270934046580
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: simplecov
49
- requirement: &70149535207940 !ruby/object:Gem::Requirement
49
+ requirement: &70270934046160 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70149535207940
57
+ version_requirements: *70270934046160
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: nokogiri
60
- requirement: &70149535207520 !ruby/object:Gem::Requirement
60
+ requirement: &70270934045740 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70149535207520
68
+ version_requirements: *70270934045740
69
69
  description: Ruby client for interacting with the Philologic API.
70
70
  email:
71
71
  - blair.christensen@gmail.com
@@ -99,7 +99,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
99
  version: '0'
100
100
  segments:
101
101
  - 0
102
- hash: -2190975545106679734
102
+ hash: -2626252476221214395
103
103
  required_rubygems_version: !ruby/object:Gem::Requirement
104
104
  none: false
105
105
  requirements:
@@ -108,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
108
  version: '0'
109
109
  segments:
110
110
  - 0
111
- hash: -2190975545106679734
111
+ hash: -2626252476221214395
112
112
  requirements: []
113
113
  rubyforge_project: philologic-client
114
114
  rubygems_version: 1.8.7