Class: Berkshelf::Source
- Inherits:
-
Object
- Object
- Berkshelf::Source
- Includes:
- Comparable
- Defined in:
- lib/berkshelf/source.rb
Instance Attribute Summary collapse
-
#source ⇒ Object
Returns the value of attribute source.
Instance Method Summary collapse
- #==(other) ⇒ Object
- #api_client ⇒ Object
-
#build_universe ⇒ Array<APIClient::RemoteCookbook>
Forcefully obtain the universe from the API endpoint and assign it to #universe.
- #cookbook(name, version) ⇒ APIClient::RemoteCookbook
-
#default? ⇒ true, false
Determine if this source is a “default” source, as defined in the Berksfile.
- #hash ⇒ Object
-
#initialize(source) ⇒ Source
constructor
A new instance of Source.
- #inspect ⇒ Object
- #latest(name) ⇒ APIClient::RemoteCookbook
-
#search(name) ⇒ Array<APIClient::RemoteCookbook]
The list of remote cookbooks that match the given query.
- #to_s ⇒ Object
-
#universe ⇒ Array<APIClient::RemoteCookbook>
Return the universe from the API endpoint.
- #uri ⇒ Object
- #versions(name) ⇒ Array<APIClient::RemoteCookbook>
Constructor Details
#initialize(source) ⇒ Source
Returns a new instance of Source.
10 11 12 13 |
# File 'lib/berkshelf/source.rb', line 10 def initialize(source) @source = source @universe = nil end |
Instance Attribute Details
#source ⇒ Object
Returns the value of attribute source.
7 8 9 |
# File 'lib/berkshelf/source.rb', line 7 def source @source end |
Instance Method Details
#==(other) ⇒ Object
115 116 117 118 |
# File 'lib/berkshelf/source.rb', line 115 def ==(other) return false unless other.is_a?(self.class) uri == other.uri end |
#api_client ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/berkshelf/source.rb', line 15 def api_client @api_client ||= begin if source == :chef_server APIClient.chef_server( ssl: {verify: Berkshelf::Config.instance.ssl.verify}, client_name: Berkshelf::Config.instance.chef.node_name, server_url: Berkshelf::Config.instance.chef.chef_server_url, client_key: Berkshelf::Config.instance.chef.client_key, ) else APIClient.new(uri, ssl: {verify: Berkshelf::Config.instance.ssl.verify}) end end end |
#build_universe ⇒ Array<APIClient::RemoteCookbook>
42 43 44 45 46 47 |
# File 'lib/berkshelf/source.rb', line 42 def build_universe @universe = api_client.universe rescue => ex @universe = Array.new raise ex end |
#cookbook(name, version) ⇒ APIClient::RemoteCookbook
64 65 66 |
# File 'lib/berkshelf/source.rb', line 64 def cookbook(name, version) universe.find { |cookbook| cookbook.name == name && cookbook.version == version } end |
#default? ⇒ true, false
Determine if this source is a “default” source, as defined in the Berksfile.
85 86 87 |
# File 'lib/berkshelf/source.rb', line 85 def default? @default_ ||= uri.host == URI.parse(Berksfile::DEFAULT_API_URL).host end |
#hash ⇒ Object
111 112 113 |
# File 'lib/berkshelf/source.rb', line 111 def hash @uri.host.hash end |
#inspect ⇒ Object
107 108 109 |
# File 'lib/berkshelf/source.rb', line 107 def inspect "#<#{self.class.name} uri: #{@uri.to_s.inspect}>" end |
#latest(name) ⇒ APIClient::RemoteCookbook
92 93 94 |
# File 'lib/berkshelf/source.rb', line 92 def latest(name) versions(name).sort.last end |
#search(name) ⇒ Array<APIClient::RemoteCookbook]
The list of remote cookbooks that match the given query.
73 74 75 76 77 78 |
# File 'lib/berkshelf/source.rb', line 73 def search(name) universe .select { |cookbook| cookbook.name =~ Regexp.new(name) } .group_by(&:name) .collect { |_, versions| versions.max_by { |v| Semverse::Version.new(v.version) } } end |
#to_s ⇒ Object
103 104 105 |
# File 'lib/berkshelf/source.rb', line 103 def to_s "#{uri}" end |
#universe ⇒ Array<APIClient::RemoteCookbook>
Return the universe from the API endpoint.
This is lazily loaded so the universe will be retrieved from the API endpoint on the first call and cached for future calls. Send the #build_universe message if you want to reload the cached universe.
56 57 58 |
# File 'lib/berkshelf/source.rb', line 56 def universe @universe || build_universe end |
#uri ⇒ Object
30 31 32 33 34 35 36 |
# File 'lib/berkshelf/source.rb', line 30 def uri @uri ||= if source == :chef_server SourceURI.parse(Berkshelf::Config.instance.chef.chef_server_url) else SourceURI.parse(source) end end |
#versions(name) ⇒ Array<APIClient::RemoteCookbook>
99 100 101 |
# File 'lib/berkshelf/source.rb', line 99 def versions(name) universe.select { |cookbook| cookbook.name == name } end |