ugc 0.9.3 → 0.9.4

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
  SHA1:
3
- metadata.gz: 72d7b2c5c9b42a1e198c8bd6828a1c86822f8dbc
4
- data.tar.gz: f866ba7a2730d4bc129b0e8490075ac90e80cdfa
3
+ metadata.gz: 62fd96ec45f90ca1750c59ee45fc0b74c7eaa2c0
4
+ data.tar.gz: 646f5efc53d15729d7d3eb69a7bae4d0d89a54a3
5
5
  SHA512:
6
- metadata.gz: c7492d652e1d709685c282a087b6b950a6c21b1e670db2f70145b5fb04a4e281bf6d4d843e4e13dc2436a7a5396dd438420b68e1eb9eaf6bd69abaab3390375f
7
- data.tar.gz: 38e564db8b05ac4a97dbafc4d376393626b01d3663ca02e7cda8b5db5049dd81ae51e4455720415df50933e7ab53d5390ebb890a7162e495602304d895e2291b
6
+ metadata.gz: 84decc28a7bbac07174f2fb0cec3ef8d59d511f9e81123a1a03054d58bd1e6b324b7e3b616483e607dea23cfe41a544203c5cc50025ea559946026137e22139a
7
+ data.tar.gz: 7d6ac3c0ecc81bd9080a60e7aa9c2d791eee2cdbb3c74d02689d5e5232da8014a717f3d01d64ce8f665c4d43870618b82275c7ec36240e1a5f7d3102d4650220
data/Gemfile CHANGED
@@ -1,2 +1,2 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
  gemspec
data/Gemfile.lock CHANGED
@@ -1,47 +1,47 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ugc (0.9.3)
4
+ ugc (0.9.4)
5
5
  command_line_reporter
6
- gli (= 2.5.0)
6
+ gli
7
7
  highline
8
- usergrid_iron (>= 0.0.9)
8
+ usergrid_iron (>= 0.9.1)
9
9
 
10
10
  GEM
11
- remote: http://rubygems.org/
11
+ remote: https://rubygems.org/
12
12
  specs:
13
- aruba (0.5.1)
14
- childprocess (~> 0.3.6)
13
+ aruba (0.5.3)
14
+ childprocess (>= 0.3.6)
15
15
  cucumber (>= 1.1.1)
16
16
  rspec-expectations (>= 2.7.0)
17
- builder (3.1.4)
18
- childprocess (0.3.6)
19
- ffi (~> 1.0, >= 1.0.6)
17
+ builder (3.2.2)
18
+ childprocess (0.3.9)
19
+ ffi (~> 1.0, >= 1.0.11)
20
20
  colored (1.2)
21
21
  command_line_reporter (3.2.1)
22
22
  colored (>= 1.2)
23
- cucumber (1.2.1)
23
+ cucumber (1.3.2)
24
24
  builder (>= 2.1.2)
25
25
  diff-lcs (>= 1.1.3)
26
- gherkin (~> 2.11.0)
27
- json (>= 1.4.6)
28
- diff-lcs (1.1.3)
29
- ffi (1.2.0)
30
- gherkin (2.11.5)
31
- json (>= 1.4.6)
32
- gli (2.5.0)
33
- highline (1.6.16)
34
- json (1.7.6)
35
- mime-types (1.21)
36
- multi_json (1.7.2)
37
- rake (10.0.3)
38
- rdoc (3.12)
26
+ gherkin (~> 2.12.0)
27
+ multi_json (~> 1.3)
28
+ diff-lcs (1.2.4)
29
+ ffi (1.8.1)
30
+ gherkin (2.12.0)
31
+ multi_json (~> 1.3)
32
+ gli (2.5.6)
33
+ highline (1.6.19)
34
+ json (1.8.0)
35
+ mime-types (1.23)
36
+ multi_json (1.7.5)
37
+ rake (10.0.4)
38
+ rdoc (4.0.1)
39
39
  json (~> 1.4)
40
40
  rest-client (1.6.7)
41
41
  mime-types (>= 1.16)
42
- rspec-expectations (2.12.1)
43
- diff-lcs (~> 1.1.3)
44
- usergrid_iron (0.9.0)
42
+ rspec-expectations (2.13.0)
43
+ diff-lcs (>= 1.1.3, < 2.0)
44
+ usergrid_iron (0.9.1)
45
45
  multi_json
46
46
  rest-client
47
47
 
data/README.md CHANGED
@@ -15,12 +15,13 @@ ugc enables convenient terminal access to Apigee's App Services (aka Usergrid).
15
15
  * Can optionally emits raw output (--verbose switch)
16
16
  * Extended SQL syntax (adds 'from' and 'limit' clauses to standard Usergrid syntax)
17
17
  * File upload (-f or --file option) on PUT and POST
18
+ * Emit curl equivalent for all REST commands
18
19
 
19
20
  ## Installation
20
21
 
21
22
  $ gem install ugc
22
23
 
23
- Note: Requires Ruby 1.9.3+. If you have issues, check your version:
24
+ Note: Requires Ruby 1.9.3+ or Ruby 2.0. If you have issues, check your version:
24
25
 
25
26
  $ ruby -v
26
27
 
@@ -33,14 +34,14 @@ If necessary, install a new version of Ruby. [RVM](https://rvm.io) is recommende
33
34
  ### Commands
34
35
 
35
36
  delete - delete an entity
36
- get, show, ls, list - retrieve a collection or entity
37
+ get, show, ls, list - retrieve and display a collection or entity
37
38
  help - Shows a list of commands or help for one command
38
- login - Describe login here
39
- post, create - non-idempotent create or update (usually create)
40
- profile, profiles - set the current profile
41
- put, update - idempotent create or update (usually an update)
42
- query - query
43
- target - set the base url, org, and app
39
+ login - Performs a login to the current profile
40
+ post, create - non-idempotent create or update (post is usually create)
41
+ profile, profiles - set the current profile (creates if it doesn't exist)
42
+ put, update - idempotent create or update (put is usually an update)
43
+ query - query (uses sql-like syntax)
44
+ target - set the base url, org, and app for the current profile
44
45
 
45
46
  ### Setup
46
47
 
@@ -177,6 +178,11 @@ If you specify column names in your query, you will be unable to reference the r
177
178
 
178
179
  ## Release notes
179
180
 
181
+ ### 0.9.4
182
+ * New features
183
+ 1. Emit curl equivalent commands with -c (--curl) switch
184
+ * eg. `$ ugc -c get something`
185
+
180
186
  ### 0.9.3
181
187
  * New features
182
188
  1. file upload function with -f (--file) switch
data/bin/ugc CHANGED
@@ -18,9 +18,12 @@ switch [:v,:verbose], negatable: false
18
18
  desc 'management'
19
19
  switch [:m,:management], negatable: false
20
20
 
21
+ desc 'show curl equivalent (does not execute)'
22
+ switch [:c,:curl], negatable: false
23
+
21
24
  desc 'draw table border'
22
25
  default_value true
23
- switch [:b,:border]
26
+ switch [:border]
24
27
 
25
28
  desc 'settings directory'
26
29
  arg_name 'settings directory'
@@ -6,7 +6,12 @@ command :rm,:del,:delete do |c|
6
6
  c.action do |global_options,options,args|
7
7
  help_now! unless args[0]
8
8
 
9
- format_response $context[args[0]].delete
9
+ resource = $context[args[0]]
10
+ if $settings.show_curl?
11
+ puts_curl(:delete, resource)
12
+ else
13
+ format_response resource.delete
14
+ end
10
15
  end
11
16
 
12
17
  end
@@ -1,4 +1,4 @@
1
- desc 'retrieve a collection or entity'
1
+ desc 'retrieve and display a collection or entity'
2
2
 
3
3
  command :get,:show,:ls,:list do |c|
4
4
 
@@ -8,7 +8,12 @@ command :get,:show,:ls,:list do |c|
8
8
  c2.action do |global_options,options,args|
9
9
  help_now! unless args[0]
10
10
 
11
- format_response $context[args[0]].get
11
+ resource = $context[args[0]]
12
+ if $settings.show_curl?
13
+ puts_curl(:get, resource)
14
+ else
15
+ format_response resource.get
16
+ end
12
17
  end
13
18
  end
14
19
 
@@ -1,6 +1,6 @@
1
1
  require 'io/console'
2
2
 
3
- desc 'Describe login here'
3
+ desc 'Performs a login to the current profile'
4
4
  arg_name 'username'
5
5
 
6
6
  command :login do |c|
@@ -1,4 +1,4 @@
1
- desc 'non-idempotent create or update (usually create)'
1
+ desc 'non-idempotent create or update (post is usually create)'
2
2
  arg_name 'url [data]'
3
3
 
4
4
  command :post,:create do |c|
@@ -10,10 +10,14 @@ command :post,:create do |c|
10
10
 
11
11
  resource = $context[args[0]]
12
12
  payload = parse_data(options[:data] || args[1])
13
- if options[:file]
14
- format_response multipart_upload resource, payload, options[:file]
13
+ if $settings.show_curl?
14
+ puts_curl(:post, resource, payload, options[:file])
15
15
  else
16
- format_response resource.post payload
16
+ if options[:file]
17
+ format_response multipart_upload resource, payload, options[:file]
18
+ else
19
+ format_response resource.post payload
20
+ end
17
21
  end
18
22
  end
19
23
 
@@ -1,4 +1,4 @@
1
- desc 'set the current profile'
1
+ desc "set the current profile (creates if it doesn't exist)"
2
2
  arg_name 'profile name'
3
3
 
4
4
  command :profile,:profiles do |c|
@@ -1,4 +1,4 @@
1
- desc 'idempotent create or update (usually an update)'
1
+ desc 'idempotent create or update (put is usually an update)'
2
2
  arg_name 'url [data]'
3
3
 
4
4
  command :put,:update do |c|
@@ -10,10 +10,14 @@ command :put,:update do |c|
10
10
 
11
11
  resource = $context[args[0]]
12
12
  payload = parse_data(options[:data] || args[1])
13
- if options[:file]
14
- format_response multipart_upload resource, payload, options[:file], :put
13
+ if $settings.show_curl?
14
+ puts_curl(:put, resource, payload, options[:file])
15
15
  else
16
- format_response resource.put payload
16
+ if options[:file]
17
+ format_response multipart_upload resource, payload, options[:file], :put
18
+ else
19
+ format_response resource.put payload
20
+ end
17
21
  end
18
22
  end
19
23
 
@@ -1,5 +1,5 @@
1
- desc 'query'
2
- long_desc 'note: query may contain a "from" clause instead of specifying collection_name'
1
+ desc 'query (uses sql-like syntax)'
2
+ long_desc 'query may contain "from" clause instead of specifying collection_name'
3
3
  arg_name '[collection_name] query'
4
4
 
5
5
  command :query do |c|
@@ -30,10 +30,15 @@ command :query do |c|
30
30
  params[:limit] = limit
31
31
  end
32
32
 
33
- response = $application[type].query query, params
34
-
35
- format_collection response.collection, parsed_query['select']
36
- save_response response
33
+ resource = $application[type]
34
+ if $settings.show_curl?
35
+ options = options.merge({ql: query}) if query
36
+ puts_curl(:get, resource)
37
+ else
38
+ response = resource.query query, params
39
+ format_collection response.collection, parsed_query['select']
40
+ save_response response
41
+ end
37
42
  end
38
43
 
39
44
  end
@@ -1,4 +1,4 @@
1
- desc 'set the base url, org, and app'
1
+ desc 'set the base url, org, and app for the current profile'
2
2
 
3
3
  command :target do |c|
4
4
 
@@ -0,0 +1,21 @@
1
+ def puts_curl(command, resource, payload=nil, file=nil)
2
+ headers = resource.options[:headers] || {}
3
+ req = RestClient::Request.new(resource.options.merge(
4
+ :method => :get,
5
+ :url => resource.url,
6
+ :headers => headers))
7
+ headers.delete(:content_type) if file
8
+ curl_headers = req.make_headers headers
9
+ curl_headers = curl_headers.map {|e| %Q[-H "#{e.join(': ')}"] }.join(' ')
10
+ curl = "curl -X #{command.upcase} -i #{curl_headers}"
11
+ if file
12
+ payload = multipart_payload payload || {}, file
13
+ payload = payload.map { |k,v|
14
+ File.file?(v) ? %Q[-F "#{k}=@#{File.absolute_path(v)}"] : %Q[-F "#{k}=#{v}"]
15
+ }.join ' '
16
+ curl = "#{curl} #{payload}"
17
+ else
18
+ curl = %Q[#{curl} -d '#{payload}'] if (payload)
19
+ end
20
+ puts "#{curl} #{resource.url}"
21
+ end
@@ -1,9 +1,14 @@
1
- def multipart_upload(resource, payload, file, method=:post, additional_headers = {})
1
+ def multipart_payload(payload, file)
2
2
  payload = payload.is_a?(Hash) ? payload : MultiJson.load(payload)
3
3
  filename = 'file'
4
4
  filename, file = file.split '=' if file.is_a?(String)
5
5
  file = file[1..-1] if file.start_with? '@' # be kind to curl users
6
6
  payload[filename] = file.is_a?(File) ? file : File.new(file, 'rb')
7
+ payload
8
+ end
9
+
10
+ def multipart_upload(resource, payload, file, method=:post, additional_headers = {})
11
+ payload = multipart_payload payload, file
7
12
  payload[:multipart] = true
8
13
  headers = (resource.options[:headers] || {}).merge(additional_headers)
9
14
  response = RestClient::Request.execute(resource.options.merge(
data/lib/ugc/settings.rb CHANGED
@@ -5,6 +5,7 @@ module Ugc
5
5
 
6
6
  def initialize(global_options)
7
7
  @draw_table_border = global_options[:border]
8
+ @show_curl = global_options[:curl]
8
9
  @settings_file = File.join global_options[:settings], SETTINGS_FILE
9
10
  @settings = YAML.load_file(@settings_file) rescue default_settings
10
11
  end
@@ -76,6 +77,10 @@ module Ugc
76
77
  !!@draw_table_border
77
78
  end
78
79
 
80
+ def show_curl?
81
+ !!@show_curl
82
+ end
83
+
79
84
  def logged_in?
80
85
  !!access_token
81
86
  end
data/lib/ugc/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ugc
2
- VERSION = '0.9.3'
2
+ VERSION = '0.9.4'
3
3
  end
data/ugc.gemspec CHANGED
@@ -18,8 +18,8 @@ spec = Gem::Specification.new do |s|
18
18
  s.add_development_dependency('rake')
19
19
  s.add_development_dependency('rdoc')
20
20
  s.add_development_dependency('aruba')
21
- s.add_runtime_dependency('gli','2.5.0')
22
- s.add_runtime_dependency('usergrid_iron','>= 0.0.9')
21
+ s.add_runtime_dependency('gli')
22
+ s.add_runtime_dependency('usergrid_iron','>= 0.9.1')
23
23
  s.add_runtime_dependency('highline')
24
24
  s.add_runtime_dependency('command_line_reporter')
25
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ugc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Ganyo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-03-29 00:00:00.000000000 Z
11
+ date: 2013-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -56,30 +56,30 @@ dependencies:
56
56
  name: gli
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '='
59
+ - - '>='
60
60
  - !ruby/object:Gem::Version
61
- version: 2.5.0
61
+ version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '='
66
+ - - '>='
67
67
  - !ruby/object:Gem::Version
68
- version: 2.5.0
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: usergrid_iron
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - '>='
74
74
  - !ruby/object:Gem::Version
75
- version: 0.0.9
75
+ version: 0.9.1
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '>='
81
81
  - !ruby/object:Gem::Version
82
- version: 0.0.9
82
+ version: 0.9.1
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: highline
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -138,6 +138,7 @@ files:
138
138
  - lib/ugc/commands/put.rb
139
139
  - lib/ugc/commands/query.rb
140
140
  - lib/ugc/commands/target.rb
141
+ - lib/ugc/helpers/curl.rb
141
142
  - lib/ugc/helpers/format.rb
142
143
  - lib/ugc/helpers/history.rb
143
144
  - lib/ugc/helpers/parse.rb