jabara 0.2.0 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 72c834799e8eb5bde01d17821d7b19336277d1dc
4
- data.tar.gz: 89c64d90ca7af9db0a56acc3f6cf1b5bc2079195
3
+ metadata.gz: 3b2850cefe7e9de9a35df28e4623210b1e39fcac
4
+ data.tar.gz: 5c3e780facc6bd90876d9fc0835ad07279afb837
5
5
  SHA512:
6
- metadata.gz: fcc4732c2f6b395c3096e10c3a4eef5ed1e882766a2d36e3e5a8a0a4c86dd284405d1e577ff6e296b3a7663b5d2605be2b7bfd5ebf4b50182ff085f56f716d2d
7
- data.tar.gz: 23f9901bd17cc56ba61d8e24d89abb30661cf2c069d3b40b4bd6e712d204b3963917ce62271aa6131f5c8e9780db17d5a0d7597cde39e35e22bd6c5f7ae3f136
6
+ metadata.gz: 62ac4c1acf8e8f3647ee395cbf5eec5497ecc731d6025f0ca4eccf2f987acec8cc10c975a6eb7e74eef510645ecf2933a601105c82a4d65a6055473f6d34a23c
7
+ data.tar.gz: 272e9bdbf60de4a031032f92210147488422942b4181e7fd00169768e9398a2e9c6fb6d57a6c066f657fbe77bf02b95547eb7e3c630149e0f89b098cbb44569b
data/.gitignore CHANGED
@@ -12,3 +12,4 @@
12
12
  *.o
13
13
  *.a
14
14
  mkmf.log
15
+ *.gem
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 "yajl-ruby", "~> 1.2"
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"
@@ -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
- 'null'
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
- mysql_value(data[key])
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
@@ -3,6 +3,7 @@ require 'jabara/data'
3
3
  module Jabara
4
4
  module ParseCom
5
5
  class Input
6
+ attr_reader :schema
6
7
  def initialize(parse_com_schema)
7
8
  @schema = parse_com_schema
8
9
  end
@@ -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 TimeStamp # Parseが自動生成するカラム (createdAt, updatedAt)
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, 'default must be integer' unless data.is_a? ::Integer
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 integer' unless default.is_a? ::Float or default.nil?
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, 'default must be float' unless data.is_a? ::Float
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 = @encoder.encode(data)
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
- #def object_types
209
- # @key_defs.map { |key_string, schema|
210
- # return [] unless schema.is_a? Jabara::ParseCom::Schema::Object
211
- # schema.object_types # TODO impl it
212
- # }.flatten
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
@@ -1,3 +1,3 @@
1
1
  module Jabara
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.2"
3
3
  end
@@ -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.0
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-06 00:00:00.000000000 Z
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: yajl-ruby
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.2'
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.2'
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