kamaze-version 1.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1ed38b410f00dcebd12e53ee1c45dea6614c4270028394a30635192c9d6dea3d
4
+ data.tar.gz: c178c9e7fc4d18b17f9e48f9d573a026ebfe41e2d9b0d544e7d5bf61dce09ae6
5
+ SHA512:
6
+ metadata.gz: 2ec693c1c924eaae1c988beb69f210e7f25d94aae12838fd0046277edbab7c9190c4d733729f72b099035da310b7e1563ed787b31b132002d26ceee10fc7d320
7
+ data.tar.gz: a1e4401d485d5a92b6cc62a953840c14b9da2582c1953a60132638082d6fa54b4ffc4ba4f6401acb64d760332821ffb6a0cd35c1893524a22c846bc26eaad6c0
@@ -0,0 +1,16 @@
1
+ # vim: ft=sh
2
+
3
+ lib/**/*.rb \
4
+ --no-progress \
5
+ --markup-provider 'redcarpet' \
6
+ --markup 'markdown' \
7
+ --charset 'utf-8' \
8
+ --protected --private --embed-mixins \
9
+ --tag type:'type' --hide-tag 'type' \
10
+ --readme README.md \
11
+ --exclude '_flymake\\.rb$' \
12
+ --exclude '/\\.#'
13
+
14
+ # Local Variables:
15
+ # mode: sh
16
+ # End:
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
4
+ # License GPLv3+: GNU GPL version 3 or later
5
+ # <http://www.gnu.org/licenses/gpl.html>.
6
+ # This is free software: you are free to change and redistribute it.
7
+ # There is NO WARRANTY, to the extent permitted by law.
8
+
9
+ $LOAD_PATH.unshift(__dir__)
10
+
11
+ lock = Dir.chdir("#{__dir__}/..") do
12
+ [['gems.rb', 'gems.locked'], ['Gemfile', 'Gemfile.lock']]
13
+ .map { |m| Dir.glob(m).size >= 2 }
14
+ .include?(true)
15
+ end
16
+
17
+ if lock
18
+ require 'rubygems'
19
+ require 'bundler/setup'
20
+
21
+ if Gem::Specification.find_all_by_name('kamaze-project').any?
22
+ require 'kamaze/project/core_ext/pp'
23
+ end
24
+ end
@@ -0,0 +1,141 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
4
+ # License GPLv3+: GNU GPL version 3 or later
5
+ # <http://www.gnu.org/licenses/gpl.html>.
6
+ # This is free software: you are free to change and redistribute it.
7
+ # There is NO WARRANTY, to the extent permitted by law.
8
+
9
+ autoload :Pathname, 'pathname'
10
+ autoload :Yaml, 'yaml'
11
+ require 'dry/inflector'
12
+
13
+ # rubocop:disable Style/Documentation
14
+
15
+ module Kamaze
16
+ class Version
17
+ autoload :VERSION, "#{__dir__}/version/version"
18
+ end
19
+ end
20
+
21
+ # rubocop:enable Style/Documentation
22
+
23
+ # Describe version using a YAML file.
24
+ #
25
+ # @see https://github.com/jcangas/version_info
26
+ class Kamaze::Version
27
+ # Get filepath used to parse version (YAML file).
28
+ #
29
+ # @return [Pathname|String]
30
+ attr_reader :file
31
+
32
+ # @param [String|Pathname|nil] file
33
+ def initialize(file = nil)
34
+ (file.nil? ? file_from(caller_locations) : file).tap do |file|
35
+ @file = ::Pathname.new(file).freeze
36
+ end
37
+ parse!
38
+ end
39
+
40
+ # Denote version is semantically valid
41
+ #
42
+ # @return [Boolean]
43
+ def valid?
44
+ !!(/^([0-9]+\.){2}[0-9]+$/ =~ self.to_s)
45
+ rescue ::NameError
46
+ false
47
+ end
48
+
49
+ # @raise [NameError]
50
+ # @return [String]
51
+ def to_s
52
+ [major, minor, patch].map(&:to_i).join('.')
53
+ end
54
+
55
+ # @return [Hash]
56
+ def to_h
57
+ parsed.clone.freeze
58
+ end
59
+
60
+ # Return the path as a String.
61
+ #
62
+ # @see https://ruby-doc.org/stdlib-2.5.0/libdoc/pathname/rdoc/Pathname.html#method-i-to_path
63
+ # @return [String]
64
+ def to_path
65
+ file.to_s
66
+ end
67
+
68
+ protected
69
+
70
+ # Get parsed data
71
+ #
72
+ # @return [Hash]
73
+ attr_reader :parsed
74
+
75
+ # Get file automagically
76
+ #
77
+ # @param [Array] locations
78
+ # @return [Pathname]
79
+ def file_from(locations = caller_locations)
80
+ location = locations.first.path
81
+
82
+ Pathname.new(location).dirname.realpath.join('version.yml')
83
+ end
84
+
85
+ # Parse given file
86
+ #
87
+ # @param [Pathname] file
88
+ # @raise [Psych::DisallowedClass]
89
+ # @return [Hash]
90
+ def parse(file)
91
+ YAML.safe_load(file.read) || {}
92
+ rescue Errno::ENOENT
93
+ {}
94
+ end
95
+
96
+ # Parse and set attributes
97
+ #
98
+ # @return [self]
99
+ def parse!
100
+ @parsed = self.parse(self.file)
101
+ .map { |k, v| self.attr_set(k, v) }
102
+ .compact
103
+ .to_h
104
+
105
+ self
106
+ end
107
+
108
+ # Define attribute (as ``ro`` attr) and set value.
109
+ #
110
+ # @param [String|Symbol] attr_name
111
+ # @param [Object] attr_value
112
+ # @return [Array|nil]
113
+ def attr_set(attr_name, attr_value)
114
+ attr_name = Dry::Inflector.new.underscore(attr_name.to_s)
115
+
116
+ return nil unless eligible_attr?(attr_name)
117
+
118
+ self.singleton_class.class_eval do
119
+ attr_accessor attr_name
120
+ # rubocop:disable Style/AccessModifierDeclarations
121
+ protected "#{attr_name}="
122
+ # rubocop:enable Style/AccessModifierDeclarations
123
+ end
124
+
125
+ self.__send__("#{attr_name}=", attr_value.freeze)
126
+
127
+ [attr_name, attr_value.freeze].freeze
128
+ end
129
+
130
+ # Denote given attr name is eligible (to be set)
131
+ #
132
+ # @param [String|Symbol] attr_name
133
+ # @return [Boolean]
134
+ def eligible_attr?(attr_name)
135
+ [attr_name, "#{attr_name}="].each do |v|
136
+ return false if self.respond_to?(v, true)
137
+ end
138
+
139
+ true
140
+ end
141
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
4
+ # License GPLv3+: GNU GPL version 3 or later
5
+ # <http://www.gnu.org/licenses/gpl.html>.
6
+ # This is free software: you are free to change and redistribute it.
7
+ # There is NO WARRANTY, to the extent permitted by law.
8
+
9
+ require_relative '../version'
10
+
11
+ class Kamaze::Version
12
+ VERSION = self.new.freeze
13
+ end
@@ -0,0 +1,17 @@
1
+ ---
2
+ major: 1
3
+ minor: 0
4
+ patch: 0
5
+ authors: ['Dimitri Arrigoni']
6
+ email: 'dimitri@arrigoni.me'
7
+ date: '2018-06-21'
8
+ summary: 'Provide version as an object'
9
+ description: 'Why use a simple String, when you can use an Object?'
10
+ homepage: 'https://github.com/SwagDevOps/kamaze-version'
11
+ licenses: ['GPL-3.0']
12
+ license_header: |
13
+ Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
14
+ License GPLv3+: GNU GPL version 3 or later
15
+ <http://www.gnu.org/licenses/gpl.html>.
16
+ This is free software: you are free to change and redistribute it.
17
+ There is NO WARRANTY, to the extent permitted by law.
metadata ADDED
@@ -0,0 +1,62 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kamaze-version
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Dimitri Arrigoni
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-06-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dry-inflector
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.1'
27
+ description: Why use a simple String, when you can use an Object?
28
+ email: dimitri@arrigoni.me
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - ".yardopts"
34
+ - lib/kamaze-version.rb
35
+ - lib/kamaze/version.rb
36
+ - lib/kamaze/version/version.rb
37
+ - lib/kamaze/version/version.yml
38
+ homepage: https://github.com/SwagDevOps/kamaze-version
39
+ licenses:
40
+ - GPL-3.0
41
+ metadata: {}
42
+ post_install_message:
43
+ rdoc_options: []
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 2.3.0
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ requirements: []
57
+ rubyforge_project:
58
+ rubygems_version: 2.7.6
59
+ signing_key:
60
+ specification_version: 4
61
+ summary: Provide version as an object
62
+ test_files: []