rsolr 2.0.0.pre2 → 2.0.0.pre3
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/.travis.yml +4 -3
- data/lib/rsolr/document.rb +0 -89
- data/lib/rsolr/field.rb +87 -0
- data/lib/rsolr/json.rb +1 -0
- data/lib/rsolr/version.rb +1 -1
- data/lib/rsolr/xml.rb +5 -2
- data/lib/rsolr.rb +2 -2
- data/spec/api/xml_spec.rb +9 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 452ea2927fbbb82cad4aba0948007a0e6cf1bd13
|
4
|
+
data.tar.gz: 7cbed4e5da8b29a69c3f8004f29a91de9d299fcb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5abc10f76135922d1f5ce642efa245b20bf29ac01432d6dfbf8f053944b60d70fe76db2dac7eec41d35b72a8fff66cff6b98a11b449d2796243df111eb06c4bd
|
7
|
+
data.tar.gz: 5b096b2d49a2721c86cef3d879bca8d806234c8a5f1784b9686e5ae0c39873a048cb6affb0f6f73918eaf2a771cc8e04041320ec9df75e76bd41a11cc03a60af
|
data/.travis.yml
CHANGED
data/lib/rsolr/document.rb
CHANGED
@@ -38,8 +38,6 @@ module RSolr
|
|
38
38
|
#
|
39
39
|
def add_field(name, values, options = {})
|
40
40
|
RSolr::Array.wrap(values).each do |v|
|
41
|
-
next if v.nil?
|
42
|
-
|
43
41
|
field_attrs = { name: name }
|
44
42
|
field_attrs[:type] = DocumentField if name.to_s == CHILD_DOCUMENT_KEY
|
45
43
|
|
@@ -55,91 +53,4 @@ module RSolr
|
|
55
53
|
end
|
56
54
|
end
|
57
55
|
end
|
58
|
-
|
59
|
-
class Field
|
60
|
-
|
61
|
-
def self.instance(attrs, value)
|
62
|
-
attrs = attrs.dup
|
63
|
-
field_type = attrs.delete(:type) { value.class.name }
|
64
|
-
|
65
|
-
klass = if field_type.is_a? String
|
66
|
-
class_for_field(field_type)
|
67
|
-
elsif field_type.is_a? Class
|
68
|
-
field_type
|
69
|
-
else
|
70
|
-
self
|
71
|
-
end
|
72
|
-
|
73
|
-
klass.new(attrs, value)
|
74
|
-
end
|
75
|
-
|
76
|
-
def self.class_for_field(field_type)
|
77
|
-
potential_class_name = field_type + 'Field'.freeze
|
78
|
-
search_scope = Module.nesting[1]
|
79
|
-
search_scope.const_defined?(potential_class_name, false) ? search_scope.const_get(potential_class_name) : self
|
80
|
-
end
|
81
|
-
private_class_method :class_for_field
|
82
|
-
|
83
|
-
# "attrs" is a hash for setting the "doc" xml attributes
|
84
|
-
# "value" is the text value for the node
|
85
|
-
attr_accessor :attrs, :source_value
|
86
|
-
|
87
|
-
# "attrs" must be a hash
|
88
|
-
# "value" should be something that responds to #_to_s
|
89
|
-
def initialize(attrs, source_value)
|
90
|
-
@attrs = attrs
|
91
|
-
@source_value = source_value
|
92
|
-
end
|
93
|
-
|
94
|
-
# the value of the "name" attribute
|
95
|
-
def name
|
96
|
-
attrs[:name]
|
97
|
-
end
|
98
|
-
|
99
|
-
def value
|
100
|
-
source_value
|
101
|
-
end
|
102
|
-
|
103
|
-
def as_json
|
104
|
-
if attrs[:update]
|
105
|
-
{ attrs[:update] => value }
|
106
|
-
elsif attrs.any? { |k, _| k != :name }
|
107
|
-
hash = attrs.dup
|
108
|
-
hash.delete(:name)
|
109
|
-
hash.merge(value: value)
|
110
|
-
else
|
111
|
-
value
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
class DateField < Field
|
117
|
-
def value
|
118
|
-
Time.utc(source_value.year, source_value.mon, source_value.mday).iso8601
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
class TimeField < Field
|
123
|
-
def value
|
124
|
-
source_value.getutc.strftime('%FT%TZ')
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
class DateTimeField < Field
|
129
|
-
def value
|
130
|
-
source_value.to_time.getutc.iso8601
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
class DocumentField < Field
|
135
|
-
def value
|
136
|
-
return RSolr::Document.new(source_value) if source_value.respond_to? :each_pair
|
137
|
-
|
138
|
-
super
|
139
|
-
end
|
140
|
-
|
141
|
-
def as_json
|
142
|
-
value.as_json
|
143
|
-
end
|
144
|
-
end
|
145
56
|
end
|
data/lib/rsolr/field.rb
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
module RSolr
|
2
|
+
class Field
|
3
|
+
def self.instance(attrs, value)
|
4
|
+
attrs = attrs.dup
|
5
|
+
field_type = attrs.delete(:type) { value.class.name }
|
6
|
+
|
7
|
+
klass = if field_type.is_a? String
|
8
|
+
class_for_field(field_type)
|
9
|
+
elsif field_type.is_a? Class
|
10
|
+
field_type
|
11
|
+
else
|
12
|
+
self
|
13
|
+
end
|
14
|
+
|
15
|
+
klass.new(attrs, value)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.class_for_field(field_type)
|
19
|
+
potential_class_name = field_type + 'Field'.freeze
|
20
|
+
search_scope = Module.nesting[1]
|
21
|
+
search_scope.const_defined?(potential_class_name, false) ? search_scope.const_get(potential_class_name) : self
|
22
|
+
end
|
23
|
+
private_class_method :class_for_field
|
24
|
+
|
25
|
+
# "attrs" is a hash for setting the "doc" xml attributes
|
26
|
+
# "value" is the text value for the node
|
27
|
+
attr_accessor :attrs, :source_value
|
28
|
+
|
29
|
+
# "attrs" must be a hash
|
30
|
+
# "value" should be something that responds to #_to_s
|
31
|
+
def initialize(attrs, source_value)
|
32
|
+
@attrs = attrs
|
33
|
+
@source_value = source_value
|
34
|
+
end
|
35
|
+
|
36
|
+
# the value of the "name" attribute
|
37
|
+
def name
|
38
|
+
attrs[:name]
|
39
|
+
end
|
40
|
+
|
41
|
+
def value
|
42
|
+
source_value
|
43
|
+
end
|
44
|
+
|
45
|
+
def as_json
|
46
|
+
if attrs[:update]
|
47
|
+
{ attrs[:update] => value }
|
48
|
+
elsif attrs.any? { |k, _| k != :name }
|
49
|
+
hash = attrs.dup
|
50
|
+
hash.delete(:name)
|
51
|
+
hash.merge(value: value)
|
52
|
+
else
|
53
|
+
value
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
class DateField < Field
|
59
|
+
def value
|
60
|
+
Time.utc(source_value.year, source_value.mon, source_value.mday).iso8601
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
class TimeField < Field
|
65
|
+
def value
|
66
|
+
source_value.getutc.strftime('%FT%TZ')
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
class DateTimeField < Field
|
71
|
+
def value
|
72
|
+
source_value.to_time.getutc.iso8601
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
class DocumentField < Field
|
77
|
+
def value
|
78
|
+
return RSolr::Document.new(source_value) if source_value.respond_to? :each_pair
|
79
|
+
|
80
|
+
super
|
81
|
+
end
|
82
|
+
|
83
|
+
def as_json
|
84
|
+
value.as_json
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
data/lib/rsolr/json.rb
CHANGED
data/lib/rsolr/version.rb
CHANGED
data/lib/rsolr/xml.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
+
require 'rsolr/generator'
|
2
|
+
require 'rsolr/document'
|
1
3
|
module RSolr::Xml
|
2
|
-
require 'rsolr/document'
|
3
|
-
|
4
4
|
Document = RSolr::Document
|
5
5
|
Field = RSolr::Field
|
6
6
|
|
@@ -133,12 +133,15 @@ module RSolr::Xml
|
|
133
133
|
lambda do |doc_node|
|
134
134
|
doc.fields.each do |field_obj|
|
135
135
|
value = field_obj.value
|
136
|
+
|
136
137
|
if field_obj.name.to_s == RSolr::Document::CHILD_DOCUMENT_KEY
|
137
138
|
child_node_builder = to_xml(field_obj.value)
|
138
139
|
self.class.use_nokogiri ? doc_node.doc_(&child_node_builder) : doc_node.doc(&child_node_builder)
|
139
140
|
elsif value.is_a?(Hash) && value.length == 1 && field_obj.attrs[:update].nil?
|
140
141
|
update_attr, real_value = value.first
|
141
142
|
doc_node.field real_value, field_obj.attrs.merge(update: update_attr)
|
143
|
+
elsif value.nil?
|
144
|
+
doc_node.field field_obj.value, field_obj.attrs.merge(null: true)
|
142
145
|
else
|
143
146
|
doc_node.field field_obj.value, field_obj.attrs
|
144
147
|
end
|
data/lib/rsolr.rb
CHANGED
data/spec/api/xml_spec.rb
CHANGED
@@ -89,6 +89,15 @@ RSpec.describe RSolr::Xml do
|
|
89
89
|
expect(result).to match(/<field name="name" update="set">matt<\/field>/)
|
90
90
|
expect(result).to match(/<field name="id">1<\/field>/)
|
91
91
|
end
|
92
|
+
it 'should remove a field from a hash formatted for atomic updates' do
|
93
|
+
data = {
|
94
|
+
:id => 1,
|
95
|
+
:name => nil
|
96
|
+
}
|
97
|
+
result = generator.add(data)
|
98
|
+
expect(result).to match(%r{<field name="name" null="true"})
|
99
|
+
expect(result).to match(/<field name="id">1<\/field>/)
|
100
|
+
end
|
92
101
|
|
93
102
|
# add an array of hashes
|
94
103
|
it 'should create many adds from an array of hashes' do
|
@@ -103,7 +112,6 @@ RSpec.describe RSolr::Xml do
|
|
103
112
|
}
|
104
113
|
]
|
105
114
|
message = generator.add(data)
|
106
|
-
expected = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><add><doc><field name=\"id\">1</field><field name=\"name\">matt</field></doc><doc><field name=\"id\">2</field><field name=\"name\">sam</field></doc></add>"
|
107
115
|
expect(message).to match %r{<field name="name">matt</field>}
|
108
116
|
expect(message).to match %r{<field name="name">sam</field>}
|
109
117
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsolr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.pre3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Antoine Latter
|
@@ -29,7 +29,7 @@ authors:
|
|
29
29
|
autorequire:
|
30
30
|
bindir: bin
|
31
31
|
cert_chain: []
|
32
|
-
date: 2017-02-
|
32
|
+
date: 2017-02-24 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: builder
|
@@ -164,6 +164,7 @@ files:
|
|
164
164
|
- lib/rsolr/client.rb
|
165
165
|
- lib/rsolr/document.rb
|
166
166
|
- lib/rsolr/error.rb
|
167
|
+
- lib/rsolr/field.rb
|
167
168
|
- lib/rsolr/generator.rb
|
168
169
|
- lib/rsolr/json.rb
|
169
170
|
- lib/rsolr/response.rb
|
@@ -210,7 +211,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
210
211
|
requirements:
|
211
212
|
- Apache Solr
|
212
213
|
rubyforge_project: rsolr
|
213
|
-
rubygems_version: 2.
|
214
|
+
rubygems_version: 2.6.8
|
214
215
|
signing_key:
|
215
216
|
specification_version: 4
|
216
217
|
summary: A Ruby client for Apache Solr
|