shibkit-meta_meta 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +21 -0
  4. data/Gemfile.lock +52 -0
  5. data/Icon.png +0 -0
  6. data/LICENSE.txt +177 -0
  7. data/README.md +789 -0
  8. data/Rakefile +38 -0
  9. data/VERSION +1 -0
  10. data/examples/biggest_entity_id.rb +4 -0
  11. data/lib/shibkit/meta_meta.rb +600 -0
  12. data/lib/shibkit/meta_meta/attribute.rb +73 -0
  13. data/lib/shibkit/meta_meta/config.rb +463 -0
  14. data/lib/shibkit/meta_meta/contact.rb +85 -0
  15. data/lib/shibkit/meta_meta/data/default_metadata/example_federation_metadata.xml +168 -0
  16. data/lib/shibkit/meta_meta/data/default_metadata/local_metadata.xml +66 -0
  17. data/lib/shibkit/meta_meta/data/default_metadata/uncommon_federation_metadata.xml +115 -0
  18. data/lib/shibkit/meta_meta/data/default_metadata_cache.yml +166 -0
  19. data/lib/shibkit/meta_meta/data/dev_sources.yml +86 -0
  20. data/lib/shibkit/meta_meta/data/real_sources.yml +163 -0
  21. data/lib/shibkit/meta_meta/entity.rb +219 -0
  22. data/lib/shibkit/meta_meta/federation.rb +161 -0
  23. data/lib/shibkit/meta_meta/idp.rb +81 -0
  24. data/lib/shibkit/meta_meta/logo.rb +216 -0
  25. data/lib/shibkit/meta_meta/metadata_item.rb +244 -0
  26. data/lib/shibkit/meta_meta/mixin/cached_downloads.rb +127 -0
  27. data/lib/shibkit/meta_meta/mixin/xpath_chores.rb +111 -0
  28. data/lib/shibkit/meta_meta/organisation.rb +73 -0
  29. data/lib/shibkit/meta_meta/provider.rb +195 -0
  30. data/lib/shibkit/meta_meta/provisioning/base.rb +33 -0
  31. data/lib/shibkit/meta_meta/requested_attribute.rb +29 -0
  32. data/lib/shibkit/meta_meta/service.rb +94 -0
  33. data/lib/shibkit/meta_meta/source.rb +558 -0
  34. data/lib/shibkit/meta_meta/sp.rb +79 -0
  35. data/shibkit-meta_meta.gemspec +154 -0
  36. data/spec/meta_meta/attribute/token +0 -0
  37. data/spec/meta_meta/config/autoloading_and_refreshing_spec.rb +72 -0
  38. data/spec/meta_meta/config/code_nspec.rb +13 -0
  39. data/spec/meta_meta/config/configuration_spec.rb +30 -0
  40. data/spec/meta_meta/config/creation_spec.rb +43 -0
  41. data/spec/meta_meta/config/downloading_and_caching_settings_spec.rb +216 -0
  42. data/spec/meta_meta/config/env_platform_settings.rb +129 -0
  43. data/spec/meta_meta/config/filtering_settings_spec.rb +123 -0
  44. data/spec/meta_meta/config/init.rb +8 -0
  45. data/spec/meta_meta/config/logger_settings_spec.rb +91 -0
  46. data/spec/meta_meta/config/smartcache_settings_spec.rb +110 -0
  47. data/spec/meta_meta/config/source_file_settings_spec.rb +99 -0
  48. data/spec/meta_meta/config/tagging_settings_spec.rb +81 -0
  49. data/spec/meta_meta/config/working_directory_settings_spec.rb +106 -0
  50. data/spec/meta_meta/config/xml_processing_settings_spec.rb +75 -0
  51. data/spec/meta_meta/contact/contact_oldspec.rb +0 -0
  52. data/spec/meta_meta/entity/entity_oldspec.rb +53 -0
  53. data/spec/meta_meta/federation/federation_oldspec.rb +0 -0
  54. data/spec/meta_meta/idp/token +0 -0
  55. data/spec/meta_meta/logo/token +0 -0
  56. data/spec/meta_meta/meta_meta/cache_example.yaml +141284 -0
  57. data/spec/meta_meta/meta_meta/meta_meta_spec.rb +269 -0
  58. data/spec/meta_meta/meta_meta/saved_sources.yaml +46 -0
  59. data/spec/meta_meta/metadata_item/token +0 -0
  60. data/spec/meta_meta/organisation/organisation_oldspec.rb +0 -0
  61. data/spec/meta_meta/provider/token +0 -0
  62. data/spec/meta_meta/requested_attribute/token +0 -0
  63. data/spec/meta_meta/service/token +0 -0
  64. data/spec/meta_meta/source/application_extras_spec.rb +234 -0
  65. data/spec/meta_meta/source/conversion_spec.rb +75 -0
  66. data/spec/meta_meta/source/creation_spec.rb +0 -0
  67. data/spec/meta_meta/source/downloads_and_caching_spec.rb +0 -0
  68. data/spec/meta_meta/source/federation_information_spec.rb +11 -0
  69. data/spec/meta_meta/source/fixtures.rb +24 -0
  70. data/spec/meta_meta/source/init.rb +1 -0
  71. data/spec/meta_meta/source/loading_and_saving_spec.rb +0 -0
  72. data/spec/meta_meta/source/metadata_details_spec.rb +0 -0
  73. data/spec/meta_meta/source/metadata_integrity_spec.rb +0 -0
  74. data/spec/meta_meta/source/selection_spec.rb +0 -0
  75. data/spec/meta_meta/source/source_oldspec.rb +353 -0
  76. data/spec/meta_meta/source/xml_parsing_spec.rb +0 -0
  77. data/spec/meta_meta/sp/token +0 -0
  78. data/spec/meta_meta/template +2 -0
  79. data/spec/moi/config_spec.rb +0 -0
  80. data/spec/spec.opts +1 -0
  81. data/spec/spec_helper.rb +25 -0
  82. data/spec/support/supply_xml.rb +0 -0
  83. metadata +320 -0
@@ -0,0 +1,269 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
2
+
3
+ describe Shibkit::MetaMeta do
4
+ before(:all) do
5
+ file = File.open("rspec.log",'w')
6
+ Shibkit::MetaMeta.config.logger= Logger.new(file)
7
+ Shibkit::MetaMeta.config.logger.level = Logger::DEBUG
8
+ Shibkit::MetaMeta.config.logger.datetime_format = "%Y-%m-%d %H:%M:%S"
9
+ Shibkit::MetaMeta.config.logger.formatter = proc { |severity, datetime, progname, msg| "#{datetime}: #{severity} #{msg}\n" }
10
+ Shibkit::MetaMeta.config.logger.progname = "MetaMeta-RSpec"
11
+ end
12
+
13
+ before(:each) do |test|
14
+ Shibkit::MetaMeta.reset
15
+ Shibkit::MetaMeta.config.autoload = true
16
+ Shibkit::MetaMeta.config.logger.info "Running [#{test.example.metadata[:full_description]}]"
17
+ end
18
+ after(:each) do |test|
19
+ Shibkit::MetaMeta.config.logger.info "Finihed [#{test.example.metadata[:full_description]}]"
20
+ end
21
+
22
+ describe "#reset" do
23
+ it "should reduce the number of sources to zero" do
24
+ Shibkit::MetaMeta.reset
25
+ Shibkit::MetaMeta.additional_sources.size.should == 0 &&
26
+ Shibkit::MetaMeta.loaded_sources.size.should == 0
27
+ end
28
+ end
29
+
30
+ describe "#add_source" do
31
+
32
+ it "should accept a single source" do
33
+ Shibkit::MetaMeta.add_source({
34
+ :uri => 'http://ukfederation.org.uk',
35
+ :name => 'UK Access Management Federation For Education And Research',
36
+ :display_name => 'UK Access Management Federation',
37
+ :type => 'federation',
38
+ :countries => ['gb'],
39
+ :metadata => 'http://metadata.ukfederation.org.uk/ukfederation-metadata.xml',
40
+ :certificate => 'http://metadata.ukfederation.org.uk/ukfederation.pem',
41
+ :fingerprint => '94:7F:5E:8C:4E:F5:E1:69:E7:DF:68:1E:48:AA:98:44:A5:41:56:EE',
42
+ :refeds_info => 'https://refeds.terena.org/index.php/FederationUkfed',
43
+ :homepage => 'http://www.ukfederation.org.uk',
44
+ :languages => ['en-gb', 'en'],
45
+ :support_email => ' service@ukfederation.org.uk',
46
+ :description => 'A single solution for accessing online resources and services',
47
+ })
48
+ Shibkit::MetaMeta.additional_sources.size.should == 1 &&
49
+ Shibkit::MetaMeta.additional_sources.first[0].should == 'http://ukfederation.org.uk'
50
+ end
51
+
52
+ it "should accept more than one source" do
53
+ Shibkit::MetaMeta.add_source({
54
+ :uri => 'http://ukfederation.org.uk',
55
+ :name => 'UK Access Management Federation For Education And Research',
56
+ :display_name => 'UK Access Management Federation',
57
+ :type => 'federation',
58
+ :countries => ['gb'],
59
+ :metadata => 'http://metadata.ukfederation.org.uk/ukfederation-metadata.xml',
60
+ :certificate => 'http://metadata.ukfederation.org.uk/ukfederation.pem',
61
+ :fingerprint => '94:7F:5E:8C:4E:F5:E1:69:E7:DF:68:1E:48:AA:98:44:A5:41:56:EE',
62
+ :refeds_info => 'https://refeds.terena.org/index.php/FederationUkfed',
63
+ :homepage => 'http://www.ukfederation.org.uk',
64
+ :languages => ['en-gb', 'en'],
65
+ :support_email => ' service@ukfederation.org.uk',
66
+ :description => 'A single solution for accessing online resources and services',
67
+ })
68
+ Shibkit::MetaMeta.add_source({
69
+ :uri => 'urn:mace:aaf.edu.au:AAFProduction',
70
+ :name => 'Australian Access Federation',
71
+ :display_name => 'AAF',
72
+ :type => 'federation',
73
+ :countries => ['au'],
74
+ :metadata => 'http://manager.aaf.edu.au/metadata/metadata.aaf.signed.complete.xml',
75
+ :certificate => 'https://manager.aaf.edu.au/metadata/metadata-cert.pem',
76
+ :refeds_info => 'https://refeds.terena.org/index.php/FederationAAF',
77
+ :homepage => 'http://www.aaf.edu.au/',
78
+ :languages => ['en'],
79
+ :support_email => 'enquiries@aaf.edu.au',
80
+ :description => 'The Australian Access Federation.',
81
+ })
82
+ Shibkit::MetaMeta.additional_sources.size.should == 2 &&
83
+ Shibkit::MetaMeta.additional_sources.keys[0].should == 'http://ukfederation.org.uk' &&
84
+ Shibkit::MetaMeta.additional_sources.keys[1].should == 'urn:mace:aaf.edu.au:AAFProduction'
85
+ end
86
+
87
+ end
88
+
89
+ describe "#save_sources" do
90
+ it "should save the sources list to a file" do
91
+ Shibkit::MetaMeta.add_source({
92
+ :uri => 'urn:mace:aaf.edu.au:AAFProduction',
93
+ :name => 'Australian Access Federation',
94
+ :display_name => 'AAF',
95
+ :type => 'federation',
96
+ :countries => ['au'],
97
+ :metadata => 'http://manager.aaf.edu.au/metadata/metadata.aaf.signed.complete.xml',
98
+ :certificate => 'https://manager.aaf.edu.au/metadata/metadata-cert.pem',
99
+ :refeds_info => 'https://refeds.terena.org/index.php/FederationAAF',
100
+ :homepage => 'http://www.aaf.edu.au/',
101
+ :languages => ['en'],
102
+ :support_email => 'enquiries@aaf.edu.au',
103
+ :description => 'The Australian Access Federation.',
104
+ })
105
+ Shibkit::MetaMeta.add_source({
106
+ :uri => 'http://ukfederation.org.uk',
107
+ :name => 'UK Access Management Federation For Education And Research',
108
+ :display_name => 'UK Access Management Federation',
109
+ :type => 'federation',
110
+ :countries => ['gb'],
111
+ :metadata => 'http://metadata.ukfederation.org.uk/ukfederation-metadata.xml',
112
+ :certificate => 'http://metadata.ukfederation.org.uk/ukfederation.pem',
113
+ :fingerprint => '94:7F:5E:8C:4E:F5:E1:69:E7:DF:68:1E:48:AA:98:44:A5:41:56:EE',
114
+ :refeds_info => 'https://refeds.terena.org/index.php/FederationUkfed',
115
+ :homepage => 'http://www.ukfederation.org.uk',
116
+ :languages => ['en-gb', 'en'],
117
+ :support_email => ' service@ukfederation.org.uk',
118
+ :description => 'A single solution for accessing online resources and services',
119
+ })
120
+ tmpfile = Tempfile.new('metametasources')
121
+ sourcesfile = tmpfile.path
122
+ sourcesfile = 'mysaved_sources.yaml'
123
+ tmpfile.close
124
+ Shibkit::MetaMeta.save_sources(sourcesfile)
125
+ referencefile = File.open("#{File.dirname(__FILE__)}/saved_sources.yaml").read
126
+ resultfile = File.open(sourcesfile).read
127
+ Shibkit::MetaMeta.config.logger.debug "referencefile (MD5:#{Digest::MD5.hexdigest(referencefile)}):\n#{referencefile}\nsavedfile (MD5:#{Digest::MD5.hexdigest(resultfile)}):\n#{resultfile}\n"
128
+ (File.exists? sourcesfile).should == true &&
129
+ resultfile.should == referencefile
130
+ end
131
+ end
132
+ describe "#load_sources" do
133
+ it "should automatically load sources if no source file has been specified." do
134
+ Shibkit::MetaMeta.load_sources
135
+ Shibkit::MetaMeta.loaded_sources.size.should == 4 &&
136
+ Shibkit::MetaMeta.loaded_sources?.should == true &&
137
+ Shibkit::MetaMeta.loaded_sources.keys[0].should == 'http://ukfederation.org.uk'
138
+ end
139
+ it "should be possible to set the file to load from" do
140
+ Shibkit::MetaMeta.config.sources_file="#{File.dirname(__FILE__)}/saved_sources.yaml"
141
+ end
142
+ it "should load sources from a file" do
143
+ Shibkit::MetaMeta.config.sources_file="#{File.dirname(__FILE__)}/saved_sources.yaml"
144
+ Shibkit::MetaMeta.load_sources
145
+ Shibkit::MetaMeta.loaded_sources.size.should == 2 &&
146
+ Shibkit::MetaMeta.loaded_sources?.should == true &&
147
+ Shibkit::MetaMeta.loaded_sources.keys[1].should == 'http://ukfederation.org.uk' &&
148
+ Shibkit::MetaMeta.loaded_sources.keys[0].should == 'urn:mace:aaf.edu.au:AAFProduction'
149
+ end
150
+ end
151
+
152
+
153
+ describe "#process_sources" do
154
+ it "should read it's sources and return an array of federation objects" do
155
+ federations = Shibkit::MetaMeta.process_sources
156
+ federations.is_a?(Array).should == true
157
+ federations.size.should > 0
158
+ federations.each {|fed| fed.is_a?(Shibkit::MetaMeta::Federation).should == true}
159
+ end
160
+ end
161
+ describe "#save_cache_file" do
162
+ it "should save the federation cache to a file" do
163
+ federations = Shibkit::MetaMeta.process_sources
164
+ tmpfile = Tempfile.new('metametacache')
165
+ cachefile = tmpfile.path
166
+ Shibkit::MetaMeta.save_cache_file(cachefile)
167
+ (File.exists? cachefile).should == true
168
+ end
169
+ end
170
+ describe "#load_cache_file" do
171
+ it "should load objects from a cache file" do
172
+ Shibkit::MetaMeta.load_cache_file("#{File.dirname(__FILE__)}/cache_example.yaml")
173
+ Shibkit::MetaMeta.stocked?.should == true
174
+ end
175
+ end
176
+ describe "#flush" do
177
+ it "should clear the cache" do
178
+ Shibkit::MetaMeta.load_cache_file("#{File.dirname(__FILE__)}/cache_example.yaml")
179
+ Shibkit::MetaMeta.stocked?.should == true &&
180
+ Shibkit::MetaMeta.flush &&
181
+ Shibkit::MetaMeta.stocked?.should == false
182
+ end
183
+ end
184
+ describe "#delete_all_cached_files" do
185
+ it "should prevent me from accidentally harming my system"
186
+ it "should delete cache file"
187
+ end
188
+ describe "#smart_cache" do
189
+ it "should do 'something smart'"
190
+ end
191
+ describe "#refresh" do
192
+ it "should refresh metadata" do
193
+ Shibkit::MetaMeta.refresh
194
+ Shibkit::MetaMeta.stocked?
195
+ end
196
+ it "shouldn't refresh, (under certain conditions)"
197
+ it "should be forcable"
198
+ end
199
+ describe "#stockup" do
200
+ it "should load sources, if it is configured to auto-load" do
201
+ Shibkit::MetaMeta.config.autoload = true
202
+ Shibkit::MetaMeta.stockup
203
+ Shibkit::MetaMeta.stocked?.should == true
204
+ end
205
+ it "shouldn't do anything if it isn't configured to auto-load" do
206
+ Shibkit::MetaMeta.config.autoload = false
207
+ Shibkit::MetaMeta.stockup
208
+ Shibkit::MetaMeta.stocked?.should == false
209
+ end
210
+ it "shouldn't load sources if federations have already been loaded"
211
+ end
212
+ describe "#federations" do
213
+ it "should auto-initilize" do
214
+ Shibkit::MetaMeta.federations
215
+ Shibkit::MetaMeta.stocked?.should == true
216
+ end
217
+ it "should return a array of Shibkit::Federation objects" do
218
+ feds = Shibkit::MetaMeta.federations
219
+ feds.is_a?(Array).should == true
220
+ feds.size.should > 0
221
+ feds.each {|fed| fed.is_a?(Shibkit::MetaMeta::Federation).should == true}
222
+ end
223
+ end
224
+ describe "#entities" do
225
+ it "should return an array of Shibkit::Entity objects" do
226
+ ents = Shibkit::MetaMeta.entities
227
+ ents.is_a?(Array)
228
+ ents.size.should > 0
229
+ ents.each {|ent| ent.is_a?(Shibkit::MetaMeta::Entity).should == true}
230
+ end
231
+ end
232
+ describe "#orgs" do
233
+ it "should return an array of Shibkit::Organisation objects, sorted by druid" do
234
+ orgs = Shibkit::MetaMeta.orgs
235
+ orgs.is_a?(Array)
236
+ orgs.size.should > 0
237
+ orgs.each {|org| org.is_a?(Shibkit::MetaMeta::Organisation).should == true}
238
+ end
239
+ end
240
+ describe "#idps" do
241
+ it "should return an array of Shibkit::IDP objects" do
242
+ idps = Shibkit::MetaMeta.idps
243
+ idps.is_a?(Array)
244
+ idps.size.should > 0
245
+ Shibkit::MetaMeta.config.logger.debug "IDP Array:"
246
+ idps.each {|idp|
247
+ Shibkit::MetaMeta.config.logger.debug " object type:#{idp.class}"
248
+ idp.is_a?(Shibkit::MetaMeta::Entity).should == true
249
+ idp.idp?.should == true
250
+ }
251
+ end
252
+ end
253
+ describe "#sps" do
254
+ it "should return an array of Shibkit::SP objects" do
255
+ sps = Shibkit::MetaMeta.sps
256
+ sps.is_a?(Array)
257
+ sps.size.should > 0
258
+ Shibkit::MetaMeta.config.logger.debug "SP Array:"
259
+ sps.each {|sp|
260
+ Shibkit::MetaMeta.config.logger.debug " object type:#{sp.class}"
261
+ sp.is_a?(Shibkit::MetaMeta::Entity).should == true
262
+ sp.sp?.should == true
263
+ }
264
+ end
265
+ end
266
+ describe "#from_uri" do
267
+ # TODO I don't know what this is for
268
+ end
269
+ end
@@ -0,0 +1,46 @@
1
+ ---
2
+ urn:mace:aaf.edu.au:AAFProduction:
3
+ uri: urn:mace:aaf.edu.au:AAFProduction
4
+ name: Australian Access Federation
5
+ refresh: 0
6
+ display_name: AAF
7
+ type: federation
8
+ countries:
9
+ - au
10
+ metadata: http://manager.aaf.edu.au/metadata/metadata.aaf.signed.complete.xml
11
+ certificate: https://manager.aaf.edu.au/metadata/metadata-cert.pem
12
+ fingerprint:
13
+ refeds_info: https://refeds.terena.org/index.php/FederationAAF
14
+ homepage: http://www.aaf.edu.au/
15
+ languages:
16
+ - en
17
+ support_email: enquiries@aaf.edu.au
18
+ description: The Australian Access Federation.
19
+ trustiness:
20
+ groups: []
21
+
22
+ tags: []
23
+
24
+ http://ukfederation.org.uk:
25
+ uri: http://ukfederation.org.uk
26
+ name: UK Access Management Federation For Education And Research
27
+ refresh: 0
28
+ display_name: UK Access Management Federation
29
+ type: federation
30
+ countries:
31
+ - gb
32
+ metadata: http://metadata.ukfederation.org.uk/ukfederation-metadata.xml
33
+ certificate: http://metadata.ukfederation.org.uk/ukfederation.pem
34
+ fingerprint: 94:7F:5E:8C:4E:F5:E1:69:E7:DF:68:1E:48:AA:98:44:A5:41:56:EE
35
+ refeds_info: https://refeds.terena.org/index.php/FederationUkfed
36
+ homepage: http://www.ukfederation.org.uk
37
+ languages:
38
+ - en-gb
39
+ - en
40
+ support_email: " service@ukfederation.org.uk"
41
+ description: A single solution for accessing online resources and services
42
+ trustiness:
43
+ groups: []
44
+
45
+ tags: []
46
+
File without changes
File without changes
File without changes
@@ -0,0 +1,234 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
2
+
3
+ describe Shibkit::MetaMeta::Source, "additional information for applications" do
4
+
5
+ ##
6
+ before(:each) do
7
+ @source = Shibkit::MetaMeta::Source.new
8
+ end
9
+
10
+ subject { @source }
11
+
12
+ it { should respond_to :groups= }
13
+ it { should respond_to :groups }
14
+ it { should respond_to :tags= }
15
+ it { should respond_to :tags }
16
+ it { should respond_to :trustiness= }
17
+ it { should respond_to :trustiness }
18
+
19
+ it "should accept strings as group names" do
20
+
21
+ @source.groups = ['one', 'two', 'three']
22
+ @source.groups.should =~ [:one, :two, :three]
23
+
24
+ end
25
+
26
+ it "should accept symbols for group names" do
27
+
28
+ @source.groups = [:one, :two, :three]
29
+ @source.groups.should =~ [:one, :two, :three]
30
+
31
+ end
32
+
33
+ it "should accept a single group as a string" do
34
+
35
+ @source.groups = :one
36
+ @source.groups.should =~ [:one]
37
+
38
+ end
39
+
40
+ it "should accept an array of groups" do
41
+
42
+ @source.groups = [:one, :two]
43
+ @source.groups.should =~ [:one, :two]
44
+
45
+ end
46
+
47
+ it "should replace previously assigned groups with assigned groups" do
48
+
49
+ @source.groups = :elephant
50
+ @source.groups.should =~ [:elephant]
51
+
52
+ @source.groups = [:one, :two]
53
+ @source.groups.should =~ [:one, :two]
54
+
55
+ end
56
+
57
+ it "should always return an array of groups" do
58
+
59
+ @source.groups = :elephant
60
+ @source.groups.should be_kind_of Array
61
+
62
+ @source.groups = [:one, :two]
63
+ @source.groups.should be_kind_of Array
64
+
65
+ end
66
+
67
+ it "should always return group names as downcased symbols" do
68
+
69
+ @source.groups = :elephant
70
+ @source.groups.should =~ [:elephant]
71
+
72
+ @source.groups = :MONKEY
73
+ @source.groups.should =~ [:monkey]
74
+
75
+ @source.groups = 'hippo'
76
+ @source.groups.should =~ [:hippo]
77
+
78
+ @source.groups = 'BEAR'
79
+ @source.groups.should =~ [:bear]
80
+
81
+ end
82
+
83
+ it "should accept strings as tag names" do
84
+
85
+ @source.tags = ['one', 'two', 'three']
86
+ @source.tags.should =~ [:one, :two, :three]
87
+
88
+ end
89
+
90
+ it "should accept symbols for tag names" do
91
+
92
+ @source.tags = [:one, :two, :three]
93
+ @source.tags.should =~ [:one, :two, :three]
94
+
95
+ end
96
+
97
+ it "should accept a single tag as a string" do
98
+
99
+ @source.tags = :one
100
+ @source.tags.should =~ [:one]
101
+
102
+ end
103
+
104
+ it "should accept an array of tags" do
105
+
106
+ @source.tags = [:one, :two]
107
+ @source.tags.should =~ [:one, :two]
108
+
109
+ end
110
+
111
+ it "should replace previously assigned tags with assigned tags" do
112
+
113
+ @source.tags = :elephant
114
+ @source.tags.should =~ [:elephant]
115
+
116
+ @source.tags = [:one, :two]
117
+ @source.tags.should =~ [:one, :two]
118
+
119
+ end
120
+
121
+ it "should always return an array of tags" do
122
+
123
+ @source.tags = :elephant
124
+ @source.tags.should be_kind_of Array
125
+
126
+ @source.tags = [:one, :two]
127
+ @source.tags.should be_kind_of Array
128
+
129
+ end
130
+
131
+ it "should always return tag names as downcased symbols" do
132
+
133
+ @source.tags = :elephant
134
+ @source.tags.should =~ [:elephant]
135
+
136
+ @source.tags = :MONKEY
137
+ @source.tags.should =~ [:monkey]
138
+
139
+ @source.tags = 'hippo'
140
+ @source.tags.should =~ [:hippo]
141
+
142
+ @source.tags = 'BEAR'
143
+ @source.tags.should =~ [:bear]
144
+
145
+ end
146
+
147
+ it "should accept floating point decimal fractions as trustiness" do
148
+
149
+ dfs = [0.1,0.0,0.4,0.9,1.0].each do |df|
150
+
151
+ @source.trustiness = df
152
+ @source.trustiness.should == df
153
+
154
+ end
155
+
156
+ end
157
+
158
+ it "should accept strings starting with numbers followed by a percentage" do
159
+
160
+ @source.trustiness = "50%"
161
+ @source.trustiness.should == 0.5
162
+
163
+ @source.trustiness = "70 %"
164
+ @source.trustiness.should == 0.7
165
+
166
+ end
167
+
168
+ it "should accept strings with numbers as trustiness and trim before converting to floating point" do
169
+
170
+ @source.trustiness = "5 things"
171
+ @source.trustiness.should == 1.0
172
+
173
+ @source.trustiness = "80"
174
+ @source.trustiness.should == 1.0
175
+
176
+ end
177
+
178
+ it "should store numbers greater than 1 as 1.0" do
179
+
180
+ @source.trustiness = 100
181
+ @source.trustiness.should == 1.0
182
+
183
+ @source.trustiness = 5
184
+ @source.trustiness.should == 1.0
185
+
186
+
187
+ end
188
+
189
+ it "should store numbers less than 0 as 0.0" do
190
+
191
+ @source.trustiness = -100
192
+ @source.trustiness.should == 0.0
193
+
194
+ @source.trustiness = -5
195
+ @source.trustiness.should == 0.0
196
+
197
+ end
198
+
199
+ it "should only return trustiness of between 0 and 1, as a floating point number/decimal fraction" do
200
+
201
+ @source.trustiness = 100
202
+ @source.trustiness.should be_kind_of Float
203
+
204
+ @source.trustiness = 0.5
205
+ @source.trustiness.should be_kind_of Float
206
+
207
+ @source.trustiness = -5
208
+ @source.trustiness.should be_kind_of Float
209
+
210
+ end
211
+
212
+ context "by default" do
213
+
214
+ it "should return 1.0 as the default trustiness" do
215
+
216
+ @source.trustiness.should == 1.0
217
+
218
+ end
219
+
220
+ it "should return an empty array as groups" do
221
+
222
+ @source.groups.should =~ []
223
+
224
+ end
225
+
226
+ it "should return an empty array as tags" do
227
+
228
+ @source.tags.should =~ []
229
+
230
+ end
231
+
232
+ end
233
+
234
+ end