ugc 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +40 -1
- data/lib/ugc/commands/delete.rb +2 -0
- data/lib/ugc/commands/get.rb +2 -0
- data/lib/ugc/commands/list.rb +2 -0
- data/lib/ugc/commands/login.rb +11 -13
- data/lib/ugc/commands/post.rb +2 -0
- data/lib/ugc/commands/put.rb +2 -0
- data/lib/ugc/commands/query.rb +2 -26
- data/lib/ugc/commands/target.rb +4 -0
- data/lib/ugc/helpers/formatters.rb +10 -29
- data/lib/ugc/helpers/sql.rb +22 -0
- data/lib/ugc/version.rb +1 -1
- metadata +5 -4
data/README.md
CHANGED
@@ -2,9 +2,26 @@
|
|
2
2
|
|
3
3
|
ugc enables convenient terminal access to Apigee's App Services (aka Usergrid).
|
4
4
|
|
5
|
+
## Features
|
6
|
+
|
7
|
+
* Multiple connection/login profiles
|
8
|
+
* Simple syntax
|
9
|
+
* Use relative (or absolute) URLs
|
10
|
+
* Easy-to-read tabular output
|
11
|
+
* Optionally also emits raw output (--verbose switch)
|
12
|
+
|
5
13
|
## Installation
|
6
14
|
|
7
15
|
$ gem install ugc
|
16
|
+
|
17
|
+
Note: Requires Ruby 1.9.x. If you have issues, check your version:
|
18
|
+
|
19
|
+
$ ruby -v
|
20
|
+
|
21
|
+
If necessary, install a new version of Ruby. [RVM](Ruby 1.9.x
|
22
|
+
) is recommended:
|
23
|
+
|
24
|
+
$ \curl -L https://get.rvm.io | bash -s stable --ruby
|
8
25
|
|
9
26
|
## Usage
|
10
27
|
|
@@ -21,7 +38,7 @@ Connect to an Apigee administrator account:
|
|
21
38
|
organization = scottganyo
|
22
39
|
$ ugc target app messagee
|
23
40
|
application = messagee
|
24
|
-
$ ugc login
|
41
|
+
$ ugc login --admin scott@ganyo.com
|
25
42
|
password: **********
|
26
43
|
logged in user: scott@ganyo.com
|
27
44
|
|
@@ -29,3 +46,25 @@ Connect to an Apigee administrator account:
|
|
29
46
|
### Examples
|
30
47
|
|
31
48
|
![image](https://github.com/scottganyo/ugc/raw/master/examples.jpeg)
|
49
|
+
|
50
|
+
## Release notes
|
51
|
+
|
52
|
+
### 0.0.3
|
53
|
+
* New features
|
54
|
+
1. support for query result paging
|
55
|
+
|
56
|
+
|
57
|
+
## Copyright
|
58
|
+
Copyright (c) 2013 Scott Ganyo
|
59
|
+
|
60
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
61
|
+
you may not use the included files except in compliance with the License.
|
62
|
+
|
63
|
+
You may obtain a copy of the License at
|
64
|
+
|
65
|
+
<http://www.apache.org/licenses/LICENSE-2.0>
|
66
|
+
|
67
|
+
Unless required by applicable law or agreed to in writing, software distributed under
|
68
|
+
the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
69
|
+
either express or implied. See the License for the specific language governing permissions and
|
70
|
+
limitations under the License.
|
data/lib/ugc/commands/delete.rb
CHANGED
data/lib/ugc/commands/get.rb
CHANGED
data/lib/ugc/commands/list.rb
CHANGED
data/lib/ugc/commands/login.rb
CHANGED
@@ -8,21 +8,19 @@ command :login do |c|
|
|
8
8
|
c.switch [:a,:admin]
|
9
9
|
c.action do |global_options,options,args|
|
10
10
|
|
11
|
-
|
12
|
-
password = ask('password: ') { |q| q.echo = '*' }
|
11
|
+
help_now! unless args[0]
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
13
|
+
password = ask('password: ') { |q| q.echo = '*' }
|
14
|
+
|
15
|
+
if password
|
16
|
+
if options[:admin]
|
17
|
+
management = Ugc::Management.new
|
18
|
+
management.login args[0], password
|
19
|
+
else
|
20
|
+
application = Ugc::Application.new
|
21
|
+
application.login args[0], password
|
22
22
|
end
|
23
|
-
puts "logged in user: #{args[0]}"
|
24
|
-
else
|
25
|
-
raise 'username required'
|
26
23
|
end
|
24
|
+
puts "logged in user: #{args[0]}"
|
27
25
|
end
|
28
26
|
end
|
data/lib/ugc/commands/post.rb
CHANGED
data/lib/ugc/commands/put.rb
CHANGED
data/lib/ugc/commands/query.rb
CHANGED
@@ -22,33 +22,9 @@ command :query do |c|
|
|
22
22
|
query.gsub! /from\s+#{type}/i, ''
|
23
23
|
end
|
24
24
|
|
25
|
-
|
25
|
+
response = $application[type].query query
|
26
26
|
|
27
|
-
|
28
|
-
format_collection collection, parsed_query['select']
|
27
|
+
format_collection response.collection, parsed_query['select']
|
29
28
|
end
|
30
29
|
|
31
30
|
end
|
32
|
-
|
33
|
-
def parse_sql(query)
|
34
|
-
result = {}
|
35
|
-
keywords = %w(select from where)
|
36
|
-
current = nil
|
37
|
-
query.downcase.split(/[\s,*]/).each do |ea|
|
38
|
-
next if ea == ''
|
39
|
-
if keywords.include? ea
|
40
|
-
current = ea
|
41
|
-
elsif current
|
42
|
-
if result[current]
|
43
|
-
if result[current].is_a? Array
|
44
|
-
result[current] << ea
|
45
|
-
else
|
46
|
-
result[current] = [result[current]] << ea
|
47
|
-
end
|
48
|
-
else
|
49
|
-
result[current] = ea
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
result
|
54
|
-
end
|
data/lib/ugc/commands/target.rb
CHANGED
@@ -13,6 +13,8 @@ command :target do |c|
|
|
13
13
|
c.desc 'set organization'
|
14
14
|
c.command [:org,:organization] do |ep|
|
15
15
|
ep.action do |global_options,options,args|
|
16
|
+
help_now! unless args[0]
|
17
|
+
|
16
18
|
$settings.organization = args[0]
|
17
19
|
puts "organization = #{$settings.organization}"
|
18
20
|
end
|
@@ -21,6 +23,8 @@ command :target do |c|
|
|
21
23
|
c.desc 'set application'
|
22
24
|
c.command [:app,:application] do |ep|
|
23
25
|
ep.action do |global_options,options,args|
|
26
|
+
help_now! unless args[0]
|
27
|
+
|
24
28
|
$settings.application = args[0]
|
25
29
|
puts "application = #{$settings.application}"
|
26
30
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
SKIP_ATTRS = %w(metadata uri type)
|
2
2
|
|
3
|
-
def format_result(
|
4
|
-
if
|
5
|
-
format_collection(
|
3
|
+
def format_result(response)
|
4
|
+
if response.multiple_entities? && response.collection.size > 1
|
5
|
+
format_collection(response.collection)
|
6
6
|
else
|
7
|
-
format_entity(
|
7
|
+
format_entity(response.entity)
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
@@ -23,7 +23,7 @@ def format_collection(collection, headers=nil)
|
|
23
23
|
end
|
24
24
|
collection.each_with_index do |entity, index|
|
25
25
|
row do
|
26
|
-
column index
|
26
|
+
column index+1
|
27
27
|
if entity.is_a? Array
|
28
28
|
entity.each do |v|
|
29
29
|
column v
|
@@ -36,6 +36,9 @@ def format_collection(collection, headers=nil)
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
39
|
+
if collection.cursor && agree('Next Page? (Y/N)') {|q| q.default = 'Y'}
|
40
|
+
format_collection(collection.next_page, headers)
|
41
|
+
end
|
39
42
|
else
|
40
43
|
puts "0 results"
|
41
44
|
end
|
@@ -65,27 +68,5 @@ def equal_column_size(num_cols)
|
|
65
68
|
end
|
66
69
|
|
67
70
|
def terminal_columns
|
68
|
-
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
# Returns [width, height] of terminal when detected, nil if not detected.
|
73
|
-
# Think of this as a simpler version of Highline's Highline::SystemExtensions.terminal_size()
|
74
|
-
def detect_terminal_size
|
75
|
-
if (ENV['COLUMNS'] =~ /^\d+$/) && (ENV['LINES'] =~ /^\d+$/)
|
76
|
-
[ENV['COLUMNS'].to_i, ENV['LINES'].to_i]
|
77
|
-
elsif (RUBY_PLATFORM =~ /java/ || (!STDIN.tty? && ENV['TERM'])) && command_exists?('tput')
|
78
|
-
[`tput cols`.to_i, `tput lines`.to_i]
|
79
|
-
elsif STDIN.tty? && command_exists?('stty')
|
80
|
-
`stty size`.scan(/\d+/).map { |s| s.to_i }.reverse
|
81
|
-
else
|
82
|
-
nil
|
83
|
-
end
|
84
|
-
rescue
|
85
|
-
nil
|
86
|
-
end
|
87
|
-
|
88
|
-
# Determines if a shell command exists by searching for it in ENV['PATH'].
|
89
|
-
def command_exists?(command)
|
90
|
-
ENV['PATH'].split(File::PATH_SEPARATOR).any? {|d| File.exists? File.join(d, command) }
|
91
|
-
end
|
71
|
+
HighLine.new.output_cols
|
72
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
def parse_sql(query)
|
2
|
+
result = {}
|
3
|
+
keywords = %w(select from where)
|
4
|
+
current = nil
|
5
|
+
query.downcase.split(/[\s,*]/).each do |ea|
|
6
|
+
next if ea == ''
|
7
|
+
if keywords.include? ea
|
8
|
+
current = ea
|
9
|
+
elsif current
|
10
|
+
if result[current]
|
11
|
+
if result[current].is_a? Array
|
12
|
+
result[current] << ea
|
13
|
+
else
|
14
|
+
result[current] = [result[current]] << ea
|
15
|
+
end
|
16
|
+
else
|
17
|
+
result[current] = ea
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
result
|
22
|
+
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.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -155,6 +155,7 @@ files:
|
|
155
155
|
- lib/ugc/commands/query.rb
|
156
156
|
- lib/ugc/commands/target.rb
|
157
157
|
- lib/ugc/helpers/formatters.rb
|
158
|
+
- lib/ugc/helpers/sql.rb
|
158
159
|
- lib/ugc/helpers/uri.rb
|
159
160
|
- lib/ugc/management.rb
|
160
161
|
- lib/ugc/settings.rb
|
@@ -183,7 +184,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
183
184
|
version: '0'
|
184
185
|
segments:
|
185
186
|
- 0
|
186
|
-
hash: -
|
187
|
+
hash: -3089552561571580179
|
187
188
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
189
|
none: false
|
189
190
|
requirements:
|
@@ -192,7 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
192
193
|
version: '0'
|
193
194
|
segments:
|
194
195
|
- 0
|
195
|
-
hash: -
|
196
|
+
hash: -3089552561571580179
|
196
197
|
requirements: []
|
197
198
|
rubyforge_project:
|
198
199
|
rubygems_version: 1.8.24
|