academic_benchmarks 0.0.3 → 0.0.4
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.
- checksums.yaml +4 -4
- data/lib/academic_benchmarks/api/standards.rb +37 -2
- data/lib/academic_benchmarks/lib/inst_vars_to_hash.rb +40 -4
- data/lib/academic_benchmarks/standards/authority.rb +3 -2
- data/lib/academic_benchmarks/standards/standards_forest.rb +21 -0
- data/lib/academic_benchmarks/standards/standards_tree.rb +10 -7
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d61a80eca5cb7536525e3359da6693d928d24d4
|
4
|
+
data.tar.gz: 254a3dc74b516c970eb2ec49fb160ef6f285ebbf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69667639168d5e6fb7c90f6fe927a0fedfe21675820432182b0f88776b453ee530fd477f6ae0b35aaa8bd85e8780c0a794e86628ba08a98619a4be5146dbcf2d
|
7
|
+
data.tar.gz: 09e2bacc1aae34f23180c0f0e313e2c49e918f61cbbe4fdc2ce01e65adf8e4b9fd262840fc9a83869fa87360e4d0b861824662cbc62520c0200340ef002c191a
|
@@ -50,15 +50,50 @@ module AcademicBenchmarks
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def authorities
|
53
|
-
raw_search(list: "authority").map
|
53
|
+
raw_search(list: "authority").map do |a|
|
54
|
+
AcademicBenchmarks::Standards::Authority.from_hash(a["data"]["authority"])
|
55
|
+
end
|
54
56
|
end
|
55
57
|
|
56
58
|
def documents
|
57
|
-
raw_search(list: "document").map
|
59
|
+
raw_search(list: "document").map do |a|
|
60
|
+
AcademicBenchmarks::Standards::Document.from_hash(a["data"]["document"])
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def authority_tree(authority_or_authority_code_guid_or_desc)
|
65
|
+
authority = if authority_or_authority_code_guid_or_desc.is_a?(Authority)
|
66
|
+
authority_or_authority_code_guid_or_desc
|
67
|
+
else
|
68
|
+
find_authority(authority_or_authority_code_guid_or_desc)
|
69
|
+
end
|
70
|
+
auth_children = search(authority: authority.code)
|
71
|
+
StandardsForest.new(auth_children).consolidate_under_root(authority)
|
58
72
|
end
|
59
73
|
|
60
74
|
private
|
61
75
|
|
76
|
+
def find_authority(authority_code_guid_or_desc)
|
77
|
+
auths = match_authority(authority_code_guid_or_desc)
|
78
|
+
if auths.empty?
|
79
|
+
raise StandardError,
|
80
|
+
"No authority code, guid, or description matched '#{authority_code_guid_or_desc}'"
|
81
|
+
elsif auths.count > 1
|
82
|
+
raise StandardError,
|
83
|
+
"Authority code, guid, or description matched more than one authority. " \
|
84
|
+
"matched '#{auths.map(&:to_json).join('; ')}'"
|
85
|
+
end
|
86
|
+
auths.first
|
87
|
+
end
|
88
|
+
|
89
|
+
def match_authority(authority_code_guid_or_desc)
|
90
|
+
authorities.select do |auth|
|
91
|
+
auth.code == authority_code_guid_or_desc ||
|
92
|
+
auth.guid == authority_code_guid_or_desc ||
|
93
|
+
auth.descr == authority_code_guid_or_desc
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
62
97
|
def raw_search(opts = {})
|
63
98
|
request_search_pages_and_concat_resources(opts.merge(auth_query_params))
|
64
99
|
end
|
@@ -1,14 +1,50 @@
|
|
1
1
|
|
2
|
+
#
|
3
|
+
# This module will allow you to properly to_s, to_h, and to_json
|
4
|
+
# on classes in which it is included.
|
5
|
+
#
|
6
|
+
# It is not intended to be general purpose, but rather should
|
7
|
+
# be used only with standards and standards-related data
|
8
|
+
# structures, which themselves are mirrors of the JSON
|
9
|
+
# definitions used by Academic Benchmarks
|
10
|
+
#
|
11
|
+
|
2
12
|
module InstVarsToHash
|
3
|
-
def to_s
|
4
|
-
to_h.to_s
|
13
|
+
def to_s(omit_parent: true)
|
14
|
+
to_h(omit_parent: omit_parent).to_s
|
5
15
|
end
|
6
16
|
|
7
|
-
def to_h
|
17
|
+
def to_h(omit_parent: true)
|
8
18
|
retval = {}
|
9
19
|
instance_variables.each do |iv|
|
10
|
-
|
20
|
+
unless omit_parent && (iv =~ /^@?parent$/i)
|
21
|
+
retval[iv.to_s.delete('@').to_sym] = elem_to_h(instance_variable_get(iv))
|
22
|
+
end
|
11
23
|
end
|
12
24
|
retval
|
13
25
|
end
|
26
|
+
|
27
|
+
def to_json(omit_parent: true)
|
28
|
+
to_h(omit_parent: omit_parent).to_json
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def expandable_classes
|
34
|
+
[ Hash, InstVarsToHash ]
|
35
|
+
end
|
36
|
+
|
37
|
+
def expandable_to_hash(klass)
|
38
|
+
expandable_classes.any?{ |k| klass == k || klass < k }
|
39
|
+
end
|
40
|
+
|
41
|
+
def elem_to_h(elem)
|
42
|
+
if elem.class == Array
|
43
|
+
elem.map { |el| elem_to_h(el) }
|
44
|
+
elsif expandable_to_hash(elem.class)
|
45
|
+
elem.to_h
|
46
|
+
else
|
47
|
+
elem
|
48
|
+
end
|
49
|
+
end
|
14
50
|
end
|
@@ -5,7 +5,7 @@ module AcademicBenchmarks
|
|
5
5
|
class Authority
|
6
6
|
include InstVarsToHash
|
7
7
|
|
8
|
-
attr_accessor :code, :guid, :description
|
8
|
+
attr_accessor :code, :guid, :description, :children
|
9
9
|
|
10
10
|
alias_method :descr, :description
|
11
11
|
|
@@ -13,10 +13,11 @@ module AcademicBenchmarks
|
|
13
13
|
self.new(code: hash["code"], guid: hash["guid"], description: hash["descr"])
|
14
14
|
end
|
15
15
|
|
16
|
-
def initialize(code:, guid:, description:)
|
16
|
+
def initialize(code:, guid:, description:, children: [])
|
17
17
|
@code = code
|
18
18
|
@guid = guid
|
19
19
|
@description = description
|
20
|
+
@children = children
|
20
21
|
end
|
21
22
|
end
|
22
23
|
end
|
@@ -30,6 +30,15 @@ module AcademicBenchmarks
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
+
def consolidate_under_root(root)
|
34
|
+
trees.each do |tree|
|
35
|
+
tree.root.parent = root
|
36
|
+
tree.root.parent_guid = root.guid
|
37
|
+
root.children.push(tree.root)
|
38
|
+
end
|
39
|
+
StandardsTree.new(root)
|
40
|
+
end
|
41
|
+
|
33
42
|
def add_standard(standard)
|
34
43
|
if standard.is_a?(Standard)
|
35
44
|
raise StandardError.new(
|
@@ -53,6 +62,18 @@ module AcademicBenchmarks
|
|
53
62
|
@trees.empty?
|
54
63
|
end
|
55
64
|
|
65
|
+
def to_s
|
66
|
+
trees.map{|tree| tree.to_s}
|
67
|
+
end
|
68
|
+
|
69
|
+
def to_h
|
70
|
+
trees.map{|tree| tree.to_h}
|
71
|
+
end
|
72
|
+
|
73
|
+
def to_json
|
74
|
+
trees.map{|tree| tree.to_json}
|
75
|
+
end
|
76
|
+
|
56
77
|
private
|
57
78
|
|
58
79
|
def to_standard(item)
|
@@ -1,14 +1,17 @@
|
|
1
|
+
require 'active_support/core_ext/module'
|
2
|
+
|
1
3
|
module AcademicBenchmarks
|
2
4
|
module Standards
|
3
5
|
class StandardsTree
|
4
|
-
attr_reader :
|
6
|
+
attr_reader :root
|
7
|
+
delegate :children, :to_s, :to_h, :to_json, to: :root
|
5
8
|
|
6
9
|
# The item hash can optionally be built to permit the speedy
|
7
10
|
# addition of standards to the tree. since the tree is unordered,
|
8
11
|
# adding to it can be expensive without this
|
9
12
|
|
10
|
-
def initialize(
|
11
|
-
@
|
13
|
+
def initialize(root, build_item_hash: true)
|
14
|
+
@root = root
|
12
15
|
if build_item_hash
|
13
16
|
@item_hash = {}
|
14
17
|
go_ahead_and_build_item_hash
|
@@ -39,8 +42,8 @@ module AcademicBenchmarks
|
|
39
42
|
private
|
40
43
|
|
41
44
|
def go_ahead_and_build_item_hash
|
42
|
-
@item_hash[@
|
43
|
-
add_children_to_item_hash(@
|
45
|
+
@item_hash[@root.guid] = @root
|
46
|
+
add_children_to_item_hash(@root)
|
44
47
|
end
|
45
48
|
|
46
49
|
def add_children_to_item_hash(parent)
|
@@ -51,8 +54,8 @@ module AcademicBenchmarks
|
|
51
54
|
end
|
52
55
|
|
53
56
|
def find_parent(standard)
|
54
|
-
return @
|
55
|
-
check_children_for_parent(standard.parent_guid, @
|
57
|
+
return @root if @root.guid == standard.parent_guid
|
58
|
+
check_children_for_parent(standard.parent_guid, @root)
|
56
59
|
end
|
57
60
|
|
58
61
|
# does a depth-first search
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: academic_benchmarks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Porter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -64,14 +64,14 @@ dependencies:
|
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: '3.
|
67
|
+
version: '3.4'
|
68
68
|
type: :development
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '3.
|
74
|
+
version: '3.4'
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: byebug
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|