rummageable 0.1.2 → 0.1.3
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/lib/rummageable/fake.rb +12 -0
- data/lib/rummageable/implementation.rb +36 -0
- data/lib/rummageable/version.rb +3 -0
- data/lib/rummageable.rb +12 -24
- data/test/rummageable_test.rb +1 -0
- metadata +71 -55
@@ -0,0 +1,36 @@
|
|
1
|
+
module Rummageable
|
2
|
+
class Implementation
|
3
|
+
def index(documents)
|
4
|
+
documents = [documents].flatten
|
5
|
+
documents.each do |document|
|
6
|
+
validate_structure document
|
7
|
+
end
|
8
|
+
url = Rummageable.rummager_host + Rummageable.path_prefix + "/documents"
|
9
|
+
0.step(documents.length - 1, CHUNK_SIZE).each do |i|
|
10
|
+
body = JSON.dump(documents[i, CHUNK_SIZE])
|
11
|
+
RestClient.post url, body, content_type: :json, accept: :json
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def delete(link)
|
16
|
+
url = Rummageable.rummager_host + Rummageable.path_prefix + "/documents/" + CGI.escape(link)
|
17
|
+
RestClient.delete url, content_type: :json, accept: :json
|
18
|
+
end
|
19
|
+
|
20
|
+
def validate_structure(hash, parents=[])
|
21
|
+
hash.each do |key, value|
|
22
|
+
full_key = parents + [key]
|
23
|
+
case value
|
24
|
+
when Array
|
25
|
+
value.each do |el|
|
26
|
+
validate_structure el, full_key
|
27
|
+
end
|
28
|
+
when Hash
|
29
|
+
validate_structure value, full_key
|
30
|
+
else
|
31
|
+
raise InvalidDocument unless VALID_KEYS.include?(full_key)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/rummageable.rb
CHANGED
@@ -2,6 +2,9 @@ require "rest_client"
|
|
2
2
|
require "json"
|
3
3
|
require "plek"
|
4
4
|
|
5
|
+
require "rummageable/implementation"
|
6
|
+
require "rummageable/fake"
|
7
|
+
|
5
8
|
module Rummageable
|
6
9
|
|
7
10
|
InvalidDocument = Class.new(RuntimeError)
|
@@ -22,24 +25,20 @@ module Rummageable
|
|
22
25
|
@path_prefix || ""
|
23
26
|
end
|
24
27
|
|
28
|
+
attr_writer :implementation
|
29
|
+
def implementation
|
30
|
+
@implementation ||= Implementation.new
|
31
|
+
end
|
32
|
+
|
25
33
|
# documents must be either a hash (for one document) or an array of hashes
|
26
34
|
# (for multiple documents)
|
27
35
|
#
|
28
36
|
def index(documents)
|
29
|
-
documents
|
30
|
-
documents.each do |document|
|
31
|
-
validate_structure document
|
32
|
-
end
|
33
|
-
url = rummager_host + path_prefix + "/documents"
|
34
|
-
0.step(documents.length - 1, CHUNK_SIZE).each do |i|
|
35
|
-
body = JSON.dump(documents[i, CHUNK_SIZE])
|
36
|
-
RestClient.post url, body, content_type: :json, accept: :json
|
37
|
-
end
|
37
|
+
implementation.index(documents)
|
38
38
|
end
|
39
39
|
|
40
40
|
def delete(link)
|
41
|
-
|
42
|
-
RestClient.delete url, content_type: :json, accept: :json
|
41
|
+
implementation.delete(link)
|
43
42
|
end
|
44
43
|
|
45
44
|
VALID_KEYS = [
|
@@ -47,6 +46,7 @@ module Rummageable
|
|
47
46
|
%w[description],
|
48
47
|
%w[format],
|
49
48
|
%w[section],
|
49
|
+
%w[subsection],
|
50
50
|
%w[link],
|
51
51
|
%w[indexable_content],
|
52
52
|
%w[additional_links title],
|
@@ -55,19 +55,7 @@ module Rummageable
|
|
55
55
|
]
|
56
56
|
|
57
57
|
def validate_structure(hash, parents=[])
|
58
|
-
hash
|
59
|
-
full_key = parents + [key]
|
60
|
-
case value
|
61
|
-
when Array
|
62
|
-
value.each do |el|
|
63
|
-
validate_structure el, full_key
|
64
|
-
end
|
65
|
-
when Hash
|
66
|
-
validate_structure value, full_key
|
67
|
-
else
|
68
|
-
raise InvalidDocument unless VALID_KEYS.include?(full_key)
|
69
|
-
end
|
70
|
-
end
|
58
|
+
implementation.validate_structure(hash, parents)
|
71
59
|
end
|
72
60
|
|
73
61
|
extend self
|
data/test/rummageable_test.rb
CHANGED
@@ -12,6 +12,7 @@ class RummageableTest < MiniTest::Unit::TestCase
|
|
12
12
|
"description" => "DESCRIPTION",
|
13
13
|
"format" => "NAME OF FORMAT",
|
14
14
|
"section" => "NAME OF SECTION",
|
15
|
+
"subsection" => "NAME OF SUBSECTION",
|
15
16
|
"link" => "/link",
|
16
17
|
"indexable_content" => "TEXT",
|
17
18
|
"additional_links" => [
|
metadata
CHANGED
@@ -1,102 +1,118 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rummageable
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.2
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease:
|
5
|
+
version: 0.1.3
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- GovUK Beta Team
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
|
13
|
+
date: 2012-01-17 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
15
16
|
name: json
|
16
|
-
requirement: &
|
17
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
17
18
|
none: false
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version:
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: "0"
|
22
23
|
type: :runtime
|
23
24
|
prerelease: false
|
24
|
-
version_requirements: *
|
25
|
-
- !ruby/object:Gem::Dependency
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
26
27
|
name: rest-client
|
27
|
-
requirement: &
|
28
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
28
29
|
none: false
|
29
|
-
requirements:
|
30
|
-
- -
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version:
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
33
34
|
type: :runtime
|
34
35
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
-
- !ruby/object:Gem::Dependency
|
36
|
+
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
37
38
|
name: plek
|
38
|
-
requirement: &
|
39
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
39
40
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version:
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: "0"
|
44
45
|
type: :runtime
|
45
46
|
prerelease: false
|
46
|
-
version_requirements: *
|
47
|
-
- !ruby/object:Gem::Dependency
|
47
|
+
version_requirements: *id003
|
48
|
+
- !ruby/object:Gem::Dependency
|
48
49
|
name: rake
|
49
|
-
requirement: &
|
50
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
50
51
|
none: false
|
51
|
-
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version:
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: "0"
|
55
56
|
type: :development
|
56
57
|
prerelease: false
|
57
|
-
version_requirements: *
|
58
|
-
- !ruby/object:Gem::Dependency
|
58
|
+
version_requirements: *id004
|
59
|
+
- !ruby/object:Gem::Dependency
|
59
60
|
name: webmock
|
60
|
-
requirement: &
|
61
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
61
62
|
none: false
|
62
|
-
requirements:
|
63
|
-
- -
|
64
|
-
- !ruby/object:Gem::Version
|
65
|
-
version:
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "0"
|
66
67
|
type: :development
|
67
68
|
prerelease: false
|
68
|
-
version_requirements: *
|
69
|
+
version_requirements: *id005
|
69
70
|
description: Mediator for apps that want their content to be in the search index
|
70
71
|
email:
|
71
72
|
executables: []
|
73
|
+
|
72
74
|
extensions: []
|
75
|
+
|
73
76
|
extra_rdoc_files: []
|
74
|
-
|
77
|
+
|
78
|
+
files:
|
79
|
+
- lib/rummageable/fake.rb
|
80
|
+
- lib/rummageable/implementation.rb
|
81
|
+
- lib/rummageable/version.rb
|
75
82
|
- lib/rummageable.rb
|
76
83
|
- test/rummageable_test.rb
|
77
84
|
homepage: https://github.com/alphagov/rummageable
|
78
85
|
licenses: []
|
86
|
+
|
79
87
|
post_install_message:
|
80
88
|
rdoc_options: []
|
81
|
-
|
89
|
+
|
90
|
+
require_paths:
|
82
91
|
- lib
|
83
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
92
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
93
|
none: false
|
85
|
-
requirements:
|
86
|
-
- -
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
|
89
|
-
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
hash: 127333834740720783
|
98
|
+
segments:
|
99
|
+
- 0
|
100
|
+
version: "0"
|
101
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
102
|
none: false
|
91
|
-
requirements:
|
92
|
-
- -
|
93
|
-
- !ruby/object:Gem::Version
|
94
|
-
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
hash: 127333834740720783
|
107
|
+
segments:
|
108
|
+
- 0
|
109
|
+
version: "0"
|
95
110
|
requirements: []
|
111
|
+
|
96
112
|
rubyforge_project:
|
97
|
-
rubygems_version: 1.8.
|
113
|
+
rubygems_version: 1.8.13
|
98
114
|
signing_key:
|
99
115
|
specification_version: 3
|
100
116
|
summary: Mediator for apps that want their content to be in the search index
|
101
|
-
test_files:
|
117
|
+
test_files:
|
102
118
|
- test/rummageable_test.rb
|