fedux_org-stdlib 0.6.40 → 0.6.43

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: 93d303a2d7b9dace940e87dcbb888ded268856f9
4
- data.tar.gz: c9ac2d463177025b2e9e8117059e42600d662845
3
+ metadata.gz: d70df22862cf89bde4bef5464ceaab686e727549
4
+ data.tar.gz: 4f615986ce1f3a5a04307bf2b2a1af55bc282141
5
5
  SHA512:
6
- metadata.gz: b05ae79b60a72cfc8c41859c5f046aeba1958df6799c46b32a2918c5c5c109c2f4cdfd875d182d3b1d27d983a08ff3b7c4ad13f27952f2892fc5235a05c84f31
7
- data.tar.gz: d000420eee51aa81424817a2f42bbad8ce92b2493d7d5d064a035246ea4cc141ff12362c52067d5d770189919d64df579dd168914462da062ce0665010815e75
6
+ metadata.gz: 2adf3d393744ebdfafc5ba57ee182d9f4831a495de6d2a1b017aea791aac1358958e83ae43f55af660f25c9fdc0b9472ca03d6a4da3ccda6b1c43dd6e2da2a57
7
+ data.tar.gz: f8a609875743f1eb60222405ff879d83fed7c92b6edf7161ac9bf0f6ecbe25e230f609e514f1c71fbf701f11bf9647966d3d86465997d4a4c82dba7238104c33
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fedux_org-stdlib (0.6.39)
4
+ fedux_org-stdlib (0.6.42)
5
5
  activesupport
6
6
 
7
7
  GEM
@@ -1,4 +1,7 @@
1
1
  # encoding: utf-8
2
+ require 'shellwords'
3
+ require 'fedux_org_stdlib/core_ext/shellwords/clean'
4
+
2
5
  class Hash
3
6
  # Convert hash to command line options
4
7
  #
@@ -28,15 +31,35 @@ class Hash
28
31
  #
29
32
  # hash.to_options
30
33
  # # => [ '--opt1', 'string']
34
+ #
35
+ # @example Clean keys
36
+ #
37
+ # hash = {
38
+ # '$opt1' => 'string'
39
+ # }
40
+ #
41
+ # hash.to_options
42
+ # # => [ '--opt1', 'string']
43
+ #
44
+ # @example Escape values
45
+ #
46
+ # hash = {
47
+ # 'opt1' => '$string'
48
+ # }
49
+ #
50
+ # hash.to_options
51
+ # # => [ '--opt1', '\$string']
31
52
  def to_options
32
53
  each_with_object([]) do |(key, value), a|
54
+ key = Shellwords.clean(key)
55
+
33
56
  if value.is_a? TrueClass
34
57
  a << "--#{key}"
35
58
  elsif value.is_a? FalseClass
36
59
  a << "--no-#{key}"
37
60
  else
38
61
  a << "--#{key}"
39
- a << value.to_s
62
+ a << Shellwords.escape(value)
40
63
  end
41
64
  end
42
65
  end
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+ require 'shellwords'
3
+
4
+ module Shellwords
5
+ class << self
6
+ def shellclean(string)
7
+ shellescape(string).gsub(/\\./, '')
8
+ end
9
+ alias_method :clean, :shellclean
10
+ end
11
+ end
@@ -210,8 +210,16 @@ module FeduxOrgStdlib
210
210
  ext.any? { |e| e == extname }
211
211
  end
212
212
 
213
+ def proposed_file_name
214
+ template_name
215
+ end
216
+
213
217
  public
214
218
 
219
+ def proposed_file
220
+ File.join working_directory, proposed_file_name
221
+ end
222
+
215
223
  def proposed_extname
216
224
  ext = File.extname(basename)
217
225
 
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
  # FeduxOrgStdlib
3
3
  module FeduxOrgStdlib
4
- VERSION = '0.6.40'
4
+ VERSION = '0.6.43'
5
5
  end
@@ -44,9 +44,11 @@ RSpec.describe AppConfig do
44
44
  config = config_klass.new
45
45
  expect(config.opt1).to be_nil
46
46
 
47
- expect {
48
- config.opt1 = 'blub'
49
- }.to raise_error NoMethodError
47
+ silence :stderr do
48
+ expect {
49
+ config.opt1 = 'blub'
50
+ }.to raise_error NoMethodError
51
+ end
50
52
  end
51
53
  end
52
54
 
@@ -48,4 +48,28 @@ RSpec.describe '#to_options' do
48
48
 
49
49
  expect(hash.to_options).to eq %w{ --opt1 string }
50
50
  end
51
+
52
+ it 'handles umlauts as well' do
53
+ hash = {
54
+ "öäopt1" => 'string'
55
+ }
56
+
57
+ expect(hash.to_options).to eq %w{ --opt1 string }
58
+ end
59
+
60
+ it 'handles special characters as well' do
61
+ hash = {
62
+ "$o p\tt1" => 'string'
63
+ }
64
+
65
+ expect(hash.to_options).to eq %w{ --opt1 string }
66
+ end
67
+
68
+ it 'handles special characters in value as well' do
69
+ hash = {
70
+ opt1: 'string$string string'
71
+ }
72
+
73
+ expect(hash.to_options).to eq ['--opt1', 'string\$string\ string']
74
+ end
51
75
  end
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'fedux_org_stdlib/core_ext/shellwords/clean'
4
+
5
+ RSpec.describe '.shellclean' do
6
+ it 'returns a normal string as normal string' do
7
+ result = Shellwords.clean('asdf')
8
+
9
+ expect(result).to eq 'asdf'
10
+ end
11
+
12
+ it 'removes whitespace' do
13
+ result = Shellwords.clean("asdf asdf\tasdf")
14
+
15
+ expect(result).to eq 'asdfasdfasdf'
16
+ end
17
+
18
+ it 'removes $' do
19
+ result = Shellwords.clean("asdf$asdf")
20
+
21
+ expect(result).to eq 'asdfasdf'
22
+ end
23
+ end
@@ -3,6 +3,26 @@ require 'spec_helper'
3
3
  require 'fedux_org_stdlib/file_template'
4
4
 
5
5
  RSpec.describe FileTemplate do
6
+
7
+ context '#proposed_file' do
8
+ it 'generates a propose file path based on template basename' do
9
+ with_environment 'HOME' => working_directory do
10
+ template_klass = Class.new(FileTemplate) do
11
+ def class_name
12
+ 'TestTemplate'
13
+ end
14
+
15
+ def module_name
16
+ 'MyApplication'
17
+ end
18
+ end
19
+
20
+ template = template_klass.new(working_directory: working_directory)
21
+ expect(template.proposed_file).to eq File.join(working_directory, 'test')
22
+ end
23
+ end
24
+ end
25
+
6
26
  context '#preferred_template_file' do
7
27
  it 'has a default template file which is the preferred place to store the template' do
8
28
  with_environment 'HOME' => working_directory do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fedux_org-stdlib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.40
4
+ version: 0.6.43
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max Meyer
@@ -58,6 +58,7 @@ files:
58
58
  - lib/fedux_org_stdlib/command/which.rb
59
59
  - lib/fedux_org_stdlib/core_ext/array.rb
60
60
  - lib/fedux_org_stdlib/core_ext/hash/options.rb
61
+ - lib/fedux_org_stdlib/core_ext/shellwords/clean.rb
61
62
  - lib/fedux_org_stdlib/core_ext/string.rb
62
63
  - lib/fedux_org_stdlib/environment.rb
63
64
  - lib/fedux_org_stdlib/file_template.rb
@@ -139,6 +140,7 @@ files:
139
140
  - spec/command/run_command_spec.rb
140
141
  - spec/command/which_spec.rb
141
142
  - spec/core_ext/hash/options_spec.rb
143
+ - spec/core_ext/shellwords/clean_spec.rb
142
144
  - spec/environment_spec.rb
143
145
  - spec/examples/models/class_based/forbidden_keyword.rb
144
146
  - spec/examples/models/class_based/ignore/ignored.rb
@@ -208,6 +210,7 @@ test_files:
208
210
  - spec/command/run_command_spec.rb
209
211
  - spec/command/which_spec.rb
210
212
  - spec/core_ext/hash/options_spec.rb
213
+ - spec/core_ext/shellwords/clean_spec.rb
211
214
  - spec/environment_spec.rb
212
215
  - spec/examples/models/class_based/forbidden_keyword.rb
213
216
  - spec/examples/models/class_based/ignore/ignored.rb