json2properties 0.0.1 → 0.0.2

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: 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