jabara 0.1.0 → 0.2.0

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: 921c5db1c328803a7238637ddc12ef2b01dea0a8
4
- data.tar.gz: 1c0a3f478163eb62a71f9cc2ad6b15fc4e0eef84
3
+ metadata.gz: 72c834799e8eb5bde01d17821d7b19336277d1dc
4
+ data.tar.gz: 89c64d90ca7af9db0a56acc3f6cf1b5bc2079195
5
5
  SHA512:
6
- metadata.gz: 2d2b8007f5d9ecf6ddd5fce7c1ce8190bc9245a8f373e725afb8cbc4a803912554ea3747cecd254cac4d2a453168d5bf0a7b33c96b0eab9a6000cf7a436972ff
7
- data.tar.gz: 5bfc494d5b8fbf10fc94039260f5d736d847da0acaada34ce867de42a820670e2e843ce71ead59c4f22f49447e315801eac97cee1a73a287d2c67a596e9c6591
6
+ metadata.gz: fcc4732c2f6b395c3096e10c3a4eef5ed1e882766a2d36e3e5a8a0a4c86dd284405d1e577ff6e296b3a7663b5d2605be2b7bfd5ebf4b50182ff085f56f716d2d
7
+ data.tar.gz: 23f9901bd17cc56ba61d8e24d89abb30661cf2c069d3b40b4bd6e712d204b3963917ce62271aa6131f5c8e9780db17d5a0d7597cde39e35e22bd6c5f7ae3f136
data/jabara.gemspec CHANGED
@@ -18,7 +18,10 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.required_ruby_version = ">= 2.0.0"
22
+
21
23
  spec.add_dependency "scheman", "0.0.5"
24
+ spec.add_dependency "yajl-ruby", "~> 1.2"
22
25
  spec.add_development_dependency "bundler", "~> 1.7"
23
26
  spec.add_development_dependency "rake", "~> 10.0"
24
27
  spec.add_development_dependency "minitest"
@@ -0,0 +1,42 @@
1
+ require 'jabara/data'
2
+ require 'jabara/transformer/flatten'
3
+
4
+ module Jabara
5
+ module Converter
6
+ class NestToFlats
7
+
8
+ # inputの[object_type]とoutputsのobject_typeが一致することを仮定
9
+ # ユースケースによるけど、input schemaのkeysとoutput schemaのcolummsはなるべく一致しているべき
10
+ def initialize(input:, output_map:, id_key_name: 'belongsTo')
11
+ @input = input
12
+ @output_map = output_map # object_typeからOutputへのマッピング
13
+ @tr_flatten = Jabara::Transformer::Flatten.new(id_key_name: id_key_name)
14
+ end
15
+
16
+ def convert(hash)
17
+ nested_repr = @input.decode(hash)
18
+ flat_repr, inner_reprs = @tr_flatten.convert(nested_repr)
19
+
20
+ write(flat_repr)
21
+ inner_reprs.each do |inner_repr|
22
+ write(inner_repr)
23
+ end
24
+ end
25
+
26
+ def terminate_all
27
+ @output_map.each do |_, output|
28
+ output.terminate
29
+ end
30
+ end
31
+
32
+ private
33
+ def write(repr)
34
+ object_type = Jabara.object_type(repr)
35
+ output = @output_map[object_type]
36
+ raise ArgumentError, 'output plugin for %s is not registered' % object_type if output.nil?
37
+ output.write(repr)
38
+ end
39
+ end
40
+ end
41
+ end
42
+
@@ -131,7 +131,7 @@ module Jabara
131
131
  end
132
132
 
133
133
  def self.build(&block)
134
- this = Builder.new
134
+ this = self.new
135
135
  this.instance_eval(&block)
136
136
  return this.schema
137
137
  end
@@ -192,7 +192,7 @@ module Jabara
192
192
  private
193
193
 
194
194
  def self.stmt_to_schema(create_stmt_hash)
195
- this = Builder.new
195
+ this = self.new
196
196
  this.schema.table_name = create_stmt_hash[:name]
197
197
  create_stmt_hash[:fields].each do |field_hash|
198
198
  field_hash = field_hash[:field]
@@ -8,13 +8,13 @@ module Jabara
8
8
  @table_name = schema.table_name
9
9
  @schema = schema
10
10
  @tuple_size = tuple_size
11
+ @column_keys = @schema.columns.map { |column| column[:key] }
11
12
  reset_buffer
12
13
  end
13
14
 
14
15
  def encode(repr)
15
16
  data = ::Jabara.data(repr)
16
- tuple_str = "(%s)" % @schema.columns.map { |column|
17
- key = column[:key]
17
+ tuple_str = "(%s)" % @column_keys.map { |key|
18
18
  mysql_value(data[key])
19
19
  }.join(", ")
20
20
 
@@ -0,0 +1,70 @@
1
+ require 'jabara/data'
2
+
3
+ module Jabara
4
+ module MySQLDump
5
+ class Output < Jabara::MySQL::Output
6
+
7
+ def initialize(schema:, out_path:,
8
+ fields_terminated_by:',',
9
+ fields_enclosed_by:'"', # TODO Not supported yet
10
+ fields_escapted_by:'"', # TODO Not supported yet
11
+ lines_terminated_by:"\n")
12
+ @schema = schema
13
+ @out_path = out_path
14
+
15
+ @field_delimiter = fields_terminated_by
16
+ @field_quote_str = fields_enclosed_by
17
+ @escape_str = fields_escapted_by
18
+ @line_delimiter = lines_terminated_by
19
+
20
+ @column_keys = @schema.columns.map { |column| column[:key] }
21
+ @file = File.open(@out_path, 'w')
22
+ @buf = ''
23
+ end
24
+
25
+ def write(object_repr)
26
+ begin
27
+ @file.write(@buf)
28
+ data = ::Jabara.data(object_repr)
29
+ @buf = @column_keys.map { |key|
30
+ mysql_value(data[key])
31
+ }.join(@field_delimiter) + @line_delimiter
32
+ rescue => e
33
+ cleanup
34
+ raise e # reraise
35
+ end
36
+ end
37
+
38
+ def terminate
39
+ @file.write(@buf.chomp(@line_delimiter))
40
+ @file.close
41
+ end
42
+
43
+ def load_data_query
44
+ query = <<SQL
45
+ load data infile '%s' into `%s`
46
+ character set %s
47
+ fields terminated by '%s'
48
+ enclosed by '%s'
49
+ escaped by '%s'
50
+ lines terminated by '%s'
51
+ ;
52
+ SQL
53
+ query % [@out_path,
54
+ @schema.table_name,
55
+ @char_set || 'utf8mb4',
56
+ @field_delimiter,
57
+ @field_quote_str,
58
+ @escape_str,
59
+ @line_delimiter]
60
+ end
61
+
62
+ private
63
+ def cleanup
64
+ @file.close
65
+ File.delete(@out_path)
66
+ end
67
+
68
+ end
69
+ end
70
+ end
@@ -0,0 +1 @@
1
+ require 'jabara/mysql_dump/output'
@@ -86,9 +86,9 @@ module Jabara
86
86
  end
87
87
 
88
88
  class String
89
- def initialize(max: 1000, default: nil) # default = nil の場合はnullを許容する
89
+ def initialize(max: nil, default: nil) # default = nil の場合はnullを許容する
90
90
  raise TypeError, 'default must be string' unless default.is_a? ::String or default.nil?
91
- raise TypeError, 'max must be integer' unless max.is_a? ::Integer
91
+ raise TypeError, 'max must be integer' unless max.is_a? ::Integer or max.nil?
92
92
  @max = max
93
93
  @default = default
94
94
  end
@@ -97,7 +97,8 @@ module Jabara
97
97
  return ::Jabara.null if data.nil? and @default.nil?
98
98
  return @default if data.nil?
99
99
  raise TypeError, 'data must be string' unless data.is_a? ::String or default.nil?
100
- ::Jabara.primitive(:string, data.slice(0, @max))
100
+ data = data.slice(0, @max) unless @max.nil?
101
+ ::Jabara.primitive(:string, data)
101
102
  end
102
103
  end
103
104
 
@@ -111,7 +112,7 @@ module Jabara
111
112
 
112
113
  class Boolean
113
114
  def initialize(default: nil) # default = nil の場合はnullを許容する
114
- raise ArgumentError, 'default must be true of false' unless [true, false].include? default
115
+ raise ArgumentError, 'default must be true of false' unless [true, false].include? default or default.nil?
115
116
  @default = default
116
117
  end
117
118
 
@@ -159,6 +160,41 @@ module Jabara
159
160
  end
160
161
  end
161
162
 
163
+ class JSONString
164
+ def initialize
165
+ @encoder = Yajl::Encoder.new
166
+ end
167
+ def parse(data)
168
+ return ::Jabara.null if data.nil?
169
+ raise ArgumentError, 'data must be hash or array' unless data.is_a? ::Hash or data.is_a? ::Array
170
+
171
+ json_str = @encoder.encode(data)
172
+ ::Jabara.primitive(:string, json_str)
173
+ end
174
+ end
175
+
176
+ class Variants
177
+ def initialize(&block)
178
+ @variants = {}
179
+ instance_eval(&block)
180
+ end
181
+ def parse(data)
182
+ return ::Jabara.null if data.nil?
183
+ raise ArgumentError, 'data must be hash' unless data.is_a? ::Hash
184
+
185
+ reprs = @variants.map { |key, schema|
186
+ if not data[key].nil? then schema.decode(data[key]) else nil end
187
+ }.compact
188
+ ::Jabara.set(reprs)
189
+ end
190
+
191
+ # following methods are for DSL
192
+
193
+ def variant(key:, schema:)
194
+ @variants[key] = ::Jabara::ParseCom::Input.new(schema)
195
+ end
196
+ end
197
+
162
198
  class Schema
163
199
 
164
200
  attr_accessor :key_defs, :object_type, :id_key_name
@@ -169,6 +205,13 @@ module Jabara
169
205
  @id_key_name = nil
170
206
  end
171
207
 
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
214
+
172
215
  end
173
216
 
174
217
  class Builder
@@ -176,10 +219,18 @@ module Jabara
176
219
  attr_reader :schema
177
220
 
178
221
  def self.build(&block)
179
- this = Builder.new
222
+ this = self.new
180
223
  this.instance_eval(&block)
181
224
  return this.schema
182
225
  end
226
+
227
+ def self.relation object_type
228
+ self.build do
229
+ type object_type
230
+ key 'owningId', string
231
+ key 'relatedId', string
232
+ end
233
+ end
183
234
 
184
235
  def initialize
185
236
  @schema = Schema.new
@@ -201,6 +252,10 @@ module Jabara
201
252
  raise ArgumentError, 'key_name must be string' unless key_string.is_a? ::String
202
253
  (@schema.key_defs)[key_string] = type
203
254
  end
255
+
256
+ def schema(&block)
257
+ self.build(&block)
258
+ end
204
259
 
205
260
  # TODO
206
261
  #def object
@@ -236,7 +291,7 @@ module Jabara
236
291
  DateTime.new default: default
237
292
  end
238
293
 
239
- def string max: 1000, default: nil
294
+ def string max: nil, default: nil
240
295
  String.new max: max, default: default
241
296
  end
242
297
 
@@ -251,6 +306,14 @@ module Jabara
251
306
  def acl user_acl_object_type: ,role_acl_object_type:
252
307
  ACL.new(user_acl_object_type: user_acl_object_type, role_acl_object_type: role_acl_object_type)
253
308
  end
309
+
310
+ def json_string
311
+ JSONString.new
312
+ end
313
+
314
+ def variants(&block)
315
+ Variants.new(&block)
316
+ end
254
317
  end
255
318
  end
256
319
  end
@@ -1,3 +1,3 @@
1
1
  module Jabara
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  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.1.0
4
+ version: 0.2.0
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-02-26 00:00:00.000000000 Z
11
+ date: 2015-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: scheman
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.0.5
27
+ - !ruby/object:Gem::Dependency
28
+ name: yajl-ruby
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.2'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -83,12 +97,15 @@ files:
83
97
  - bin/jabara
84
98
  - jabara.gemspec
85
99
  - lib/jabara.rb
100
+ - lib/jabara/converter/nest_to_flats.rb
86
101
  - lib/jabara/data.rb
87
102
  - lib/jabara/mysql.rb
88
103
  - lib/jabara/mysql/output.rb
89
104
  - lib/jabara/mysql/schema.rb
90
105
  - lib/jabara/mysql_bulk.rb
91
106
  - lib/jabara/mysql_bulk/output.rb
107
+ - lib/jabara/mysql_dump.rb
108
+ - lib/jabara/mysql_dump/output.rb
92
109
  - lib/jabara/parse_com.rb
93
110
  - lib/jabara/parse_com/input.rb
94
111
  - lib/jabara/parse_com/schema.rb
@@ -110,7 +127,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
110
127
  requirements:
111
128
  - - ">="
112
129
  - !ruby/object:Gem::Version
113
- version: '0'
130
+ version: 2.0.0
114
131
  required_rubygems_version: !ruby/object:Gem::Requirement
115
132
  requirements:
116
133
  - - ">="