arli 0.8.3 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +5 -4
- data/.travis.yml +16 -8
- data/README.md +235 -124
- data/Rakefile +1 -1
- data/arli.gemspec +1 -0
- data/exe/arli +1 -0
- data/lib/arli.rb +1 -1
- data/lib/arli/actions/action.rb +7 -33
- data/lib/arli/actions/unzip_file.rb +9 -6
- data/lib/arli/arli_file.rb +32 -28
- data/lib/arli/cli/app.rb +2 -3
- data/lib/arli/cli/command_finder.rb +2 -2
- data/lib/arli/cli/parser.rb +36 -9
- data/lib/arli/cli/parser_factory.rb +40 -38
- data/lib/arli/cli/runner.rb +0 -1
- data/lib/arli/commands/base.rb +2 -2
- data/lib/arli/commands/install.rb +49 -31
- data/lib/arli/commands/search.rb +40 -35
- data/lib/arli/configuration.rb +4 -3
- data/lib/arli/extensions.rb +6 -0
- data/lib/arli/helpers/inherited.rb +48 -0
- data/lib/arli/helpers/output.rb +187 -0
- data/lib/arli/library.rb +21 -2
- data/lib/arli/library/installer.rb +2 -2
- data/lib/arli/library/multi_version.rb +153 -0
- data/lib/arli/library/{proxy.rb → single_version.rb} +5 -20
- data/lib/arli/lock/file.rb +1 -2
- data/lib/arli/lock/formats/base.rb +8 -0
- data/lib/arli/lock/formats/cmake.rb +21 -5
- data/lib/arli/lock/formats/json.rb +2 -0
- data/lib/arli/lock/formats/text.rb +2 -0
- data/lib/arli/lock/formats/yaml.rb +3 -1
- data/lib/arli/version.rb +1 -1
- metadata +20 -5
- data/.rake_tasks~ +0 -8
- data/lib/arli/output.rb +0 -186
data/lib/arli/library.rb
CHANGED
@@ -1,8 +1,27 @@
|
|
1
|
+
require_relative 'library/single_version'
|
2
|
+
require_relative 'library/multi_version'
|
3
|
+
require 'arduino/library/model'
|
4
|
+
require 'arli/errors'
|
5
|
+
|
1
6
|
module Arli
|
2
7
|
module Library
|
8
|
+
def library_model(lib)
|
9
|
+
return lib if lib.is_a?(::Arduino::Library::Model)
|
10
|
+
::Arduino::Library::Model.from(lib).tap do |model|
|
11
|
+
if model.nil?
|
12
|
+
lib_output = (lib && lib['name']) ? lib['name'] : lib.to_s
|
13
|
+
raise Arli::Errors::LibraryNotFound, 'Error: '.bold.red +
|
14
|
+
"Library #{lib_output.yellow} ".red + "was not found.\n\n".red +
|
15
|
+
%Q[ HINT: run #{"arli search 'name: /#{lib_output}/'".green}\n] +
|
16
|
+
%Q[ to find the exact name of the library you are trying\n] +
|
17
|
+
%Q[ to install. Alternatively, provide a url: field.\n]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
3
21
|
|
22
|
+
def make_lib(lib)
|
23
|
+
::Arli::Library::SingleVersion.new(library_model(lib))
|
24
|
+
end
|
4
25
|
end
|
5
26
|
end
|
6
27
|
|
7
|
-
require_relative 'library/proxy'
|
8
|
-
require_relative 'library/installer'
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'forwardable'
|
2
2
|
require 'arli'
|
3
3
|
require 'arli/actions'
|
4
|
-
require_relative '
|
4
|
+
require_relative 'single_version'
|
5
5
|
|
6
6
|
module Arli
|
7
7
|
module Library
|
8
8
|
class Installer
|
9
|
-
include ::Arli::Output
|
9
|
+
include ::Arli::Helpers::Output
|
10
10
|
|
11
11
|
extend Forwardable
|
12
12
|
def_delegators :@library, :exists?
|
@@ -0,0 +1,153 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
require 'arli'
|
3
|
+
require 'arli/actions'
|
4
|
+
require_relative 'single_version'
|
5
|
+
|
6
|
+
module Arli
|
7
|
+
module Library
|
8
|
+
class MultiVersion
|
9
|
+
class << self
|
10
|
+
def format_methods
|
11
|
+
new({}).methods.grep(/^to_s_/).map { |m| m.to_s.gsub(/^to_s_/, '') }.map(&:to_sym)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_accessor :latest_version_library, :versions
|
16
|
+
|
17
|
+
include ::Arli::Helpers::Output
|
18
|
+
|
19
|
+
def ==(other)
|
20
|
+
other.instance_of?(self.class) && self.name == other.name
|
21
|
+
end
|
22
|
+
|
23
|
+
alias_method :eql?, :==
|
24
|
+
alias_method :lib, :latest_version_library
|
25
|
+
alias_method :lib=, :latest_version_library=
|
26
|
+
|
27
|
+
def initialize(a_lib = nil, versions = [])
|
28
|
+
Colored2.disable! if Arli.config.no_color
|
29
|
+
self.latest_version_library = a_lib if a_lib
|
30
|
+
self.versions = versions || []
|
31
|
+
self.versions << a_lib.version if (a_lib && a_lib.respond_to?(:version) && self.versions.empty?)
|
32
|
+
end
|
33
|
+
|
34
|
+
def add_version(library: nil)
|
35
|
+
if library
|
36
|
+
if lib.nil? || library.version_to_i > lib.version_to_i
|
37
|
+
self.latest_version_library = library
|
38
|
+
end
|
39
|
+
self.versions << library.version
|
40
|
+
elsif version
|
41
|
+
self.versions << library.version
|
42
|
+
end
|
43
|
+
normalize_version_array!
|
44
|
+
end
|
45
|
+
|
46
|
+
def name
|
47
|
+
latest_version_library.name
|
48
|
+
end
|
49
|
+
|
50
|
+
def hash
|
51
|
+
lib.name.hash
|
52
|
+
end
|
53
|
+
|
54
|
+
# Various print formats
|
55
|
+
# --format <ARG> is inserted after "to_s_<format>"
|
56
|
+
def to_s_with_versions(limit = 4)
|
57
|
+
append do |out|
|
58
|
+
out << library_name
|
59
|
+
out << append_truncated_version_list(limit)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def to_s_long
|
64
|
+
lib_versions = versions.clone
|
65
|
+
latest = lib_versions.pop
|
66
|
+
append do
|
67
|
+
"\n"
|
68
|
+
"Name: #{lib.name.bold.yellow}\n" +
|
69
|
+
"Versions: #{latest.bold.yellow}, #{lib_versions.reverse.join(', ').green}\n" +
|
70
|
+
(lib.author ? "Author(s): #{lib.author.red}\n" : '') +
|
71
|
+
(lib.website ? "Website: #{lib.website.cyan}\n" : '') +
|
72
|
+
"Sentence: #{(lib.sentence).blue}\n" +
|
73
|
+
((lib.paragraph && (lib.paragraph != lib.sentence)) ?
|
74
|
+
"Description: #{reformat_wrapped(lib.paragraph).magenta}\n" : "\n")
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def to_s_short
|
79
|
+
append do
|
80
|
+
printf append_name[0..45]
|
81
|
+
indent_cursor 48
|
82
|
+
printf append_latest_version
|
83
|
+
indent_cursor 60
|
84
|
+
printf append_total_versions
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def to_s_json
|
89
|
+
append do
|
90
|
+
JSON.pretty_generate(lib.to_hash) + ","
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def to_s_yaml
|
95
|
+
append do
|
96
|
+
YAML.dump(lib.to_hash)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
def stream
|
103
|
+
@stream = StringIO.new
|
104
|
+
end
|
105
|
+
|
106
|
+
def append
|
107
|
+
stream.tap do |out|
|
108
|
+
out << yield if block_given?
|
109
|
+
end.string
|
110
|
+
end
|
111
|
+
|
112
|
+
def append_architecture
|
113
|
+
unless lib.architectures.empty? || lib.architectures.include?('*')
|
114
|
+
append { "supports: #{lib.architectures.join(', ').bold.green}" }
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def append_name
|
119
|
+
append { "#{lib.name.magenta}" }
|
120
|
+
end
|
121
|
+
|
122
|
+
def append_author
|
123
|
+
append { "by #{lib.author.blue}" }
|
124
|
+
end
|
125
|
+
|
126
|
+
def append_latest_version
|
127
|
+
latest = versions.clone.pop
|
128
|
+
append { " (#{latest.cyan})" }
|
129
|
+
end
|
130
|
+
|
131
|
+
def append_total_versions
|
132
|
+
append { "(#{sprintf("%2d", versions.size)} total versions )".green}
|
133
|
+
end
|
134
|
+
|
135
|
+
def append_truncated_version_list(limit)
|
136
|
+
append { truncate_version_list(limit) }
|
137
|
+
end
|
138
|
+
|
139
|
+
def normalize_version_array!
|
140
|
+
self.versions = versions.flatten.compact.uniq.sort
|
141
|
+
end
|
142
|
+
|
143
|
+
def reformat_wrapped(s, width=70)
|
144
|
+
s.gsub(/\s+/, ' ').gsub(/(.{1,#{width}})( |\Z)/, "\\1\n ")
|
145
|
+
end
|
146
|
+
|
147
|
+
def truncate_version_list(limit)
|
148
|
+
suffix = lib.versions.size >= limit ? '...' : ''
|
149
|
+
"(#{lib.versions.size} versions: #{lib.versions.reverse[0..limit].join(', ').blue}#{suffix})"
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
@@ -1,11 +1,14 @@
|
|
1
|
-
|
1
|
+
require 'awesome_print'
|
2
2
|
require 'arli/errors'
|
3
3
|
|
4
|
+
require_relative 'installer'
|
5
|
+
require_relative 'multi_version'
|
6
|
+
|
4
7
|
module Arli
|
5
8
|
module Library
|
6
9
|
# Represents a wrapper around Arduino::Library::Model instance
|
7
10
|
# and decorates with a few additional helpers.
|
8
|
-
class
|
11
|
+
class SingleVersion
|
9
12
|
attr_accessor :lib,
|
10
13
|
:lib_dir,
|
11
14
|
:canonical_dir,
|
@@ -49,23 +52,6 @@ module Arli
|
|
49
52
|
Dir.exist?(path)
|
50
53
|
end
|
51
54
|
|
52
|
-
# Formats
|
53
|
-
def to_s_short
|
54
|
-
"#{lib.name.bold.blue} (#{lib.version.yellow}), by #{lib.author.magenta}"
|
55
|
-
end
|
56
|
-
|
57
|
-
def to_s_json
|
58
|
-
puts lib.to_json
|
59
|
-
end
|
60
|
-
|
61
|
-
def to_s_long
|
62
|
-
"#{lib.name.bold.blue} (#{lib.version.yellow}), by #{lib.author.magenta}}\n\t#{lib.description}"
|
63
|
-
end
|
64
|
-
|
65
|
-
def to_s_pretty(lib, **options)
|
66
|
-
"#{lib.name.bold.blue} (#{lib.version.yellow}), by #{lib.author.magenta}"
|
67
|
-
end
|
68
|
-
|
69
55
|
def method_missing(method, *args, &block)
|
70
56
|
if lib && lib.respond_to?(method)
|
71
57
|
lib.send(method, *args, &block)
|
@@ -73,7 +59,6 @@ module Arli
|
|
73
59
|
super(method, *args, &block)
|
74
60
|
end
|
75
61
|
end
|
76
|
-
|
77
62
|
end
|
78
63
|
end
|
79
64
|
end
|
data/lib/arli/lock/file.rb
CHANGED
@@ -17,9 +17,9 @@ module Arli
|
|
17
17
|
|
18
18
|
def initialize(config: Arli.config)
|
19
19
|
self.config = config
|
20
|
-
self.lock_file_path = "#{config.arlifile.path}/#{config.arlifile.lock_name}"
|
21
20
|
self.format = config.arlifile.lock_format
|
22
21
|
self.formatter = set_formatter(format)
|
22
|
+
self.lock_file_path = "#{config.arlifile.path}/#{config.arlifile.name}.#{formatter.extension}"
|
23
23
|
self.file = ::File.open(lock_file_path, 'w')
|
24
24
|
|
25
25
|
append(formatter.header)
|
@@ -41,7 +41,6 @@ module Arli
|
|
41
41
|
append(formatter.footer)
|
42
42
|
ensure
|
43
43
|
file.close
|
44
|
-
FileUtils.cp(lock_file_path, "#{lock_file_path}.#{format}")
|
45
44
|
end
|
46
45
|
|
47
46
|
def append(line = nil)
|
@@ -1,8 +1,12 @@
|
|
1
|
+
require 'arli/helpers/inherited'
|
1
2
|
|
2
3
|
module Arli
|
3
4
|
module Lock
|
4
5
|
module Formats
|
5
6
|
class Base
|
7
|
+
include Arli::Helpers::Inherited
|
8
|
+
attr_assignable :extension
|
9
|
+
|
6
10
|
attr_accessor :lock_file
|
7
11
|
|
8
12
|
def initialize(lock_file)
|
@@ -20,6 +24,10 @@ module Arli
|
|
20
24
|
# Optional footer
|
21
25
|
def footer
|
22
26
|
end
|
27
|
+
|
28
|
+
def extension
|
29
|
+
self.class.extension
|
30
|
+
end
|
23
31
|
end
|
24
32
|
end
|
25
33
|
end
|
@@ -4,19 +4,35 @@ module Arli
|
|
4
4
|
module Lock
|
5
5
|
module Formats
|
6
6
|
class Cmake < Base
|
7
|
+
extension :cmake
|
8
|
+
|
9
|
+
|
10
|
+
attr_accessor :libs, :comments
|
7
11
|
|
8
12
|
def header
|
9
|
-
|
10
|
-
|
13
|
+
@comments = []
|
14
|
+
@libs = []
|
15
|
+
"# vi:syntax=cmake"
|
11
16
|
end
|
12
17
|
|
13
18
|
def format(library)
|
14
|
-
|
15
|
-
|
19
|
+
@libs << library
|
20
|
+
@comments << "# Library #{library.name}:\n# version #{library.version}\n# url: #{library.url}"
|
21
|
+
nil
|
16
22
|
end
|
17
23
|
|
18
24
|
def footer
|
19
|
-
|
25
|
+
%Q[
|
26
|
+
# This file is auto-generated by Arli library manager.
|
27
|
+
# See https://github.com/kigster/arli for more info.
|
28
|
+
|
29
|
+
set(ARLI_LIBRARIES_PATH "#{Arli.config.libraries.path}")
|
30
|
+
set(ARLI_LIBRARIES #{@libs.map(&:canonical_dir).join(' ')})
|
31
|
+
|
32
|
+
set(ARLI_LIBRARIES $ARLI_LIBRARIES PARENT_SCOPE)
|
33
|
+
|
34
|
+
#{@comments.join("\n")}
|
35
|
+
]
|
20
36
|
end
|
21
37
|
end
|
22
38
|
end
|
data/lib/arli/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Konstantin Gredeskoul
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-12-
|
11
|
+
date: 2017-12-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: arduino-library
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: awesome_print
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: hashie
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -217,7 +231,6 @@ extensions: []
|
|
217
231
|
extra_rdoc_files: []
|
218
232
|
files:
|
219
233
|
- ".gitignore"
|
220
|
-
- ".rake_tasks~"
|
221
234
|
- ".rspec"
|
222
235
|
- ".travis.yml"
|
223
236
|
- Gemfile
|
@@ -252,9 +265,12 @@ files:
|
|
252
265
|
- lib/arli/configuration.rb
|
253
266
|
- lib/arli/errors.rb
|
254
267
|
- lib/arli/extensions.rb
|
268
|
+
- lib/arli/helpers/inherited.rb
|
269
|
+
- lib/arli/helpers/output.rb
|
255
270
|
- lib/arli/library.rb
|
256
271
|
- lib/arli/library/installer.rb
|
257
|
-
- lib/arli/library/
|
272
|
+
- lib/arli/library/multi_version.rb
|
273
|
+
- lib/arli/library/single_version.rb
|
258
274
|
- lib/arli/lock/file.rb
|
259
275
|
- lib/arli/lock/formats.rb
|
260
276
|
- lib/arli/lock/formats/base.rb
|
@@ -262,7 +278,6 @@ files:
|
|
262
278
|
- lib/arli/lock/formats/json.rb
|
263
279
|
- lib/arli/lock/formats/text.rb
|
264
280
|
- lib/arli/lock/formats/yaml.rb
|
265
|
-
- lib/arli/output.rb
|
266
281
|
- lib/arli/version.rb
|
267
282
|
homepage: https://github.com/kigster/arli
|
268
283
|
licenses:
|