bbcloud 0.6.2 → 0.7

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.
Files changed (54) hide show
  1. data/bbcloud.gemspec +1 -3
  2. data/lib/bbcloud/commands/servers-show.rb +1 -1
  3. data/lib/bbcloud/version.rb +1 -1
  4. metadata +26 -61
  5. data/lib/bbcloud/commands/servers-restart.rb +0 -30
  6. data/lib/bbcloud/vendor/hirb/.gemspec +0 -22
  7. data/lib/bbcloud/vendor/hirb/CHANGELOG.rdoc +0 -106
  8. data/lib/bbcloud/vendor/hirb/LICENSE.txt +0 -22
  9. data/lib/bbcloud/vendor/hirb/README.rdoc +0 -182
  10. data/lib/bbcloud/vendor/hirb/Rakefile +0 -35
  11. data/lib/bbcloud/vendor/hirb/lib/bond/completions/hirb.rb +0 -15
  12. data/lib/bbcloud/vendor/hirb/lib/hirb/console.rb +0 -43
  13. data/lib/bbcloud/vendor/hirb/lib/hirb/dynamic_view.rb +0 -113
  14. data/lib/bbcloud/vendor/hirb/lib/hirb/formatter.rb +0 -116
  15. data/lib/bbcloud/vendor/hirb/lib/hirb/helpers/auto_table.rb +0 -24
  16. data/lib/bbcloud/vendor/hirb/lib/hirb/helpers/object_table.rb +0 -14
  17. data/lib/bbcloud/vendor/hirb/lib/hirb/helpers/parent_child_tree.rb +0 -24
  18. data/lib/bbcloud/vendor/hirb/lib/hirb/helpers/table/filters.rb +0 -10
  19. data/lib/bbcloud/vendor/hirb/lib/hirb/helpers/table/resizer.rb +0 -82
  20. data/lib/bbcloud/vendor/hirb/lib/hirb/helpers/table.rb +0 -323
  21. data/lib/bbcloud/vendor/hirb/lib/hirb/helpers/tree.rb +0 -181
  22. data/lib/bbcloud/vendor/hirb/lib/hirb/helpers/vertical_table.rb +0 -37
  23. data/lib/bbcloud/vendor/hirb/lib/hirb/helpers.rb +0 -17
  24. data/lib/bbcloud/vendor/hirb/lib/hirb/import_object.rb +0 -10
  25. data/lib/bbcloud/vendor/hirb/lib/hirb/menu.rb +0 -221
  26. data/lib/bbcloud/vendor/hirb/lib/hirb/pager.rb +0 -95
  27. data/lib/bbcloud/vendor/hirb/lib/hirb/string.rb +0 -44
  28. data/lib/bbcloud/vendor/hirb/lib/hirb/util.rb +0 -96
  29. data/lib/bbcloud/vendor/hirb/lib/hirb/version.rb +0 -3
  30. data/lib/bbcloud/vendor/hirb/lib/hirb/view.rb +0 -284
  31. data/lib/bbcloud/vendor/hirb/lib/hirb/views/couch_db.rb +0 -11
  32. data/lib/bbcloud/vendor/hirb/lib/hirb/views/misc_db.rb +0 -15
  33. data/lib/bbcloud/vendor/hirb/lib/hirb/views/mongo_db.rb +0 -14
  34. data/lib/bbcloud/vendor/hirb/lib/hirb/views/orm.rb +0 -11
  35. data/lib/bbcloud/vendor/hirb/lib/hirb/views/rails.rb +0 -19
  36. data/lib/bbcloud/vendor/hirb/lib/hirb/views.rb +0 -8
  37. data/lib/bbcloud/vendor/hirb/lib/hirb.rb +0 -81
  38. data/lib/bbcloud/vendor/hirb/test/auto_table_test.rb +0 -30
  39. data/lib/bbcloud/vendor/hirb/test/console_test.rb +0 -27
  40. data/lib/bbcloud/vendor/hirb/test/deps.rip +0 -4
  41. data/lib/bbcloud/vendor/hirb/test/dynamic_view_test.rb +0 -94
  42. data/lib/bbcloud/vendor/hirb/test/formatter_test.rb +0 -171
  43. data/lib/bbcloud/vendor/hirb/test/hirb_test.rb +0 -39
  44. data/lib/bbcloud/vendor/hirb/test/import_test.rb +0 -9
  45. data/lib/bbcloud/vendor/hirb/test/menu_test.rb +0 -239
  46. data/lib/bbcloud/vendor/hirb/test/object_table_test.rb +0 -79
  47. data/lib/bbcloud/vendor/hirb/test/pager_test.rb +0 -162
  48. data/lib/bbcloud/vendor/hirb/test/resizer_test.rb +0 -62
  49. data/lib/bbcloud/vendor/hirb/test/table_test.rb +0 -550
  50. data/lib/bbcloud/vendor/hirb/test/test_helper.rb +0 -61
  51. data/lib/bbcloud/vendor/hirb/test/tree_test.rb +0 -184
  52. data/lib/bbcloud/vendor/hirb/test/util_test.rb +0 -59
  53. data/lib/bbcloud/vendor/hirb/test/view_test.rb +0 -172
  54. data/lib/bbcloud/vendor/hirb/test/views_test.rb +0 -13
@@ -1,113 +0,0 @@
1
- module Hirb
2
- # This module extends a Helper with the ability to have dynamic views for configured output classes.
3
- # After a Helper has extended this module, it can use it within a render() by calling
4
- # dynamic_options() to get dynamically generated options for the object it's rendering. See Hirb::Helpers::AutoTable as an example.
5
- #
6
- # == Dynamic Views
7
- # Whereas normal views are generated from helpers with static helper options, dynamic views are generated from helpers and
8
- # dynamically generated helper options. Let's look at an example for Rails' ActiveRecord classes:
9
- #
10
- # Hirb.add_dynamic_view("ActiveRecord::Base", :helper=>:auto_table) {|obj|
11
- # {:fields=>obj.class.column_names} }
12
- #
13
- # From this dynamic view definition, _any_ ActiveRecord model class will render a table with the correct fields, since the fields
14
- # are extracted from the output object's class at runtime. Note that dynamic view definitions should return a hash of helper options.
15
- #
16
- # To define multiple dynamic views, create a Views module where each method ending in '\_view' maps to a class/module:
17
- #
18
- # module Hirb::Views::ORM
19
- # def data_mapper__resource_view(obj)
20
- # {:fields=>obj.class.properties.map {|e| e.name }}
21
- # end
22
- #
23
- # def sequel__model_view(obj)
24
- # {:fields=>obj.class.columns}
25
- # end
26
- # end
27
- #
28
- # Hirb.add_dynamic_view Hirb::Views::ORM, :helper=>:auto_table
29
- #
30
- # In this example, 'data_mapper__resource_view' maps to DataMapper::Resource and 'sequel__model_view' maps to Sequel::Model.
31
- # Note that when mapping method names to class names, '__' maps to '::' and '_' signals the next letter to be capitalized.
32
- module DynamicView
33
- # Add dynamic views to output class(es) for a given helper. If defining one view, the first argument is the output class
34
- # and a block defines the dynamic view. If defining multiple views, the first argument should be a Views::* module where
35
- # each method in the module ending in _view defines a view for an output class. To map output classes to method names in
36
- # a Views module, translate'::' to '__' and a capital letter translates to a '_' and a lowercase letter.
37
- # ==== Options:
38
- # [*:helper*] Required option. Helper class that view(s) use to format. Hirb::Helpers::AutoTable is the only valid
39
- # helper among default helpers. Can be given in aliased form i.e. :auto_table -> Hirb::Helpers::AutoTable.
40
- #
41
- # Examples:
42
- # Hirb.add_dynamic_view Hirb::Views::ORM, :helper=>:auto_table
43
- # Hirb.add_dynamic_view("ActiveRecord::Base", :helper=>:auto_table) {|obj| {:fields=>obj.class.column_names} }
44
- def self.add(view, options, &block)
45
- raise ArgumentError, ":helper option is required" unless options[:helper]
46
- helper = Helpers.helper_class options[:helper]
47
- unless helper.is_a?(Module) && class << helper; self.ancestors; end.include?(self)
48
- raise ArgumentError, ":helper option must be a helper that has extended DynamicView"
49
- end
50
- mod = block ? generate_single_view_module(view, &block) : view
51
- raise ArgumentError, "'#{mod}' must be a module" unless mod.is_a?(Module)
52
- helper.add_module mod
53
- end
54
-
55
- def self.generate_single_view_module(output_mod, &block) #:nodoc:
56
- meth = class_to_method output_mod.to_s
57
- view_mod = meth.capitalize
58
- Views::Single.send(:remove_const, view_mod) if Views::Single.const_defined?(view_mod)
59
- mod = Views::Single.const_set(view_mod, Module.new)
60
- mod.send(:define_method, meth, block)
61
- mod
62
- end
63
-
64
- def self.class_to_method(mod) #:nodoc:
65
- mod.gsub(/(?!^)([A-Z])/) {|e| '_'+e }.gsub('::_', '__').downcase + '_view'
66
- end
67
-
68
- # Returns a hash of options based on dynamic views defined for the object's ancestry. If no config is found returns nil.
69
- def dynamic_options(obj)
70
- view_methods.each do |meth|
71
- if obj.class.ancestors.map {|e| e.to_s }.include?(method_to_class(meth))
72
- begin
73
- return send(meth, obj)
74
- rescue
75
- raise "View failed to generate for '#{method_to_class(meth)}' "+
76
- "while in '#{meth}' with error:\n#{$!.message}"
77
- end
78
- end
79
- end
80
- nil
81
- end
82
-
83
- #:stopdoc:
84
- def add_module(mod)
85
- new_methods = mod.instance_methods.select {|e| e.to_s =~ /_view$/ }.map {|e| e.to_s}
86
- return if new_methods.empty?
87
- extend mod
88
- view_methods.replace(view_methods + new_methods).uniq!
89
- update_config(new_methods)
90
- end
91
-
92
- def update_config(meths)
93
- output_config = meths.inject({}) {|t,e|
94
- t[method_to_class(e)] = {:class=>self, :ancestor=>true}; t
95
- }
96
- Formatter.dynamic_config.merge! output_config
97
- end
98
-
99
- def method_to_class(meth)
100
- view_method_classes[meth] ||= Util.camelize meth.sub(/_view$/, '').gsub('__', '/')
101
- end
102
-
103
- def view_method_classes
104
- @view_method_classes ||= {}
105
- end
106
- #:startdoc:
107
-
108
- # Stores view methods that a Helper has been given via DynamicView.add
109
- def view_methods
110
- @view_methods ||= []
111
- end
112
- end
113
- end
@@ -1,116 +0,0 @@
1
- module Hirb
2
- # A Formatter object formats an output object (using Formatter.format_output) into a string based on the views defined
3
- # for its class and/or ancestry.
4
- class Formatter
5
- class<<self
6
- # This config is used by Formatter.format_output to lazily load dynamic views defined with Hirb::DynamicView.
7
- # This hash has the same format as Formatter.config.
8
- attr_accessor :dynamic_config
9
- end
10
- self.dynamic_config = {}
11
-
12
- def initialize(additional_config={}) #:nodoc:
13
- @klass_config = {}
14
- @config = additional_config || {}
15
- end
16
-
17
- # A hash of Ruby class strings mapped to view hashes. A view hash must have at least a :method, :output_method
18
- # or :class option for a view to be applied to an output. A view hash has the following keys:
19
- # [*:method*] Specifies a global (Kernel) method to do the formatting.
20
- # [*:class*] Specifies a class to do the formatting, using its render() class method. If a symbol it's converted to a corresponding
21
- # Hirb::Helpers::* class if it exists.
22
- # [*:output_method*] Specifies a method or proc to call on output before passing it to a helper. If the output is an array, it's applied
23
- # to every element in the array.
24
- # [*:options*] Options to pass the helper method or class.
25
- # [*:ancestor*] Boolean which when true causes subclasses of the output class to inherit its config. This doesn't effect the current
26
- # output class. Defaults to false. This is used by ActiveRecord classes.
27
- #
28
- # Examples:
29
- # {'WWW::Delicious::Element'=>{:class=>'Hirb::Helpers::ObjectTable', :ancestor=>true, :options=>{:max_width=>180}}}
30
- # {'Date'=>{:class=>:auto_table, :ancestor=>true}}
31
- # {'Hash'=>{:method=>:puts}}
32
- def config
33
- @config
34
- end
35
-
36
- # Adds the view for the given class and view hash config. See Formatter.config for valid keys for view hash.
37
- def add_view(klass, view_config)
38
- @klass_config.delete(klass)
39
- @config[klass.to_s] = view_config
40
- true
41
- end
42
-
43
- # This method looks for an output object's view in Formatter.config and then Formatter.dynamic_config.
44
- # If a view is found, a stringified view is returned based on the object. If no view is found, nil is returned. The options this
45
- # class takes are a view hash as described in Formatter.config. These options will be merged with any existing helper
46
- # config hash an output class has in Formatter.config. Any block given is passed along to a helper class.
47
- def format_output(output, options={}, &block)
48
- output_class = determine_output_class(output)
49
- options = parse_console_options(options) if options.delete(:console)
50
- options = Util.recursive_hash_merge(klass_config(output_class), options)
51
- _format_output(output, options, &block)
52
- end
53
-
54
- #:stopdoc:
55
- def _format_output(output, options, &block)
56
- output = options[:output_method] ? (output.is_a?(Array) ?
57
- output.map {|e| call_output_method(options[:output_method], e) } :
58
- call_output_method(options[:output_method], output) ) : output
59
- args = [output]
60
- args << options[:options] if options[:options] && !options[:options].empty?
61
- if options[:method]
62
- send(options[:method],*args)
63
- elsif options[:class] && (helper_class = Helpers.helper_class(options[:class]))
64
- helper_class.render(*args, &block)
65
- elsif options[:output_method]
66
- output
67
- end
68
- end
69
-
70
- def parse_console_options(options) #:nodoc:
71
- real_options = [:method, :class, :output_method].inject({}) do |h, e|
72
- h[e] = options.delete(e) if options[e]; h
73
- end
74
- real_options.merge! :options=>options
75
- end
76
-
77
- def determine_output_class(output)
78
- output.respond_to?(:to_a) ? Array(output)[0].class : output.class
79
- end
80
-
81
- def call_output_method(output_method, output)
82
- output_method.is_a?(Proc) ? output_method.call(output) : output.send(output_method)
83
- end
84
-
85
- # Internal view options built from user-defined ones. Options are built by recursively merging options from oldest
86
- # ancestors to the most recent ones.
87
- def klass_config(output_class)
88
- @klass_config[output_class] ||= build_klass_config(output_class)
89
- end
90
-
91
- def build_klass_config(output_class)
92
- output_ancestors = output_class.ancestors.map {|e| e.to_s}.reverse
93
- output_ancestors.pop
94
- hash = output_ancestors.inject({}) {|h, klass|
95
- add_klass_config_if_true(h, klass) {|c,klass| c[klass] && c[klass][:ancestor] }
96
- }
97
- add_klass_config_if_true(hash, output_class.to_s) {|c,klass| c[klass] }
98
- end
99
-
100
- def add_klass_config_if_true(hash, klass)
101
- if yield(@config, klass)
102
- Util.recursive_hash_merge hash, @config[klass]
103
- elsif yield(self.class.dynamic_config, klass)
104
- @config[klass] = self.class.dynamic_config[klass].dup # copy to local
105
- Util.recursive_hash_merge hash, self.class.dynamic_config[klass]
106
- else
107
- hash
108
- end
109
- end
110
-
111
- def reset_klass_config
112
- @klass_config = {}
113
- end
114
- #:startdoc:
115
- end
116
- end
@@ -1,24 +0,0 @@
1
- # This helper wraps around the other table helpers i.e. Hirb::Helpers::Table while
2
- # providing default helper options via Hirb::DynamicView. Using these default options, this
3
- # helper supports views for the following modules/classes:
4
- # ActiveRecord::Base, CouchFoo::Base, CouchPotato::Persistence, CouchRest::ExtendedDocument,
5
- # DBI::Row, DataMapper::Resource, Friendly::Document, MongoMapper::Document, MongoMapper::EmbeddedDocument,
6
- # Mongoid::Document, Ripple::Document, Sequel::Model.
7
- class Hirb::Helpers::AutoTable < Hirb::Helpers::Table
8
- extend Hirb::DynamicView
9
-
10
- # Takes same options as Hirb::Helpers::Table.render except as noted below.
11
- #
12
- # ==== Options:
13
- # [:table_class] Explicit table class to use for rendering. Defaults to
14
- # Hirb::Helpers::ObjectTable if output is not an Array or Hash. Otherwise
15
- # defaults to Hirb::Helpers::Table.
16
- def self.render(output, options={})
17
- output = Array(output)
18
- (defaults = dynamic_options(output[0])) && (options = defaults.merge(options))
19
- klass = options.delete(:table_class) || (
20
- !(output[0].is_a?(Hash) || output[0].is_a?(Array)) ?
21
- Hirb::Helpers::ObjectTable : Hirb::Helpers::Table)
22
- klass.render(output, options)
23
- end
24
- end
@@ -1,14 +0,0 @@
1
- class Hirb::Helpers::ObjectTable < Hirb::Helpers::Table
2
- # Rows are any ruby objects. Takes same options as Hirb::Helpers::Table.render except as noted below.
3
- #
4
- # ==== Options:
5
- # [:fields] Methods of the object to represent as columns. Defaults to [:to_s].
6
- def self.render(rows, options ={})
7
- options[:fields] ||= [:to_s]
8
- options[:headers] ||= {:to_s=>'value'} if options[:fields] == [:to_s]
9
- item_hashes = options[:fields].empty? ? [] : Array(rows).inject([]) {|t,item|
10
- t << options[:fields].inject({}) {|h,f| h[f] = item.__send__(f); h}
11
- }
12
- super(item_hashes, options)
13
- end
14
- end
@@ -1,24 +0,0 @@
1
- class Hirb::Helpers::ParentChildTree < Hirb::Helpers::Tree
2
- class <<self
3
- # Starting with the given node, this builds a tree by recursively calling a children method.
4
- # Takes same options as Hirb::Helper::Table.render with some additional ones below.
5
- # ==== Options:
6
- # [:value_method] Method or proc to call to display as a node's value. If not given, uses :name if node
7
- # responds to :name or defaults to :object_id.
8
- # [:children_method] Method or proc to call to obtain a node's children. Default is :children.
9
- def render(root_node, options={})
10
- value_method = options[:value_method] || (root_node.respond_to?(:name) ? :name : :object_id)
11
- @value_method = value_method.is_a?(Proc) ? value_method : lambda {|n| n.send(value_method) }
12
- children_method = options[:children_method] || :children
13
- @children_method = children_method.is_a?(Proc) ? children_method : lambda {|n| n.send(children_method)}
14
- @nodes = []
15
- build_node(root_node, 0)
16
- super(@nodes, options)
17
- end
18
-
19
- def build_node(node, level) #:nodoc:
20
- @nodes << {:value=>@value_method.call(node), :level=>level}
21
- @children_method.call(node).each {|e| build_node(e, level + 1)}
22
- end
23
- end
24
- end
@@ -1,10 +0,0 @@
1
- class Hirb::Helpers::Table
2
- # Contains filter methods used by :filters option. To define a custom filter, simply open this module and create a method
3
- # that take one argument, the value you will be filtering.
4
- module Filters
5
- extend self
6
- def comma_join(arr) #:nodoc:
7
- arr.join(', ')
8
- end
9
- end
10
- end
@@ -1,82 +0,0 @@
1
- class Hirb::Helpers::Table
2
- # Resizes a table's fields to the table's max width.
3
- class Resizer
4
- # Modifies field_lengths to fit within width. Also enforces a table's max_fields.
5
- def self.resize!(table)
6
- obj = new(table)
7
- obj.resize
8
- obj.field_lengths
9
- end
10
-
11
- #:stopdoc:
12
- attr_reader :field_lengths
13
- def initialize(table)
14
- @table, @width, @field_size = table, table.actual_width, table.fields.size
15
- @field_lengths = table.field_lengths
16
- @original_field_lengths = @field_lengths.dup
17
- end
18
-
19
- def resize
20
- adjust_long_fields || default_restrict_field_lengths
21
- @table.enforce_field_constraints
22
- add_extra_width
23
- end
24
-
25
- # Simple algorithm which allows smaller fields to be displayed while
26
- # restricting longer fields to an average_long_field
27
- def adjust_long_fields
28
- while (total_length = sum(@field_lengths.values)) > @width
29
- average_field = total_length / @field_size.to_f
30
- long_lengths = @field_lengths.values.select {|e| e > average_field }
31
- return false if long_lengths.empty?
32
-
33
- # adjusts average long field by ratio with @width
34
- average_long_field = sum(long_lengths)/long_lengths.size * @width/total_length
35
- @field_lengths.each {|f,length|
36
- @field_lengths[f] = average_long_field if length > average_long_field
37
- }
38
- end
39
- true
40
- end
41
-
42
- # Produces a field_lengths which meets the @width requirement
43
- def default_restrict_field_lengths
44
- original_total_length = sum @original_field_lengths.values
45
- # set fields by their relative weight to original length
46
- new_lengths = @original_field_lengths.inject({}) {|t,(k,v)|
47
- t[k] = (v / original_total_length.to_f * @width).to_i; t }
48
-
49
- # set all fields the same if relative doesn't work
50
- unless new_lengths.values.all? {|e| e > MIN_FIELD_LENGTH} && (sum(new_lengths.values) <= @width)
51
- new_lengths = @field_lengths.inject({}) {|t,(k,v)| t[k] = @width / @field_size; t }
52
- end
53
- @field_lengths.each {|k,v| @field_lengths[k] = new_lengths[k] }
54
- end
55
-
56
- def add_extra_width
57
- added_width = 0
58
- extra_width = @width - sum(@field_lengths.values)
59
- unmaxed_fields = @field_lengths.keys.select {|f| !remaining_width(f).zero? }
60
- # order can affect which one gets the remainder so let's keep it consistent
61
- unmaxed_fields = unmaxed_fields.sort_by {|e| e.to_s}
62
-
63
- unmaxed_fields.each_with_index do |f, i|
64
- extra_per_field = (extra_width - added_width) / (unmaxed_fields.size - i)
65
- add_to_field = remaining_width(f) < extra_per_field ? remaining_width(f) : extra_per_field
66
- added_width += add_to_field
67
- @field_lengths[f] += add_to_field
68
- end
69
- end
70
-
71
- def remaining_width(field)
72
- (@remaining_width ||= {})[field] ||= begin
73
- (@table.max_fields[field] || @original_field_lengths[field]) - @field_lengths[field]
74
- end
75
- end
76
-
77
- def sum(arr)
78
- arr.inject {|t,e| t += e }
79
- end
80
- #:startdoc:
81
- end
82
- end