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.
@@ -0,0 +1,12 @@
1
+ module Rummageable
2
+ class Fake
3
+ def index(documents)
4
+ end
5
+
6
+ def delete(link)
7
+ end
8
+
9
+ def validate_structure(hash, parents=[])
10
+ end
11
+ end
12
+ end
@@ -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
@@ -0,0 +1,3 @@
1
+ module Rummageable
2
+ VERSION = "0.1.3"
3
+ 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 = [documents].flatten
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
- url = rummager_host + path_prefix + "/documents/" + CGI.escape(link)
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.each do |key, value|
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
@@ -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
- date: 2012-01-12 00:00:00.000000000Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
12
+
13
+ date: 2012-01-17 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
15
16
  name: json
16
- requirement: &70235750717760 !ruby/object:Gem::Requirement
17
+ requirement: &id001 !ruby/object:Gem::Requirement
17
18
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
22
23
  type: :runtime
23
24
  prerelease: false
24
- version_requirements: *70235750717760
25
- - !ruby/object:Gem::Dependency
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
26
27
  name: rest-client
27
- requirement: &70235750717320 !ruby/object:Gem::Requirement
28
+ requirement: &id002 !ruby/object:Gem::Requirement
28
29
  none: false
29
- requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
32
- version: '0'
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
33
34
  type: :runtime
34
35
  prerelease: false
35
- version_requirements: *70235750717320
36
- - !ruby/object:Gem::Dependency
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
37
38
  name: plek
38
- requirement: &70235750716900 !ruby/object:Gem::Requirement
39
+ requirement: &id003 !ruby/object:Gem::Requirement
39
40
  none: false
40
- requirements:
41
- - - ! '>='
42
- - !ruby/object:Gem::Version
43
- version: '0'
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "0"
44
45
  type: :runtime
45
46
  prerelease: false
46
- version_requirements: *70235750716900
47
- - !ruby/object:Gem::Dependency
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
48
49
  name: rake
49
- requirement: &70235750716480 !ruby/object:Gem::Requirement
50
+ requirement: &id004 !ruby/object:Gem::Requirement
50
51
  none: false
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
54
- version: '0'
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: "0"
55
56
  type: :development
56
57
  prerelease: false
57
- version_requirements: *70235750716480
58
- - !ruby/object:Gem::Dependency
58
+ version_requirements: *id004
59
+ - !ruby/object:Gem::Dependency
59
60
  name: webmock
60
- requirement: &70235750708840 !ruby/object:Gem::Requirement
61
+ requirement: &id005 !ruby/object:Gem::Requirement
61
62
  none: false
62
- requirements:
63
- - - ! '>='
64
- - !ruby/object:Gem::Version
65
- version: '0'
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: "0"
66
67
  type: :development
67
68
  prerelease: false
68
- version_requirements: *70235750708840
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
- files:
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
- require_paths:
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
- version: '0'
89
- required_rubygems_version: !ruby/object:Gem::Requirement
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
- version: '0'
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.10
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