about_page 0.0.2 → 0.0.3
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/Gemfile.lock +1 -1
- data/app/controllers/about_page/about_controller.rb +1 -1
- data/app/views/about_page/about/_generic_hash.html.erb +1 -3
- data/app/views/about_page/about/index.html.erb +1 -1
- data/lib/about_page/configuration.rb +18 -9
- data/lib/about_page/fedora.rb +10 -9
- data/lib/about_page/solr.rb +33 -18
- data/lib/about_page/version.rb +1 -1
- data/spec/lib/solr_spec.rb +17 -18
- metadata +4 -4
data/Gemfile.lock
CHANGED
@@ -11,7 +11,7 @@ module AboutPage
|
|
11
11
|
@configuration.set_headers!(response)
|
12
12
|
|
13
13
|
respond_to do |format|
|
14
|
-
format.html { render :status => @configuration.
|
14
|
+
format.html { render :status => @configuration.valid? ? 200 : 417 } # about_page.html.erb
|
15
15
|
format.json { render :json => @configuration.to_json }
|
16
16
|
format.xml { render :xml => @configuration.to_xml }
|
17
17
|
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
<h1><%= key.to_s.humanize %></h1>
|
2
|
-
<% if profile.respond_to? :messages %>
|
3
2
|
<% profile.messages.each do |msg| %>
|
4
3
|
<div><%= msg %></div>
|
5
|
-
<% end %>
|
6
|
-
<% end %>
|
4
|
+
<% end if profile.respond_to? :messages %>
|
7
5
|
<ul>
|
8
6
|
<% profile.each_pair do |k,v| %>
|
9
7
|
<li><%= [k,v].join(': ') %></li>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<div class="about_page">
|
2
2
|
<% @configuration.each do |key, profile| %>
|
3
|
-
<div class="pane pane-<%= key.to_s.parameterize %> <%= 'not-ok' if profile.respond_to? :
|
3
|
+
<div class="pane pane-<%= key.to_s.parameterize %> <%= 'not-ok' if profile.respond_to? :valid? and !profile.valid? %>">
|
4
4
|
<%= render_about_pane(key, profile) %>
|
5
5
|
</div>
|
6
6
|
<% end %>
|
@@ -50,8 +50,8 @@ module AboutPage
|
|
50
50
|
self.nodes.each { |key, profile| profile.preflight(request) }
|
51
51
|
end
|
52
52
|
|
53
|
-
def
|
54
|
-
self.nodes.select { |key, profile| profile.respond_to? :ok? }.all? { |key, profile| profile.
|
53
|
+
def valid?
|
54
|
+
self.nodes.select { |key, profile| profile.respond_to? :ok? }.all? { |key, profile| profile.valid? }
|
55
55
|
end
|
56
56
|
|
57
57
|
def nodes
|
@@ -63,8 +63,20 @@ module AboutPage
|
|
63
63
|
end
|
64
64
|
|
65
65
|
class Node
|
66
|
+
include ActiveModel::Validations
|
67
|
+
|
66
68
|
def preflight request
|
69
|
+
errors.clear
|
70
|
+
@request_expectations = request.params.select { |k,v| k =~ /^#{namespace}\./ }
|
71
|
+
end
|
72
|
+
|
73
|
+
def expects key
|
74
|
+
@request_expectations["#{namespace}.#{key}"] || self.options[:expects][key] if @request_expectations
|
75
|
+
end
|
67
76
|
|
77
|
+
def messages
|
78
|
+
run_validations!
|
79
|
+
errors.to_a.uniq
|
68
80
|
end
|
69
81
|
|
70
82
|
def set_headers! response
|
@@ -73,16 +85,13 @@ module AboutPage
|
|
73
85
|
|
74
86
|
def add_header response, text
|
75
87
|
response.headers['X-AboutPage-Warning'] ||= ""
|
76
|
-
response.headers['X-AboutPage-Warning'] += "#{text};"
|
88
|
+
response.headers['X-AboutPage-Warning'] += "#{self.class.name}: #{text};"
|
77
89
|
|
78
90
|
end
|
79
91
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
def messages
|
85
|
-
[]
|
92
|
+
protected
|
93
|
+
def namespace
|
94
|
+
self.class.name.split("::").last.downcase
|
86
95
|
end
|
87
96
|
end
|
88
97
|
end
|
data/lib/about_page/fedora.rb
CHANGED
@@ -2,30 +2,31 @@ module AboutPage
|
|
2
2
|
class Fedora < AboutPage::Configuration::Node
|
3
3
|
delegate :each_pair, :to_json, :to_xml, :to => :to_h
|
4
4
|
|
5
|
+
validates_each :profile do |record, attr, value|
|
6
|
+
unless value.present?
|
7
|
+
record.errors.add attr, ": unable to connect to Fedora: #{record.rubydora.inspect}"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
5
11
|
attr_accessor :rubydora
|
6
12
|
|
7
13
|
def initialize rubydora_instance
|
8
14
|
self.rubydora = rubydora_instance
|
9
15
|
end
|
10
16
|
|
11
|
-
def
|
17
|
+
def profile
|
12
18
|
rubydora.profile || {}
|
13
19
|
end
|
14
20
|
|
15
|
-
def
|
16
|
-
|
21
|
+
def to_h
|
22
|
+
profile
|
17
23
|
end
|
18
24
|
|
19
|
-
def messages
|
20
|
-
a = []
|
21
|
-
a << "Unable to connect to fedora: #{self.rubydora.inspect}" if rubydora.profile.nil?
|
22
|
-
|
23
|
-
a
|
24
|
-
end
|
25
25
|
|
26
26
|
def preflight request
|
27
27
|
# FIXME: ew.
|
28
28
|
self.rubydora.instance_variable_set('@profile', nil)
|
29
|
+
super(request)
|
29
30
|
end
|
30
31
|
|
31
32
|
end
|
data/lib/about_page/solr.rb
CHANGED
@@ -4,11 +4,21 @@ module AboutPage
|
|
4
4
|
|
5
5
|
attr_accessor :rsolr, :options
|
6
6
|
|
7
|
+
validates_each :schema do |record, attr, value|
|
8
|
+
unless value.present?
|
9
|
+
record.errors.add attr, ": unable to connect to Solr: #{record.rsolr.inspect}"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
validates :numDocs, :numericality => { :greater_than_or_equal_to => Proc.new { |c| c.expects(:numDocs) } }
|
13
|
+
|
14
|
+
|
7
15
|
def initialize rsolr_instance, options = {}
|
8
16
|
self.rsolr = rsolr_instance
|
9
17
|
self.options = options
|
18
|
+
self.options[:expects] ||= {}
|
19
|
+
self.options[:expects][:numDocs] ||= 1
|
10
20
|
|
11
|
-
|
21
|
+
@request_expectations = {}
|
12
22
|
end
|
13
23
|
|
14
24
|
def schema
|
@@ -17,33 +27,38 @@ module AboutPage
|
|
17
27
|
{}
|
18
28
|
end
|
19
29
|
|
20
|
-
def
|
21
|
-
|
22
|
-
|
23
|
-
|
30
|
+
def registry
|
31
|
+
@registry ||= begin
|
32
|
+
h = {}
|
33
|
+
resp = rsolr.get 'admin/registry.jsp', :params => { :wt => 'xml' }
|
34
|
+
doc = Nokogiri::XML resp
|
24
35
|
|
25
|
-
|
26
|
-
|
27
|
-
|
36
|
+
doc.xpath('/solr/*').each do |node|
|
37
|
+
next if node.name == "solr-info"
|
38
|
+
h[node.name] = node.text
|
39
|
+
end
|
28
40
|
|
29
|
-
|
41
|
+
h
|
42
|
+
end
|
43
|
+
rescue
|
44
|
+
{}
|
30
45
|
end
|
31
46
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
35
|
-
a << "Solr numDocs (#{index[:numDocs]}) is less than the minimum #{minimum_numdocs}" if !schema.empty? and index[:numDocs].to_i < minimum_numdocs
|
47
|
+
def index
|
48
|
+
(schema || {})['index'] || {}
|
49
|
+
end
|
36
50
|
|
37
|
-
|
51
|
+
def to_h
|
52
|
+
index.merge(registry)
|
38
53
|
end
|
39
54
|
|
55
|
+
def numDocs; index[:numDocs]; end
|
56
|
+
|
40
57
|
def preflight request
|
41
58
|
@schema = nil
|
42
|
-
@
|
43
|
-
end
|
59
|
+
@registry = nil
|
44
60
|
|
45
|
-
|
46
|
-
@minimum_numdocs || self.options[:minimum_numdocs]
|
61
|
+
super
|
47
62
|
end
|
48
63
|
end
|
49
64
|
end
|
data/lib/about_page/version.rb
CHANGED
data/spec/lib/solr_spec.rb
CHANGED
@@ -27,31 +27,30 @@ describe AboutPage::Solr do
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
|
31
|
-
describe "#ok?" do
|
30
|
+
describe "#valid?" do
|
32
31
|
it "should be ok if the number of documents in the index is greater than or equal to the :minimum_numdocs" do
|
33
|
-
subject.stub(:
|
34
|
-
subject.stub(:
|
35
|
-
subject.should
|
32
|
+
subject.stub(:schema).and_return { { 'index' => { :numDocs => 1 } } }
|
33
|
+
subject.stub(:expects).and_return 1
|
34
|
+
subject.should be_valid
|
36
35
|
end
|
37
36
|
|
38
37
|
it "should be not be ok if the number of documents in the index is less than the :minimum_numdocs" do
|
39
|
-
subject.stub(:
|
40
|
-
subject.stub(:
|
41
|
-
subject.should_not
|
38
|
+
subject.stub(:schema).and_return { { 'index' => { :numDocs => 1 } } }
|
39
|
+
subject.stub(:expects).and_return 5
|
40
|
+
subject.should_not be_valid
|
42
41
|
end
|
43
42
|
|
44
43
|
it "should not be ok if the index :numDocs param is not set" do
|
45
|
-
subject.stub(:
|
46
|
-
subject.stub(:
|
47
|
-
subject.should_not
|
44
|
+
subject.stub(:schema).and_return { { 'index' => { } } }
|
45
|
+
subject.stub(:expects).and_return 1
|
46
|
+
subject.should_not be_valid
|
48
47
|
end
|
49
48
|
end
|
50
49
|
|
51
50
|
describe "#set_headers!" do
|
52
51
|
it "should add helpful headers when something is wrong" do
|
53
|
-
subject.stub(:
|
54
|
-
subject.stub(:
|
52
|
+
subject.stub(:schema).and_return { { 'index' => { :numDocs => 1 } } }
|
53
|
+
subject.stub(:expects).and_return 5
|
55
54
|
|
56
55
|
subject.should_receive(:add_header)
|
57
56
|
subject.set_headers! mock()
|
@@ -60,19 +59,19 @@ describe AboutPage::Solr do
|
|
60
59
|
|
61
60
|
describe "#minimum_numdocs" do
|
62
61
|
it "should default to 1" do
|
63
|
-
subject.
|
62
|
+
subject.expects(:numDocs).should == 1
|
64
63
|
end
|
65
64
|
|
66
65
|
it "should use parameters given in the configuration" do
|
67
|
-
node = AboutPage::Solr.new(@mock_solr_connection, :
|
68
|
-
node.
|
66
|
+
node = AboutPage::Solr.new(@mock_solr_connection, :expects => { :numDocs => 5 })
|
67
|
+
node.expects(:numDocs).should == 5
|
69
68
|
end
|
70
69
|
|
71
70
|
it "should use the request parameters to set the minimum_numdocs" do
|
72
|
-
node = AboutPage::Solr.new(@mock_solr_connection, :
|
71
|
+
node = AboutPage::Solr.new(@mock_solr_connection, :expects => { :numDocs => 5 })
|
73
72
|
node.preflight(mock(:params => { 'solr.numDocs' => 1000 }))
|
74
73
|
|
75
|
-
node.
|
74
|
+
node.expects(:numDocs).should == 1000
|
76
75
|
end
|
77
76
|
end
|
78
77
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: about_page
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-05-
|
13
|
+
date: 2012-05-22 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -187,7 +187,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
187
187
|
version: '0'
|
188
188
|
segments:
|
189
189
|
- 0
|
190
|
-
hash:
|
190
|
+
hash: 2890899449821864305
|
191
191
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
192
192
|
none: false
|
193
193
|
requirements:
|
@@ -196,7 +196,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
196
196
|
version: '0'
|
197
197
|
segments:
|
198
198
|
- 0
|
199
|
-
hash:
|
199
|
+
hash: 2890899449821864305
|
200
200
|
requirements: []
|
201
201
|
rubyforge_project:
|
202
202
|
rubygems_version: 1.8.24
|