institutions 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ Gemfile.lock
data/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.3
5
+ - jruby-18mode # JRuby in 1.8 mode
6
+ - jruby-19mode # JRuby in 1.9 mode
7
+ - rbx-18mode
8
+ - rbx-19mode
9
+
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2012 Scot Dalton
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,23 @@
1
+ = Institutions
2
+ {<img src="https://secure.travis-ci.org/scotdalton/institutions.png?branch=master" alt="Build Status" />}[https://travis-ci.org/scotdalton/institutions]
3
+ {<img src="https://gemnasium.com/scotdalton/institutions.png" alt="Dependency Status" />}[https://gemnasium.com/scotdalton/institutions]
4
+ {<img src="https://codeclimate.com/badge.png" alt="Code Climage" />}[https://codeclimate.com/github/scotdalton/institutions]
5
+
6
+ This gem provides a mechanism for creating Institutions from a hash of Institutional data elements.
7
+
8
+ == Institutions Basics
9
+ === Getting institutions
10
+ Institutions reads in YAML files and creates a Hash of Institution instances
11
+ with the Institution#code as the Hash key.
12
+ require 'institutions'
13
+ institutions = Institutions.institutions
14
+
15
+ === Setting load paths
16
+ Specify additional directories to search for institutional YAMLs.
17
+ require 'institutions'
18
+ Institutions.loadpaths << File.join("path", "to", "new", "load", "directory")
19
+
20
+ === Setting file name
21
+ Specify additional YAML file names that contain institutions.
22
+ require 'institutions'
23
+ Institutions.filenames << "my_institution.yml"
data/Rakefile ADDED
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ require 'rake/testtask'
16
+ require 'git'
17
+ require 'fileutils'
18
+
19
+ RDoc::Task.new(:rdoc) do |rdoc|
20
+ rdoc.rdoc_dir = 'rdoc'
21
+ rdoc.title = 'Institutions'
22
+ rdoc.options << '--line-numbers'
23
+ rdoc.main = "README.rdoc"
24
+ rdoc.rdoc_files.include('README.rdoc')
25
+ rdoc.rdoc_files.include('lib/**/*.rb')
26
+ end
27
+
28
+ Bundler::GemHelper.install_tasks
29
+
30
+ require 'rake/testtask'
31
+ Rake::TestTask.new(:test) do |t|
32
+ t.libs << 'lib'
33
+ t.libs << 'test'
34
+ t.pattern = 'test/**/*_test.rb'
35
+ t.verbose = false
36
+ end
37
+
38
+ desc "Push latest RDocs to gh-pages."
39
+ task :ghpages => [:rerdoc] do
40
+ g = Git.open(Dir.pwd)
41
+ g.checkout(g.branch('gh-pages'))
42
+ g.pull("origin", "gh-pages")
43
+ FileUtils.rm_r("rdocs", :force => true)
44
+ Dir.mkdir("rdocs")
45
+ FileUtils.mv(Dir.glob("html/*"), "./rdocs", :force => true)
46
+ FileUtils.rm_r("html", :force => true)
47
+ g.add(".")
48
+ g.commit_all("Update gh-pages.")
49
+ g.push("origin", "gh-pages")
50
+ g.checkout(g.branch('master'))
51
+ end
52
+
53
+ task :default => :test
@@ -0,0 +1,24 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+
3
+ # Maintain your gem's version:
4
+ require "institutions/version"
5
+
6
+ # Describe your gem and declare its dependencies:
7
+ Gem::Specification.new do |s|
8
+ s.name = "institutions"
9
+ s.version = Institutions::VERSION
10
+ s.authors = ["Scot Dalton"]
11
+ s.email = ["scotdalton@gmail.com"]
12
+ s.homepage = "https://github.com/scotdalton/institutions"
13
+ s.summary = "Abstract mechanism for setting up Institutions (whatever that means)."
14
+ s.description = "Abstract mechanism for setting up Institutions with arbitrary data elements."
15
+
16
+ s.files = `git ls-files`.split($\)
17
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
18
+
19
+ s.add_dependency "require_all", "~> 1.2.1"
20
+ s.add_dependency "ipaddr_range_set", "~> 0.9.1"
21
+ s.add_dependency "git", "~> 1.2.5"
22
+ s.add_dependency "rdoc"
23
+ s.add_dependency "rake"
24
+ end
@@ -0,0 +1,6 @@
1
+ module Institutions#:no_doc
2
+ module Auth#:no_doc
3
+ # Auth attributes
4
+ attr_reader :auth
5
+ end
6
+ end
@@ -0,0 +1,52 @@
1
+ module Institutions#:no_doc
2
+ module Core#:no_doc
3
+ # Required attributes
4
+ attr_reader :code, :name
5
+ alias :display_name :name
6
+
7
+ # Optional core attributes
8
+ attr_reader :default
9
+ alias :default? :default
10
+
11
+ #
12
+ # Creates a new Institution object from the given code, name and hash.
13
+ #
14
+ # The optional +hash+, if given, will generate additional attributes and values.
15
+ #
16
+ #
17
+ # For example:
18
+ #
19
+ # require 'institutions'
20
+ # hash = { "attribute1" => "My first attribute.", :array_attribute => [1, 2] }
21
+ # institution = Institutions::Institution.new("my_inst", "My Institution", hash)
22
+ #
23
+ # p institution # -> <Institutions::Institution @code=:my_inst @name="My Institution" @attribute1=My first attribute." @array_attribute=[1, 2] @default=false>
24
+ #
25
+ def initialize(code, name, h={})
26
+ # Set the required attributes
27
+ set_required_attributes code, name
28
+ # Merge in the optional hash attribute
29
+ merge h unless h.nil?
30
+ # If the institution is named default, take that as an
31
+ # indication that it's the default institution
32
+ @default = true if (name.eql? "default" or name.eql? "DEFAULT")
33
+ # If default was never set, explicitly set default as false.
34
+ @default = false if default.nil?
35
+ end
36
+
37
+ #
38
+ # Sets the required attributes.
39
+ # Raises an ArgumentError specifying the missing arguments if they are nil.
40
+ #
41
+ def set_required_attributes(code, name)
42
+ missing_arguments = []
43
+ missing_arguments << :code if code.nil?
44
+ missing_arguments << :name if name.nil?
45
+ raise ArgumentError.new("Cannot create the Institution based on the given arguments (:code => #{code.inspect}, :name => #{name.inspect}).\n"+
46
+ "The following arguments cannot be nil: #{missing_arguments.inspect}") unless missing_arguments.empty?
47
+ # Set the instance variables
48
+ @code, @name = code.to_sym, name
49
+ end
50
+ private :set_required_attributes
51
+ end
52
+ end
@@ -0,0 +1,39 @@
1
+ module Institutions#:no_doc
2
+ module IpAddresses#:no_doc
3
+ require 'ipaddr_range_set'
4
+ attr_reader :ip_addresses
5
+
6
+ def ip_addresses=(args)
7
+ args.collect! do |arg|
8
+ arg.match(/-/) ? convert_to_range(arg) : arg
9
+ end
10
+ @ip_addresses = IPAddrRangeSet.new(*args)
11
+ end
12
+ protected :ip_addresses=
13
+
14
+ def ip_addresses_add(arg1, arg2)
15
+ arg1.add(arg2)
16
+ end
17
+ protected :ip_addresses_add
18
+
19
+ def convert_to_range(s)
20
+ s.split("-")[0]...s.split("-")[1]
21
+ end
22
+ private :convert_to_range
23
+
24
+ #
25
+ # Returns a +boolean+ indicating whether the candidate IP
26
+ # address is in the Institution's IP range.
27
+ # Example:
28
+ #
29
+ # require 'institutions'
30
+ # institution = Institution.new("my_inst", "My Institution", "ip_addresses" => ["127.0.0.1", 127.0.0.2"])
31
+ # data.includes_ip?("127.0.0.1") # => true
32
+ # data.includes_ip?("127.0.0.3") # => false
33
+ #
34
+ def includes_ip?(candidate)
35
+ return false if ip_addresses.nil?
36
+ return ip_addresses.include? candidate
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,85 @@
1
+ module Institutions#:no_doc
2
+ module Merge#:no_doc
3
+ #
4
+ # Merges the given arguments into the Institution.
5
+ # Internally uses a "recursive merge" algorithm to
6
+ # preserve as much of the original Institution as possible.
7
+ # Assumes the argument has a to_hash method
8
+ # Example.
9
+ #
10
+ # require 'institutions'
11
+ # hash1 = { "string_attribute" => "first string",
12
+ # :nested_hash_attribute => {
13
+ # :h1 => {:h1_2 => "first12"},
14
+ # :h2 => {:h2_1 => "first21", :h2_2 => "first22"}},
15
+ # :array_attribute => [1, 2, 4] }
16
+ # institution1 = Institutions::Institution.new("first_inst", "First Institution", hash1)
17
+ # p institution1 # -> #<Institutions::Institution @code=:first_inst, @name="First Institution", @array_attribute=[1, 2, 4], @default=false, @string_attribute="first string", @nested_hash_attribute={:h1=>{:h1_2=>"first12"}, :h2=>{:h2_1=>"first21", :h2_2=>"first22"}}>
18
+ # hash2 = { "string_attribute" => "second string",
19
+ # :nested_hash_attribute => {:h1 => {
20
+ # :h1_2 => "second12"},
21
+ # :h2 => {:h2_2 => "second22"}},
22
+ # :array_attribute => [1, 2, 3], :default => true }
23
+ # institution2 = Institutions::Institution.new("second_inst", "Second Institution", hash2)
24
+ # p institution2 # -> <Institutions::Institution @code=:second_inst, @name="Second Institution", @array_attribute=[1, 2, 3], @default=true, @string_attribute="second string", @nested_hash_attribute={:h1=>{:h1_2=>"second12"}, :h2=>{:h2_2=>"second22"}}>
25
+ # institution1.merge(institution2)
26
+ # p institution1 # -> #<Institutions::Institution @code=:first_inst, @name="First Institution", @array_attribute=[1, 2, 4, 3], @default=true, @string_attribute="second string", @nested_hash_attribute={:h1=>{:h1_2=>"second12"}, :h2=>{:h2_1=>"first21", :h2_2=>"second22"}}>
27
+ #
28
+ def merge(arg={})
29
+ arg.to_hash.each do |key, value|
30
+ next unless valid_instance_variable? key
31
+ instance_variable = instance_variablize(key)
32
+ if instance_variable_defined? instance_variable
33
+ instance_variable_set(instance_variable, deep_merge(instance_variable_get(instance_variable), value, key))
34
+ else
35
+ writer_method = "#{key}=".to_sym
36
+ if respond_to? writer_method
37
+ send writer_method, value
38
+ else
39
+ next if [:code, :name].include? key.to_sym
40
+ # Set each hash value as an instance variable, but don't overwrite code or name values.
41
+ instance_variable_set(instance_variable, value)
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ #
48
+ # Recursively merges Hash (or any Object that can be converted to a Hash),
49
+ # Array and attributes that have implemented an :attribute_add method.
50
+ #
51
+ def deep_merge(arg1, arg2, key=nil)
52
+ # Attempt deep merge if the two arguments are
53
+ # instances of the same class.
54
+ if arg1.class == arg2.class
55
+ # Preserve arg1's :code and :name.
56
+ if (not key.nil?) and [:code, :name].include? key.to_sym
57
+ return arg1
58
+ # Recursively call deep merge for Hash objects.
59
+ elsif arg1.respond_to? :to_hash
60
+ r = {}
61
+ return arg1.to_hash.merge(arg2.to_hash) do |key, oldval, newval|
62
+ r[key] = deep_merge(oldval, newval, key)
63
+ end
64
+ # Concatenate Arrays and return uniq elements.
65
+ elsif arg1.instance_of? Array
66
+ return arg1.concat(arg2).uniq
67
+ # If Institutions responds to the :key_add method,
68
+ # go ahead and use that to add the Objects together.
69
+ elsif respond_to? "#{key}_add".to_sym
70
+ return send "#{key}_add".to_sym, arg1, arg2
71
+ end
72
+ end
73
+ # NOTE: Commenting this out since I'm not sure this is desirable functionality.
74
+ # If the two args aren't the same class, but arg1 is
75
+ # Array, append arg2 to arg1.
76
+ # if arg1.instance_of? Array
77
+ # return arg1.dup<<arg2
78
+ # end
79
+ # We tried.
80
+ # If all else fails just replace arg1 with arg2.
81
+ return arg2
82
+ end
83
+ protected :deep_merge
84
+ end
85
+ end
@@ -0,0 +1,6 @@
1
+ module Institutions#:no_doc
2
+ module Mvc#:no_doc
3
+ # MVC pattern attributes
4
+ attr_reader :models, :views, :controllers
5
+ end
6
+ end
@@ -0,0 +1,15 @@
1
+ module Institutions#:no_doc
2
+ module Parents#:no_doc
3
+ # Parents attributes
4
+ attr_reader :parent_code
5
+
6
+ #
7
+ # Merges the given parent into the Institution.
8
+ # Assumes the parent has a to_hash method
9
+ #
10
+ def merge_parent(parent={})
11
+ # Use the parent as the base and merge in the current institution
12
+ merge(deep_merge(parent.to_hash, to_hash))
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ module Institutions#:no_doc
2
+ module Services#:no_doc
3
+ # Services attributes
4
+ attr_reader :services
5
+ end
6
+ end
@@ -0,0 +1,65 @@
1
+ module Institutions#:no_doc
2
+ module Util#:no_doc
3
+ #
4
+ # Converts the Institution to a hash with keys representing
5
+ # each Institutional attribute (as symbols) and their corresponding values.
6
+ # Example:
7
+ #
8
+ # require 'institutions'
9
+ # institution = Institution.new("my_inst", "My Institution")
10
+ # data.to_hash # => {:code => "my_inst", :name => "My Institution", :default => false }
11
+ #
12
+ def to_hash
13
+ hash = {}
14
+ instance_variables.each do |inst_var|
15
+ hash[hash_keyize(inst_var)] = instance_variable_get(inst_var)
16
+ end
17
+ hash
18
+ end
19
+
20
+ #
21
+ # Dynamically sets attr_readers for elements
22
+ #
23
+ def method_missing(method, *args, &block)
24
+ instance_variable = instance_variablize(method)
25
+ if instance_variable_defined? instance_variable
26
+ self.class.send :attr_reader, method.to_sym
27
+ instance_variable_get instance_variable
28
+ else
29
+ super
30
+ end
31
+ end
32
+
33
+ #
34
+ # Tells users that we respond to missing methods
35
+ # if they are instance variables.
36
+ #
37
+ def respond_to_missing?(method, include_private = false)
38
+ # Short circuit if we have invalid instance variable name,
39
+ # otherwise we get an exception that we don't need.
40
+ return super unless valid_instance_variable? method
41
+ if instance_variable_defined? instance_variablize(method)
42
+ true
43
+ else
44
+ super
45
+ end
46
+ end
47
+
48
+ def valid_instance_variable?(id)
49
+ id.to_sym.id2name.match(/[\@\=\?+]/).nil?
50
+ end
51
+
52
+ # Convert s to an instance variable
53
+ def instance_variablize(s)
54
+ "@#{s.to_sym.id2name.downcase}".to_sym
55
+ end
56
+ private :instance_variablize
57
+
58
+ # Convert s to a hash key
59
+ def hash_keyize(s)
60
+ # Remove beginning '@' and convert to symbol for hash keys.
61
+ s.to_s.sub(/^@/,'').to_sym
62
+ end
63
+ private :instance_variablize
64
+ end
65
+ end
@@ -0,0 +1,29 @@
1
+ module Institutions#:no_doc
2
+ #
3
+ # = institution.rb: Institution
4
+ #
5
+ # Author:: Scot Dalton
6
+ #
7
+ # An Institution represents an administrative unit and its unique configuration data.
8
+ # Institutions are necessarily abstract and fairly flexible to accomodate the myriad
9
+ # needs of applications. An institution only requires a code and name to be instantiated.
10
+ #
11
+ # == Examples:
12
+ #
13
+ # require 'institutions'
14
+ # hash = { "attribute1" => "My first attribute.", :array_attribute => [1, 2] }
15
+ # institution = Institutions::Institution.new("my_inst", "My Institution", hash)
16
+ #
17
+ # p institution # -> #<Institutions::Institution @code=:my_inst, @name="My Institution", @attribute1="My first attribute.", @array_attribute=[1, 2], @default=false>
18
+ #
19
+ class Institution
20
+ include Core
21
+ include Auth
22
+ include IpAddresses
23
+ include Merge
24
+ include Mvc
25
+ include Parents
26
+ include Services
27
+ include Util
28
+ end
29
+ end
@@ -0,0 +1,3 @@
1
+ module Institutions
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,99 @@
1
+ # Order of paths, then order of files dictates overrides.
2
+
3
+ module Institutions
4
+ require 'require_all'
5
+ require_rel 'institutions'
6
+
7
+ # Default paths/files for the module.
8
+ DEFAULT_LOADPATHS = [
9
+ (defined?(Rails) and Rails.root) ?
10
+ "#{Rails.root}/config" : "./config" ]
11
+ DEFAULT_FILENAMES = ["institutions.yml"]
12
+
13
+ def self.loadpaths
14
+ @loadpaths ||= DEFAULT_LOADPATHS.dup
15
+ end
16
+
17
+ def self.filenames
18
+ @filenames ||= DEFAULT_FILENAMES.dup
19
+ end
20
+
21
+ # Intended for internal use only.
22
+ def self.loadfiles
23
+ loadfiles = []
24
+ if loadfiles.empty?
25
+ loadpaths.each do |loadpath|
26
+ filenames.each do |filename|
27
+ loadfile = File.join(loadpath, filename)
28
+ loadfiles<< loadfile if File.exists?(loadfile)
29
+ end
30
+ end
31
+ end
32
+ loadfiles
33
+ end
34
+
35
+ def self.reload
36
+ @institutions = nil
37
+ institutions
38
+ end
39
+
40
+ # Returns an Array of Institutions
41
+ def self.defaults
42
+ return institutions.values.find_all { |institution| institution.default? }
43
+ end
44
+
45
+ # Returns an Array of Institutions that contain the given IP.
46
+ def self.with_ip(ip)
47
+ return institutions.values.find_all { |institution| institution.includes_ip?(ip) }
48
+ end
49
+
50
+ #
51
+ # Returns a Hash of Institution instances with the Institution#code as the Hash key.
52
+ # Load file order can be change by the calling application by using Array methods.
53
+ # The default load file in Rails apps is
54
+ # "#{Rails.root}/config/institutions.yml"
55
+ # and if not Rails
56
+ # "./config/institutions.yml"
57
+ # To manipulate load path order and/or add directories to the path
58
+ # Institutions.loadpaths << File.join("path", "to", "new", "load", "directory")
59
+ # To manipulate file name order and/or add file names
60
+ # Institutions.filenames << "newfile.yml"
61
+ #
62
+ def self.institutions
63
+ unless @institutions
64
+ raise NameError.new("No load path was specified.") if loadpaths.nil?
65
+ raise NameError.new("No files named #{filenames} exist to load in the configured load paths, #{loadpaths}. ") if filenames.empty?
66
+ @institutions = {}
67
+ loadfiles.each do |loadfile|
68
+ # Loop through institutions in the yaml
69
+ YAML.load_file(loadfile).each_pair do |code, elements|
70
+ code = code.to_sym
71
+ # Merge the new elements or add a new Institution
72
+ @institutions.has_key?(code) ?
73
+ @institutions[code].merge(elements) :
74
+ @institutions[code] =
75
+ Institution.new(code, elements["name"] ? elements["name"] : code, elements)
76
+ end
77
+ end
78
+ # Handle inheritance for institutions
79
+ merge_parents
80
+ end
81
+ @institutions
82
+ end
83
+
84
+ def self.empty?
85
+ institutions.empty?
86
+ end
87
+
88
+ def self.institutions?
89
+ (not empty?)
90
+ end
91
+
92
+ # Handle inheritance for institutions
93
+ def self.merge_parents
94
+ @institutions.each do |key, institution|
95
+ parent_code = institution.parent_code
96
+ institution.merge_parent(@institutions[parent_code]) if parent_code
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,89 @@
1
+ # Configure what service plugins are used by Umlaut. This skeleton file
2
+ # has been generated into your app to help you get started.
3
+ #
4
+ # If a service has "disabled:true", it's currently turned off.
5
+ #
6
+ # Some services require local api key or connection details as config.
7
+ # Most services take other options for custom configuration too, not
8
+ # all options are neccesarily listed as examples here, see source
9
+ # or source-generated docs for more info.
10
+ default:
11
+ name: NYU Libraries
12
+ auth:
13
+ link_code: NYU
14
+ views:
15
+ dir: nyu
16
+ sfx_base_url: http://sfx.library.nyu.edu/sfxlcl41?
17
+ NYU:
18
+ parent_institution: default
19
+ ip_addresses:
20
+ - 128.122.0.0-128.122.149.239
21
+ - 172.26.*.*
22
+ - 172.27.*.*
23
+ - 172.22.88.*
24
+ - 216.165.*.*
25
+ - 128.238.*.*
26
+ NYUAD:
27
+ name: NYU Abu Dhabi Library
28
+ parent_institution: NYU
29
+ views:
30
+ dir: nyuad
31
+ sfx_base_url: http://sfx.library.nyu.edu/sfxlcl41?
32
+ ip_addresses:
33
+ - 192.168.224.0/23
34
+ - 192.168.226.0/24
35
+ - 192.168.227.0/25
36
+ - 192.168.227.128/26
37
+ - 172.25.79.0/26
38
+ - 172.26.240.0/22
39
+ - 172.30.60.0/24
40
+ - 172.27.240.0/22
41
+ - 172.29.252.0/24
42
+ - 172.29.120.0/23
43
+ - 192.168.192.0/23
44
+ - 192.168.195.0/25
45
+ - 172.25.76.0/23
46
+ - 172.26.232.0/22
47
+ - 172.30.58.0/24
48
+ - 172.27.232.0/22
49
+ - 172.29.250.0/24
50
+ - 172.29.116.0/23
51
+ - 192.168.194.0/24
52
+ - 172.25.78.0/26
53
+ - 172.26.236.0/22
54
+ - 172.30.59.0/24
55
+ - 172.27.236.0/22
56
+ - 172.29.251.0/24
57
+ - 172.29.118.0/23
58
+ CU:
59
+ name: The Cooper Union Library
60
+ login:
61
+ link_code: CU
62
+ views:
63
+ dir: cu
64
+ sfx_base_url: http://sfx.library.nyu.edu/sfxcooper?
65
+ controllers:
66
+ searcher: SearchMethods::Sfx4Solr::CU
67
+ ip_addresses:
68
+ - 199.98.16.0-199.98.31.255
69
+ NS:
70
+ name: New School Libraries
71
+ login:
72
+ link_code: NS
73
+ views:
74
+ dir: ns
75
+ sfx_base_url: http://sfx4.library.newschool.edu/ns?
76
+ controllers:
77
+ searcher: SearchMethods::Sfx4Solr::NS
78
+ ip_addresses:
79
+ - 149.31.0.0-149.31.255.255
80
+ - 69.64.210.46
81
+ - 69.64.210.50
82
+ - 69.64.210.42
83
+ - 69.193.198.126
84
+ NYSID:
85
+ login:
86
+ link_code: NYSID
87
+ name: New York School of Interior Design Library
88
+ ip_addresses:
89
+ - 128.122.0.1
@@ -0,0 +1,4 @@
1
+ NS:
2
+ views:
3
+ tag: ns tag
4
+
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class AuthTest < Test::Unit::TestCase
4
+ def test_truth
5
+ assert true
6
+ end
7
+ end
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+
3
+ class CoreTest < Test::Unit::TestCase
4
+ def test_new
5
+ hash = { "first" => "My first attribute.", :array_attribute => [1, 2] }
6
+ assert_nothing_raised {
7
+ institution = Institutions::Institution.new("my_inst", "My Institution", hash)
8
+ }
9
+ end
10
+
11
+ def test_new_no_hash
12
+ assert_nothing_raised {
13
+ institution = Institutions::Institution.new("my_inst", "My Institution")
14
+ }
15
+ end
16
+
17
+ def test_new_nil_hash
18
+ assert_nothing_raised {
19
+ institution = Institutions::Institution.new("my_inst", "My Institution", nil)
20
+ }
21
+ end
22
+
23
+ def test_new_nil_code
24
+ assert_raise(ArgumentError) {
25
+ institution = Institutions::Institution.new(nil, "My Institution")
26
+ }
27
+ end
28
+
29
+ def test_new_nil_name
30
+ assert_raise(ArgumentError) {
31
+ institution = Institutions::Institution.new("my_inst", nil)
32
+ }
33
+ end
34
+ end
@@ -0,0 +1,21 @@
1
+ require 'test_helper'
2
+
3
+ class IpAddressesTest < Test::Unit::TestCase
4
+ def setup
5
+ @hash = { "ip_addresses" => ["134.122.0.0-134.122.149.239",
6
+ "134.22.88.*", "134.165.*.*", "134.238.*.*", "134.168.224.0/23"] }
7
+ end
8
+
9
+ def test_ip_addresses
10
+ assert_nothing_raised {
11
+ institution = Institutions::Institution.new("my_inst", "My Institution", @hash)
12
+ }
13
+ end
14
+
15
+ def test_include_ip?
16
+ institution = Institutions::Institution.new("my_inst", "My Institution", @hash)
17
+ assert institution.includes_ip? "134.165.4.1"
18
+ assert institution.includes_ip? "134.168.224.255"
19
+ assert institution.includes_ip? "134.122.21.12"
20
+ end
21
+ end
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+
3
+ class MergeTest < Test::Unit::TestCase
4
+ def test_merge
5
+ hash1 = { "string_attribute" => "first string", :nested_hash_attribute => {:h1 => {:h1_2 => "first12"},
6
+ :h2 => {:h2_1 => "first21", :h2_2 => "first22"}}, :array_attribute => [1, 2, 4] }
7
+ institution1 = Institutions::Institution.new("first_inst", "First Institution", hash1)
8
+ assert_equal(:first_inst, institution1.code)
9
+ assert_equal("First Institution", institution1.name)
10
+ assert_equal({:h1 => {:h1_2 => "first12"}, :h2 => {:h2_1 => "first21", :h2_2 => "first22"}},
11
+ institution1.nested_hash_attribute)
12
+ assert_equal([1,2,4], institution1.array_attribute)
13
+ assert_equal("first string", institution1.string_attribute)
14
+ assert_equal(false, institution1.default)
15
+ hash2 = { "string_attribute" => "second string", :nested_hash_attribute => {:h1 => {:h1_2 => "second12"},
16
+ :h2 => {:h2_2 => "second22"}}, :array_attribute => [1, 2, 3], :default => true }
17
+ institution2 = Institutions::Institution.new("second_inst", "Second Institution", hash2)
18
+ assert_equal(:second_inst, institution2.code)
19
+ assert_equal("Second Institution", institution2.name)
20
+ assert_equal({:h1 => {:h1_2 => "second12"}, :h2 => {:h2_2 => "second22"}},
21
+ institution2.nested_hash_attribute)
22
+ assert_equal([1,2,3], institution2.array_attribute)
23
+ assert_equal("second string", institution2.string_attribute)
24
+ assert_equal(true, institution2.default)
25
+ institution1.merge(institution2)
26
+ assert_equal(:first_inst, institution1.code)
27
+ assert_equal("First Institution", institution1.name)
28
+ assert_equal({:h1 => {:h1_2 => "second12"}, :h2 => {:h2_1 => "first21", :h2_2 => "second22"}},
29
+ institution1.nested_hash_attribute)
30
+ assert_equal([1,2,3,4], institution1.array_attribute.sort)
31
+ assert_equal("second string", institution1.string_attribute)
32
+ assert_equal(true, institution1.default)
33
+ end
34
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class MvcTest < Test::Unit::TestCase
4
+ def test_truth
5
+ assert true
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ require 'test_helper'
2
+
3
+ class ParentsTest < Test::Unit::TestCase
4
+ def test_parent
5
+ hash = { "first" => "My first attribute.", :array_attribute => [1, 2] }
6
+ institution = Institutions::Institution.new("my_inst", "My Institution", hash)
7
+ parent_hash = { "first" => "parent first", :array_attribute => [1, 2, 3], :inherited_trait => "inherited" }
8
+ parent_institution = Institutions::Institution.new("parent", "My Parent Institution", parent_hash)
9
+ institution.merge_parent(parent_institution)
10
+ assert_equal("My first attribute.", institution.first)
11
+ assert_equal("inherited", institution.inherited_trait)
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class ServicesTest < Test::Unit::TestCase
4
+ def test_truth
5
+ assert true
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ require 'test_helper'
2
+
3
+ class UtilTest < Test::Unit::TestCase
4
+ def test_missing_method
5
+ hash = { "an_attr" => "My first attribute.", :some_numbers => [1, 2] }
6
+ institution = Institutions::Institution.new("my_inst", "My Institution", hash)
7
+ assert_nothing_raised {
8
+ institution.an_attr
9
+ }
10
+ assert_equal("My first attribute.", institution.an_attr)
11
+ assert_equal([1, 2], institution.some_numbers)
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class InstitutionTest < Test::Unit::TestCase
4
+ def test_class
5
+ assert_kind_of Class, Institutions::Institution
6
+ end
7
+ end
@@ -0,0 +1,36 @@
1
+ require 'test_helper'
2
+
3
+ class InstitutionsTest < Test::Unit::TestCase
4
+ def setup
5
+ # Undo any instance variable settings.
6
+ Institutions.send(:instance_variable_set, :@loadpaths, nil)
7
+ assert_equal(Institutions::DEFAULT_LOADPATHS, Institutions.loadpaths)
8
+ Institutions.send(:instance_variable_set, :@filenames, nil)
9
+ assert_equal(Institutions::DEFAULT_FILENAMES, Institutions.filenames)
10
+ Institutions.send(:instance_variable_set, :@institutions, nil)
11
+ assert_nil(Institutions.send(:instance_variable_get, :@institutions))
12
+ end
13
+
14
+ def test_module
15
+ assert_kind_of Module, Institutions
16
+ end
17
+
18
+ def test_path
19
+ assert_equal Institutions::DEFAULT_LOADPATHS, Institutions.loadpaths
20
+ Institutions.loadpaths << File.join("../config")
21
+ assert_equal Institutions::DEFAULT_LOADPATHS.concat(["../config"]), Institutions.loadpaths
22
+ end
23
+
24
+ def test_institutions
25
+ Institutions.loadpaths << File.join("test", "config")
26
+ institutions = Institutions.institutions
27
+ end
28
+
29
+ def test_institutions_overwrite
30
+ Institutions.loadpaths << File.join("test", "config")
31
+ Institutions.filenames << "overwrite.yml"
32
+ institutions = Institutions.institutions
33
+ assert_equal "ns", institutions[:NS].views["dir"]
34
+ assert_equal "ns tag", institutions[:NS].views["tag"]
35
+ end
36
+ end
@@ -0,0 +1,3 @@
1
+ $:.unshift("#{File.dirname(__FILE__)}/..")
2
+ require 'test/unit'
3
+ require File.expand_path("../../lib/institutions.rb", __FILE__)
metadata ADDED
@@ -0,0 +1,175 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: institutions
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Scot Dalton
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: require_all
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.2.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.2.1
30
+ - !ruby/object:Gem::Dependency
31
+ name: ipaddr_range_set
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.9.1
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.9.1
46
+ - !ruby/object:Gem::Dependency
47
+ name: git
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 1.2.5
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 1.2.5
62
+ - !ruby/object:Gem::Dependency
63
+ name: rdoc
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rake
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ description: Abstract mechanism for setting up Institutions with arbitrary data elements.
95
+ email:
96
+ - scotdalton@gmail.com
97
+ executables: []
98
+ extensions: []
99
+ extra_rdoc_files: []
100
+ files:
101
+ - .gitignore
102
+ - .travis.yml
103
+ - Gemfile
104
+ - MIT-LICENSE
105
+ - README.rdoc
106
+ - Rakefile
107
+ - institutions.gemspec
108
+ - lib/institutions.rb
109
+ - lib/institutions/institution.rb
110
+ - lib/institutions/institution/auth.rb
111
+ - lib/institutions/institution/core.rb
112
+ - lib/institutions/institution/ip_addresses.rb
113
+ - lib/institutions/institution/merge.rb
114
+ - lib/institutions/institution/mvc.rb
115
+ - lib/institutions/institution/parents.rb
116
+ - lib/institutions/institution/services.rb
117
+ - lib/institutions/institution/util.rb
118
+ - lib/institutions/version.rb
119
+ - test/config/institutions.yml
120
+ - test/config/overwrite.yml
121
+ - test/institution/auth_test.rb
122
+ - test/institution/core_test.rb
123
+ - test/institution/ip_addresses_test.rb
124
+ - test/institution/merge_test.rb
125
+ - test/institution/mvc_test.rb
126
+ - test/institution/parents_test.rb
127
+ - test/institution/services_test.rb
128
+ - test/institution/util_test.rb
129
+ - test/institution_test.rb
130
+ - test/institutions_test.rb
131
+ - test/test_helper.rb
132
+ homepage: https://github.com/scotdalton/institutions
133
+ licenses: []
134
+ post_install_message:
135
+ rdoc_options: []
136
+ require_paths:
137
+ - lib
138
+ required_ruby_version: !ruby/object:Gem::Requirement
139
+ none: false
140
+ requirements:
141
+ - - ! '>='
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ segments:
145
+ - 0
146
+ hash: -78613404009586632
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
148
+ none: false
149
+ requirements:
150
+ - - ! '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ segments:
154
+ - 0
155
+ hash: -78613404009586632
156
+ requirements: []
157
+ rubyforge_project:
158
+ rubygems_version: 1.8.24
159
+ signing_key:
160
+ specification_version: 3
161
+ summary: Abstract mechanism for setting up Institutions (whatever that means).
162
+ test_files:
163
+ - test/config/institutions.yml
164
+ - test/config/overwrite.yml
165
+ - test/institution/auth_test.rb
166
+ - test/institution/core_test.rb
167
+ - test/institution/ip_addresses_test.rb
168
+ - test/institution/merge_test.rb
169
+ - test/institution/mvc_test.rb
170
+ - test/institution/parents_test.rb
171
+ - test/institution/services_test.rb
172
+ - test/institution/util_test.rb
173
+ - test/institution_test.rb
174
+ - test/institutions_test.rb
175
+ - test/test_helper.rb