monq 0.1.1 → 0.1.2
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/lib/monq/ext/array.rb +2 -2
- data/lib/monq/ext.rb +5 -3
- data/lib/monq/presenter.rb +8 -1
- data/lib/monq/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 549e91e0850eef71c43ad692ffb4ad92c6c5bbb4b43a7d834bf2ee690a3384f4
|
|
4
|
+
data.tar.gz: 5e2c84dacf04271206add867dd75df819d2bc5ccfc37d429e991ad271e3f3487
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d762f5a51e8a52f47c2deb2ef4ef1d5f6b09d41f492f1c483aa8b73574fcf436603fa694ff68b791717c491a9a19689dd14cb288ca2f966aed714e23ea742464
|
|
7
|
+
data.tar.gz: f0dcabaa63dcdc853594b30312ae091e35a84af2c980a47840f2801882f266f04462b79b9c4fe31e22a47d813f9d2275b8d2e5404e7f37f12afd88f506583a11
|
data/lib/monq/ext/array.rb
CHANGED
|
@@ -22,7 +22,7 @@ class Array
|
|
|
22
22
|
csv = CSV.new(file)
|
|
23
23
|
return if docs.empty?
|
|
24
24
|
|
|
25
|
-
keys = docs
|
|
25
|
+
keys = Monq::Presenter.column_names(docs)
|
|
26
26
|
csv << keys.map(&:to_s)
|
|
27
27
|
docs.each { |row| csv << keys.map { |k| row[k].to_s } }
|
|
28
28
|
end
|
|
@@ -35,7 +35,7 @@ class Array
|
|
|
35
35
|
package.workbook.add_worksheet(name: sheet_name) do |sheet|
|
|
36
36
|
next if docs.empty?
|
|
37
37
|
|
|
38
|
-
keys = docs
|
|
38
|
+
keys = Monq::Presenter.column_names(docs)
|
|
39
39
|
sheet.add_row(keys.map(&:to_s))
|
|
40
40
|
docs.each { |row| sheet.add_row(keys.map { |k| row[k].to_s }) }
|
|
41
41
|
end
|
data/lib/monq/ext.rb
CHANGED
|
@@ -34,12 +34,14 @@ module Monq
|
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
def self.filter_docs(docs, attrs = [], options = {})
|
|
37
|
-
|
|
37
|
+
return docs if docs.empty?
|
|
38
|
+
|
|
39
|
+
column_names = Presenter.column_names(docs)
|
|
40
|
+
unless docs.first.is_a?(Hash) || !docs.first.respond_to?(:attributes)
|
|
38
41
|
docs = docs.map(&:attributes)
|
|
39
42
|
end
|
|
40
|
-
return docs if
|
|
43
|
+
return docs if attrs.empty? && !options[:except]
|
|
41
44
|
|
|
42
|
-
column_names = docs.first.keys
|
|
43
45
|
selected = attrs.flat_map { |e| e.is_a?(Regexp) ? column_names.grep(e) : e }.uniq
|
|
44
46
|
|
|
45
47
|
if options[:except]
|
data/lib/monq/presenter.rb
CHANGED
|
@@ -29,11 +29,18 @@ module Monq
|
|
|
29
29
|
return [] if docs.nil? || docs.empty?
|
|
30
30
|
|
|
31
31
|
docs = docs.map { |doc| doc.is_a?(Hash) || !doc.respond_to?(:attributes) ? doc : doc.attributes }
|
|
32
|
-
keys = docs
|
|
32
|
+
keys = column_names(docs)
|
|
33
33
|
body = docs.map { |doc| keys.map { |key| scalar(doc[key]) } }
|
|
34
34
|
[keys, *body]
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
+
# Union of keys across all docs: Mongoid documents only carry the fields
|
|
38
|
+
# actually stored on each one, so any single doc (e.g. the oldest row in a
|
|
39
|
+
# natural-order cursor) can miss fields present in the rest.
|
|
40
|
+
def column_names(docs)
|
|
41
|
+
docs.flat_map { |doc| doc.is_a?(Hash) || !doc.respond_to?(:attributes) ? doc.keys : doc.attributes.keys }.uniq
|
|
42
|
+
end
|
|
43
|
+
|
|
37
44
|
def as_json_tree(value)
|
|
38
45
|
case value
|
|
39
46
|
when BSON::ObjectId, BSON::Decimal128
|
data/lib/monq/version.rb
CHANGED