eac_ruby_utils 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/eac_ruby_utils.rb +1 -0
- data/lib/eac_ruby_utils/console/docopt_runner/_subcommands.rb +1 -5
- data/lib/eac_ruby_utils/listable.rb +17 -0
- data/lib/eac_ruby_utils/listable/class_methods.rb +14 -0
- data/lib/eac_ruby_utils/listable/instance_methods.rb +30 -0
- data/lib/eac_ruby_utils/listable/integer_list.rb +23 -0
- data/lib/eac_ruby_utils/listable/list.rb +75 -0
- data/lib/eac_ruby_utils/listable/lists.rb +60 -0
- data/lib/eac_ruby_utils/listable/string_list.rb +19 -0
- data/lib/eac_ruby_utils/listable/value.rb +38 -0
- data/lib/eac_ruby_utils/version.rb +1 -1
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0119c50e5869164d29e5dc579df784a5e3576a613a4ea5c597a2ee6dcda212fe'
|
4
|
+
data.tar.gz: c69eea7c7587d93d44e82da0b37a110e2ec5fb77dfac4e83ecf2d028fd10657f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7890f0ffebd4a457ba27eb4cd5ca5df500d19e74103039c441d4ff5c3a26685c6c5a239652e69b99a7007e4688e2a79c275c78b1b019f1ebbedf8f49a9e0f9a
|
7
|
+
data.tar.gz: 4ed10a42a2b890e6995f67931648029e5f94c6de8b7cc9bf5de57f028169a0e7e122289c53f6b115a37879d2f742acb5b38edd686f93aae62614ffefddcd0102
|
data/lib/eac_ruby_utils.rb
CHANGED
@@ -5,6 +5,7 @@ module EacRubyUtils
|
|
5
5
|
require 'eac_ruby_utils/console'
|
6
6
|
require 'eac_ruby_utils/contextualizable'
|
7
7
|
require 'eac_ruby_utils/envs'
|
8
|
+
require 'eac_ruby_utils/listable'
|
8
9
|
require 'eac_ruby_utils/options_consumer'
|
9
10
|
require 'eac_ruby_utils/patches'
|
10
11
|
require 'eac_ruby_utils/simple_cache'
|
@@ -32,7 +32,7 @@ module EacRubyUtils
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def run_with_subcommand
|
35
|
-
if
|
35
|
+
if subcommand_name
|
36
36
|
check_valid_subcommand
|
37
37
|
subcommand.run
|
38
38
|
else
|
@@ -74,10 +74,6 @@ module EacRubyUtils
|
|
74
74
|
subcommand_name
|
75
75
|
end
|
76
76
|
|
77
|
-
def subcommand_name
|
78
|
-
options.fetch(SUBCOMMAND_ARG)
|
79
|
-
end
|
80
|
-
|
81
77
|
def available_subcommands
|
82
78
|
(setting_value(:subcommands, false) || auto_available_subcommands).sort
|
83
79
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/concern'
|
4
|
+
Dir["#{__dir__}/#{::File.basename(__FILE__, '.*')}/*.rb"].each do |partial|
|
5
|
+
require partial
|
6
|
+
end
|
7
|
+
|
8
|
+
module EacRubyUtils
|
9
|
+
module Listable
|
10
|
+
extend ActiveSupport::Concern
|
11
|
+
|
12
|
+
included do
|
13
|
+
extend(ClassMethods)
|
14
|
+
include(InstanceMethods)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EacRubyUtils
|
4
|
+
module Listable
|
5
|
+
module InstanceMethods
|
6
|
+
LISTABLE_INSTANCE_VALUE_METHODS = %w[label description].freeze
|
7
|
+
|
8
|
+
def method_missing(name, *args, &block)
|
9
|
+
list, method = parse_method(name)
|
10
|
+
list && method ? list.instance_value(self).send(method) : super
|
11
|
+
end
|
12
|
+
|
13
|
+
def respond_to_missing?(name, include_all = false)
|
14
|
+
list, method = parse_method(name)
|
15
|
+
list && method ? true : super
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def parse_method(method)
|
21
|
+
self.class.lists.acts_as_listable_items.each do |item, list|
|
22
|
+
LISTABLE_INSTANCE_VALUE_METHODS.each do |m|
|
23
|
+
return [list, m] if method.to_s == "#{item}_#{m}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
[nil, nil]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'list'
|
4
|
+
|
5
|
+
module EacRubyUtils
|
6
|
+
module Listable
|
7
|
+
class IntegerList < ::EacRubyUtils::Listable::List
|
8
|
+
protected
|
9
|
+
|
10
|
+
def parse_labels(labels)
|
11
|
+
if labels.first.is_a?(Hash)
|
12
|
+
Hash[labels.first.map { |k, v| [k.to_i, v.to_s] }]
|
13
|
+
else
|
14
|
+
Hash[labels.each_with_index.map { |v, i| [i + 1, v.to_s] }]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def build_value(index, _key)
|
19
|
+
index + 1
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EacRubyUtils
|
4
|
+
module Listable
|
5
|
+
class List
|
6
|
+
attr_reader :item
|
7
|
+
|
8
|
+
def initialize(lists, item, labels)
|
9
|
+
@lists = lists
|
10
|
+
@item = item
|
11
|
+
@values = build_values(labels)
|
12
|
+
apply_constants
|
13
|
+
end
|
14
|
+
|
15
|
+
def values
|
16
|
+
@values.values.map(&:value)
|
17
|
+
end
|
18
|
+
|
19
|
+
def options
|
20
|
+
@values.values.map { |v| [v.label, v.value] }
|
21
|
+
end
|
22
|
+
|
23
|
+
def method_missing(name, *args, &block)
|
24
|
+
list = find_list_by_method(name)
|
25
|
+
list ? list : super
|
26
|
+
end
|
27
|
+
|
28
|
+
def respond_to_missing?(name, include_all = false)
|
29
|
+
find_list_by_method(name) || super
|
30
|
+
end
|
31
|
+
|
32
|
+
def i18n_key
|
33
|
+
"eac_ruby_utils.listable.#{class_i18n_key}.#{item}"
|
34
|
+
end
|
35
|
+
|
36
|
+
def instance_value(instance)
|
37
|
+
v = instance.send(item)
|
38
|
+
return @values[v] if @values.key?(v)
|
39
|
+
raise "List value unkown: #{v} (Source: #{@lists.source}, Item: #{item})"
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def class_i18n_key
|
45
|
+
@lists.source.name.underscore.to_sym
|
46
|
+
end
|
47
|
+
|
48
|
+
def find_list_by_method(method)
|
49
|
+
@values.values.each do |v|
|
50
|
+
return v if method.to_s == "value_#{v.key}"
|
51
|
+
end
|
52
|
+
nil
|
53
|
+
end
|
54
|
+
|
55
|
+
def constants
|
56
|
+
labels.each_with_index.map { |v, i| ["#{item.upcase}_#{v.upcase}", values[i]] }
|
57
|
+
end
|
58
|
+
|
59
|
+
def apply_constants
|
60
|
+
@values.values.each do |v|
|
61
|
+
@lists.source.const_set(v.constant_name, v.value)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def build_values(labels)
|
66
|
+
vs = {}
|
67
|
+
parse_labels(labels).each do |value, key|
|
68
|
+
v = Value.new(self, value, key)
|
69
|
+
vs[v.value] = v
|
70
|
+
end
|
71
|
+
vs
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/hash_with_indifferent_access'
|
4
|
+
require 'active_support/core_ext/string/inflections'
|
5
|
+
require_relative 'integer_list'
|
6
|
+
require_relative 'string_list'
|
7
|
+
|
8
|
+
module EacRubyUtils
|
9
|
+
module Listable
|
10
|
+
class Lists
|
11
|
+
attr_reader :source
|
12
|
+
|
13
|
+
def initialize(source)
|
14
|
+
@source = source
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_integer(item, *labels)
|
18
|
+
check_acts_as_listable_new_item(item)
|
19
|
+
acts_as_listable_items[item] = ::EacRubyUtils::Listable::IntegerList.new(
|
20
|
+
self, item, labels
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
def add_string(item, *labels)
|
25
|
+
check_acts_as_listable_new_item(item)
|
26
|
+
acts_as_listable_items[item] = ::EacRubyUtils::Listable::StringList.new(
|
27
|
+
self, item, labels
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
def method_missing(name, *args, &block)
|
32
|
+
list = find_list_by_method(name)
|
33
|
+
list ? list : super
|
34
|
+
end
|
35
|
+
|
36
|
+
def respond_to_missing?(name, include_all = false)
|
37
|
+
find_list_by_method(name) || super
|
38
|
+
end
|
39
|
+
|
40
|
+
def acts_as_listable_items
|
41
|
+
@acts_as_listable_items ||= ActiveSupport::HashWithIndifferentAccess.new
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def check_acts_as_listable_new_item(item)
|
47
|
+
return unless acts_as_listable_items.key?(item)
|
48
|
+
raise "Item já adicionado anteriormente: #{item} em #{self} " \
|
49
|
+
"(#{acts_as_listable_items.keys})"
|
50
|
+
end
|
51
|
+
|
52
|
+
def find_list_by_method(method)
|
53
|
+
acts_as_listable_items.each do |item, list|
|
54
|
+
return list if method.to_sym == item.to_sym
|
55
|
+
end
|
56
|
+
nil
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'list'
|
4
|
+
|
5
|
+
module EacRubyUtils
|
6
|
+
module Listable
|
7
|
+
class StringList < ::EacRubyUtils::Listable::List
|
8
|
+
protected
|
9
|
+
|
10
|
+
def parse_labels(labels)
|
11
|
+
if labels.first.is_a?(Hash)
|
12
|
+
Hash[labels.first.map { |k, v| [k.to_s, v.to_s] }]
|
13
|
+
else
|
14
|
+
Hash[labels.map { |v| [v.to_s, v.to_s] }]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EacRubyUtils
|
4
|
+
module Listable
|
5
|
+
class Value
|
6
|
+
attr_reader :value, :key
|
7
|
+
|
8
|
+
def initialize(list, value, key)
|
9
|
+
@list = list
|
10
|
+
@value = value
|
11
|
+
@key = key
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_s
|
15
|
+
"I: #{@list.item}, V: #{@value}, K: #{@key}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def constant_name
|
19
|
+
"#{@list.item}_#{@key}".gsub(/[^a-z0-9_]/, '_').gsub(/_+/, '_')
|
20
|
+
.gsub(/(?:\A_|_\z)/, '').upcase
|
21
|
+
end
|
22
|
+
|
23
|
+
def label
|
24
|
+
translate('label')
|
25
|
+
end
|
26
|
+
|
27
|
+
def description
|
28
|
+
translate('description')
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def translate(translate_key)
|
34
|
+
::I18n.t("#{@list.i18n_key}.#{@key}.#{translate_key}")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eac_ruby_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Esquilo Azul Company
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
11
|
+
date: 2019-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -118,6 +118,14 @@ files:
|
|
118
118
|
- lib/eac_ruby_utils/envs/local_env.rb
|
119
119
|
- lib/eac_ruby_utils/envs/process.rb
|
120
120
|
- lib/eac_ruby_utils/envs/ssh_env.rb
|
121
|
+
- lib/eac_ruby_utils/listable.rb
|
122
|
+
- lib/eac_ruby_utils/listable/class_methods.rb
|
123
|
+
- lib/eac_ruby_utils/listable/instance_methods.rb
|
124
|
+
- lib/eac_ruby_utils/listable/integer_list.rb
|
125
|
+
- lib/eac_ruby_utils/listable/list.rb
|
126
|
+
- lib/eac_ruby_utils/listable/lists.rb
|
127
|
+
- lib/eac_ruby_utils/listable/string_list.rb
|
128
|
+
- lib/eac_ruby_utils/listable/value.rb
|
121
129
|
- lib/eac_ruby_utils/options_consumer.rb
|
122
130
|
- lib/eac_ruby_utils/patches.rb
|
123
131
|
- lib/eac_ruby_utils/patches/hash.rb
|