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.
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