embulk-parser-json 0.0.5 → 0.0.6

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: 4a50a899523c149951f3bb4b67f917ed7be074d0
4
- data.tar.gz: eff2a6db83ee9af56a4588c1951b28093732094d
3
+ metadata.gz: b6f1282a901442d18e42cc128c2d3bd655ea6c13
4
+ data.tar.gz: 6ecce69a72ef4ef3937eb5a6e4c543eeb0589895
5
5
  SHA512:
6
- metadata.gz: 66d5ab493130ac329c0a2790c2803d294f9860e8949a1c6706cae2b8f7cffca272b2cf5f97bf3468ce24c09d7b2ee5207d17b707d5551214b2f285b318cd5ca3
7
- data.tar.gz: 3f7f230abb7b10dc89a6385732ed5108e236328d4950e0a6b8518bdad59edb86f3add74a83e39e9762c69eb12de808fd7af16b6579ea677430d68c36b66e31a6
6
+ metadata.gz: c26df186cf61cde5cd9b39e5f87c274a88d9760c4de9b441c390eca5fa47ee9a353744f656ee19f5de1b7921f3111b5af8360dbccb1358ea18022b71e48166a6
7
+ data.tar.gz: 2c7ecd428848dc85478af476cd5009ab4e15777b40429602c89d847c990efe3ea6b09f3b191249de7347dc19516e8f1f762241ca290514ff167aeb5e0d833fdd
data/README.md CHANGED
@@ -22,6 +22,7 @@ A type name has been changed from **json** to **jsonpath** from v0.0.3.
22
22
  parser:
23
23
  type: jsonpath
24
24
  root: $.response.station
25
+ stop_on_invalid_record: false
25
26
  schema:
26
27
  - {name: name, type: string}
27
28
  - {name: next, type: string}
@@ -34,9 +35,10 @@ parser:
34
35
  - {name: optionals, type: json}
35
36
  ```
36
37
 
37
- - **type**: specify this plugin as `json`
38
- - **root**: root property to start fetching each entries, specify in [jsonpath](http://goessner.net/articles/JsonPath/) style, required
39
- - **schema**: specify the attribute of table and data type, required
38
+ - **type**: Specify this plugin as `json`
39
+ - **root**: Root property to start fetching each entries, specify in [jsonpath](http://goessner.net/articles/JsonPath/) style, required
40
+ - **schema**: Specify the attribute of table and data type, required
41
+ - **stop_on_invalid_record**: Stop bulk load transaction if a file includes invalid record, false by default
40
42
 
41
43
 
42
44
  ## Example
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "embulk-parser-json"
7
- spec.version = "0.0.5"
7
+ spec.version = "0.0.6"
8
8
  spec.authors = ["Takuma kanari"]
9
9
  spec.email = ["chemtrails.t@gmail.com"]
10
10
  spec.summary = %q{Embulk parser plugin for json with jsonpath}
@@ -9,8 +9,9 @@ module Embulk
9
9
 
10
10
  def self.transaction(config, &control)
11
11
  task = {
12
- :schema => config.param("schema", :array),
13
- :root => config.param("root", :string)
12
+ schema: config.param("schema", :array),
13
+ root: config.param("root", :string),
14
+ stop_on_invalid_record: config.param("stop_on_invalid_record", :bool, default: false)
14
15
  }
15
16
  columns = task[:schema].each_with_index.map do |c, i|
16
17
  Column.new(i, c["name"], c["type"].to_sym)
@@ -21,9 +22,16 @@ module Embulk
21
22
  def run(file_input)
22
23
  root = JsonPath.new(@task["root"])
23
24
  schema = @task["schema"]
25
+ stop_on_invalid_record = @task["stop_on_invalid_record"]
24
26
  while file = file_input.next_file
25
- root.on(JSON.parse(file.read)).flatten.each do |e|
26
- @page_builder.add(make_record(schema, e))
27
+ json_text = file.read
28
+ begin
29
+ root.on(JSON.parse(json_text)).flatten.each do |e|
30
+ @page_builder.add(make_record(schema, e))
31
+ end
32
+ rescue JSON::ParserError, DataParseError => e
33
+ raise "Invalid record: '#{json_text}' (#{e})" if stop_on_invalid_record
34
+ Embulk.logger.warn "Skipped record (#{e}): '#{json_text}'"
27
35
  end
28
36
  end
29
37
  @page_builder.finish
@@ -59,7 +67,15 @@ module Embulk
59
67
  !!val
60
68
  end
61
69
  when "timestamp"
62
- val.nil? || val.empty? ? nil : Time.strptime(val, c["format"])
70
+ if val.nil? || val.empty?
71
+ nil
72
+ else
73
+ begin
74
+ Time.strptime(val, c["format"])
75
+ rescue ArgumentError => e
76
+ raise DataParseError.new e
77
+ end
78
+ end
63
79
  else
64
80
  raise "Unsupported type #{type}"
65
81
  end
@@ -69,6 +85,8 @@ module Embulk
69
85
  def kind_of_boolean?(val)
70
86
  val.kind_of?(TrueClass) || val.kind_of?(FalseClass)
71
87
  end
88
+
89
+ class DataParseError < StandardError ; end
72
90
  end
73
91
  end
74
92
  end
metadata CHANGED
@@ -1,59 +1,58 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-parser-json
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takuma kanari
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-10 00:00:00.000000000 Z
11
+ date: 2017-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: jsonpath
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
16
  - - "~>"
18
17
  - !ruby/object:Gem::Version
19
18
  version: '0.5'
20
- type: :runtime
19
+ name: jsonpath
21
20
  prerelease: false
21
+ type: :runtime
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.5'
27
27
  - !ruby/object:Gem::Dependency
28
- name: bundler
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
30
  - - "~>"
32
31
  - !ruby/object:Gem::Version
33
32
  version: '1.0'
34
- type: :development
33
+ name: bundler
35
34
  prerelease: false
35
+ type: :development
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - "~>"
46
45
  - !ruby/object:Gem::Version
47
46
  version: '10.0'
48
- type: :development
47
+ name: rake
49
48
  prerelease: false
49
+ type: :development
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '10.0'
55
- description: Json parser plugin is Embulk plugin to fetch entries in json format with
56
- jsonpath.
55
+ description: Json parser plugin is Embulk plugin to fetch entries in json format with jsonpath.
57
56
  email:
58
57
  - chemtrails.t@gmail.com
59
58
  executables: []
@@ -71,7 +70,7 @@ homepage: https://github.com/takumakanari/embulk-parser-json
71
70
  licenses:
72
71
  - MIT
73
72
  metadata: {}
74
- post_install_message:
73
+ post_install_message:
75
74
  rdoc_options: []
76
75
  require_paths:
77
76
  - lib
@@ -86,9 +85,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
85
  - !ruby/object:Gem::Version
87
86
  version: '0'
88
87
  requirements: []
89
- rubyforge_project:
90
- rubygems_version: 2.4.5
91
- signing_key:
88
+ rubyforge_project:
89
+ rubygems_version: 2.6.6
90
+ signing_key:
92
91
  specification_version: 4
93
92
  summary: Embulk parser plugin for json with jsonpath
94
93
  test_files: []