runcible 0.4.12 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. data/README.md +42 -13
  2. data/Rakefile +1 -17
  3. data/lib/runcible/base.rb +26 -36
  4. data/lib/runcible/extensions/consumer.rb +22 -15
  5. data/lib/runcible/extensions/consumer_group.rb +12 -12
  6. data/lib/runcible/extensions/repository.rb +44 -38
  7. data/lib/runcible/extensions/rpm.rb +3 -3
  8. data/lib/runcible/extensions/unit.rb +21 -16
  9. data/lib/runcible/instance.rb +129 -0
  10. data/lib/runcible/{extensions → models}/distributor.rb +7 -3
  11. data/lib/runcible/{extensions → models}/export_distributor.rb +6 -3
  12. data/lib/runcible/{extensions → models}/importer.rb +2 -2
  13. data/lib/runcible/{extensions → models}/iso_distributor.rb +5 -2
  14. data/lib/runcible/{extensions → models}/iso_importer.rb +2 -2
  15. data/lib/runcible/models/nodes_http_distributor.rb +61 -0
  16. data/lib/runcible/{extensions → models}/yum_clone_distributor.rb +3 -1
  17. data/lib/runcible/{extensions → models}/yum_distributor.rb +2 -2
  18. data/lib/runcible/{extensions → models}/yum_importer.rb +2 -2
  19. data/lib/runcible/resources/consumer.rb +14 -14
  20. data/lib/runcible/resources/consumer_group.rb +9 -9
  21. data/lib/runcible/resources/event_notifier.rb +3 -3
  22. data/lib/runcible/resources/repository.rb +20 -20
  23. data/lib/runcible/resources/repository_group.rb +6 -6
  24. data/lib/runcible/resources/repository_schedule.rb +4 -4
  25. data/lib/runcible/resources/role.rb +2 -2
  26. data/lib/runcible/resources/task.rb +5 -5
  27. data/lib/runcible/resources/unit.rb +2 -2
  28. data/lib/runcible/resources/user.rb +4 -4
  29. data/lib/runcible/version.rb +1 -1
  30. data/lib/runcible.rb +6 -2
  31. metadata +84 -91
@@ -31,17 +31,17 @@ module Runcible
31
31
  end
32
32
 
33
33
  # This function is not implemented for RPMs since they do not have content IDs
34
- def self.find
34
+ def find
35
35
  raise NotImplementedError
36
36
  end
37
37
 
38
38
  # This function is not implemented for RPMs since they do not have content IDs
39
- def self.find_all
39
+ def find_all
40
40
  raise NotImplementedError
41
41
  end
42
42
 
43
43
  # This function is not implemented for RPMs since they do not have content IDs
44
- def self.unassociate_ids_from_repo(repo_id, ids)
44
+ def unassociate_ids_from_repo(repo_id, ids)
45
45
  raise NotImplementedError
46
46
  end
47
47
  end
@@ -25,24 +25,28 @@
25
25
  module Runcible
26
26
  module Extensions
27
27
  class Unit < Runcible::Resources::Unit
28
-
28
+
29
29
  # The content type (e.g. rpm, errata)
30
30
  def self.content_type
31
- ''
31
+ raise "Content type not defined"
32
+ end
33
+
34
+ def content_type
35
+ self.class.content_type
32
36
  end
33
37
 
34
38
  # Retrieves all content of a certain @@type
35
39
  #
36
40
  # @return [RestClient::Response] list of all content for the given type
37
- def self.all
38
- self.search(content_type, {})
41
+ def all
42
+ search(content_type, {})
39
43
  end
40
44
 
41
45
  # Retrieves a single content by it's content ID
42
46
  #
43
47
  # @param [Array] id the content ID of the content to retrieve
44
48
  # @return [RestClient::Response] the requested content
45
- def self.find(id, optional={})
49
+ def find(id, optional={})
46
50
  optional[:include_repos] ||= true
47
51
  find_all([id], optional).first
48
52
  end
@@ -51,16 +55,16 @@ module Runcible
51
55
  #
52
56
  # @param [Array] ids list of content IDs to retrieve
53
57
  # @return [RestClient::Response] list of content
54
- def self.find_all(ids, optional={})
58
+ def find_all(ids, optional={})
55
59
  optional[:include_repos] ||= true
56
- self.search(content_type, { :filters => {'id'=> {'$in'=> ids}} }, optional)
60
+ search(content_type, { :filters => {'id'=> {'$in'=> ids}} }, optional)
57
61
  end
58
62
 
59
63
  # Retrieves a single content by it's unit ID
60
64
  #
61
65
  # @param [Array] id the unit ID of the content to retrieve
62
66
  # @return [RestClient::Response] the requested content
63
- def self.find_by_unit_id(id, optional={})
67
+ def find_by_unit_id(id, optional={})
64
68
  optional[:include_repos] ||= true
65
69
  find_all_by_unit_ids([id], [], optional).first
66
70
  end
@@ -70,11 +74,11 @@ module Runcible
70
74
  # @param [Array] ids list of content unit IDs to retrieve
71
75
  # @param [Array] fields optional list of to retrieve
72
76
  # @return [RestClient::Response] list of content
73
- def self.find_all_by_unit_ids(ids, fields=[], optional={})
77
+ def find_all_by_unit_ids(ids, fields=[], optional={})
74
78
  optional[:include_repos] ||= true
75
79
  criteria = { :filters => { :_id => { '$in'=> ids } } }
76
80
  criteria[:fields] = fields unless fields.empty?
77
- self.search(content_type, criteria, optional)
81
+ search(content_type, criteria, optional)
78
82
  end
79
83
 
80
84
  # unassociates content units from a repository
@@ -82,10 +86,10 @@ module Runcible
82
86
  # @param [String] repo_id the repository ID to remove units from
83
87
  # @param [Hash] filters the filters to find the units this content type to remove
84
88
  # @return [RestClient::Response] a task representing the unit unassociate operation
85
- def self.unassociate_from_repo(repo_id, filters)
89
+ def unassociate_from_repo(repo_id, filters)
86
90
  criteria = {:type_ids => [content_type]}
87
91
  criteria[:filters] = filters
88
- Runcible::Extensions::Repository.unassociate_units(repo_id, criteria)
92
+ Runcible::Extensions::Repository.new(self.config).unassociate_units(repo_id, criteria)
89
93
  end
90
94
 
91
95
  # unassociates content units from a repository
@@ -96,7 +100,7 @@ module Runcible
96
100
  # ex: "RHEA-2010:0001" for errata..,
97
101
  # Note rpms do not have ids, so cant use this.
98
102
  # @return [RestClient::Response] a task representing the unit unassociate operation
99
- def self.unassociate_ids_from_repo(repo_id, ids)
103
+ def unassociate_ids_from_repo(repo_id, ids)
100
104
  unassociate_from_repo(repo_id, :unit => {'id' => {'$in' => ids}})
101
105
  end
102
106
 
@@ -108,7 +112,7 @@ module Runcible
108
112
  # for example: "efdd2d63-b275-4728-a298-f68cf4c174e7"
109
113
  #
110
114
  # @return [RestClient::Response] a task representing the unit unassociate operation
111
- def self.unassociate_unit_ids_from_repo(repo_id, ids)
115
+ def unassociate_unit_ids_from_repo(repo_id, ids)
112
116
  unassociate_from_repo(repo_id, :association => {'unit_id' => {'$in' => ids}})
113
117
  end
114
118
 
@@ -118,15 +122,16 @@ module Runcible
118
122
  # @param [String] destination_repo_id the destination repository ID
119
123
  # @param [Hash] optional container for all optional parameters
120
124
  # @return [RestClient::Response] a task representing the unit copy operation
121
- def self.copy(source_repo_id, destination_repo_id, optional={})
125
+ def copy(source_repo_id, destination_repo_id, optional={})
122
126
  criteria = {:type_ids => [content_type], :filters => {}}
123
127
  criteria[:filters]['association'] = {'unit_id' => {'$in' => optional[:ids]}} if optional[:ids]
128
+ criteria[:filters] = optional[:filters] if optional[:filters]
124
129
  criteria[:fields] = {:unit => optional[:fields]} if optional[:fields]
125
130
 
126
131
  payload = {:criteria => criteria}
127
132
  payload[:override_config] = {:copy_children => optional[:copy_children]} if optional.has_key?(:copy_children)
128
133
 
129
- Runcible::Extensions::Repository.unit_copy(destination_repo_id, source_repo_id, payload)
134
+ Runcible::Extensions::Repository.new(self.config).unit_copy(destination_repo_id, source_repo_id, payload)
130
135
  end
131
136
 
132
137
  end
@@ -0,0 +1,129 @@
1
+ # Copyright (c) 2013 Red Hat Inc.
2
+ #
3
+ # MIT License
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ module Runcible
25
+ class Instance
26
+
27
+ def self.resource_classes
28
+ @@resource_classes ||= gather_classes("resources")
29
+ @@resource_classes
30
+ end
31
+
32
+ def self.extension_classes
33
+ @@extension_classes ||= gather_classes("extensions")
34
+ @@extension_classes
35
+ end
36
+
37
+
38
+ attr_accessor :resources
39
+ attr_accessor :extensions
40
+
41
+ # Initialize a Runcible instance
42
+ #
43
+ # @param [Hash] config
44
+ # @option config [String] :user Pulp username
45
+ # @option config [String] :oauth Oauth credentials
46
+ # @option config [Hash] :headers Additional headers e.g. content-type => "application/json"
47
+ # @option config [String] :url Scheme and hostname for the pulp server e.g. https://localhost/
48
+ # @option config [String] :api_path URL path for the api e.g. pulp/api/v2/
49
+ # @option config [String] :timeout Timeout in seconds for the connection (defaults to rest client's default)
50
+ # @option config [String] :open_timeout timeout in seconds for the connection to open(defaults to rest client's default)
51
+ # @option config [Hash] :http_auth Needed when using simple http auth
52
+ # @option http_auth [String] :password The password to use for simple auth
53
+ def initialize(config={})
54
+ @config = {
55
+ :api_path => '/pulp/api/v2/',
56
+ :url => 'https://localhost',
57
+ :user => '',
58
+ :http_auth => {:password => {} },
59
+ :headers => {:content_type => 'application/json',
60
+ :accept => 'application/json'},
61
+ :logging => {}
62
+ }.merge(config).with_indifferent_access
63
+
64
+
65
+ initialize_wrappers(config)
66
+ end
67
+
68
+ # Update an existing config value
69
+ # @param [String, Symbol] key The key of the config to update
70
+ # @param [Object] value The value of the config to update
71
+ def update_config(key, value)
72
+ @config[key] = value
73
+ end
74
+
75
+ private
76
+
77
+ def initialize_wrappers(config)
78
+ self.resources = Wrapper.new('resources')
79
+ self.extensions = Wrapper.new('extensions')
80
+
81
+ self.class.resource_classes.each do |runcible_class|
82
+ instance = runcible_class.new(@config)
83
+ self.resources.set_instance(accessible_class(runcible_class), instance)
84
+ end
85
+
86
+ self.class.extension_classes.each do |runcible_class|
87
+ instance = runcible_class.new(@config)
88
+ self.extensions.set_instance(accessible_class(runcible_class), instance)
89
+ end
90
+ end
91
+
92
+ def accessible_class(class_object)
93
+ #converts a class (Runcible::Resources::ConsumerGroup) to a user friendly name:
94
+ # (e.g. consumer_group)
95
+ class_object.name.split("::").last.underscore
96
+ end
97
+
98
+ def self.gather_classes(type)
99
+ const = Runcible
100
+ const = const.const_get(type.camelize)
101
+ path = File.dirname(__FILE__) + "/#{type}/*.rb"
102
+ base_names = Dir.glob(path).collect{|f| File.basename(f, '.rb') }
103
+ classes = base_names.collect{|name| const.const_get(name.camelize)}
104
+ end
105
+
106
+ end
107
+
108
+
109
+ #Wrapper class to provide access to instances
110
+ class Wrapper
111
+
112
+ def initialize(name)
113
+ @name = name
114
+ @methods = []
115
+ end
116
+
117
+ def set_instance(attr_name, instance)
118
+ @methods << attr_name
119
+ define_singleton_method(attr_name) { instance }
120
+ end
121
+
122
+ def to_s
123
+ "#{@name} - #{@methods.uniq.sort.to_s}"
124
+ end
125
+ end
126
+
127
+
128
+ end
129
+
@@ -25,14 +25,18 @@ require 'active_support/json'
25
25
  require 'securerandom'
26
26
 
27
27
  module Runcible
28
- module Extensions
28
+ module Models
29
29
  class Distributor
30
30
  attr_accessor 'auto_publish', 'id'
31
31
 
32
32
  def initialize(params={})
33
33
  @auto_publish = false
34
- self.id = params[:id] || SecureRandom.hex(10)
35
- params.each{|k,v| self.send("#{k.to_s}=",v)}
34
+ id = params[:id] || SecureRandom.hex(10)
35
+ params.each{|k,v| send("#{k.to_s}=",v)}
36
+ end
37
+
38
+ def type_id
39
+ self.class.type_id
36
40
  end
37
41
 
38
42
  # Distributor Type id
@@ -25,7 +25,7 @@ require 'active_support/json'
25
25
  require 'securerandom'
26
26
 
27
27
  module Runcible
28
- module Extensions
28
+ module Models
29
29
  class ExportDistributor < Distributor
30
30
  #required
31
31
  attr_accessor "http", "https"
@@ -39,9 +39,12 @@ module Runcible
39
39
  @http = http
40
40
  @https = https
41
41
  # Pulp seems to expect the ID to be export_distributor, not a random
42
- super({:id => self.type_id})
42
+ super({:id => type_id})
43
43
  end
44
44
 
45
+ # Distributor Type id
46
+ #
47
+ # @return [string]
45
48
  def self.type_id
46
49
  'export_distributor'
47
50
  end
@@ -50,7 +53,7 @@ module Runcible
50
53
  #
51
54
  # @return [Hash]
52
55
  def config
53
- to_ret = self.as_json
56
+ to_ret = as_json
54
57
  to_ret.delete('auto_publish')
55
58
  to_ret.delete('id')
56
59
  to_ret
@@ -26,13 +26,13 @@ require 'active_support/json'
26
26
 
27
27
 
28
28
  module Runcible
29
- module Extensions
29
+ module Models
30
30
 
31
31
  # Generic class to represent Pulp Importers
32
32
  # Child classes should supply id & config methods
33
33
  class Importer
34
34
  def initialize(params={})
35
- params.each{|k,v| self.send("#{k.to_s}=",v)}
35
+ params.each{|k,v| send("#{k.to_s}=",v)}
36
36
  end
37
37
  end
38
38
 
@@ -25,7 +25,7 @@ require 'active_support/json'
25
25
  require 'securerandom'
26
26
 
27
27
  module Runcible
28
- module Extensions
28
+ module Models
29
29
  class IsoDistributor < Distributor
30
30
  #required
31
31
  attr_accessor "serve_http", "serve_https"
@@ -41,6 +41,9 @@ module Runcible
41
41
  super({})
42
42
  end
43
43
 
44
+ # Distributor Type id
45
+ #
46
+ # @return [string]
44
47
  def self.type_id
45
48
  'iso_distributor'
46
49
  end
@@ -49,7 +52,7 @@ module Runcible
49
52
  #
50
53
  # @return [Hash]
51
54
  def config
52
- to_ret = self.as_json
55
+ to_ret = as_json
53
56
  to_ret.delete('auto_publish')
54
57
  to_ret.delete('id')
55
58
  to_ret
@@ -22,7 +22,7 @@
22
22
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
23
 
24
24
  module Runcible
25
- module Extensions
25
+ module Models
26
26
  class IsoImporter < Importer
27
27
  ID = 'iso_importer'
28
28
 
@@ -41,7 +41,7 @@ module Runcible
41
41
  #
42
42
  # @return [Hash]
43
43
  def config
44
- self.as_json
44
+ as_json
45
45
  end
46
46
  end
47
47
  end
@@ -0,0 +1,61 @@
1
+ # Copyright (c) 2013 Red Hat Inc.
2
+ #
3
+ # MIT License
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ require 'active_support/json'
25
+ require 'securerandom'
26
+
27
+ module Runcible
28
+ module Models
29
+ class NodesHttpDistributor < Distributor
30
+ #required
31
+ attr_accessor "http", "https"
32
+
33
+ # Instantiates a export distributor
34
+ #
35
+ # @param [boolean] http serve the contents over http
36
+ # @param [boolean] https serve the contents over https
37
+ # @return [Runcible::Extensions::ExportDistributor]
38
+ def initialize()
39
+ # Pulp seems to expect the ID to be export_distributor, not a random
40
+ super({:id => type_id})
41
+ end
42
+
43
+ # Distributor Type id
44
+ #
45
+ # @return [string]
46
+ def self.type_id
47
+ 'nodes_http_distributor'
48
+ end
49
+
50
+ # generate the pulp config for the export distributor
51
+ #
52
+ # @return [Hash]
53
+ def config
54
+ to_ret = as_json
55
+ to_ret.delete('auto_publish')
56
+ to_ret.delete('id')
57
+ to_ret
58
+ end
59
+ end
60
+ end
61
+ end
@@ -25,7 +25,9 @@ require 'active_support/json'
25
25
  require 'securerandom'
26
26
 
27
27
  module Runcible
28
- module Extensions
28
+ module Models
29
+ # Requires the pulp-katello-plugins
30
+ # https://github.com/Katello/pulp-katello-plugins
29
31
  class YumCloneDistributor < Distributor
30
32
 
31
33
  #optional
@@ -25,7 +25,7 @@ require 'active_support/json'
25
25
  require 'securerandom'
26
26
 
27
27
  module Runcible
28
- module Extensions
28
+ module Models
29
29
  class YumDistributor < Distributor
30
30
  #required
31
31
  attr_accessor "relative_url", "http", "https"
@@ -46,7 +46,7 @@ module Runcible
46
46
  end
47
47
 
48
48
  def config
49
- to_ret = self.as_json
49
+ to_ret = as_json
50
50
  to_ret.delete('auto_publish')
51
51
  to_ret.delete('id')
52
52
  to_ret
@@ -22,7 +22,7 @@
22
22
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
23
 
24
24
  module Runcible
25
- module Extensions
25
+ module Models
26
26
  class YumImporter < Importer
27
27
  ID = 'yum_importer'
28
28
 
@@ -37,7 +37,7 @@ module Runcible
37
37
  end
38
38
 
39
39
  def config
40
- self.as_json
40
+ as_json
41
41
  end
42
42
  end
43
43
  end
@@ -40,7 +40,7 @@ module Runcible
40
40
  # @param [String] id the ID of the consumer
41
41
  # @param [Hash] optional container for all optional parameters
42
42
  # @return [RestClient::Response]
43
- def self.create(id, optional={})
43
+ def create(id, optional={})
44
44
  required = required_params(binding.send(:local_variables), binding)
45
45
  call(:post, path, :payload => { :required => required, :optional => optional })
46
46
  end
@@ -49,7 +49,7 @@ module Runcible
49
49
  #
50
50
  # @param [String] id the ID of the consumer
51
51
  # @return [RestClient::Response]
52
- def self.retrieve(id)
52
+ def retrieve(id)
53
53
  call(:get, path(id))
54
54
  end
55
55
 
@@ -58,7 +58,7 @@ module Runcible
58
58
  # @param [String] id the ID of the consumer
59
59
  # @param [Hash] optional container for all optional parameters
60
60
  # @return [RestClient::Response]
61
- def self.update(id, optional={})
61
+ def update(id, optional={})
62
62
  call(:put, path(id), :payload => { :delta => optional })
63
63
  end
64
64
 
@@ -66,7 +66,7 @@ module Runcible
66
66
  #
67
67
  # @param [String] id the id of the consumer
68
68
  # @return [RestClient::Response]
69
- def self.delete(id)
69
+ def delete(id)
70
70
  call(:delete, path(id))
71
71
  end
72
72
 
@@ -76,7 +76,7 @@ module Runcible
76
76
  # @param [String] content_type the content type
77
77
  # @param [Hash] profile hash representing the consumer profile
78
78
  # @return [RestClient::Response]
79
- def self.upload_profile(id, content_type, profile)
79
+ def upload_profile(id, content_type, profile)
80
80
  required = required_params(binding.send(:local_variables), binding, ["id"])
81
81
  call(:post, path("#{id}/profiles/"), :payload => { :required => required })
82
82
  end
@@ -86,7 +86,7 @@ module Runcible
86
86
  # @param [String] id the ID of the consumer
87
87
  # @param [String] content_type the content type
88
88
  # @return [RestClient::Response]
89
- def self.retrieve_profile(id, content_type)
89
+ def retrieve_profile(id, content_type)
90
90
  call(:get, path("#{id}/profiles/#{content_type}/"))
91
91
  end
92
92
 
@@ -96,7 +96,7 @@ module Runcible
96
96
  # @param [String] repo_id the ID of the repository
97
97
  # @param [String] distributor_id the ID of the distributor
98
98
  # @return [RestClient::Response]
99
- def self.retrieve_binding(id, repo_id, distributor_id)
99
+ def retrieve_binding(id, repo_id, distributor_id)
100
100
  call(:get, path("#{id}/bindings/#{repo_id}/#{distributor_id}"))
101
101
  end
102
102
 
@@ -104,7 +104,7 @@ module Runcible
104
104
  #
105
105
  # @param [String] id the ID of the consumer
106
106
  # @return [RestClient::Response]
107
- def self.retrieve_bindings(id)
107
+ def retrieve_bindings(id)
108
108
  call(:get, path("#{id}/bindings/"))
109
109
  end
110
110
 
@@ -115,7 +115,7 @@ module Runcible
115
115
  # @param [String] distributor_id the ID of the distributor
116
116
  # @param [Hash] optional optional parameters
117
117
  # @return [RestClient::Response]
118
- def self.bind(id, repo_id, distributor_id, optional={})
118
+ def bind(id, repo_id, distributor_id, optional={})
119
119
  required = required_params(binding.send(:local_variables), binding, ["id"])
120
120
  call(:post, path("#{id}/bindings/"), :payload => { :required => required, :optional=>optional })
121
121
  end
@@ -126,7 +126,7 @@ module Runcible
126
126
  # @param [String] repo_id the ID of the repository
127
127
  # @param [String] distributor_id the ID of the distributor
128
128
  # @return [RestClient::Response]
129
- def self.unbind(id, repo_id, distributor_id)
129
+ def unbind(id, repo_id, distributor_id)
130
130
  call(:delete, path("#{id}/bindings/#{repo_id}/#{distributor_id}"))
131
131
  end
132
132
 
@@ -136,7 +136,7 @@ module Runcible
136
136
  # @param [Array] units array of units to install
137
137
  # @param [Hash] options hash of install options
138
138
  # @return [RestClient::Response]
139
- def self.install_units(id, units, options={})
139
+ def install_units(id, units, options={})
140
140
  required = required_params(binding.send(:local_variables), binding, ["id"])
141
141
  call(:post, path("#{id}/actions/content/install/"), :payload => { :required => required })
142
142
  end
@@ -147,7 +147,7 @@ module Runcible
147
147
  # @param [Array] units array of units to update
148
148
  # @param [Hash] options hash of update options
149
149
  # @return [RestClient::Response]
150
- def self.update_units(id, units, options={})
150
+ def update_units(id, units, options={})
151
151
  required = required_params(binding.send(:local_variables), binding, ["id"])
152
152
  call(:post, path("#{id}/actions/content/update/"), :payload => { :required => required })
153
153
  end
@@ -158,7 +158,7 @@ module Runcible
158
158
  # @param [Array] units array of units to uninstall
159
159
  # @param [Hash] options hash of uninstall options
160
160
  # @return [RestClient::Response]
161
- def self.uninstall_units(id, units, options={})
161
+ def uninstall_units(id, units, options={})
162
162
  required = required_params(binding.send(:local_variables), binding, ["id"])
163
163
  call(:post, path("#{id}/actions/content/uninstall/"), :payload => { :required => required })
164
164
  end
@@ -167,7 +167,7 @@ module Runcible
167
167
  #
168
168
  # @param [Hash] options hash of uninstall options
169
169
  # @return [RestClient::Response]
170
- def self.applicability(options={})
170
+ def applicability(options={})
171
171
  call(:post, path("actions/content/applicability/"), :payload => { :required => options })
172
172
  end
173
173