json2properties 0.0.1 → 0.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eb0a92e8a82c2ec9072de8fd475464f96c3c7fff
4
- data.tar.gz: 3031dd7fc136835c11b0ecb49b1828671963bb9c
3
+ metadata.gz: ce4e12d23e2781e874254350edd145a45772dbc1
4
+ data.tar.gz: 86585c38a402169b8f7d68dec5cca19df0969b8b
5
5
  SHA512:
6
- metadata.gz: ed84c5b0709f4d3c6fb2c69095a3e627b371c1a0db097bc7f7c1c8f24a8b80a01bfd0ee5bf22f961c91c10b2096bee369141fa910dc2cc4b41d9bd5f6f3e480e
7
- data.tar.gz: 77d10f97dc540870205af293729d029909683d17f038505b6075bc06c839ade747be2dfc01ecb92607853b22a73c65a8fede5023d1ac7c61e5721a64e7bbb260
6
+ metadata.gz: b72d55af9793187ba60ba3b219cc29db1941816085221ba44c10c6dbf79bf80db77be6754bc88da45dee99fbf77f405316fbe891f5bccc7a18e4ff0a294de5a1
7
+ data.tar.gz: b7d45b5e2c8647a220872e48f858ace322d24767467c3d4b7f8a617d5d2989230f1769b91508c6b8f8b012cf8ad8aeb6b7276f72bc98f7da0671865f82029f9e
data/bin/json2properties CHANGED
@@ -3,4 +3,4 @@
3
3
  require_relative '../lib/json2properties_cli'
4
4
 
5
5
  cli = Json2propertiesCli.new(ARGV)
6
- cli.run
6
+ cli.convert_file
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/json2properties_cli'
4
+
5
+ cli = Json2propertiesCli.new(ARGV)
6
+ cli.unconvert_file
@@ -1,38 +1,100 @@
1
1
  require 'json'
2
2
  require 'java-properties'
3
+ require 'active_support'
4
+ require 'active_support/core_ext/hash'
5
+
6
+ class String
7
+ def is_i?
8
+ /\A\d+\z/ === self
9
+ end
10
+
11
+ def is_numeric?
12
+ return true if self.is_i?
13
+ true if Float(self) rescue false
14
+ end
15
+ end
3
16
 
4
17
  class Json2properties
5
- VERSION = '0.0.1'
18
+ VERSION = '0.0.2'
6
19
  SEPARATOR = '.'
7
20
 
8
21
  def initialize
9
- @prefix = ''
10
- @ret = {}
22
+ reset_state
11
23
  end
12
24
 
25
+ # json => properites
13
26
  def convert_file(src, dest)
14
27
  JavaProperties.write(json2kv(File.read(src)), dest)
15
28
  end
16
29
 
30
+ # properites => json
31
+ def unconvert_file(src, dest)
32
+ kv = JavaProperties.load(src)
33
+ File.write(dest, kv2json(kv))
34
+ end
35
+
36
+ # json string => flat k-v hash
17
37
  def json2kv(json)
38
+ reset_state
18
39
  data = JSON.parse(json)
19
- process(data)
40
+ process_json_hash(data)
20
41
  @ret
21
42
  end
22
43
 
44
+ # flat k-v hash => json string
45
+ def kv2json(kv)
46
+ reset_state
47
+ kv.stringify_keys!
48
+ ret = {}
49
+ kv.each_pair do |k,v|
50
+ tmp = ret
51
+ parts = k.split(SEPARATOR)
52
+ parts.each_index do |i|
53
+ part = parts[i]
54
+ next_part = parts[i+1]
55
+
56
+ part = part.to_i if part.is_i?
57
+ if tmp[part].nil?
58
+ if next_part.nil?
59
+ tmp[part] = fix_type(v)
60
+ elsif next_part.is_i?
61
+ tmp[part] = []
62
+ else
63
+ tmp[part] = {}
64
+ end
65
+ end
66
+ tmp = tmp[part]
67
+ end
68
+ end
69
+ JSON.pretty_generate(ret)
70
+ end
71
+
23
72
  private
24
73
 
25
- def process(data, prefix='')
74
+ def fix_type(v)
75
+ return v.to_i if v.is_i?
76
+ return v.to_f if v.is_numeric?
77
+ return true if v == "true"
78
+ return false if v == "false"
79
+ v
80
+ end
81
+
82
+ def reset_state
83
+ @prefix = ''
84
+ @ret = {}
85
+ end
86
+
87
+ def process_json_hash(data, prefix='')
26
88
  if data.is_a?(Array)
27
89
  data.each_index do |k|
28
90
  v = data[k]
29
91
  key = prefix.empty? ? k : prefix+SEPARATOR+k.to_s
30
- process(v, key)
92
+ process_json_hash(v, key)
31
93
  end
32
94
  elsif data.is_a?(Hash)
33
95
  data.each_pair do |k,v|
34
96
  key = prefix.empty? ? k : prefix+SEPARATOR+k.to_s
35
- process(v, key)
97
+ process_json_hash(v, key)
36
98
  end
37
99
  else
38
100
  @ret[prefix] = data
@@ -8,16 +8,27 @@ class Json2propertiesCli
8
8
  @dest = @argv[1] || ''
9
9
  end
10
10
 
11
- def run
11
+ def unconvert_file
12
+ validate_argv('properties2json')
13
+ Json2properties.new.unconvert_file(@src, @dest)
14
+ end
15
+
16
+ def convert_file
17
+ validate_argv('json2properties')
18
+ Json2properties.new.convert_file(@src, @dest)
19
+ end
20
+
21
+ private
22
+
23
+ def validate_argv(mode)
12
24
  if @src.empty? || @dest.empty?
13
- STDERR.puts "Usage: json2properties <SRC_FILE> <DEST_FILE>"
25
+ STDERR.puts "Usage: #{mode} <SRC_FILE> <DEST_FILE>"
14
26
  exit 1
15
27
  end
16
28
  unless File.exists? @src
17
29
  STDERR.puts "Given source file doesn't exist: #{@src}"
18
30
  exit 1
19
31
  end
20
- Json2properties.new.convert_file(@src, @dest)
21
32
  end
22
33
 
23
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json2properties
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bartek Wilczek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-22 00:00:00.000000000 Z
11
+ date: 2016-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: java-properties
@@ -24,15 +24,31 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
27
41
  description:
28
42
  email:
29
43
  - bwilczek@gmail.com
30
44
  executables:
31
45
  - json2properties
46
+ - properties2json
32
47
  extensions: []
33
48
  extra_rdoc_files: []
34
49
  files:
35
50
  - bin/json2properties
51
+ - bin/properties2json
36
52
  - lib/json2properties.rb
37
53
  - lib/json2properties_cli.rb
38
54
  homepage: https://github.com/bwilczek/json2properties