ki_middleman 0.0.6 → 0.0.7
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.
- data/bin/ki_middleman +13 -2
- data/ki_middleman.gemspec +7 -7
- data/lib/ki_middleman/config.rb +45 -4
- data/lib/ki_middleman/version.rb +1 -1
- metadata +32 -32
data/bin/ki_middleman
CHANGED
@@ -8,7 +8,7 @@ module KiMiddleman
|
|
8
8
|
include Methadone::Main
|
9
9
|
include Methadone::CLILogging
|
10
10
|
|
11
|
-
def init
|
11
|
+
def self.init
|
12
12
|
config_dir = Kiseru::ConfigDir.new
|
13
13
|
assets_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'assets'))
|
14
14
|
assets_file = File.join(assets_dir, 'default_transforms.rb')
|
@@ -23,15 +23,24 @@ module KiMiddleman
|
|
23
23
|
end
|
24
24
|
|
25
25
|
main do |arg|
|
26
|
+
help_now! "argument '#{arg}' not supported" if arg
|
27
|
+
|
26
28
|
if options[:init]
|
27
29
|
init
|
30
|
+
elsif options[:list]
|
31
|
+
config = KiMiddleman::Config.from_file(Kiseru::ConfigDir.new.file('transforms.rb'))
|
32
|
+
$stdout.puts(config.textual_mapping)
|
28
33
|
elsif options[:to]
|
29
34
|
begin
|
30
35
|
pretty = $stdout.tty?
|
31
36
|
|
32
37
|
output_type = options[:to]
|
33
38
|
config = KiMiddleman::Config.from_file(Kiseru::ConfigDir.new.file('transforms.rb'))
|
34
|
-
|
39
|
+
if options[:file]
|
40
|
+
input = MultiJson.load(File.read(options[:file]))
|
41
|
+
else
|
42
|
+
input = MultiJson.load($stdin.read)
|
43
|
+
end
|
35
44
|
output = config.convert_data_to_format(input, output_type)
|
36
45
|
$stdout.write MultiJson.dump(output, :pretty => pretty)
|
37
46
|
rescue MultiJson::DecodeError => e
|
@@ -49,6 +58,8 @@ module KiMiddleman
|
|
49
58
|
|
50
59
|
on("--to FORMAT", "The output JSON format")
|
51
60
|
on("--init", "Set up the default config files")
|
61
|
+
on("--file FILE", "Read JSON from file")
|
62
|
+
on("--list", "List available transformations")
|
52
63
|
go!
|
53
64
|
|
54
65
|
end
|
data/ki_middleman.gemspec
CHANGED
@@ -15,12 +15,12 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.require_paths = ["lib"]
|
16
16
|
gem.version = KiMiddleman::VERSION
|
17
17
|
|
18
|
-
gem.add_dependency
|
19
|
-
gem.add_dependency('methadone')
|
20
|
-
gem.add_dependency('map')
|
18
|
+
gem.add_dependency('multi_json', '~> 1.3.6')
|
19
|
+
gem.add_dependency('methadone', '~> 1.2.1')
|
20
|
+
gem.add_dependency('map', '~> 4.6.1')
|
21
21
|
|
22
|
-
gem.add_development_dependency('debugger')
|
23
|
-
gem.add_development_dependency('rake')
|
24
|
-
gem.add_development_dependency('
|
25
|
-
gem.add_development_dependency('
|
22
|
+
gem.add_development_dependency('debugger', '~> 1.2.0')
|
23
|
+
gem.add_development_dependency('rake', '~> 0.9.2')
|
24
|
+
gem.add_development_dependency('rspec', '~> 2.11.0')
|
25
|
+
gem.add_development_dependency('simplecov', '~> 0.6.4')
|
26
26
|
end
|
data/lib/ki_middleman/config.rb
CHANGED
@@ -9,6 +9,24 @@ module KiMiddleman
|
|
9
9
|
parse(code)
|
10
10
|
end
|
11
11
|
|
12
|
+
def textual_mapping
|
13
|
+
output = ""
|
14
|
+
@mapping.each do |key, sub_hash|
|
15
|
+
subkeys = sub_hash.keys.reject { |x| x.to_s=="outer_block"}
|
16
|
+
subkeys.each_with_index do |sub_key, i|
|
17
|
+
case i
|
18
|
+
when 0
|
19
|
+
output << "#{key} +-> #{sub_key}\n"
|
20
|
+
when subkeys.length - 1
|
21
|
+
output << "#{' '*key.length} \\-> #{sub_key}\n"
|
22
|
+
else
|
23
|
+
output << "#{' '*key.length} |-> #{sub_key}\n"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
output
|
28
|
+
end
|
29
|
+
|
12
30
|
def self.parse(code)
|
13
31
|
Config.new(code)
|
14
32
|
end
|
@@ -28,19 +46,42 @@ module KiMiddleman
|
|
28
46
|
|
29
47
|
def convert_data_to_format(data, format)
|
30
48
|
self.detect_from_format(data)
|
31
|
-
|
32
|
-
self.set_evaluation_context
|
49
|
+
|
33
50
|
raise ConfigError, "No transform from '#{@from_format}' found." unless @mapping.has_key?(@from_format.to_sym)
|
51
|
+
|
52
|
+
best_to_format = find_best_to_format(@from_format, format)
|
53
|
+
|
54
|
+
if !@mapping[@current_from].has_key?(best_to_format)
|
55
|
+
raise ConfigError, "No transform from '#{@current_from}' to '#{format}' found."
|
56
|
+
end
|
57
|
+
|
58
|
+
if best_to_format != format
|
59
|
+
$stderr.puts "WARNING: Using unambiguous match '#{best_to_format}' for '#{format}'"
|
60
|
+
end
|
61
|
+
|
62
|
+
@format_to_evaluate = best_to_format
|
63
|
+
self.set_evaluation_context
|
34
64
|
evaluation_context = @mapping[@from_format.to_sym][:outer_block]
|
35
65
|
converted_data = evaluation_context.call Map.new(data)
|
36
|
-
converted_data['ki_type'] =
|
66
|
+
converted_data['ki_type'] = best_to_format
|
37
67
|
|
38
68
|
converted_data
|
39
69
|
end
|
40
70
|
|
71
|
+
def find_best_to_format(from_format, format)
|
72
|
+
keys = @mapping[from_format].keys.map(&:to_s)
|
73
|
+
matching = keys.select { |key| key.include?(format.to_s) }
|
74
|
+
|
75
|
+
if matching.length == 1
|
76
|
+
match = matching.first
|
77
|
+
else
|
78
|
+
format
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
41
82
|
def initialize(code)
|
42
83
|
self.set_parsing_context
|
43
|
-
@mapping = {}
|
84
|
+
@mapping = Map.new({})
|
44
85
|
instance_eval code
|
45
86
|
end
|
46
87
|
|
data/lib/ki_middleman/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ki_middleman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,85 +10,85 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-08-
|
13
|
+
date: 2012-08-16 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: multi_json
|
17
|
-
requirement: &
|
17
|
+
requirement: &70146996153140 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
|
-
- -
|
20
|
+
- - ~>
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
22
|
+
version: 1.3.6
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70146996153140
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: methadone
|
28
|
-
requirement: &
|
28
|
+
requirement: &70146996152640 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.2.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70146996152640
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: map
|
39
|
-
requirement: &
|
39
|
+
requirement: &70146996152180 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
|
-
- -
|
42
|
+
- - ~>
|
43
43
|
- !ruby/object:Gem::Version
|
44
|
-
version:
|
44
|
+
version: 4.6.1
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70146996152180
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: debugger
|
50
|
-
requirement: &
|
50
|
+
requirement: &70146996151720 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
|
-
- -
|
53
|
+
- - ~>
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
55
|
+
version: 1.2.0
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *70146996151720
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: rake
|
61
|
-
requirement: &
|
61
|
+
requirement: &70146996151260 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
|
-
- -
|
64
|
+
- - ~>
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version:
|
66
|
+
version: 0.9.2
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *70146996151260
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
72
|
-
requirement: &
|
71
|
+
name: rspec
|
72
|
+
requirement: &70146996150800 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
|
-
- -
|
75
|
+
- - ~>
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
77
|
+
version: 2.11.0
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *70146996150800
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
|
-
name:
|
83
|
-
requirement: &
|
82
|
+
name: simplecov
|
83
|
+
requirement: &70146996150340 !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
85
|
requirements:
|
86
|
-
- -
|
86
|
+
- - ~>
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
88
|
+
version: 0.6.4
|
89
89
|
type: :development
|
90
90
|
prerelease: false
|
91
|
-
version_requirements: *
|
91
|
+
version_requirements: *70146996150340
|
92
92
|
description: Transforms JSON into other JSON
|
93
93
|
email:
|
94
94
|
- ben@freeagent.com
|