ugc 0.0.4 → 0.0.5
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.
- data/Gemfile.lock +1 -1
- data/README.md +9 -1
- data/lib/ugc/commands/query.rb +8 -1
- data/lib/ugc/helpers/formatters.rb +36 -16
- data/lib/ugc/helpers/sql.rb +2 -2
- data/lib/ugc/version.rb +1 -1
- metadata +3 -3
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -14,7 +14,7 @@ ugc enables convenient terminal access to Apigee's App Services (aka Usergrid).
|
|
14
14
|
|
15
15
|
$ gem install ugc
|
16
16
|
|
17
|
-
Note: Requires Ruby 1.9.
|
17
|
+
Note: Requires Ruby 1.9.3+. If you have issues, check your version:
|
18
18
|
|
19
19
|
$ ruby -v
|
20
20
|
|
@@ -49,6 +49,14 @@ Connect to an Apigee administrator account:
|
|
49
49
|
|
50
50
|
## Release notes
|
51
51
|
|
52
|
+
### 0.0.5
|
53
|
+
* New features
|
54
|
+
1. smart column widths
|
55
|
+
1. add "limit" keyword to sql syntax
|
56
|
+
* Bug fixes
|
57
|
+
1. fixed issue with selecting a single column
|
58
|
+
1. fixed formatting of entities with heterogeneous attributes
|
59
|
+
|
52
60
|
### 0.0.4
|
53
61
|
* Bug fixes
|
54
62
|
1. include Gemfile.lock to ensure correct version of usergrid_iron is used
|
data/lib/ugc/commands/query.rb
CHANGED
@@ -22,7 +22,14 @@ command :query do |c|
|
|
22
22
|
query.gsub! /from\s+#{type}/i, ''
|
23
23
|
end
|
24
24
|
|
25
|
-
|
25
|
+
params = {}
|
26
|
+
if parsed_query['limit']
|
27
|
+
limit = parsed_query['limit']
|
28
|
+
query.gsub! /limit\s+#{limit}/i, ''
|
29
|
+
params[:limit] = limit
|
30
|
+
end
|
31
|
+
|
32
|
+
response = $application[type].query query, params
|
26
33
|
|
27
34
|
format_collection response.collection, parsed_query['select']
|
28
35
|
end
|
@@ -13,25 +13,20 @@ COL_OVERHEAD = 3
|
|
13
13
|
|
14
14
|
def format_collection(collection, headers=nil)
|
15
15
|
if collection && collection.size > 0
|
16
|
+
metadata = collection_metadata collection, headers
|
16
17
|
table border: true do
|
17
18
|
row header: true do
|
18
|
-
headers ||=
|
19
|
+
headers ||= metadata.keys
|
19
20
|
column '#', width: INDEX_COL_WIDTH
|
20
|
-
headers.each
|
21
|
-
column r, width: equal_column_size(headers.size)
|
22
|
-
end
|
21
|
+
headers.each {|header| column header, width: metadata[header][:size] }
|
23
22
|
end
|
24
23
|
collection.each_with_index do |entity, index|
|
25
24
|
row do
|
26
25
|
column index+1
|
27
26
|
if entity.is_a? Array
|
28
|
-
entity.each
|
29
|
-
column v
|
30
|
-
end
|
27
|
+
entity.each {|v| column v }
|
31
28
|
else
|
32
|
-
|
33
|
-
column v
|
34
|
-
end
|
29
|
+
headers.each {|header| column entity[header]}
|
35
30
|
end
|
36
31
|
end
|
37
32
|
end
|
@@ -63,10 +58,35 @@ def format_entity(entity)
|
|
63
58
|
end
|
64
59
|
end
|
65
60
|
|
66
|
-
|
67
|
-
|
61
|
+
# return hash { column_name: { max_size: 12, size: 12 } }
|
62
|
+
def collection_metadata(collection, headers=nil)
|
63
|
+
result = {}
|
64
|
+
collection.each do |entity|
|
65
|
+
if entity.is_a? Array
|
66
|
+
headers.each_with_index do |header, index|
|
67
|
+
col = result[header] ||= {}
|
68
|
+
size = entity[index].to_s.size
|
69
|
+
col[:max_size] = col[:max_size] ? [col[:max_size], size].max : size
|
70
|
+
end
|
71
|
+
else
|
72
|
+
entity.reject{|k,v| headers ? !headers.include?(k) : SKIP_ATTRS.include?(k)}.each do |k,v|
|
73
|
+
col = result[k] ||= {}
|
74
|
+
size = v.to_s.size
|
75
|
+
col[:max_size] = col[:max_size] ? [col[:max_size], size].max : size
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
total_size = result.inject(0) do |total, (col,meta)|
|
80
|
+
meta[:max_size] = [col.size, meta[:max_size]].max
|
81
|
+
total + meta[:max_size]
|
82
|
+
end
|
83
|
+
terminal_columns = HighLine.new.output_cols
|
84
|
+
overhead = (result.keys.size + 2) * COL_OVERHEAD + INDEX_COL_WIDTH
|
85
|
+
if total_size + overhead < terminal_columns
|
86
|
+
result.each {|col,meta| meta[:size] = meta[:max_size]}
|
87
|
+
else
|
88
|
+
col_size = (terminal_columns - overhead) / result.keys.size
|
89
|
+
result.each {|col,meta| meta[:size] = col_size}
|
90
|
+
end
|
91
|
+
result
|
68
92
|
end
|
69
|
-
|
70
|
-
def terminal_columns
|
71
|
-
HighLine.new.output_cols
|
72
|
-
end
|
data/lib/ugc/helpers/sql.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
def parse_sql(query)
|
2
2
|
result = {}
|
3
|
-
keywords = %w(select from where)
|
3
|
+
keywords = %w(select from where limit)
|
4
4
|
current = nil
|
5
5
|
query.downcase.split(/[\s,*]/).each do |ea|
|
6
6
|
next if ea == ''
|
@@ -14,7 +14,7 @@ def parse_sql(query)
|
|
14
14
|
result[current] = [result[current]] << ea
|
15
15
|
end
|
16
16
|
else
|
17
|
-
result[current] = ea
|
17
|
+
result[current] = (current == 'select') ? [ea] : ea
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
data/lib/ugc/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ugc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -185,7 +185,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
185
185
|
version: '0'
|
186
186
|
segments:
|
187
187
|
- 0
|
188
|
-
hash: -
|
188
|
+
hash: -192062484210983223
|
189
189
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
190
|
none: false
|
191
191
|
requirements:
|
@@ -194,7 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
194
194
|
version: '0'
|
195
195
|
segments:
|
196
196
|
- 0
|
197
|
-
hash: -
|
197
|
+
hash: -192062484210983223
|
198
198
|
requirements: []
|
199
199
|
rubyforge_project:
|
200
200
|
rubygems_version: 1.8.24
|