puppet-forge-server 1.4.3 → 1.5.0

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: a52acbf7c0c982ac11d22101fad03ebfc4b013e2
4
- data.tar.gz: 3893b0a073c6122880c9488dcbf1f24a056c43bd
3
+ metadata.gz: c2f76a6ce28b85b7c576026282e4a7d17d98786c
4
+ data.tar.gz: 56f8489041c6e6e1dc255da8b1f258ae1fd6bc2e
5
5
  SHA512:
6
- metadata.gz: 4603163ac0d1c51a41beaa6f6b3c118b2c90c80590af9afb10a57f831d8a27aabb548673a2c479aaba34c3a312539f46e4c534f9b14acce4ab0ed89f50db6a1c
7
- data.tar.gz: 59725a047ab27ff5dfea353fb0d3801d336cb47034f66a9d165ef623e686513520982080afa25d32c2aea2ab22c758d8a3c0645a9be572d9f30271adc8269cb8
6
+ metadata.gz: 5998e7d012207cc1acbfe5ae4b5e6cf9167c8839a591c29535016d7be70b1eacdfbd8d05c38c7e08861a9ecaa94f02eedf473fdf1c464c37620062490f7033ee
7
+ data.tar.gz: ba83a1f3d43b6a5b87910a4948decab146f9533a3bac2f5eebd91e4417cf0abec591772beca9ed4c5ccd5663fdbcc2d99640e529ad94000a9ed36bf1f7f4ba1a
@@ -51,6 +51,7 @@ module PuppetForgeServer
51
51
  module Models
52
52
  autoload :Builder, 'puppet_forge_server/models/builder'
53
53
  autoload :Metadata, 'puppet_forge_server/models/metadata'
54
+ autoload :Dependency, 'puppet_forge_server/models/dependency'
54
55
  end
55
56
 
56
57
  module Utils
@@ -21,9 +21,7 @@ module PuppetForgeServer::Api::V1
21
21
  {
22
22
  :file => "/api/v1/files#{element[:path]}",
23
23
  :version => element[:metadata].version,
24
- :dependencies => element[:metadata].dependencies.map do |dependency|
25
- [dependency['name'], dependency['version_requirement']]
26
- end
24
+ :dependencies => element[:metadata].dependencies.map {|dep| [dep.name, dep.version_requirement]}
27
25
  }
28
26
  end.version_sort_by { |r| r[:version] }
29
27
  end
@@ -44,8 +44,7 @@ module PuppetForgeServer::App
44
44
  halt 400, json({:errors => ["'#{params[:module]}' is not a valid release slug"]}) unless author && name && version
45
45
  releases = releases(author, name, version)
46
46
  halt 404, json({:errors => ['404 Not found']}) unless releases
47
- PuppetForgeServer::Logger.get(:server).error "Requested releases count is more than 1:\n#{releases}" if releases.count > 1
48
- json releases.first
47
+ json releases.last
49
48
  end
50
49
 
51
50
  get '/v3/releases' do
@@ -73,8 +72,12 @@ module PuppetForgeServer::App
73
72
  backend.get_metadata(author, name)
74
73
  end.flatten.compact.uniq
75
74
  halt 404, json({:errors => ['404 Not found']}) if metadata.empty?
76
- PuppetForgeServer::Logger.get(:server).error "Requested module count is more than 1:\n#{metadata}" if metadata.count > 1
77
- json get_modules(metadata).first
75
+ modules = get_modules(metadata)
76
+ if modules.count > 1
77
+ PuppetForgeServer::Logger.get(:server).warn "There were more than oen module found for '#{author}-#{name}'"
78
+ PuppetForgeServer::Logger.get(:server).debug(modules.to_s)
79
+ end
80
+ json modules.first
78
81
  end
79
82
 
80
83
  get '/v3/modules' do
@@ -61,11 +61,18 @@ module PuppetForgeServer::Backends
61
61
  return nil
62
62
  end
63
63
 
64
+ def parse_dependencies(metadata)
65
+ metadata.dependencies = metadata.dependencies.dup.map do |dependency|
66
+ PuppetForgeServer::Models::Dependency.new({:name => dependency['name'], :version_requirement => dependency['version_requirement']})
67
+ end.flatten
68
+ metadata
69
+ end
70
+
64
71
  def get_file_metadata(file_name, options)
65
72
  options = ({:with_checksum => true}).merge(options)
66
73
  Dir["#{@module_dir}/**/#{file_name}"].map do |path|
67
74
  {
68
- :metadata => PuppetForgeServer::Models::Metadata.new(read_metadata(path)),
75
+ :metadata => parse_dependencies(PuppetForgeServer::Models::Metadata.new(read_metadata(path))),
69
76
  :checksum => options[:with_checksum] == true ? Digest::MD5.hexdigest(File.read(path)) : nil,
70
77
  :path => "/#{Pathname.new(path).relative_path_from(Pathname.new(@module_dir))}"
71
78
  }
@@ -24,6 +24,7 @@ module PuppetForgeServer::Backends
24
24
  @url = url
25
25
  @cache_dir = File.join(cache_dir, Digest::SHA1.hexdigest(@url))
26
26
  @http_client = http_client
27
+ @log = PuppetForgeServer::Logger.get
27
28
 
28
29
  # Create directory structure for all alphabetic letters
29
30
  (10...36).each do |i|
@@ -43,16 +44,20 @@ module PuppetForgeServer::Backends
43
44
  path = File.join(@cache_dir, file_name[0], file_name)
44
45
  end
45
46
  File.open(path, 'rb')
46
- rescue OpenURI::HTTPError
47
- # ignore
47
+ rescue => e
48
+ @log.error("#{self.class.name} failed downloading file '#{relative_path}'")
49
+ @log.error("Error: #{e}")
50
+ return nil
48
51
  end
49
52
 
50
53
  def upload(file_data)
51
- PuppetForgeServer::Logger.get(:server).debug 'File upload is not supported by the proxy backends'
54
+ @log.debug 'File upload is not supported by the proxy backends'
52
55
  false
53
56
  end
54
57
 
55
58
  protected
59
+ attr_reader :log
60
+
56
61
  def get(relative_url)
57
62
  @http_client.get(url(relative_url))
58
63
  end
@@ -33,8 +33,10 @@ module PuppetForgeServer::Backends
33
33
  query ="#{author}/#{name}"
34
34
  begin
35
35
  get_module_metadata(JSON.parse(get("/modules.json?q=#{query}")).select { |e| e['full_name'].match("#{query}") }, options)
36
- rescue OpenURI::HTTPError
37
- #ignore
36
+ rescue => e
37
+ @log.debug("#{self.class.name} failed querying metadata for '#{query}' with options #{options}")
38
+ @log.debug("Error: #{e}")
39
+ return nil
38
40
  end
39
41
  end
40
42
 
@@ -42,8 +44,10 @@ module PuppetForgeServer::Backends
42
44
  options = ({:with_checksum => true}).merge(options)
43
45
  begin
44
46
  get_module_metadata(JSON.parse(get("/modules.json?q=#{query}")).select { |e| e['full_name'].match("*#{query}*") }, options)
45
- rescue OpenURI::HTTPError
46
- #ignore
47
+ rescue => e
48
+ @log.debug("#{self.class.name} failed querying metadata for '#{query}' with options #{options}")
49
+ @log.debug("Error: #{e}")
50
+ return nil
47
51
  end
48
52
  end
49
53
 
@@ -58,6 +62,13 @@ module PuppetForgeServer::Backends
58
62
  element
59
63
  end
60
64
 
65
+ def parse_dependencies(metadata)
66
+ metadata.dependencies = metadata.dependencies.dup.map do |dependency|
67
+ PuppetForgeServer::Models::Dependency.new({:name => dependency[0], :version_requirement => dependency.length > 1 ? dependency[1] : nil})
68
+ end.flatten
69
+ metadata
70
+ end
71
+
61
72
  def get_module_metadata(modules, options)
62
73
  modules.map do |element|
63
74
  version = options['version'] ? "&version=#{options['version']}" : ''
@@ -65,7 +76,7 @@ module PuppetForgeServer::Backends
65
76
  tags = element['tag_list'] ? element['tag_list'] : nil
66
77
  raw_metadata = read_metadata(element, release)
67
78
  {
68
- :metadata => PuppetForgeServer::Models::Metadata.new(raw_metadata),
79
+ :metadata => parse_dependencies(PuppetForgeServer::Models::Metadata.new(raw_metadata)),
69
80
  :checksum => options[:with_checksum] ? Digest::MD5.hexdigest(File.read(get_file_buffer(release['file']))) : nil,
70
81
  :path => "#{release['file']}",
71
82
  :tags => tags
@@ -31,8 +31,10 @@ module PuppetForgeServer::Backends
31
31
  begin
32
32
  releases = options[:version] ? [JSON.parse(get("/v3/releases/#{query}-#{options[:version]}"))] : get_all_result_pages("/v3/releases?module=#{query}")
33
33
  get_release_metadata(releases)
34
- rescue OpenURI::HTTPError
35
- #ignore
34
+ rescue => e
35
+ @log.debug("#{self.class.name} failed querying metadata for '#{query}' with options #{options}")
36
+ @log.debug("Error: #{e}")
37
+ nil
36
38
  end
37
39
  end
38
40
 
@@ -40,8 +42,10 @@ module PuppetForgeServer::Backends
40
42
  begin
41
43
  releases = get_all_result_pages("/v3/modules?query=#{query}").map {|element| element['current_release']}
42
44
  get_release_metadata(releases)
43
- rescue OpenURI::HTTPError
44
- #ignore
45
+ rescue => e
46
+ @log.debug("#{self.class.name} failed querying metadata for '#{query}' with options #{options}")
47
+ @log.debug("Error: #{e}")
48
+ nil
45
49
  end
46
50
  end
47
51
 
@@ -61,10 +65,17 @@ module PuppetForgeServer::Backends
61
65
  metadata
62
66
  end
63
67
 
68
+ def parse_dependencies(metadata)
69
+ metadata.dependencies = metadata.dependencies.dup.map do |dependency|
70
+ PuppetForgeServer::Models::Dependency.new({:name => dependency['name'], :version_requirement => dependency['version_requirement']})
71
+ end.flatten
72
+ metadata
73
+ end
74
+
64
75
  def get_release_metadata(releases)
65
76
  releases.map do |element|
66
77
  {
67
- :metadata => PuppetForgeServer::Models::Metadata.new(normalize_metadata(element['metadata'])),
78
+ :metadata => parse_dependencies(PuppetForgeServer::Models::Metadata.new(normalize_metadata(element['metadata']))),
68
79
  :checksum => element['file_md5'],
69
80
  :path => element['file_uri'],
70
81
  :tags => (element['tags'] + (element['metadata']['tags'] ? element['metadata']['tags'] : [])).flatten.uniq
@@ -19,6 +19,7 @@ require 'logger'
19
19
 
20
20
  module PuppetForgeServer
21
21
  class Logger
22
+ @@DEFAULT_LOG_LEVEL = ::Logger::INFO
22
23
  @@DEFAULT_DESTINATION = STDERR
23
24
  @@DEFAULT_DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
24
25
  @static_loggers = {:server => nil, :access => nil}
@@ -30,6 +31,7 @@ module PuppetForgeServer
30
31
  datetime = datetime.strftime @@DEFAULT_DATETIME_FORMAT
31
32
  "[#{datetime}] #{severity} #{msg}\n"
32
33
  end
34
+ logger.level = @@DEFAULT_LOG_LEVEL
33
35
  logger
34
36
  end
35
37
  end
@@ -26,10 +26,17 @@ module PuppetForgeServer::Models
26
26
  PuppetForge::Logger.get.error "Method #{method_name} with args #{args} not found in #{self.class.to_s}" unless method_name == :to_ary
27
27
  end
28
28
 
29
- def to_hash
29
+ def to_hash(obj = self)
30
30
  hash = {}
31
- self.instance_variables.each do |var|
32
- hash[var.to_s.delete('@')] = self.instance_variable_get var
31
+ obj.instance_variables.each do |var|
32
+ var_value = obj.instance_variable_get(var)
33
+ hash[var.to_s.delete('@')] = if var_value.kind_of?(Array)
34
+ var_value.map {|v| to_hash(v)}
35
+ elsif var_value.respond_to?(:to_hash)
36
+ var_value.to_hash
37
+ else
38
+ var_value
39
+ end
33
40
  end
34
41
  hash
35
42
  end
@@ -0,0 +1,44 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Copyright 2015 North Development AB
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+
18
+ module PuppetForgeServer::Models
19
+ class Dependency < Builder
20
+
21
+ attr_accessor :name
22
+ attr_accessor :version_requirement
23
+
24
+ def initialize(attributes)
25
+ super(attributes)
26
+ end
27
+
28
+ def ==(other)
29
+ other && self.class.equal?(other.class) &&
30
+ @name == other.name &&
31
+ @version_requirement == other.version_requirement
32
+ end
33
+
34
+ def hash
35
+ @name.hash ^ @version_requirement.hash
36
+ end
37
+
38
+ def eql?(other)
39
+ other && self.class.equal?(other.class) &&
40
+ @name.eql?(other.name) &&
41
+ @version_requirement.eql?(other.version_requirement)
42
+ end
43
+ end
44
+ end
@@ -40,11 +40,17 @@ module PuppetForgeServer
40
40
  if options[:log_dir]
41
41
  FileUtils.mkdir_p options[:log_dir]
42
42
  server_loggers = [File.join(options[:log_dir], 'server.log')]
43
- server_loggers << STDERR if options[:debug]
44
43
  access_loggers = [File.join(options[:log_dir], 'access.log')]
45
- access_loggers << STDERR if options[:debug]
44
+ if options[:debug]
45
+ server_loggers << STDERR
46
+ access_loggers << STDERR
47
+ end
46
48
  PuppetForgeServer::Logger.set({:server => server_loggers, :access => access_loggers})
47
49
  end
50
+ if options[:debug]
51
+ PuppetForgeServer::Logger.get(:server).level = ::Logger::DEBUG
52
+ PuppetForgeServer::Logger.get(:access).level = ::Logger::DEBUG
53
+ end
48
54
  PuppetForgeServer::Logger.get
49
55
  end
50
56
 
@@ -15,5 +15,5 @@
15
15
  # limitations under the License.
16
16
 
17
17
  module PuppetForgeServer
18
- VERSION = '1.4.3'
18
+ VERSION = '1.5.0'
19
19
  end
@@ -48,6 +48,7 @@ module PuppetForgeServer
48
48
 
49
49
  describe '#debug' do
50
50
  it 'should log message on level debug' do
51
+ logger.level = ::Logger::DEBUG
51
52
  expect(logger).to respond_to(:debug)
52
53
  logger.debug msg
53
54
  expect(test_io.string).to include("DEBUG #{msg}")
@@ -0,0 +1,46 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Copyright 2015 North Development AB
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'spec_helper'
18
+
19
+ module PuppetForgeServer::Models
20
+ describe Dependency do
21
+ let(:name) { 'dummy_name' }
22
+ let(:version_requirement) { '0.0.0' }
23
+ let(:dependency) { PuppetForgeServer::Models::Dependency.new({:name => name, :version_requirement => version_requirement}) }
24
+ describe '#initialize' do
25
+ it 'should create a dependency instance' do
26
+ expect(dependency.name).to eq name
27
+ expect(dependency.version_requirement).to eq version_requirement
28
+ end
29
+ end
30
+
31
+ describe '#hash' do
32
+ it 'should calculate hash from name and version_requirement' do
33
+ expect(dependency.hash).to eq(name.hash ^ version_requirement.hash)
34
+ end
35
+ end
36
+
37
+ describe '#eql?' do
38
+ it 'should be equal based only on name and version_requirement' do
39
+ dependency2 = dependency.clone
40
+ expect(dependency).to eq dependency2
41
+ dependency2.name = 'something_else'
42
+ expect(dependency).not_to eq dependency2
43
+ end
44
+ end
45
+ end
46
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-forge-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.3
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ilja Bobkevic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-22 00:00:00.000000000 Z
11
+ date: 2015-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
@@ -188,6 +188,7 @@ files:
188
188
  - lib/puppet_forge_server/http/http_client.rb
189
189
  - lib/puppet_forge_server/logger.rb
190
190
  - lib/puppet_forge_server/models/builder.rb
191
+ - lib/puppet_forge_server/models/dependency.rb
191
192
  - lib/puppet_forge_server/models/metadata.rb
192
193
  - lib/puppet_forge_server/patches.rb
193
194
  - lib/puppet_forge_server/server.rb
@@ -202,6 +203,7 @@ files:
202
203
  - spec/unit/app/version2_spec.rb
203
204
  - spec/unit/backends/directory_spec.rb
204
205
  - spec/unit/logger_spec.rb
206
+ - spec/unit/models/dependency_spec.rb
205
207
  - spec/unit/models/metadata_spec.rb
206
208
  - spec/unit/server_spec.rb
207
209
  homepage: https://github.com/unibet/puppet-forge-server
@@ -233,5 +235,6 @@ test_files:
233
235
  - spec/unit/app/version2_spec.rb
234
236
  - spec/unit/backends/directory_spec.rb
235
237
  - spec/unit/logger_spec.rb
238
+ - spec/unit/models/dependency_spec.rb
236
239
  - spec/unit/models/metadata_spec.rb
237
240
  - spec/unit/server_spec.rb