jabara 0.2.0 → 0.2.2
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 +4 -4
- data/.gitignore +1 -0
- data/jabara.gemspec +1 -1
- data/lib/jabara/mysql/output.rb +4 -3
- data/lib/jabara/mysql_dump/output.rb +9 -1
- data/lib/jabara/parse_com/input.rb +1 -0
- data/lib/jabara/parse_com/schema.rb +41 -27
- data/lib/jabara/version.rb +1 -1
- data/test/test_parse_com.rb +32 -0
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b2850cefe7e9de9a35df28e4623210b1e39fcac
|
4
|
+
data.tar.gz: 5c3e780facc6bd90876d9fc0835ad07279afb837
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 62ac4c1acf8e8f3647ee395cbf5eec5497ecc731d6025f0ca4eccf2f987acec8cc10c975a6eb7e74eef510645ecf2933a601105c82a4d65a6055473f6d34a23c
|
7
|
+
data.tar.gz: 272e9bdbf60de4a031032f92210147488422942b4181e7fd00169768e9398a2e9c6fb6d57a6c066f657fbe77bf02b95547eb7e3c630149e0f89b098cbb44569b
|
data/.gitignore
CHANGED
data/jabara.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.required_ruby_version = ">= 2.0.0"
|
22
22
|
|
23
23
|
spec.add_dependency "scheman", "0.0.5"
|
24
|
-
spec.add_dependency
|
24
|
+
spec.add_dependency 'multi_json', '~> 1.0'
|
25
25
|
spec.add_development_dependency "bundler", "~> 1.7"
|
26
26
|
spec.add_development_dependency "rake", "~> 10.0"
|
27
27
|
spec.add_development_dependency "minitest"
|
data/lib/jabara/mysql/output.rb
CHANGED
@@ -4,7 +4,8 @@ module Jabara
|
|
4
4
|
module MySQL
|
5
5
|
class Output
|
6
6
|
|
7
|
-
def initialize
|
7
|
+
def initialize(null_value:'null')
|
8
|
+
@null_value = null_value
|
8
9
|
end
|
9
10
|
|
10
11
|
def encode(object_repr)
|
@@ -30,7 +31,7 @@ module Jabara
|
|
30
31
|
tag = ::Jabara.tag(repr)
|
31
32
|
case tag
|
32
33
|
when :null
|
33
|
-
|
34
|
+
@null_value
|
34
35
|
when :integer
|
35
36
|
data
|
36
37
|
when :float
|
@@ -40,7 +41,7 @@ module Jabara
|
|
40
41
|
when :string
|
41
42
|
quote(data)
|
42
43
|
when :boolean
|
43
|
-
data
|
44
|
+
if data == true then '1' else '0' end
|
44
45
|
when :object, :array
|
45
46
|
raise ArgumentError, "Can't accept nested object or array!"
|
46
47
|
else
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'jabara/data'
|
2
|
+
require 'jabara/mysql/output'
|
2
3
|
|
3
4
|
module Jabara
|
4
5
|
module MySQLDump
|
@@ -20,6 +21,8 @@ module Jabara
|
|
20
21
|
@column_keys = @schema.columns.map { |column| column[:key] }
|
21
22
|
@file = File.open(@out_path, 'w')
|
22
23
|
@buf = ''
|
24
|
+
|
25
|
+
super(null_value:'\N')
|
23
26
|
end
|
24
27
|
|
25
28
|
def write(object_repr)
|
@@ -27,7 +30,12 @@ module Jabara
|
|
27
30
|
@file.write(@buf)
|
28
31
|
data = ::Jabara.data(object_repr)
|
29
32
|
@buf = @column_keys.map { |key|
|
30
|
-
|
33
|
+
|
34
|
+
begin
|
35
|
+
mysql_value(data[key])
|
36
|
+
rescue => e
|
37
|
+
raise e.class, e.message + ' (for key: %s)' % key # TODO e.message is bad
|
38
|
+
end
|
31
39
|
}.join(@field_delimiter) + @line_delimiter
|
32
40
|
rescue => e
|
33
41
|
cleanup
|
@@ -2,6 +2,7 @@ require 'jabara/data'
|
|
2
2
|
require 'jabara/transformer/key_value'
|
3
3
|
|
4
4
|
require 'date'
|
5
|
+
require 'multi_json'
|
5
6
|
|
6
7
|
module Jabara
|
7
8
|
module ParseCom
|
@@ -21,14 +22,20 @@ module Jabara
|
|
21
22
|
# end
|
22
23
|
#end
|
23
24
|
|
24
|
-
class
|
25
|
+
class PrimitiveParser
|
26
|
+
def object_types
|
27
|
+
[]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class TimeStamp < PrimitiveParser # Parseが自動生成するカラム (createdAt, updatedAt)
|
25
32
|
def parse(data)
|
26
33
|
datetime = ::DateTime.iso8601(data)
|
27
34
|
::Jabara.primitive(:datetime, datetime)
|
28
35
|
end
|
29
36
|
end
|
30
37
|
|
31
|
-
class Integer
|
38
|
+
class Integer < PrimitiveParser
|
32
39
|
def initialize(default: nil) # default = nil の場合はnullを許容する
|
33
40
|
raise TypeError, 'default must be integer' unless default.is_a? ::Integer or default.nil?
|
34
41
|
@default = default
|
@@ -38,14 +45,14 @@ module Jabara
|
|
38
45
|
return ::Jabara.null if data.nil? and @default.nil?
|
39
46
|
return ::Jabara.primitive(:integer, @default) if data.nil?
|
40
47
|
|
41
|
-
raise TypeError, '
|
48
|
+
raise TypeError, 'data must be integer' unless data.is_a? ::Integer
|
42
49
|
::Jabara.primitive(:integer, data)
|
43
50
|
end
|
44
51
|
end
|
45
52
|
|
46
|
-
class Float
|
53
|
+
class Float < PrimitiveParser
|
47
54
|
def initialize(default: nil) # default = nil の場合はnullを許容する
|
48
|
-
raise TypeError, 'default must be
|
55
|
+
raise TypeError, 'default must be float' unless default.is_a? ::Float or default.nil?
|
49
56
|
@default = default
|
50
57
|
end
|
51
58
|
|
@@ -53,18 +60,18 @@ module Jabara
|
|
53
60
|
return ::Jabara.null if data.nil? and @default.nil?
|
54
61
|
return ::Jabara.primitive(:float, @default) if data.nil?
|
55
62
|
|
56
|
-
raise TypeError, '
|
63
|
+
raise TypeError, 'data must be float' unless data.is_a? ::Float
|
57
64
|
::Jabara.primitive(:float, data)
|
58
65
|
end
|
59
66
|
end
|
60
67
|
|
61
|
-
class ObjectId
|
68
|
+
class ObjectId < PrimitiveParser
|
62
69
|
def parse(data)
|
63
70
|
::Jabara.primitive(:string, data)
|
64
71
|
end
|
65
72
|
end
|
66
73
|
|
67
|
-
class File
|
74
|
+
class File < PrimitiveParser
|
68
75
|
def parse(data)
|
69
76
|
return ::Jabara.null if data.nil?
|
70
77
|
raise ArgumentError, 'File object is collapsed' if data['url'].nil?
|
@@ -72,7 +79,7 @@ module Jabara
|
|
72
79
|
end
|
73
80
|
end
|
74
81
|
|
75
|
-
class DateTime
|
82
|
+
class DateTime < PrimitiveParser
|
76
83
|
def initialize(default: nil) # default = nil の場合はnullを許容する
|
77
84
|
raise TypeError, 'default must be datetime' unless default.is_a? ::DateTime or default.nil?
|
78
85
|
@default = default
|
@@ -85,7 +92,7 @@ module Jabara
|
|
85
92
|
end
|
86
93
|
end
|
87
94
|
|
88
|
-
class String
|
95
|
+
class String < PrimitiveParser
|
89
96
|
def initialize(max: nil, default: nil) # default = nil の場合はnullを許容する
|
90
97
|
raise TypeError, 'default must be string' unless default.is_a? ::String or default.nil?
|
91
98
|
raise TypeError, 'max must be integer' unless max.is_a? ::Integer or max.nil?
|
@@ -102,7 +109,7 @@ module Jabara
|
|
102
109
|
end
|
103
110
|
end
|
104
111
|
|
105
|
-
class Pointer
|
112
|
+
class Pointer < PrimitiveParser
|
106
113
|
def parse(data)
|
107
114
|
return ::Jabara.null if data.nil?
|
108
115
|
raise ArgumentError, 'pointer object is collapsed' if data['objectId'].nil?
|
@@ -110,7 +117,7 @@ module Jabara
|
|
110
117
|
end
|
111
118
|
end
|
112
119
|
|
113
|
-
class Boolean
|
120
|
+
class Boolean < PrimitiveParser
|
114
121
|
def initialize(default: nil) # default = nil の場合はnullを許容する
|
115
122
|
raise ArgumentError, 'default must be true of false' unless [true, false].include? default or default.nil?
|
116
123
|
@default = default
|
@@ -143,6 +150,10 @@ module Jabara
|
|
143
150
|
return ::Jabara.set(elems)
|
144
151
|
end
|
145
152
|
|
153
|
+
def object_types
|
154
|
+
[@user_acl_object_type, @role_acl_object_type]
|
155
|
+
end
|
156
|
+
|
146
157
|
def decode_acl_user_entry(user_object_id, acl_permission)
|
147
158
|
data = {}
|
148
159
|
data['userObjectId'] = ::Jabara.primitive(:string, user_object_id)
|
@@ -160,15 +171,12 @@ module Jabara
|
|
160
171
|
end
|
161
172
|
end
|
162
173
|
|
163
|
-
class JSONString
|
164
|
-
def initialize
|
165
|
-
@encoder = Yajl::Encoder.new
|
166
|
-
end
|
174
|
+
class JSONString < PrimitiveParser
|
167
175
|
def parse(data)
|
168
176
|
return ::Jabara.null if data.nil?
|
169
177
|
raise ArgumentError, 'data must be hash or array' unless data.is_a? ::Hash or data.is_a? ::Array
|
170
178
|
|
171
|
-
json_str =
|
179
|
+
json_str = MultiJson.dump(data)
|
172
180
|
::Jabara.primitive(:string, json_str)
|
173
181
|
end
|
174
182
|
end
|
@@ -178,6 +186,7 @@ module Jabara
|
|
178
186
|
@variants = {}
|
179
187
|
instance_eval(&block)
|
180
188
|
end
|
189
|
+
|
181
190
|
def parse(data)
|
182
191
|
return ::Jabara.null if data.nil?
|
183
192
|
raise ArgumentError, 'data must be hash' unless data.is_a? ::Hash
|
@@ -188,11 +197,21 @@ module Jabara
|
|
188
197
|
::Jabara.set(reprs)
|
189
198
|
end
|
190
199
|
|
200
|
+
def object_types
|
201
|
+
@variants.map { |_, input|
|
202
|
+
[input.schema.object_type] + input.schema.inner_object_types
|
203
|
+
}.flatten
|
204
|
+
end
|
205
|
+
|
191
206
|
# following methods are for DSL
|
192
207
|
|
193
208
|
def variant(key:, schema:)
|
194
209
|
@variants[key] = ::Jabara::ParseCom::Input.new(schema)
|
195
210
|
end
|
211
|
+
|
212
|
+
def schema(&block)
|
213
|
+
Builder.build(&block)
|
214
|
+
end
|
196
215
|
end
|
197
216
|
|
198
217
|
class Schema
|
@@ -205,12 +224,11 @@ module Jabara
|
|
205
224
|
@id_key_name = nil
|
206
225
|
end
|
207
226
|
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
#end
|
227
|
+
def inner_object_types
|
228
|
+
@key_defs.map { |key_string, schema|
|
229
|
+
schema.object_types
|
230
|
+
}.flatten
|
231
|
+
end
|
214
232
|
|
215
233
|
end
|
216
234
|
|
@@ -253,10 +271,6 @@ module Jabara
|
|
253
271
|
(@schema.key_defs)[key_string] = type
|
254
272
|
end
|
255
273
|
|
256
|
-
def schema(&block)
|
257
|
-
self.build(&block)
|
258
|
-
end
|
259
|
-
|
260
274
|
# TODO
|
261
275
|
#def object
|
262
276
|
# Object.new
|
data/lib/jabara/version.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
require 'jabara/parse_com'
|
4
|
+
|
5
|
+
module ParseComTest
|
6
|
+
class TestBuilder < MiniTest::Test
|
7
|
+
def test_inner_object_types
|
8
|
+
schema = Jabara::ParseCom::Schema::Builder.build do
|
9
|
+
type 'test'
|
10
|
+
id 'objectId'
|
11
|
+
key 'objectId', parse_object_id
|
12
|
+
key 'createdAt', timestamp
|
13
|
+
key 'statusType', integer
|
14
|
+
key 'width', float
|
15
|
+
key 'image', file
|
16
|
+
key 'ownerId', pointer
|
17
|
+
key 'activated', boolean
|
18
|
+
key 'metadata', json_string
|
19
|
+
key 'options', variants {
|
20
|
+
variant key: 'collabo', schema: schema {
|
21
|
+
type 'collabo'
|
22
|
+
key 'hoge', string
|
23
|
+
}
|
24
|
+
}
|
25
|
+
key 'ACL', acl(user_acl_object_type: 'useracl', role_acl_object_type: 'roleacl')
|
26
|
+
end
|
27
|
+
|
28
|
+
assert schema.object_type == 'test'
|
29
|
+
assert schema.inner_object_types == ['collabo', 'useracl', 'roleacl']
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jabara
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuki Takeichi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: scheman
|
@@ -25,19 +25,19 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.0.5
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: multi_json
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
40
|
+
version: '1.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -115,6 +115,7 @@ files:
|
|
115
115
|
- lib/jabara/version.rb
|
116
116
|
- test/minitest_helper.rb
|
117
117
|
- test/test_jabara.rb
|
118
|
+
- test/test_parse_com.rb
|
118
119
|
homepage: https://github.com/yuki-takeichi/jabara
|
119
120
|
licenses:
|
120
121
|
- MIT
|
@@ -142,3 +143,4 @@ summary: A gem for pluggable data transformation.
|
|
142
143
|
test_files:
|
143
144
|
- test/minitest_helper.rb
|
144
145
|
- test/test_jabara.rb
|
146
|
+
- test/test_parse_com.rb
|