json-translator 1.0.1

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