shibkit-meta_meta 0.2.2
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/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +21 -0
- data/Gemfile.lock +52 -0
- data/Icon.png +0 -0
- data/LICENSE.txt +177 -0
- data/README.md +789 -0
- data/Rakefile +38 -0
- data/VERSION +1 -0
- data/examples/biggest_entity_id.rb +4 -0
- data/lib/shibkit/meta_meta.rb +600 -0
- data/lib/shibkit/meta_meta/attribute.rb +73 -0
- data/lib/shibkit/meta_meta/config.rb +463 -0
- data/lib/shibkit/meta_meta/contact.rb +85 -0
- data/lib/shibkit/meta_meta/data/default_metadata/example_federation_metadata.xml +168 -0
- data/lib/shibkit/meta_meta/data/default_metadata/local_metadata.xml +66 -0
- data/lib/shibkit/meta_meta/data/default_metadata/uncommon_federation_metadata.xml +115 -0
- data/lib/shibkit/meta_meta/data/default_metadata_cache.yml +166 -0
- data/lib/shibkit/meta_meta/data/dev_sources.yml +86 -0
- data/lib/shibkit/meta_meta/data/real_sources.yml +163 -0
- data/lib/shibkit/meta_meta/entity.rb +219 -0
- data/lib/shibkit/meta_meta/federation.rb +161 -0
- data/lib/shibkit/meta_meta/idp.rb +81 -0
- data/lib/shibkit/meta_meta/logo.rb +216 -0
- data/lib/shibkit/meta_meta/metadata_item.rb +244 -0
- data/lib/shibkit/meta_meta/mixin/cached_downloads.rb +127 -0
- data/lib/shibkit/meta_meta/mixin/xpath_chores.rb +111 -0
- data/lib/shibkit/meta_meta/organisation.rb +73 -0
- data/lib/shibkit/meta_meta/provider.rb +195 -0
- data/lib/shibkit/meta_meta/provisioning/base.rb +33 -0
- data/lib/shibkit/meta_meta/requested_attribute.rb +29 -0
- data/lib/shibkit/meta_meta/service.rb +94 -0
- data/lib/shibkit/meta_meta/source.rb +558 -0
- data/lib/shibkit/meta_meta/sp.rb +79 -0
- data/shibkit-meta_meta.gemspec +154 -0
- data/spec/meta_meta/attribute/token +0 -0
- data/spec/meta_meta/config/autoloading_and_refreshing_spec.rb +72 -0
- data/spec/meta_meta/config/code_nspec.rb +13 -0
- data/spec/meta_meta/config/configuration_spec.rb +30 -0
- data/spec/meta_meta/config/creation_spec.rb +43 -0
- data/spec/meta_meta/config/downloading_and_caching_settings_spec.rb +216 -0
- data/spec/meta_meta/config/env_platform_settings.rb +129 -0
- data/spec/meta_meta/config/filtering_settings_spec.rb +123 -0
- data/spec/meta_meta/config/init.rb +8 -0
- data/spec/meta_meta/config/logger_settings_spec.rb +91 -0
- data/spec/meta_meta/config/smartcache_settings_spec.rb +110 -0
- data/spec/meta_meta/config/source_file_settings_spec.rb +99 -0
- data/spec/meta_meta/config/tagging_settings_spec.rb +81 -0
- data/spec/meta_meta/config/working_directory_settings_spec.rb +106 -0
- data/spec/meta_meta/config/xml_processing_settings_spec.rb +75 -0
- data/spec/meta_meta/contact/contact_oldspec.rb +0 -0
- data/spec/meta_meta/entity/entity_oldspec.rb +53 -0
- data/spec/meta_meta/federation/federation_oldspec.rb +0 -0
- data/spec/meta_meta/idp/token +0 -0
- data/spec/meta_meta/logo/token +0 -0
- data/spec/meta_meta/meta_meta/cache_example.yaml +141284 -0
- data/spec/meta_meta/meta_meta/meta_meta_spec.rb +269 -0
- data/spec/meta_meta/meta_meta/saved_sources.yaml +46 -0
- data/spec/meta_meta/metadata_item/token +0 -0
- data/spec/meta_meta/organisation/organisation_oldspec.rb +0 -0
- data/spec/meta_meta/provider/token +0 -0
- data/spec/meta_meta/requested_attribute/token +0 -0
- data/spec/meta_meta/service/token +0 -0
- data/spec/meta_meta/source/application_extras_spec.rb +234 -0
- data/spec/meta_meta/source/conversion_spec.rb +75 -0
- data/spec/meta_meta/source/creation_spec.rb +0 -0
- data/spec/meta_meta/source/downloads_and_caching_spec.rb +0 -0
- data/spec/meta_meta/source/federation_information_spec.rb +11 -0
- data/spec/meta_meta/source/fixtures.rb +24 -0
- data/spec/meta_meta/source/init.rb +1 -0
- data/spec/meta_meta/source/loading_and_saving_spec.rb +0 -0
- data/spec/meta_meta/source/metadata_details_spec.rb +0 -0
- data/spec/meta_meta/source/metadata_integrity_spec.rb +0 -0
- data/spec/meta_meta/source/selection_spec.rb +0 -0
- data/spec/meta_meta/source/source_oldspec.rb +353 -0
- data/spec/meta_meta/source/xml_parsing_spec.rb +0 -0
- data/spec/meta_meta/sp/token +0 -0
- data/spec/meta_meta/template +2 -0
- data/spec/moi/config_spec.rb +0 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +25 -0
- data/spec/support/supply_xml.rb +0 -0
- metadata +320 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
## @author Pete Birkinshaw (<pete@digitalidentitylabs.com>)
|
|
2
|
+
## Copyright: Copyright (c) 2011 Digital Identity Ltd.
|
|
3
|
+
## License: Apache License, Version 2.0
|
|
4
|
+
|
|
5
|
+
## Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
## you may not use this file except in compliance with the License.
|
|
7
|
+
## You may obtain a copy of the License at
|
|
8
|
+
##
|
|
9
|
+
## http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
##
|
|
11
|
+
## Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
## distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
## See the License for the specific language governing permissions and
|
|
15
|
+
## limitations under the License.
|
|
16
|
+
##
|
|
17
|
+
|
|
18
|
+
module Shibkit
|
|
19
|
+
class MetaMeta
|
|
20
|
+
|
|
21
|
+
require 'shibkit/meta_meta/provider'
|
|
22
|
+
|
|
23
|
+
## Class to represent an SP
|
|
24
|
+
class SP < Provider
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
require 'shibkit/meta_meta/service'
|
|
28
|
+
require 'shibkit/meta_meta/requested_attribute'
|
|
29
|
+
|
|
30
|
+
## Element and attribute used to select XML for new objects
|
|
31
|
+
ROOT_ELEMENT = 'EntityDescriptor'
|
|
32
|
+
TARGET_ATTR = 'entityID'
|
|
33
|
+
REQUIRED_QUACKS = [:entity_uri, :valid?]
|
|
34
|
+
|
|
35
|
+
MDUI_ROOT = 'SPSSODescriptor'
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
attr_accessor :services
|
|
39
|
+
|
|
40
|
+
attr_accessor :default_service
|
|
41
|
+
|
|
42
|
+
attr_accessor :protocols
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
def parse_xml
|
|
47
|
+
|
|
48
|
+
super
|
|
49
|
+
|
|
50
|
+
@valid = @noko.xpath('xmlns:SPSSODescriptor[1]').empty? ? false : true
|
|
51
|
+
|
|
52
|
+
proto_set = @noko.xpath('xmlns:SPSSODescriptor/@protocolSupportEnumeration')[0]
|
|
53
|
+
@protocols = proto_set.value.split(' ') if proto_set
|
|
54
|
+
|
|
55
|
+
## Include services objects
|
|
56
|
+
@services ||= Array.new
|
|
57
|
+
@noko.xpath("xmlns:SPSSODescriptor/xmlns:AttributeConsumingService").each do |sx|
|
|
58
|
+
|
|
59
|
+
service = Shibkit::MetaMeta::Service.new(sx).filter
|
|
60
|
+
|
|
61
|
+
next unless service
|
|
62
|
+
|
|
63
|
+
@services << service
|
|
64
|
+
@default_service = service if service.default?
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
@services.sort! { |a,b| a.index <=> b.index }
|
|
69
|
+
@default_service = @services[0] unless @default_service
|
|
70
|
+
|
|
71
|
+
log.debug " Derived SP from XML" if filter
|
|
72
|
+
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Generated by jeweler
|
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
|
+
# -*- encoding: utf-8 -*-
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |s|
|
|
7
|
+
s.name = %q{shibkit-meta_meta}
|
|
8
|
+
s.version = "0.2.2"
|
|
9
|
+
|
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
|
+
s.authors = [%q{Pete Birkinshaw}]
|
|
12
|
+
s.date = %q{2011-11-07}
|
|
13
|
+
s.description = %q{Utilities for friendly handling of Shibboleth/SAML2 metadata. Easily download and parse metadata XML into Ruby objects.}
|
|
14
|
+
s.email = %q{gems@digitalidentitylabs.com}
|
|
15
|
+
s.extra_rdoc_files = [
|
|
16
|
+
"LICENSE.txt",
|
|
17
|
+
"README.md"
|
|
18
|
+
]
|
|
19
|
+
s.files = [
|
|
20
|
+
".document",
|
|
21
|
+
".rspec",
|
|
22
|
+
"Gemfile",
|
|
23
|
+
"Gemfile.lock",
|
|
24
|
+
"Icon.png",
|
|
25
|
+
"LICENSE.txt",
|
|
26
|
+
"README.md",
|
|
27
|
+
"Rakefile",
|
|
28
|
+
"VERSION",
|
|
29
|
+
"examples/biggest_entity_id.rb",
|
|
30
|
+
"lib/shibkit/meta_meta.rb",
|
|
31
|
+
"lib/shibkit/meta_meta/attribute.rb",
|
|
32
|
+
"lib/shibkit/meta_meta/config.rb",
|
|
33
|
+
"lib/shibkit/meta_meta/contact.rb",
|
|
34
|
+
"lib/shibkit/meta_meta/data/default_metadata/example_federation_metadata.xml",
|
|
35
|
+
"lib/shibkit/meta_meta/data/default_metadata/local_metadata.xml",
|
|
36
|
+
"lib/shibkit/meta_meta/data/default_metadata/uncommon_federation_metadata.xml",
|
|
37
|
+
"lib/shibkit/meta_meta/data/default_metadata_cache.yml",
|
|
38
|
+
"lib/shibkit/meta_meta/data/dev_sources.yml",
|
|
39
|
+
"lib/shibkit/meta_meta/data/real_sources.yml",
|
|
40
|
+
"lib/shibkit/meta_meta/entity.rb",
|
|
41
|
+
"lib/shibkit/meta_meta/federation.rb",
|
|
42
|
+
"lib/shibkit/meta_meta/idp.rb",
|
|
43
|
+
"lib/shibkit/meta_meta/logo.rb",
|
|
44
|
+
"lib/shibkit/meta_meta/metadata_item.rb",
|
|
45
|
+
"lib/shibkit/meta_meta/mixin/cached_downloads.rb",
|
|
46
|
+
"lib/shibkit/meta_meta/mixin/xpath_chores.rb",
|
|
47
|
+
"lib/shibkit/meta_meta/organisation.rb",
|
|
48
|
+
"lib/shibkit/meta_meta/provider.rb",
|
|
49
|
+
"lib/shibkit/meta_meta/provisioning/base.rb",
|
|
50
|
+
"lib/shibkit/meta_meta/requested_attribute.rb",
|
|
51
|
+
"lib/shibkit/meta_meta/service.rb",
|
|
52
|
+
"lib/shibkit/meta_meta/source.rb",
|
|
53
|
+
"lib/shibkit/meta_meta/sp.rb",
|
|
54
|
+
"shibkit-meta_meta.gemspec",
|
|
55
|
+
"spec/meta_meta/attribute/token",
|
|
56
|
+
"spec/meta_meta/config/autoloading_and_refreshing_spec.rb",
|
|
57
|
+
"spec/meta_meta/config/code_nspec.rb",
|
|
58
|
+
"spec/meta_meta/config/configuration_spec.rb",
|
|
59
|
+
"spec/meta_meta/config/creation_spec.rb",
|
|
60
|
+
"spec/meta_meta/config/downloading_and_caching_settings_spec.rb",
|
|
61
|
+
"spec/meta_meta/config/env_platform_settings.rb",
|
|
62
|
+
"spec/meta_meta/config/filtering_settings_spec.rb",
|
|
63
|
+
"spec/meta_meta/config/init.rb",
|
|
64
|
+
"spec/meta_meta/config/logger_settings_spec.rb",
|
|
65
|
+
"spec/meta_meta/config/smartcache_settings_spec.rb",
|
|
66
|
+
"spec/meta_meta/config/source_file_settings_spec.rb",
|
|
67
|
+
"spec/meta_meta/config/tagging_settings_spec.rb",
|
|
68
|
+
"spec/meta_meta/config/working_directory_settings_spec.rb",
|
|
69
|
+
"spec/meta_meta/config/xml_processing_settings_spec.rb",
|
|
70
|
+
"spec/meta_meta/contact/contact_oldspec.rb",
|
|
71
|
+
"spec/meta_meta/entity/entity_oldspec.rb",
|
|
72
|
+
"spec/meta_meta/federation/federation_oldspec.rb",
|
|
73
|
+
"spec/meta_meta/idp/token",
|
|
74
|
+
"spec/meta_meta/logo/token",
|
|
75
|
+
"spec/meta_meta/meta_meta/cache_example.yaml",
|
|
76
|
+
"spec/meta_meta/meta_meta/meta_meta_spec.rb",
|
|
77
|
+
"spec/meta_meta/meta_meta/saved_sources.yaml",
|
|
78
|
+
"spec/meta_meta/metadata_item/token",
|
|
79
|
+
"spec/meta_meta/organisation/organisation_oldspec.rb",
|
|
80
|
+
"spec/meta_meta/provider/token",
|
|
81
|
+
"spec/meta_meta/requested_attribute/token",
|
|
82
|
+
"spec/meta_meta/service/token",
|
|
83
|
+
"spec/meta_meta/source/application_extras_spec.rb",
|
|
84
|
+
"spec/meta_meta/source/conversion_spec.rb",
|
|
85
|
+
"spec/meta_meta/source/creation_spec.rb",
|
|
86
|
+
"spec/meta_meta/source/downloads_and_caching_spec.rb",
|
|
87
|
+
"spec/meta_meta/source/federation_information_spec.rb",
|
|
88
|
+
"spec/meta_meta/source/fixtures.rb",
|
|
89
|
+
"spec/meta_meta/source/init.rb",
|
|
90
|
+
"spec/meta_meta/source/loading_and_saving_spec.rb",
|
|
91
|
+
"spec/meta_meta/source/metadata_details_spec.rb",
|
|
92
|
+
"spec/meta_meta/source/metadata_integrity_spec.rb",
|
|
93
|
+
"spec/meta_meta/source/selection_spec.rb",
|
|
94
|
+
"spec/meta_meta/source/source_oldspec.rb",
|
|
95
|
+
"spec/meta_meta/source/xml_parsing_spec.rb",
|
|
96
|
+
"spec/meta_meta/sp/token",
|
|
97
|
+
"spec/meta_meta/template",
|
|
98
|
+
"spec/moi/config_spec.rb",
|
|
99
|
+
"spec/spec.opts",
|
|
100
|
+
"spec/spec_helper.rb",
|
|
101
|
+
"spec/support/supply_xml.rb"
|
|
102
|
+
]
|
|
103
|
+
s.homepage = %q{https://github.com/Digital-Identity-Labs/shibkit-meta_meta}
|
|
104
|
+
s.licenses = [%q{Apache 2.0}]
|
|
105
|
+
s.require_paths = [%q{lib}]
|
|
106
|
+
s.rubygems_version = %q{1.8.8}
|
|
107
|
+
s.summary = %q{Downloads and parses Shibboleth (SAML2) metadata.}
|
|
108
|
+
|
|
109
|
+
if s.respond_to? :specification_version then
|
|
110
|
+
s.specification_version = 3
|
|
111
|
+
|
|
112
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
113
|
+
s.add_runtime_dependency(%q<rake>, [">= 0"])
|
|
114
|
+
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
|
115
|
+
s.add_runtime_dependency(%q<rest-client>, [">= 0"])
|
|
116
|
+
s.add_runtime_dependency(%q<rest-client-components>, [">= 0"])
|
|
117
|
+
s.add_runtime_dependency(%q<rack-cache>, [">= 0"])
|
|
118
|
+
s.add_runtime_dependency(%q<addressable>, [">= 0"])
|
|
119
|
+
s.add_runtime_dependency(%q<chunky_png>, [">= 0"])
|
|
120
|
+
s.add_runtime_dependency(%q<dimensions>, [">= 0"])
|
|
121
|
+
s.add_runtime_dependency(%q<json>, [">= 0"])
|
|
122
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.7.0"])
|
|
123
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
|
124
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.6.2"])
|
|
125
|
+
else
|
|
126
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
|
127
|
+
s.add_dependency(%q<nokogiri>, [">= 0"])
|
|
128
|
+
s.add_dependency(%q<rest-client>, [">= 0"])
|
|
129
|
+
s.add_dependency(%q<rest-client-components>, [">= 0"])
|
|
130
|
+
s.add_dependency(%q<rack-cache>, [">= 0"])
|
|
131
|
+
s.add_dependency(%q<addressable>, [">= 0"])
|
|
132
|
+
s.add_dependency(%q<chunky_png>, [">= 0"])
|
|
133
|
+
s.add_dependency(%q<dimensions>, [">= 0"])
|
|
134
|
+
s.add_dependency(%q<json>, [">= 0"])
|
|
135
|
+
s.add_dependency(%q<rspec>, ["~> 2.7.0"])
|
|
136
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
|
137
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
|
|
138
|
+
end
|
|
139
|
+
else
|
|
140
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
|
141
|
+
s.add_dependency(%q<nokogiri>, [">= 0"])
|
|
142
|
+
s.add_dependency(%q<rest-client>, [">= 0"])
|
|
143
|
+
s.add_dependency(%q<rest-client-components>, [">= 0"])
|
|
144
|
+
s.add_dependency(%q<rack-cache>, [">= 0"])
|
|
145
|
+
s.add_dependency(%q<addressable>, [">= 0"])
|
|
146
|
+
s.add_dependency(%q<chunky_png>, [">= 0"])
|
|
147
|
+
s.add_dependency(%q<dimensions>, [">= 0"])
|
|
148
|
+
s.add_dependency(%q<json>, [">= 0"])
|
|
149
|
+
s.add_dependency(%q<rspec>, ["~> 2.7.0"])
|
|
150
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
|
151
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
File without changes
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
|
|
2
|
+
|
|
3
|
+
describe Shibkit::MetaMeta::Config, "automatic download and refresh settings" do
|
|
4
|
+
|
|
5
|
+
## Testing a singleton is tricky! Make a copy of the class each time
|
|
6
|
+
before(:each) do
|
|
7
|
+
@config_class = Shibkit::MetaMeta::Config.clone
|
|
8
|
+
@config = @config_class.instance
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
subject { @config }
|
|
12
|
+
|
|
13
|
+
it { should respond_to :autoload= }
|
|
14
|
+
it { should respond_to :autoload? }
|
|
15
|
+
it { should respond_to :auto_refresh= }
|
|
16
|
+
it { should respond_to :auto_refresh? }
|
|
17
|
+
|
|
18
|
+
context "When using default settings" do
|
|
19
|
+
|
|
20
|
+
it "should have autoload set to be active" do
|
|
21
|
+
|
|
22
|
+
@config.autoload?.should == true
|
|
23
|
+
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should have auto_refresh set to active" do
|
|
27
|
+
|
|
28
|
+
@config.auto_refresh?.should == true
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
context "When changing settings" do
|
|
35
|
+
|
|
36
|
+
it "should allow autoload setting to be enable or disabled" do
|
|
37
|
+
|
|
38
|
+
@config.autoload=true
|
|
39
|
+
@config.autoload?.should == true
|
|
40
|
+
@config.autoload=false
|
|
41
|
+
@config.autoload?.should == false
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "should allow auto_refresh setting to be enabled or disabled" do
|
|
46
|
+
|
|
47
|
+
@config.auto_refresh=true
|
|
48
|
+
@config.auto_refresh?.should == true
|
|
49
|
+
@config.auto_refresh=false
|
|
50
|
+
@config.auto_refresh?.should == false
|
|
51
|
+
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "should only return true or false for #autoload?" do
|
|
55
|
+
|
|
56
|
+
@config.autoload="yup" # Potentially misleading
|
|
57
|
+
@config.autoload?.should == true
|
|
58
|
+
@config.autoload=nil
|
|
59
|
+
@config.autoload?.should == false
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "should only return true or false for #auto_refresh?" do
|
|
64
|
+
@config.auto_refresh="yup" # Potentially misleading
|
|
65
|
+
@config.auto_refresh?.should == true
|
|
66
|
+
@config.auto_refresh=nil
|
|
67
|
+
@config.auto_refresh?.should == false
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
|
|
2
|
+
|
|
3
|
+
describe Shibkit::MetaMeta::Config, "class source code quality" do
|
|
4
|
+
|
|
5
|
+
it 'contains no code smells' do
|
|
6
|
+
|
|
7
|
+
source_code = File.expand_path(File.dirname(__FILE__) + '../../../../lib/shibkit/meta_meta/config.rb')
|
|
8
|
+
|
|
9
|
+
source_code.should_not reek
|
|
10
|
+
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
|
|
2
|
+
|
|
3
|
+
describe Shibkit::MetaMeta::Config, "configuration blocks" do
|
|
4
|
+
|
|
5
|
+
## Testing a singleton is tricky! Make a copy of the class each time
|
|
6
|
+
before(:each) do
|
|
7
|
+
@config_class = Shibkit::MetaMeta::Config.clone
|
|
8
|
+
@config = @config_class.instance
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
subject { @config }
|
|
12
|
+
|
|
13
|
+
it { should respond_to :configure }
|
|
14
|
+
|
|
15
|
+
it "Should allow a configuration block to be used at object creation" do
|
|
16
|
+
|
|
17
|
+
my_config = @config_class.instance { |c| c.smartcache_expiry = 12345 }
|
|
18
|
+
my_config.smartcache_expiry.should == 12345
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "Should allow a configuration block to be used at any time" do
|
|
23
|
+
|
|
24
|
+
my_config = @config_class.instance
|
|
25
|
+
my_config.configure { |c| c.smartcache_expiry = 3333 }
|
|
26
|
+
my_config.smartcache_expiry.should == 3333
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
|
|
2
|
+
|
|
3
|
+
describe Shibkit::MetaMeta::Config, "creation and singleton behaviour" do
|
|
4
|
+
|
|
5
|
+
## Testing a singleton is tricky! Make a copy of the class each time
|
|
6
|
+
before(:each) do
|
|
7
|
+
@config_class = Shibkit::MetaMeta::Config.clone
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
subject { @config_class }
|
|
11
|
+
|
|
12
|
+
it { should respond_to :instance }
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
it "Should raise an exception if #new is called" do
|
|
16
|
+
|
|
17
|
+
expect { @config_class.new }.should raise_error
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
context "When first instance is created" do
|
|
22
|
+
|
|
23
|
+
it "should return a Config object" do
|
|
24
|
+
|
|
25
|
+
Shibkit::MetaMeta::Config.instance.class.should == Shibkit::MetaMeta::Config
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context "When an instance is created again" do
|
|
32
|
+
|
|
33
|
+
it "should also be the same object, effectively a singleton" do
|
|
34
|
+
|
|
35
|
+
first = @config_class.instance
|
|
36
|
+
second = @config_class.instance
|
|
37
|
+
first.should == second
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
|
|
2
|
+
require 'rack/cache'
|
|
3
|
+
|
|
4
|
+
describe Shibkit::MetaMeta::Config, "download and file caching settings" do
|
|
5
|
+
|
|
6
|
+
## Testing a singleton is tricky! Make a copy of the class each time
|
|
7
|
+
before(:each) do
|
|
8
|
+
@config_class = Shibkit::MetaMeta::Config.clone
|
|
9
|
+
@config = @config_class.instance
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
subject { @config }
|
|
13
|
+
|
|
14
|
+
it { should respond_to :download_cache_options= }
|
|
15
|
+
it { should respond_to :download_cache_options }
|
|
16
|
+
it { should respond_to :verbose_downloads= }
|
|
17
|
+
it { should respond_to :verbose_downloads? }
|
|
18
|
+
it { should respond_to :cache_fallback_ttl= }
|
|
19
|
+
it { should respond_to :cache_fallback_ttl }
|
|
20
|
+
it { should respond_to :cache_root= }
|
|
21
|
+
it { should respond_to :cache_root }
|
|
22
|
+
|
|
23
|
+
it "should return a hash of cache options" do
|
|
24
|
+
|
|
25
|
+
@config.download_cache_options.should be_a_kind_of Hash
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "cache options should be compatible with Rack::Cache" do
|
|
30
|
+
|
|
31
|
+
options = @config.download_cache_options
|
|
32
|
+
expect {RestClient.enable Rack::Cache, options}.should_not raise_error
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should represent download cache data and metadata locations as URLs" do
|
|
37
|
+
options = @config.download_cache_options
|
|
38
|
+
options[:metastore].should match URL_REGEX
|
|
39
|
+
options[:entitystore].should match URL_REGEX
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
context "When using default settings" do
|
|
43
|
+
|
|
44
|
+
describe "the cache options hash" do
|
|
45
|
+
|
|
46
|
+
before(:each) do
|
|
47
|
+
@cache_options = @config.download_cache_options
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "should have a two hour default TTL for cached files" do
|
|
51
|
+
@cache_options[:default_ttl].should == 7200
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "should store cached metadata inside the cache root in a folder called meta" do
|
|
55
|
+
location = @cache_options[:metastore]
|
|
56
|
+
location.should include @config.cache_root
|
|
57
|
+
location.should include 'meta'
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "should store cached data inside the cache root in a folder called body" do
|
|
61
|
+
location = @cache_options[:entitystore]
|
|
62
|
+
location.should include @config.cache_root
|
|
63
|
+
location.should include 'body'
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "should have verbose output set to false" do
|
|
67
|
+
@cache_options[:verbose].should be_false
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "should have a fallback ttl of two hours" do
|
|
73
|
+
@config.cache_fallback_ttl.should == 7200
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should have the verbose download setting return false" do
|
|
77
|
+
@config.verbose_downloads?.should be_false
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
context "on Windows" do
|
|
81
|
+
|
|
82
|
+
it "should store cache files in the default TEMP directory" do
|
|
83
|
+
|
|
84
|
+
@config_class.any_instance.stub(:sensible_os?).and_return(false)
|
|
85
|
+
tempbase = 'c:\Temp'
|
|
86
|
+
ENV['TEMP'] = tempbase
|
|
87
|
+
|
|
88
|
+
@config.download_cache_options[:entitystore].should include tempbase.gsub('\\','/')
|
|
89
|
+
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
context "on sensible operating systems" do
|
|
95
|
+
|
|
96
|
+
it "should store cache files in /tmp/" do
|
|
97
|
+
|
|
98
|
+
@config_class.any_instance.stub(:sensible_os?).and_return(true)
|
|
99
|
+
tempbase = '/tmp'
|
|
100
|
+
|
|
101
|
+
@config.download_cache_options[:entitystore].should include tempbase
|
|
102
|
+
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
context "When changing settings" do
|
|
110
|
+
|
|
111
|
+
it "should allow the cache directory to be changed" do
|
|
112
|
+
|
|
113
|
+
@config.cache_root = "/tmp/bananas"
|
|
114
|
+
@config.cache_root.should == "/tmp/bananas"
|
|
115
|
+
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it "should change the configuration hash when verbose downloads setting is changed" do
|
|
119
|
+
|
|
120
|
+
@config.verbose_downloads?.should be_false
|
|
121
|
+
@config.download_cache_options[:verbose].should be_false
|
|
122
|
+
|
|
123
|
+
@config.verbose_downloads = true
|
|
124
|
+
@config.download_cache_options[:verbose].should be_true
|
|
125
|
+
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it "should change the default configuration hash when cache root is changed" do
|
|
129
|
+
|
|
130
|
+
@config.cache_root = "/tmp/work"
|
|
131
|
+
@config.download_cache_options[:entitystore].should include "/tmp/work"
|
|
132
|
+
@config.download_cache_options[:metastore].should include "/tmp/work"
|
|
133
|
+
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
context "if an equivalent Rack::Cache setting is configured directing using #download_cache_options" do
|
|
137
|
+
|
|
138
|
+
it "should not change the cache storage settings when #cache_root is changed " do
|
|
139
|
+
|
|
140
|
+
@config.download_cache_options = { :entitystore => 'heap:/' }
|
|
141
|
+
@config.download_cache_options = { :metastore => 'heap:/' }
|
|
142
|
+
|
|
143
|
+
@config.cache_root = "/tmp/scratch"
|
|
144
|
+
|
|
145
|
+
@config.download_cache_options[:entitystore].should == 'heap:/'
|
|
146
|
+
@config.download_cache_options[:metastore ].should == 'heap:/'
|
|
147
|
+
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it "should always change the configuration hash when #default_ttl is changed" do
|
|
151
|
+
|
|
152
|
+
@config.cache_fallback_ttl = 808
|
|
153
|
+
@config.download_cache_options[:default_ttl].should == 808
|
|
154
|
+
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it "changing the configuration hash does not change #default_ttl" do
|
|
158
|
+
|
|
159
|
+
@config.download_cache_options = { :default_ttl => 909 }
|
|
160
|
+
@config.cache_fallback_ttl.should_not == 909
|
|
161
|
+
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it "should always change the configuration hash when #verbose_downloads is changed" do
|
|
165
|
+
|
|
166
|
+
@config.download_cache_options = { :verbose => false }
|
|
167
|
+
@config.verbose_downloads = true
|
|
168
|
+
@config.download_cache_options[:verbose].should == true
|
|
169
|
+
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
it "changing the configuration hash does not change #verbose_downloads" do
|
|
173
|
+
|
|
174
|
+
@config.verbose_downloads = true
|
|
175
|
+
@config.download_cache_options = { :verbose => false }
|
|
176
|
+
@config.verbose_downloads?.should == true
|
|
177
|
+
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
it "should not allow direct manipulation of the returned config hash" do
|
|
183
|
+
|
|
184
|
+
expect { @config.download_cache_options[:verbose] = true }.should raise_error
|
|
185
|
+
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
it "should allow new options to be merged into the default config hash, overloading those controlled by other methods" do
|
|
189
|
+
|
|
190
|
+
@config.verbose_downloads?.should be_false
|
|
191
|
+
@config.download_cache_options[:verbose].should be_false
|
|
192
|
+
|
|
193
|
+
@config.download_cache_options = { :verbose => true }
|
|
194
|
+
@config.download_cache_options[:verbose].should be_true
|
|
195
|
+
@config.download_cache_options[:default_ttl].should == 7200
|
|
196
|
+
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
it "should allow other, more obscure Rack::Cache options to be set" do
|
|
200
|
+
|
|
201
|
+
@config.download_cache_options[:allow_reload].should be_nil
|
|
202
|
+
@config.download_cache_options[:allow_revalidate].should be_nil
|
|
203
|
+
|
|
204
|
+
@config.download_cache_options = { :allow_reload => true }
|
|
205
|
+
@config.download_cache_options = { :allow_revalidate => true }
|
|
206
|
+
|
|
207
|
+
@config.download_cache_options[:allow_reload].should be_true
|
|
208
|
+
@config.download_cache_options[:allow_revalidate].should be_true
|
|
209
|
+
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
|