json-translator 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/json-translator.rb +91 -0
  3. metadata +45 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ce0a06bc8cf33433ce24be2ea9b7c3836b6be3f6
4
+ data.tar.gz: 33aaf3794daaf6eb86b54a442b5330c1c266cdbd
5
+ SHA512:
6
+ metadata.gz: c0a06499cd9b43394a778b5b38783ab00e011e6538f8da8441a41b1294d27ec49ff25abb3557bce3a205f25c6582c28c982986e1d341d1b0c1152dc76c2d996e
7
+ data.tar.gz: a4b15a6c20b27ff323501a2ad9904de4a300e3c7b7b0925bef3450ccde54a226b817b233984ec9c81379f4549b9cafb999dd54a1159abd221a8de6fd3655bdb6
@@ -0,0 +1,91 @@
1
+ require 'json'
2
+
3
+ class JT
4
+ def translate(data, &block)
5
+ raise 'JT#translate no block given' unless block_given?
6
+
7
+ data = JSON.parse(data) if data.is_a? String
8
+
9
+ raise 'JT#translate expects hash or array' unless [Hash, Array].include? data.class
10
+
11
+ @data = data
12
+ @data_pointer = @data
13
+
14
+ @result = @data.class.new
15
+ @result_pointer = @result
16
+
17
+ instance_eval &block
18
+
19
+ @result
20
+ end
21
+
22
+ def method_missing(name, *args)
23
+ raise "JT##{name} expects 0 or 1 argument" if args.size > 1
24
+ raise "JT##{name} can't get key from #{@data_pointer.inspect}" unless @data_pointer.is_a? Hash
25
+ raise "JT##{name} can't set key to #{@result_pointer.inspect}" unless @result_pointer.is_a? Hash
26
+
27
+ @result_pointer[name] = @data_pointer[(args.first || name).to_s]
28
+ end
29
+
30
+ def scope(name, &block)
31
+ raise 'JT#scope no block given' unless block_given?
32
+ raise 'JT#scope expects symbol or string' unless [Symbol, String].include? name.class
33
+ raise 'JT#scope could not be called on array' unless @data_pointer.is_a? Hash
34
+
35
+ tmp = @data_pointer
36
+
37
+ case name
38
+ when Symbol
39
+ @data_pointer = @data_pointer[name.to_s]
40
+ when String
41
+ name.split('.').each { |n| @data_pointer = @data_pointer[n] }
42
+ end
43
+
44
+ instance_eval &block
45
+ @data_pointer = tmp
46
+ end
47
+
48
+ def namespace(name, &block)
49
+ raise 'JT#namespace no block given' unless block_given?
50
+ raise 'JT#namespace expects symbol or string' unless [Symbol, String].include? name.class
51
+ raise 'JT#namespace could not be called on array' unless @result_pointer.is_a? Hash
52
+
53
+ tmp = @result_pointer
54
+
55
+ case name
56
+ when Symbol
57
+ @result_pointer[name] ||= {}
58
+ @result_pointer = @result_pointer[name]
59
+ when String
60
+ name.split('.').each do |n|
61
+ @result_pointer[n] ||= {}
62
+ @result_pointer = @result_pointer[n]
63
+ end
64
+ end
65
+
66
+ instance_eval &block
67
+ @result_pointer = tmp
68
+ end
69
+
70
+ def iterate(*args, &block)
71
+ raise 'JT#iterate no block given' unless block_given?
72
+ raise 'JT#iterate expects 0 or 2 arguments' unless [0, 2].include? args.size
73
+
74
+ if args.empty?
75
+ @result_pointer.concat @data_pointer.map { |e| JT.new.translate(e, &block) }
76
+ else
77
+ raise 'JT#iterate expects symbols or strings' unless args.all? { |a| [Symbol, String].include? a.class }
78
+
79
+ @result_pointer[args.first] = @data_pointer[args.last.to_s].map { |e| JT.new.translate(e, &block) }
80
+ end
81
+ end
82
+
83
+ alias n namespace
84
+ alias s scope
85
+ alias i iterate
86
+
87
+ def self.t(data, &block)
88
+ JT.new.translate(data, &block)
89
+ end
90
+ end
91
+
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: json-translator
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Speransky Danil
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-04-04 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A library to transform json from one scheme to another.
14
+ email: speranskydanil@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/json-translator.rb
20
+ homepage: http://speranskydanil.github.io/json-translator/
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.2.2
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: A library to transform json from one scheme to another.
44
+ test_files: []
45
+ has_rdoc: