solr_cloud-connection 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2257fc2ce8c0a649712a66c5154222cfd6d2e0b0d837df583d297eba3d19d6bb
4
- data.tar.gz: b9fdf5d5dd5a3c8d2fe4ec5a0e47f414fc9186a020292d34631e887591528327
3
+ metadata.gz: 0d4b1ea9a7eade492c2e88434c38dadc43bcbb5a28084c4be797ce2c77eb70ce
4
+ data.tar.gz: 5531b66702ac408e0631239568035f2693cbda02b06e5401b858caa3bd633d9f
5
5
  SHA512:
6
- metadata.gz: 53b06b39cb208dff15696c94541aae3e3069d577be2b16d587f3a8fb86594dac0eef88a9fc4800564d469bfe898ae281421b04fef957af89472085e420f60de2
7
- data.tar.gz: 3a6daabf59f8dc61fdd2d21019596714649219e50ce6983a4c6ba873d188782c6b3b6a32e932d66512e3e9eab83f4516137f3605f22fbab968811e73e5d78170
6
+ metadata.gz: b6fcb28bcf8a42191ce737b4c5ae431d669a66e92b3a2d947e26c7901f3a9b5ec0afd4353d00bf6db4ae397a10c4c8aee629c366fbb6976595170b47b7cf1e2a
7
+ data.tar.gz: c8689a6b34f2ba3307ac1bfd19adf2c5fff13ecfd7b6aa2fc934754c9667569b369fddfcb4f796528d3594d5babf3213c603a9871cb92edbbb28a6f78e45e006
data/README.md CHANGED
@@ -22,7 +22,7 @@ a collections that's pointed to by an alias.
22
22
  ## Caveats
23
23
 
24
24
  * At this point the API is unstable
25
- * Performance is desperately, hilariously terrible. Solr has no sense of an atomic action and plenty of other ways
25
+ * Solr has no sense of an atomic action and plenty of other ways
26
26
  (e.g, the admin interface) to mess with things, so nothing is cached.
27
27
  This means that individual actions can involve several round-trips to solr. If you're doing so much admin
28
28
  that this becomes a bottleneck, you're well outside this gem's target case.
@@ -34,70 +34,170 @@ a collections that's pointed to by an alias.
34
34
  The code below covers all the basics. See the docs for full sets of parameters, which errors are
35
35
  thrown, etc.
36
36
 
37
+
38
+ ### Create a connection to the server
39
+
37
40
  ```ruby
41
+ url = "http://localhost:9090/"
42
+ user = "solr"
43
+ password = "SolrRocks"
44
+ config_directory = "/path/to/myconfig/conf" # Directory 'conf' contains solrconfig.xml
45
+
46
+ server = SolrCloud::Connection.new(url: url, user: user, password: pass)
47
+ #=> <SolrCloud::Connection http://localhost:9090>
38
48
 
39
- require "solr_cloud/connection"
49
+ # or bring your own Faraday object
50
+ # server2 = SolrCloud::Connection.new_with_faraday(faraday_connection)
40
51
 
41
- server = SolrCloud::connect.new(url: "http://localhost:8023", username: "user", password: "password")
42
- # #=> <SolrCloud::Connection http://localhost:8023/>
52
+ ### Get some basic info
53
+
54
+ server.version_string #=> "8.11.2"
55
+ server.cloud? #=> true
56
+ server.mode #=> "solrcloud"
57
+ ```
43
58
 
44
- # or bring your own Faraday object
45
- # server = SolrCloud::connect.new_with_faraday(faraday_connection)
59
+ ### Configsets
60
+ ```ruby
61
+ # List the configsets
62
+ server.configsets #=> [<SolrCloud::Configset '_default' at http://localhost:9090>]
46
63
 
64
+ # Sometimes you just want the names.
47
65
  server.configset_names #=> ["_default"]
48
- default = server.get_configset("_default") #=> <SolrCloud::Configset '_default' at http://localhost:8983>
49
66
 
50
- # Create a new one by taking a directory, zipping it up, and sending it to solr
51
- cset = server.create_configset(name: "my_awesome_configset_for_cars", confdir: "/path/to/mycore/conf")
52
- server.configset_names #=> ["_default", "my_awesome_configset_for_cars"]
67
+ # Create a new configset by taking a conf directory, zipping it up,
68
+ # and sending it to solr
69
+ cset = server.create_configset(name: "horseless", confdir: config_directory) #=> <SolrCloud::Configset 'horseless' at http://localhost:9090>
70
+ server.configset_names #=> ["_default", "horseless"]
53
71
 
54
- # That's a dumb name. We'll try again.
55
- cset.delete!
56
- cset = server.create_configset(name: "cars_config", confdir: "/path/to/mycore/conf")
72
+ # That's a dumb name for a config set. Delete it and try again.
73
+ cset.delete! #=> <SolrCloud::Connection http://localhost:9090>
74
+ cset = server.create_configset(name: "cars_cfg", confdir: config_directory) #=> <SolrCloud::Configset 'cars_cfg' at http://localhost:9090>
75
+ server.configsets #=> [<SolrCloud::Configset '_default' at http://localhost:9090>, <SolrCloud::Configset 'cars_cfg' at http://localhost:9090>]
57
76
 
58
- # Collections and aliases are mostly treated the same
59
- server.collection_names #=> ["cars_v1", "cars_v2", "cars"] -- collections AND aliases
60
- server.only_collection_names #=> ["cars_v1", "cars_v2"]
61
- server.alias_names #=> ["cars"]
77
+ # Can't be overwritten by accident
78
+ server.create_configset(name: "cars_cfg", confdir: config_directory) #=> raised #<SolrCloud::WontOverwriteError: Won't replace configset cars_cfg unless 'force: true' passed >
62
79
 
63
- typo = server.get_collection("cars__V2") #=> nil, doesn't exist
64
- cars_v2 = server.get_collection("cars_v2")
80
+ # But you can force it
81
+ server.create_configset(name: "cars_cfg", confdir: config_directory, force: true) #=> <SolrCloud::Configset 'cars_cfg' at http://localhost:9090>
65
82
 
66
- cars_v2.alive? #=> true
67
- cars_v2.count #=> 133 -- we're assuming there's stuff in it.
83
+ cfg = server.get_configset("cars_cfg") #=> <SolrCloud::Configset 'cars_cfg' at http://localhost:9090>
84
+ cfg.in_use? #=> false
68
85
 
86
+ ```
69
87
 
70
- # Find out about its aliases, if any
71
- cars_v2.alias? #=> false. It's a true collection
72
- cars_v2.aliased? #=> true
73
- cars_v2.aliases #=> [<SolrCloud::Alias "cars" (alias of "cars_v2")> ]
74
- cars_v2.has_alias?("cars") #=> true
88
+ ### Collections
75
89
 
76
- cars_v2.delete! #=> SolrCloud::CollectionAliasedError: Collection 'cars_v2' can't be deleted; it's in use by aliases ["cars"]
90
+ ```ruby
91
+ # Now create a collection based on an already-existing configset
92
+ cars_v1 = server.create_collection(name: "cars_v1", configset: "cars_cfg")
93
+ #=> <SolrCloud::Collection 'cars_v1'>
94
+ server.collections #=> [<SolrCloud::Collection 'cars_v1'>]
95
+ server.collection_names #=> ["cars_v1"]
77
96
 
78
- # Make a new collection
79
- cars_v3 = server.create_collection(name: "cars_v3", configset: "cars_config")
80
- cars_v3.aliased? #=> false
81
- cars_v3.count #=> 0
82
- cars_v3.configset #=> <SolrCloud::Configset 'cars_config' at http://localhost:8023>
97
+ # Check it out quick
98
+ cars_v1.alive? #=> "OK"
99
+ cars_v1.healthy? #=> true
100
+ cars_v1.count #=> 0
83
101
 
84
- # Work directly with an alias as if it's a collection
85
- cars = server.get_collection("cars")
86
- cars.alias? #=> true
102
+ # Any aliases
103
+ cars_v1.aliased? #=> false
104
+ cars_v1.aliases #=> []
105
+
106
+ # Its configset
107
+ cars_v1.configset #=> <SolrCloud::Configset 'cars_cfg' at http://localhost:9090>
108
+
109
+ # Commit anything that's been added
110
+ cars_v1.commit #=> <SolrCloud::Collection 'cars_v1'>
111
+
112
+ # Solr knows when a configset is in use, and won't delete it
113
+
114
+ cfg.delete!
115
+ #=> raised #<SolrCloud::ConfigSetInUseError: Can not delete ConfigSet
116
+ # as it is currently being used by collection [cars_v1]>
117
+
118
+ ```
119
+
120
+ ### Aliases
121
+
122
+ ```ruby
123
+ # We'll want to alias it so we can just use 'cars'
124
+ cars = cars_v1.alias_as("cars") #=> <SolrCloud::Alias 'cars' (alias of 'cars_v1')>
125
+ cars_v1.alias? #=> false
126
+ cars_v1.aliased? #=> true
127
+
128
+ cars_v1.has_alias?("cars") #=> true
129
+ cars_v1.alias_as("autos") #=> <SolrCloud::Alias 'autos' (alias of 'cars_v1')>
130
+ cars_v1.aliases #=> [<SolrCloud::Alias 'cars' (alias of 'cars_v1')>, <SolrCloud::Alias 'autos' (alias of 'cars_v1')>]
131
+
132
+ cars_v1.get_alias("autos").delete! #=> <SolrCloud::Connection http://localhost:9090>
133
+ cars_v1.aliases #=> [<SolrCloud::Alias 'cars' (alias of 'cars_v1')>]
134
+
135
+ # There's syntactic sugar for switching out aliases
136
+ cars_v2 = server.create_collection(name: "cars_v2", configset: "cars_cfg") #=> <SolrCloud::Collection 'cars_v2'>
137
+ cars = server.get_alias("cars") #=> <SolrCloud::Alias 'cars' (alias of 'cars_v1')>
138
+
139
+ cars.collection #=> <SolrCloud::Collection 'cars_v1' (aliased by 'cars')>
140
+ cars.switch_collection_to("cars_v2") #=> <SolrCloud::Alias 'cars' (alias of 'cars_v2')>
87
141
  cars.collection #=> <SolrCloud::Collection 'cars_v2' (aliased by 'cars')>
142
+ cars_v1.aliases #=> []
143
+ cars_v2.aliases #=> [<SolrCloud::Alias 'cars' (alias of 'cars_v2')>]
144
+
145
+ # Aliases will swap from collection to collection without warning
146
+ cars_v1.alias_as("cars") #=> <SolrCloud::Alias 'cars' (alias of 'cars_v1')>
147
+
148
+ # ...unless you use the bang(!) version
149
+ cars_v2.alias_as!("cars") #=> raised #<SolrCloud::AliasAlreadyDefinedError: Alias cars already points to cars_v1>
150
+
151
+ # You can also just switch it from the alias itself.
152
+ cars.switch_collection_to("cars_v1") #=> <SolrCloud::Alias 'cars' (alias of 'cars_v1')>
153
+
154
+ # Aliases show up as "collections" so you can just use them interchangeably
155
+ server.collection_names #=> ["cars_v1", "cars_v2", "cars"]
156
+
157
+ # They even == to each other
158
+ cars #=> <SolrCloud::Alias 'cars' (alias of 'cars_v1')>
159
+ cars == cars_v1 #=> true
160
+ cars == cars_v2 #=> false
161
+
162
+ # But sometimes you want to differentiate them from each other
163
+ server.only_collection_names #=> ["cars_v1", "cars_v2"]
164
+ cars.alias? #=> true
165
+ cars_v1.alias? #=> false
166
+
167
+ cars.collection #=> <SolrCloud::Collection 'cars_v1' (aliased by 'cars')>
168
+
169
+ ```
170
+
171
+ ### Accessing objects from other objects
172
+
173
+ ```ruby
174
+ # You can grab existing collections/aliases/configsets from the server
175
+ # as well as when they're returned by a create_* statement
176
+ cv1 = server.get_collection("cars_v1") #=> <SolrCloud::Collection 'cars_v1' (aliased by 'cars')>
177
+ cars = server.get_collection("cars") #=> <SolrCloud::Alias 'cars' (alias of 'cars_v1')>
178
+
179
+ # get_* methods might return nil
180
+ typo = "cars_V1" #=> "cars_V1"
181
+ server.has_collection?(typo) #=> false
182
+ dne = server.get_collection(typo) #=> nil
183
+
184
+ # get_*! methods will throw an error
185
+ dne = server.get_collection!(typo) #=> raised #<SolrCloud::NoSuchCollectionError: Collection 'cars_V1' not found>
186
+
187
+ # alias#collection returns the underlying collection.
188
+ # collection#collection returns itself. This makes it easier to
189
+ # write code without differentiating between them.
88
190
 
89
- # Make a new alias to v2
90
- old_cars = cars_v2.alias_as("old_cars") #=> <SolrCloud::Alias "old_cars" (alias of "cars_v2")>
91
- cars_v2.aliases #=> [<SolrCloud::Alias "cars" (alias of "cars_v2")>, <SolrCloud::Alias "old_cars" (alias of "cars_v2")>]
191
+ cars.collection #=> <SolrCloud::Collection 'cars_v1' (aliased by 'cars')>
192
+ cars_v1.collection #=> <SolrCloud::Collection 'cars_v1' (aliased by 'cars')>
92
193
 
93
- # Now lets point the "cars" alias at cars_v3
94
- cars.switch_collection_to cars_v3
194
+ # Configsets, Aliases, and Collections know how they're related
95
195
 
96
- cars.collection.name #=> "cars_v3"
97
- cars_v2.alias_names #=> ["old_cars"]
196
+ cars_v1.aliases #=> [<SolrCloud::Alias 'cars' (alias of 'cars_v1')>]
197
+ cars = cars_v1.get_alias("cars") #=> <SolrCloud::Alias 'cars' (alias of 'cars_v1')>
198
+ cfg = cars.configset #=> <SolrCloud::Configset 'cars_cfg' at http://localhost:9090>
199
+ cfg.collections #=> [<SolrCloud::Collection 'cars_v1' (aliased by 'cars')>, <SolrCloud::Collection 'cars_v2'>]
98
200
 
99
- # cars_v1 isn't doing anything for us anymore. Ditch it.
100
- cars_v1.delete!
101
201
 
102
202
  ```
103
203
 
@@ -126,4 +226,5 @@ This repository is set up to run tests under docker.
126
226
 
127
227
  ## Contributing
128
228
 
129
- Bug reports and pull requests are welcome on GitHub at https://github.com/mlibrary/solr_cloud-connection.
229
+ Bugs, functionality suggestions, API suggestions, feature requests, etc. all welcom
230
+ on GitHub at https://github.com/mlibrary/solr_cloud-connection.
@@ -7,7 +7,6 @@ module SolrCloud
7
7
  # A Collection provides basic services on the collection -- checking its health,
8
8
  # creating or reporting aliases, and deleting itself.
9
9
  class Collection
10
-
11
10
  extend Forwardable
12
11
 
13
12
  # Forward the HTTP verbs to the underlying connection
@@ -50,6 +49,19 @@ module SolrCloud
50
49
  @sp = "/solr/#{name}"
51
50
  end
52
51
 
52
+ def collection
53
+ self
54
+ end
55
+
56
+ def ==(other)
57
+ case other
58
+ when SolrCloud::Collection
59
+ self.collection.name == other.collection.name
60
+ else
61
+ false
62
+ end
63
+ end
64
+
53
65
  # Delete this collection. Will no-op if the collection somehow doesn't still exist (because it was
54
66
  # deleted via a different method, such as through the API)
55
67
  # @return [Connection] The connection object used to create this collection object
@@ -74,6 +86,8 @@ module SolrCloud
74
86
  false
75
87
  end
76
88
 
89
+ alias_method :ping, :alive?
90
+
77
91
  # Is this an alias?
78
92
  # Putting this in here breaks all sorts of isolation principles,
79
93
  # but being able to call #get_alias? on anything collection-like is
@@ -136,6 +150,13 @@ module SolrCloud
136
150
  connection.create_alias(name: alias_name, collection_name: name, force: true)
137
151
  end
138
152
 
153
+ def alias_as!(alias_name)
154
+ if connection.has_alias?(alias_name)
155
+ raise AliasAlreadyDefinedError.new("Alias #{alias_name} already points to #{connection.get_alias(alias_name).collection.name}")
156
+ end
157
+ alias_as(alias_name, force: false)
158
+ end
159
+
139
160
  # Send a commit (soft if unspecified)
140
161
  # @return self
141
162
  def commit(hard: false)
@@ -33,6 +33,8 @@ module SolrCloud
33
33
  connection.only_collections.select { |coll| coll.configset.name == name }
34
34
  end
35
35
 
36
+ alias_method :collections, :used_by
37
+
36
38
  # Are there any collections currently using this configset?
37
39
  # @return [Boolean]
38
40
  def in_use?
@@ -2,6 +2,6 @@
2
2
 
3
3
  module SolrCloud
4
4
  class Connection
5
- VERSION = "0.4.0"
5
+ VERSION = "0.5.0"
6
6
  end
7
7
  end
@@ -10,6 +10,8 @@ module SolrCloud
10
10
 
11
11
  class WontOverwriteError < RuntimeError; end
12
12
 
13
+ class AliasAlreadyDefinedError < RuntimeError; end
14
+
13
15
  class ConfigSetInUseError < RuntimeError; end
14
16
 
15
17
  class CollectionAliasedError < RuntimeError; end
data/readme.rb ADDED
@@ -0,0 +1,168 @@
1
+ # frozen_string_literal: true
2
+ require "pathname"
3
+ $LOAD_PATH.unshift Pathname.new(__dir__) + "lib"
4
+ require_relative "lib/solr_cloud/connection"
5
+ config_directory = "/Users/dueberb/devel/mlibrary/solr_cloud-connection/spec/data/simple_configuration/conf"
6
+ url = "http://localhost:9090"
7
+ user = "solr"
8
+ pass = "SolrRocks"
9
+
10
+
11
+ server = SolrCloud::Connection.new(url: url, user: user, password: pass) #=>
12
+
13
+
14
+ server.aliases.each {|a| a.delete!}
15
+ server.collections.each {|c| c.delete!}
16
+ server.configsets.reject {|c| c.name == "_default"}.each {|c| c.delete!}
17
+
18
+ # or bring your own Faraday object
19
+ # server2 = SolrCloud::Connection.new_with_faraday(faraday_connection)
20
+
21
+ ### Get some basic info
22
+
23
+ server.version_string
24
+ server.cloud?
25
+ server.mode
26
+
27
+ ### Configsets
28
+
29
+ # List the configsets
30
+ server.configsets
31
+
32
+ # Sometimes you just want the names.
33
+ server.configset_names
34
+
35
+ # Create a new configset by taking a conf directory, zipping it up,
36
+ # and sending it to solr
37
+ cset = server.create_configset(name: "horseless", confdir: config_directory)
38
+ server.configset_names
39
+
40
+ # That's a dumb name for a config set. Delete it and try again.
41
+ cset.delete!
42
+ cset = server.create_configset(name: "cars_cfg", confdir: config_directory)
43
+ server.configsets
44
+
45
+ # Can't be overwritten by accident
46
+ begin
47
+ server.create_configset(name: "cars_cfg", confdir: config_directory)
48
+ rescue => e
49
+ end
50
+
51
+ # But you can force it
52
+ server.create_configset(name: "cars_cfg", confdir: config_directory, force: true)
53
+
54
+ cfg = server.get_configset("cars_cfg")
55
+ cfg.in_use?
56
+
57
+ #### Collections
58
+
59
+ # Now create a collection based on an already-existing configset
60
+ cars_v1 = server.create_collection(name: "cars_v1", configset: "cars_cfg")
61
+ server.collections
62
+ server.collection_names
63
+
64
+ # Check it out quick
65
+ cars_v1.alive?
66
+ cars_v1.healthy?
67
+ cars_v1.count
68
+
69
+ # Any aliases
70
+ cars_v1.aliased?
71
+ cars_v1.aliases
72
+
73
+ # Its configset
74
+ cars_v1.configset
75
+
76
+ # Commit anything that's been added
77
+ cars_v1.commit
78
+
79
+ # Solr knows its configset is in use, and won't delete it
80
+
81
+ begin
82
+ cfg.delete!
83
+ rescue
84
+ end
85
+
86
+
87
+
88
+ ##### Aliases
89
+
90
+ # We'll want to alias it so we can just use 'cars'
91
+ cars = cars_v1.alias_as("cars")
92
+ cars_v1.alias?
93
+ cars_v1.aliased?
94
+
95
+ cars_v1.has_alias?("cars")
96
+ cars_v1.alias_as("autos")
97
+ cars_v1.aliases
98
+
99
+ cars_v1.get_alias("autos").delete!
100
+ cars_v1.aliases
101
+
102
+ # There's syntactic sugar for switching out aliases
103
+ cars_v2 = server.create_collection(name: "cars_v2", configset: "cars_cfg")
104
+ cars = server.get_alias("cars")
105
+
106
+ cars.collection
107
+ cars.switch_collection_to("cars_v2")
108
+ cars.collection
109
+ cars_v1.aliases
110
+ cars_v2.aliases
111
+
112
+ # Aliases will swap from collection to collection without warning
113
+ cars_v1.alias_as("cars")
114
+
115
+ # ...unless you use the bang(!) version
116
+ begin
117
+ cars_v2.alias_as!("cars")
118
+ rescue
119
+ end
120
+
121
+ # You can also just switch it from the alias itself.
122
+ cars.switch_collection_to("cars_v1")
123
+
124
+ # Aliases show up as "collections" so you can just use them interchangeably
125
+ server.collection_names
126
+
127
+ # They even == to each other
128
+ cars
129
+ cars == cars_v1
130
+ cars == cars_v2
131
+
132
+ # But sometimes you want to differentiate them from each other
133
+ server.only_collection_names
134
+ cars.alias?
135
+ cars_v1.alias?
136
+
137
+ cars.collection
138
+
139
+ ### Ways to get access to aliases/collections/configsets
140
+
141
+ # You can grab existing collections/aliases/configsets from the server
142
+ # as well as when they're returned by a create_* statement
143
+ cv1 = server.get_collection("cars_v1")
144
+ cars = server.get_collection("cars")
145
+
146
+ # get_*! methods raise an error
147
+ typo = "cars_V1"
148
+ server.has_collection?(typo)
149
+ dne = server.get_collection(typo)
150
+
151
+ begin
152
+ dne = server.get_collection!(typo)
153
+ rescue
154
+ end
155
+
156
+ # alias#collection returns the underlying collection.
157
+ # collection#collection returns itself. This makes it easier to
158
+ # write code without differentiating between them.
159
+
160
+ cars.collection
161
+ cars_v1.collection
162
+
163
+ # Configsets, Aliases, and Collections know how they're related
164
+
165
+ cars_v1.aliases
166
+ cars = cars_v1.get_alias("cars")
167
+ cfg = cars.configset
168
+ cfg.collections
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solr_cloud-connection
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bill Dueber
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-07 00:00:00.000000000 Z
11
+ date: 2024-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.7.12
19
+ version: '2.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.7.12
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: httpx
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.1.5
33
+ version: '1.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.1.5
40
+ version: '1.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rubyzip
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 2.3.0
47
+ version: '2.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 2.3.0
54
+ version: '2.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: pry
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -148,6 +148,7 @@ files:
148
148
  - lib/solr_cloud/connection/configset_admin.rb
149
149
  - lib/solr_cloud/connection/version.rb
150
150
  - lib/solr_cloud/errors.rb
151
+ - readme.rb
151
152
  homepage: https://github.com/mlibrary/solr_cloud-connection
152
153
  licenses: []
153
154
  metadata: