razor-client 1.2.0 → 1.3.0

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/NEWS.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Razor Client Release Notes
2
2
 
3
+ ## 1.3.0 - 2016-05-19
4
+
5
+ * NEW: Added elegant display of the `razor config` collection.
6
+ * IMPROVEMENT: Individual properties in collections can now be scoped.
7
+ Previously, only arrays and objects were allowed, now you can find
8
+ a single value.
9
+
3
10
  ## 1.2.0 - 2016-03-08
4
11
 
5
12
  * BUGFIX: Razor client version will be reported even if the Razor server is
@@ -4,21 +4,24 @@ module Razor::CLI
4
4
  class HideColumnError < RuntimeError; end
5
5
  class Document
6
6
  extend Forwardable
7
- attr_reader 'spec', 'items', 'format_view', 'original_items'
7
+ attr_reader 'spec', 'type', 'items', 'format_view', 'original_items',
8
+ 'command'
8
9
  def initialize(doc, format_type)
9
- if doc['spec'].is_a?(Array)
10
- @spec, @remaining_navigation = doc['spec']
11
- else
12
- @spec = doc['spec']
13
- end
14
- @command = doc['command']
15
- if doc.has_key?('items')
16
- @type = :list
17
- else
18
- @type = :single
10
+ @type = :single
11
+ if doc.is_a?(Hash)
12
+ if doc['+spec'].is_a?(Array)
13
+ @spec, remaining_navigation = doc['+spec']
14
+ else
15
+ @spec = doc['spec']
16
+ end
17
+ @command = doc['command']
18
+ if doc.has_key?('items')
19
+ @type = :list
20
+ @items = doc['items']
21
+ end
19
22
  end
20
- @items = doc['items'] || Array[doc]
21
- @format_view = Razor::CLI::Views.find_formatting(@spec, format_type, @remaining_navigation)
23
+ @items ||= Array[doc]
24
+ @format_view = Razor::CLI::Views.find_formatting(@spec, format_type, remaining_navigation)
22
25
 
23
26
  # Untransformed and unordered for displaying nested views.
24
27
  @original_items = @items
@@ -50,7 +50,7 @@ module Razor::CLI
50
50
  # We assume that all collections are homogenous
51
51
  def format_objects(objects, indent = 0)
52
52
  objects.map do |obj|
53
- obj.is_a?(Hash) ? format_object(obj, indent) : ' '*indent + obj.inspect
53
+ obj.is_a?(Hash) ? format_object(obj, indent) : ' '*indent + obj.to_s
54
54
  end.join "\n\n"
55
55
  end
56
56
 
@@ -143,7 +143,7 @@ module Razor::CLI
143
143
  else
144
144
  case f
145
145
  when "spec" then "\"#{Format.spec_name(value)}\""
146
- else value.inspect
146
+ else value.to_s # Could be `false` or `nil` possibly
147
147
  end
148
148
  end
149
149
  end.join "\n"
@@ -113,11 +113,11 @@ module Razor::CLI
113
113
  obj = @doc.find {|x| x.is_a?(Hash) and x["name"] == key }
114
114
  elsif @doc.is_a?(Hash) && @doc['items'].is_a?(Array)
115
115
  obj = @doc['items'].find {|x| x.is_a?(Hash) and x["name"] == key }
116
- elsif @doc.is_a? Hash
116
+ elsif @doc.is_a?(Hash)
117
117
  obj = @doc[key]
118
118
  end
119
119
 
120
- raise NavigationError.new(@doc_resource, key, @doc) unless obj
120
+ raise NavigationError.new(@doc_resource, key, @doc) if obj.nil?
121
121
 
122
122
  if obj.is_a?(Hash) && obj["id"]
123
123
  url = URI.parse(obj["id"])
@@ -125,26 +125,22 @@ module Razor::CLI
125
125
  @doc = json_get(url, {}, params)
126
126
  elsif obj.is_a?(Hash) && obj['spec']
127
127
  @doc = obj
128
- elsif obj.is_a?(Hash)
129
- # No spec string; use parent's and remember extra navigation.
128
+ elsif obj.is_a?(Hash) || obj.is_a?(Array)
129
+ # We have reached a data structure that doesn't have a spec string!
130
+ # This means we should use the parent's string and keep track of which
131
+ # extra navigation is needed, so we can still format the data
132
+ # accordingly.
130
133
  if @doc['+spec'].is_a?(Array)
131
134
  # Something's been added.
132
135
  @doc['+spec'] << key
133
136
  elsif @doc['+spec'].nil? || @doc['+spec'].is_a?(String)
134
137
  @doc['+spec'] = [@doc['spec'], key]
135
138
  end
136
- @doc = obj.merge({'+spec' => @doc['+spec']})
137
- elsif obj.is_a?(Array)
138
- # No spec string; use parent's and remember extra navigation.
139
- if @doc['+spec'].is_a?(Array)
140
- # Something's already been added.
141
- @doc['+spec'] << key
142
- elsif @doc['+spec'].nil? || @doc['+spec'].is_a?(String)
143
- @doc['+spec'] = [@doc['spec'], key]
144
- end
145
- @doc = {'+spec' => @doc['+spec'], 'items' => obj}
139
+ @doc = obj.merge({'+spec' => @doc['+spec']}) if obj.is_a?(Hash)
140
+ @doc = {'+spec' => @doc['+spec'], 'items' => obj} if obj.is_a?(Array)
141
+ @doc
146
142
  else
147
- @doc = nil
143
+ @doc = obj
148
144
  end
149
145
  end
150
146
 
@@ -18,7 +18,7 @@ module Razor
18
18
  #
19
19
  # The next line is the one that our packaging tools modify, so please make
20
20
  # sure that any change to it is discussed and agreed first.
21
- version = '1.2.0'
21
+ version = '1.3.0'
22
22
 
23
23
  if version == "DEVELOPMENT"
24
24
  root = File.expand_path("../../..", File.dirname(__FILE__))
@@ -1,6 +1,9 @@
1
1
  module Razor::CLI
2
2
  module Views
3
3
  module_function
4
+ def views= v
5
+ @views = v
6
+ end
4
7
  def views
5
8
  @views ||= YAML::load_file(File::join(File::dirname(__FILE__), "views.yaml"))
6
9
  end
@@ -78,7 +78,6 @@ collections:
78
78
  +short:
79
79
  +layout: table
80
80
  +show:
81
- name:
82
81
  timestamp:
83
82
  severity:
84
83
  event:
@@ -253,3 +252,6 @@ collections:
253
252
  name:
254
253
  hook_type:
255
254
  configuration:
255
+ config:
256
+ +short:
257
+ +layout: table
@@ -0,0 +1,46 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # Needed to make the client work on Ruby 1.8.7
3
+ unless Kernel.respond_to?(:require_relative)
4
+ module Kernel
5
+ def require_relative(path)
6
+ require File.join(File.dirname(caller[0]), path.to_str)
7
+ end
8
+ end
9
+ end
10
+
11
+ require_relative '../spec_helper'
12
+
13
+ describe Razor::CLI::Document do
14
+ def document(doc, format_type)
15
+ Razor::CLI::Document.new(doc, format_type)
16
+ end
17
+ def check_doc(reality, expectation)
18
+ [:spec, :items, :type, :format_view, :command].each do |prop|
19
+ reality.public_send(prop).should == expectation[prop] if expectation[prop]
20
+ end
21
+ end
22
+ describe "#new" do
23
+ it "creates a blank document successfully" do
24
+ doc = document({}, 'short')
25
+ check_doc(doc, items: [{}], type: :single)
26
+ end
27
+ it "creates a normal document successfully" do
28
+ doc = document({'spec' => 'some/path', 'abc' => 'def'}, 'short')
29
+ check_doc(doc, type: :single, spec: 'some/path')
30
+ end
31
+ it "includes the command if supplied" do
32
+ doc = document({'spec' => 'some/path', 'abc' => 'def', 'command' => 123}, 'short')
33
+ check_doc(doc, type: :single, spec: 'some/path', command: 123)
34
+ end
35
+ it "finds formatting based on the spec string" do
36
+ Razor::CLI::Views.views = {'collections' => {'item' => {'+short' => {'+layout' => 'list'}}}}
37
+ doc = document({'spec' => '/collections/item', 'abc' => 'def'}, 'short')
38
+ check_doc(doc, type: :single, spec: '/collections/item', format_view: {'+layout' => 'list'})
39
+ end
40
+ it "finds formatting based on the spec array" do
41
+ Razor::CLI::Views.views = {'collections' => {'more' => {'scoping' => {'+short' => {'+layout' => 'list'}}}}}
42
+ doc = document({'+spec' => ['/collections/more', 'scoping'], 'abc' => 'def'}, 'short')
43
+ check_doc(doc, type: :single, spec: '/collections/more', format_view: {'+layout' => 'list'})
44
+ end
45
+ end
46
+ end
@@ -42,11 +42,6 @@ describe Razor::CLI::Format do
42
42
  result = format doc
43
43
  result.should_not =~ /Query additional details/
44
44
  end
45
- it "hides array spec array from additional details" do
46
- doc = {'abc' => [], 'spec' => ['def', 'jkl']}
47
- result = format doc
48
- result.should =~ /Query additional details via: `razor something else \[abc\]`\z/
49
- end
50
45
  it "hides array +spec array from additional details" do
51
46
  doc = {'abc' => [], '+spec' => ['def', 'jkl']}
52
47
  result = format doc
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: razor-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
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: 2016-03-07 00:00:00.000000000 Z
12
+ date: 2016-05-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mime-types
@@ -116,6 +116,7 @@ files:
116
116
  - spec/testing.md
117
117
  - spec/cli/navigate_spec.rb
118
118
  - spec/cli/command_spec.rb
119
+ - spec/cli/document_spec.rb
119
120
  - spec/cli/parse_spec.rb
120
121
  - spec/cli/format_spec.rb
121
122
  - spec/fixtures/vcr/Razor_CLI_Parse/_new/_help/should_print_a_list_of_known_endpoints.yml
@@ -181,6 +182,7 @@ test_files:
181
182
  - spec/testing.md
182
183
  - spec/cli/navigate_spec.rb
183
184
  - spec/cli/command_spec.rb
185
+ - spec/cli/document_spec.rb
184
186
  - spec/cli/parse_spec.rb
185
187
  - spec/cli/format_spec.rb
186
188
  - spec/fixtures/vcr/Razor_CLI_Parse/_new/_help/should_print_a_list_of_known_endpoints.yml