rummageable 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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