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.
- checksums.yaml +7 -0
- data/lib/json-translator.rb +91 -0
- metadata +45 -0
checksums.yaml
ADDED
@@ -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:
|