wikk_sql 0.1.1
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 +7 -0
- data/History.txt +10 -0
- data/Manifest.txt +5 -0
- data/README.md +104 -0
- data/Rakefile +27 -0
- data/lib/wikk_sql.rb +262 -0
- metadata +86 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a744a86c6e09edf76e687152ed1cfd7a142abf24
|
4
|
+
data.tar.gz: 8d28c677617a9ca95dc050c388e229246178ec08
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c1e9ac49a33767e2a8275c2c0c7b234ac555662e16c19462576ac333f78502e0aaa66b5f0221cb9c221218556aaf647986f780b1a13853c94a7e2db23c3a30c4
|
7
|
+
data.tar.gz: ccb74288baa0bbe90431f5376a64f16c75ab8de8a19259b0a15f96c42b7c2ca5e715fea771025910299febb0a4a9e90f391525d9d82ecd1a136b4c6e5c494235
|
data/History.txt
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
robertburrowes Sun Jun 19 14:01:08 2016 +1200
|
2
|
+
Encapsulation of SQL into module WIKK
|
3
|
+
robertburrowes Sun Jun 19 13:59:27 2016 +1200
|
4
|
+
Encapsulated in WIKK module. Allowed db_config to be Hash.
|
5
|
+
robertburrowes Sat Jun 18 21:16:41 2016 +1200
|
6
|
+
added args to class level examples
|
7
|
+
robertburrowes Sat Jun 18 21:13:02 2016 +1200
|
8
|
+
Format cleanup
|
9
|
+
robertburrowes Sat Jun 18 21:04:49 2016 +1200
|
10
|
+
First commit
|
data/Manifest.txt
ADDED
data/README.md
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
# wikk_sql
|
2
|
+
|
3
|
+
* http://rbur004.github.com/wikk_sql/
|
4
|
+
* Source https://github.com/wikarekare/wikk_sql
|
5
|
+
* Gem https://rubygems.org/gems/wikk_sql
|
6
|
+
|
7
|
+
## DESCRIPTION:
|
8
|
+
|
9
|
+
Wrappers around mysql gem.
|
10
|
+
Consolidation of bits of code from many of my projects, going back 10+ years, into a gem.
|
11
|
+
|
12
|
+
###Instance level
|
13
|
+
```
|
14
|
+
connect(config) { |sql| rest of block } #Aliased to open
|
15
|
+
close #Call if connect didn't get passed a block
|
16
|
+
query(the_query)
|
17
|
+
each_row(the_query) { |row| rest of block }
|
18
|
+
each_hash(the_query, with_table_names) { |hash| rest of block }
|
19
|
+
each_sym(the_query) { |sym:, sym:, ..., **hash| rest of block }
|
20
|
+
transaction { calls to query, each_row, each_hash or each_sym }
|
21
|
+
fetch_fields #Returns table field info
|
22
|
+
affected_rows #Returns the number of rows changed, inserted or deleted.
|
23
|
+
```
|
24
|
+
|
25
|
+
###Class level calls mirror the instance level calls taking blocks
|
26
|
+
```
|
27
|
+
WIKK::SQL::connect(config) { |sql| rest of block }
|
28
|
+
WIKK::SQL::each_row(config,the_query) { |row| rest of block }
|
29
|
+
WIKK::SQL::each_hash(config,the_query, with_table_names=false) { |hash| rest of block }
|
30
|
+
WIKK::SQL::each_sym(config,the_query) { |sym:, sym:, ..., **hash| rest of block }
|
31
|
+
```
|
32
|
+
|
33
|
+
###Config
|
34
|
+
```
|
35
|
+
Any class, such as the WIKK::Configuration class, with attr_readers
|
36
|
+
host #String hostname or IP Address
|
37
|
+
db #String database name
|
38
|
+
dbuser #String user to connect to DB as.
|
39
|
+
key #"password" for db user account.
|
40
|
+
Or Hash
|
41
|
+
{"host" => "hostname", "db" => "database", "dbuser" => "username", "key" => "password"}
|
42
|
+
```
|
43
|
+
|
44
|
+
## FEATURES/PROBLEMS:
|
45
|
+
|
46
|
+
|
47
|
+
## SYNOPSIS:
|
48
|
+
|
49
|
+
###Instance example
|
50
|
+
```
|
51
|
+
WIKK::SQL::connect(@config) do |sql|
|
52
|
+
sql.each_hash("select * from customer limit 2", with_table_names = true) do |row|
|
53
|
+
row.each do |k,v|
|
54
|
+
printf " %s => %s\n", k, v
|
55
|
+
end
|
56
|
+
end
|
57
|
+
puts "Number of rows returned: #{sql.affected_rows}"
|
58
|
+
end
|
59
|
+
```
|
60
|
+
|
61
|
+
###Class level example
|
62
|
+
```
|
63
|
+
WIKK::SQL::each_sym(@config, "select * from customer limit 2") do |customer_id:, name:, site_name:, **row|
|
64
|
+
printf "customer_id %s site_name %s name %s\n", customer_id, site_name, name
|
65
|
+
end
|
66
|
+
```
|
67
|
+
|
68
|
+
|
69
|
+
## REQUIREMENTS:
|
70
|
+
|
71
|
+
* require 'wikk_sql'
|
72
|
+
|
73
|
+
Can use wikk_configuration gem to load config from a json file.
|
74
|
+
|
75
|
+
## INSTALL:
|
76
|
+
|
77
|
+
* sudo gem install wikk_sql
|
78
|
+
|
79
|
+
## LICENSE:
|
80
|
+
|
81
|
+
(The MIT License)
|
82
|
+
|
83
|
+
Encapsulates Wikarekare code used in library form, from 2004 to present day, as a gem.
|
84
|
+
|
85
|
+
Copyright (c) 2004-2016
|
86
|
+
|
87
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
88
|
+
a copy of this software and associated documentation files (the
|
89
|
+
'Software'), to deal in the Software without restriction, including
|
90
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
91
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
92
|
+
permit persons to whom the Software is furnished to do so, subject to
|
93
|
+
the following conditions:
|
94
|
+
|
95
|
+
The above copyright notice and this permission notice shall be
|
96
|
+
included in all copies or substantial portions of the Software.
|
97
|
+
|
98
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
99
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
100
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
101
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
102
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
103
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
104
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'hoe'
|
5
|
+
Hoe.plugin :yard
|
6
|
+
|
7
|
+
Hoe.spec 'wikk_sql' do
|
8
|
+
self.readme_file = "README.md"
|
9
|
+
self.developer( "Rob Burrowes","r.burrowes@auckland.ac.nz")
|
10
|
+
remote_rdoc_dir = '' # Release to root
|
11
|
+
|
12
|
+
self.yard_title = 'wikk_sql'
|
13
|
+
self.yard_options = ['--markup', 'markdown', '--protected']
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
#Validate manfest.txt
|
18
|
+
#rake check_manifest
|
19
|
+
|
20
|
+
#Local checking. Creates pkg/
|
21
|
+
#rake gem
|
22
|
+
|
23
|
+
#create doc/
|
24
|
+
#rake docs
|
25
|
+
|
26
|
+
#Copy up to rubygem.org
|
27
|
+
#rake release VERSION=1.0.1
|
data/lib/wikk_sql.rb
ADDED
@@ -0,0 +1,262 @@
|
|
1
|
+
module WIKK
|
2
|
+
require 'mysql'
|
3
|
+
require 'pp'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
#WIKK_SQL wrapper for ruby mysql gem.
|
7
|
+
# @attr_reader [Numeric] affected_rows the number of rows changed, deleted, or added.
|
8
|
+
# @attr_reader [Mysql::Result] result the last query's result
|
9
|
+
# @attr_reader [Mysql] my the DB connection descriptor
|
10
|
+
class SQL
|
11
|
+
VERSION = '0.1.1'
|
12
|
+
|
13
|
+
attr_reader :affected_rows, :result, :my
|
14
|
+
|
15
|
+
#Create WIKK::SQL instance and set up the mySQL connection.
|
16
|
+
# @param db_config [Configuration] Configuration class, Hash, or any class with appropriate attr_readers.
|
17
|
+
# @yieldparam sql [WIKK_SQL] if a block is given.
|
18
|
+
# @return [NilClass] if block is given, and closes the mySQL connection.
|
19
|
+
# @return [WIKK_SQL] if no block is given, and caller must call sql.close
|
20
|
+
def self.connect(db_config)
|
21
|
+
sql = self.new
|
22
|
+
sql.connect(db_config)
|
23
|
+
if block_given?
|
24
|
+
yield sql
|
25
|
+
return sql.close
|
26
|
+
else
|
27
|
+
return sql
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
#Set up the mySQL connection.
|
32
|
+
# @param db_config [Configuration] Configuration class, Hash, or any class with appropriate attr_readers.
|
33
|
+
# @yieldparam [] if a block is given.
|
34
|
+
# @return [NilClass] if block is given, and closes the mySQL connection.
|
35
|
+
# @return [WIKK_SQL] if no block is given, and caller must call sql.close
|
36
|
+
def connect(db_config)
|
37
|
+
if db_config.class == Hash
|
38
|
+
sym = db_config.each_with_object({}) { |(k,v),h| h[k.to_sym] = v }
|
39
|
+
db_config = Struct.new(*(k = sym.keys)).new(*sym.values_at(*k))
|
40
|
+
end
|
41
|
+
|
42
|
+
@my = Mysql::new(db_config.host, db_config.dbuser, db_config.key, db_config.db )
|
43
|
+
#@@my.reconnect = true
|
44
|
+
if block_given?
|
45
|
+
yield
|
46
|
+
return close
|
47
|
+
end
|
48
|
+
return @my
|
49
|
+
end
|
50
|
+
|
51
|
+
alias open connect
|
52
|
+
|
53
|
+
#close the mySQL connection. Call only if connect was not given a block.
|
54
|
+
# @return [NilClass]
|
55
|
+
def close
|
56
|
+
@my.close if @my != nil
|
57
|
+
return (@my = nil)
|
58
|
+
end
|
59
|
+
|
60
|
+
#Run a query on the DB server.
|
61
|
+
# @param the_query [String] Sql query to send to DB server.
|
62
|
+
# @raise [Mysql] passes on Mysql errors, freeing the result.
|
63
|
+
# @yieldparam [Mysql::Result] @result and @affected_rows are also set.
|
64
|
+
# @return [Mysql::Result] @result and @affected_rows are also set.
|
65
|
+
def query(the_query)
|
66
|
+
begin
|
67
|
+
if result != nil
|
68
|
+
@result.free #Free any result we had left over from previous use.
|
69
|
+
@result = nil
|
70
|
+
end
|
71
|
+
@affected_rows = 0 #incase this query crashes and burns, this will have a value.
|
72
|
+
@affected_rows = @my.affected_rows #This is non-zero for insert/delete/update of rows
|
73
|
+
@result = @my.query(the_query)
|
74
|
+
if block_given?
|
75
|
+
yield @result
|
76
|
+
else
|
77
|
+
return @result
|
78
|
+
end
|
79
|
+
rescue Mysql::Error => e
|
80
|
+
if result != nil
|
81
|
+
@result.free #Free any result we had left over from previous use.
|
82
|
+
@result = nil
|
83
|
+
end
|
84
|
+
raise e
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
#Perform a transaction in the passed block.
|
89
|
+
#RollBACK on error, otherwise COMMIT
|
90
|
+
# @yieldparam [] yields to block, where the queries are performed.
|
91
|
+
# @raise [Mysql] passes on Mysql errors, freeing the result.
|
92
|
+
def transaction
|
93
|
+
puts "transaction"
|
94
|
+
if block_given?
|
95
|
+
begin
|
96
|
+
@my.query("START TRANSACTION WITH CONSISTENT SNAPSHOT")
|
97
|
+
yield #Start executing the query black.
|
98
|
+
@my.query("COMMIT")
|
99
|
+
rescue Mysql::Error => e
|
100
|
+
@my.query("ROLLBACK")
|
101
|
+
raise e
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
#Yields query query results row by row, as Array
|
107
|
+
# @param the_query [String] Sql query to send to DB server.
|
108
|
+
# @raise [Mysql] passes on Mysql errors, freeing the result.
|
109
|
+
# @yieldparam [Array] each result row
|
110
|
+
# @note @result and @affected_rows are also set via call to query().
|
111
|
+
def each_row(the_query)
|
112
|
+
begin
|
113
|
+
query(the_query)
|
114
|
+
if @result != nil && block_given?
|
115
|
+
@affected_rows = @result.num_rows() #This is non-zero is we do a select, and get results.
|
116
|
+
@result.each do |row|
|
117
|
+
yield row #return one row at a time to the block
|
118
|
+
end
|
119
|
+
end
|
120
|
+
rescue Mysql::Error => e
|
121
|
+
#puts "#{e.errno}: #{e.error}"
|
122
|
+
raise e
|
123
|
+
ensure
|
124
|
+
if block_given? && @result != nil
|
125
|
+
@result.free
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
#Yields query result row by row, as Hash, using String keys
|
131
|
+
# @param the_query [String] Sql query to send to DB server.
|
132
|
+
# @param with_table_names [Boolean] if TrueClass, then table names are included in the hash keys.
|
133
|
+
# @raise [Mysql] passes on Mysql errors, freeing the result.
|
134
|
+
# @yieldparam [Hash] each result row
|
135
|
+
# @note @result and @affected_rows are also set via call to query().
|
136
|
+
def each_hash(the_query, with_table_names=false)
|
137
|
+
begin
|
138
|
+
query(the_query)
|
139
|
+
if @result != nil && block_given?
|
140
|
+
@affected_rows = @result.num_rows() #This is non-zero is we do a select, and get results.
|
141
|
+
@result.each_hash(with_table_names) do |row|
|
142
|
+
yield row
|
143
|
+
end
|
144
|
+
end
|
145
|
+
rescue Mysql::Error => e
|
146
|
+
#puts "#{e.errno}: #{e.error}"
|
147
|
+
raise e
|
148
|
+
ensure
|
149
|
+
if block_given? && @result != nil
|
150
|
+
@result.free
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
#Yields query result row by row, as Hash using Symbol keys, so can't have table names included.
|
156
|
+
#This can be used with keyword arguments. eg. each_sym { |key1:, key2:, ..., **rest_of_args| do something }
|
157
|
+
# @param the_query [String] Sql query to send to DB server.
|
158
|
+
# @raise [Mysql] passes on Mysql errors, freeing the result.
|
159
|
+
# @yieldparam [Hash] each result row
|
160
|
+
# @note @result and @affected_rows are also set via call to query().
|
161
|
+
def each_sym(the_query)
|
162
|
+
each_hash(the_query) do |row_hash|
|
163
|
+
yield row_hash.each_with_object({}) { |(k,v),h| h[k.to_sym] = v }
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
#Get the database field attributes from a query result.
|
168
|
+
# @yieldparam [Array][Mysql::Field] Array of field records
|
169
|
+
# @note fields are name (of field), table (name), def, type, length, max_length, flags,decimals
|
170
|
+
def fetch_fields
|
171
|
+
@result.fetch_fields
|
172
|
+
end
|
173
|
+
|
174
|
+
#Create WIKK::SQL instance and set up the mySQL connection, and Run a query on the DB server.
|
175
|
+
# @param db_config [Configuration] Configuration class, Hash, or any class with appropriate attr_readers.
|
176
|
+
# @param the_query [String] Sql query to send to DB server.
|
177
|
+
# @raise [Mysql] passes on Mysql errors, freeing the result.
|
178
|
+
# @yieldparam [Mysql::Result] @result and @affected_rows are also set.
|
179
|
+
# @return [Mysql::Result] @result and @affected_rows are also set.
|
180
|
+
def self.query(db_config, the_query)
|
181
|
+
sql = self.new
|
182
|
+
sql.open db_config
|
183
|
+
begin
|
184
|
+
result = sql.query(the_query)
|
185
|
+
if block_given?
|
186
|
+
yield result
|
187
|
+
end
|
188
|
+
ensure
|
189
|
+
sql.close
|
190
|
+
end
|
191
|
+
return result
|
192
|
+
end
|
193
|
+
|
194
|
+
#Create WIKK::SQL instance and set up the mySQL connection, and Run a query on the DB server.
|
195
|
+
#Yields query query results row by row, as Array
|
196
|
+
# @param db_config [Configuration] Configuration class, Hash, or any class with appropriate attr_readers.
|
197
|
+
# @param the_query [String] Sql query to send to DB server.
|
198
|
+
# @raise [Mysql] passes on Mysql errors, freeing the result.
|
199
|
+
# @yieldparam [Array] each result row
|
200
|
+
# @note @result and @affected_rows are also set via call to query().
|
201
|
+
def self.each_row(db_config, query)
|
202
|
+
sql = self.new
|
203
|
+
sql.open db_config
|
204
|
+
begin
|
205
|
+
if block_given?
|
206
|
+
sql.each_row(query) { |y| yield y }
|
207
|
+
end
|
208
|
+
ensure
|
209
|
+
sql.close
|
210
|
+
end
|
211
|
+
return sql
|
212
|
+
end
|
213
|
+
|
214
|
+
#Create WIKK::SQL instance and set up the mySQL connection, and Run a query on the DB server.
|
215
|
+
#Yields query result row by row, as Hash, using String keys
|
216
|
+
# @param db_config [Configuration] Configuration class, Hash, or any class with appropriate attr_readers.
|
217
|
+
# @param the_query [String] Sql query to send to DB server.
|
218
|
+
# @param with_table_names [Boolean] if TrueClass, then table names are included in the hash keys.
|
219
|
+
# @raise [Mysql] passes on Mysql errors, freeing the result.
|
220
|
+
# @yieldparam [Hash] each result row
|
221
|
+
# @note @result and @affected_rows are also set via call to query().
|
222
|
+
def self.each_hash(db_config, query, with_table_names=false)
|
223
|
+
sql = self.new
|
224
|
+
sql.open db_config
|
225
|
+
begin
|
226
|
+
if block_given?
|
227
|
+
sql.each_hash(query, with_table_names) do |res|
|
228
|
+
yield res
|
229
|
+
end
|
230
|
+
end
|
231
|
+
ensure
|
232
|
+
sql.close
|
233
|
+
end
|
234
|
+
return sql
|
235
|
+
end
|
236
|
+
|
237
|
+
#Create WIKK::SQL instance and set up the mySQL connection, and Run a query on the DB server.
|
238
|
+
#Yields query result row by row, as Hash using Symbol keys, so can't have table names included.
|
239
|
+
# @param db_config [Configuration] Configuration class, Hash, or any class with appropriate attr_readers.
|
240
|
+
#This can be used with keyword arguments. eg. each_sym { |key1:, key2:, ..., **rest_of_args| do something }
|
241
|
+
# @param the_query [String] Sql query to send to DB server.
|
242
|
+
# @raise [Mysql] passes on Mysql errors, freeing the result.
|
243
|
+
# @yieldparam [Hash] each result row
|
244
|
+
# @note @result and @affected_rows are also set via call to query().
|
245
|
+
def self.each_sym(db_config, query)
|
246
|
+
sql = self.new
|
247
|
+
sql.open db_config
|
248
|
+
begin
|
249
|
+
if block_given?
|
250
|
+
sql.each_sym(query) do |**res|
|
251
|
+
yield **res
|
252
|
+
end
|
253
|
+
end
|
254
|
+
ensure
|
255
|
+
sql.close
|
256
|
+
end
|
257
|
+
return sql
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
|
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: wikk_sql
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Rob Burrowes
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-06-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: hoe-yard
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.1.2
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.1.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: hoe
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.15'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.15'
|
41
|
+
description: "```"
|
42
|
+
email:
|
43
|
+
- r.burrowes@auckland.ac.nz
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files:
|
47
|
+
- History.txt
|
48
|
+
- Manifest.txt
|
49
|
+
- README.md
|
50
|
+
files:
|
51
|
+
- History.txt
|
52
|
+
- Manifest.txt
|
53
|
+
- README.md
|
54
|
+
- Rakefile
|
55
|
+
- lib/wikk_sql.rb
|
56
|
+
homepage: http://rbur004.github.com/wikk_sql/
|
57
|
+
licenses:
|
58
|
+
- MIT
|
59
|
+
metadata: {}
|
60
|
+
post_install_message:
|
61
|
+
rdoc_options:
|
62
|
+
- "--markup"
|
63
|
+
- markdown
|
64
|
+
- "--protected"
|
65
|
+
- "--title"
|
66
|
+
- wikk_sql
|
67
|
+
- "--quiet"
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
requirements: []
|
81
|
+
rubyforge_project:
|
82
|
+
rubygems_version: 2.5.1
|
83
|
+
signing_key:
|
84
|
+
specification_version: 4
|
85
|
+
summary: "```"
|
86
|
+
test_files: []
|