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