embulk-parser-firebase_avro 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.circleci/config.yml +27 -0
- data/.gitignore +80 -0
- data/.scalafmt.conf +2 -0
- data/LICENSE.txt +21 -0
- data/README.md +52 -0
- data/build.gradle +81 -0
- data/build.sbt +29 -0
- data/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/gradle/wrapper/gradle-wrapper.properties +6 -0
- data/gradlew +169 -0
- data/gradlew.bat +84 -0
- data/lib/embulk/parser/firebase_avro.rb +3 -0
- data/project/build.properties +1 -0
- data/project/plugins.sbt +3 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/FirebaseAvroParserPlugin.scala +66 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/LoanPattern.scala +19 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/Parser.scala +111 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/PluginTask.scala +5 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/ValueHolder.scala +5 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/column/Column.scala +61 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/column/Columns.scala +47 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/column/EventDimension.scala +19 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/column/UserDimension.scala +28 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/define/Root.scala +5 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/define/root/Event_Dim.scala +8 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/define/root/User_Dim.scala +11 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/define/root/event_dim/Params.scala +3 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/define/root/event_dim/params/Value.scala +6 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/App_Info.scala +7 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/Bundle_Info.scala +3 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/Device_Info.scala +13 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/Geo_Info.scala +3 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/Ltv_Info.scala +3 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/Traffic_Source.scala +5 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/User_Properties.scala +3 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/user_properties/Value.scala +5 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/user_properties/value/Value.scala +6 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/json/CustomEncoder.scala +21 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/json/event_dim/EventParmsJsonSerializer.scala +29 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/json/user_dim/UserPropertiesJsonSerializer.scala +34 -0
- data/src/test/scala/org/embulk/parser/firebase_avro/Implicitly.scala +9 -0
- data/src/test/scala/org/embulk/parser/firebase_avro/ParserTest.scala +22 -0
- data/src/test/scala/org/embulk/parser/firebase_avro/column/ColumnsTest.scala +18 -0
- data/src/test/scala/org/embulk/parser/firebase_avro/json/event_dim/EventParmsJsonSerializerTest.scala +19 -0
- metadata +138 -0
@@ -0,0 +1,11 @@
|
|
1
|
+
package org.embulk.parser.firebase_avro.define.root
|
2
|
+
|
3
|
+
case class User_Dim(user_id: Option[String],
|
4
|
+
first_open_timestamp_micros: Option[Long],
|
5
|
+
user_properties: List[user_dim.User_Properties],
|
6
|
+
device_info: Option[user_dim.Device_Info],
|
7
|
+
geo_info: Option[user_dim.Geo_Info],
|
8
|
+
app_info: Option[user_dim.App_Info],
|
9
|
+
traffic_source: Option[user_dim.Traffic_Source],
|
10
|
+
bundle_info: Option[user_dim.Bundle_Info],
|
11
|
+
ltv_info: Option[user_dim.Ltv_Info])
|
@@ -0,0 +1,13 @@
|
|
1
|
+
package org.embulk.parser.firebase_avro.define.root.user_dim
|
2
|
+
|
3
|
+
case class Device_Info(device_category: Option[String],
|
4
|
+
mobile_brand_name: Option[String],
|
5
|
+
mobile_model_name: Option[String],
|
6
|
+
mobile_marketing_name: Option[String],
|
7
|
+
device_model: Option[String],
|
8
|
+
platform_version: Option[String],
|
9
|
+
device_id: Option[String],
|
10
|
+
resettable_device_id: Option[String],
|
11
|
+
user_default_language: Option[String],
|
12
|
+
device_time_zone_offset_seconds: Option[Long],
|
13
|
+
limited_ad_tracking: Option[Boolean])
|
@@ -0,0 +1,21 @@
|
|
1
|
+
package org.embulk.parser.firebase_avro.json
|
2
|
+
|
3
|
+
import io.circe.{Encoder, Json}
|
4
|
+
|
5
|
+
object CustomEncoder {
|
6
|
+
implicit val mapEncoder: Encoder[Map[String, Any]] =
|
7
|
+
new Encoder[Map[String, Any]] {
|
8
|
+
final def apply(a: Map[String, Any]): Json = {
|
9
|
+
val jsonValues = a.keys.map { key =>
|
10
|
+
a(key) match {
|
11
|
+
case v: String => (key, Json.fromString(v))
|
12
|
+
case v: Double =>
|
13
|
+
(key, Json.fromDouble(v).getOrElse(Json.fromString(v.toString)))
|
14
|
+
case v: Long => (key, Json.fromLong(v))
|
15
|
+
case _ => (key, Json.Null)
|
16
|
+
}
|
17
|
+
}
|
18
|
+
Json.fromFields(jsonValues)
|
19
|
+
}
|
20
|
+
}
|
21
|
+
}
|
data/src/main/scala/org/embulk/parser/firebase_avro/json/event_dim/EventParmsJsonSerializer.scala
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
package org.embulk.parser.firebase_avro.json.event_dim
|
2
|
+
|
3
|
+
import org.embulk.parser.firebase_avro.define.root.event_dim.Params
|
4
|
+
|
5
|
+
import scala.collection.mutable
|
6
|
+
import io.circe._
|
7
|
+
import io.circe.syntax._
|
8
|
+
import org.embulk.parser.firebase_avro.json.CustomEncoder.mapEncoder
|
9
|
+
|
10
|
+
object EventParmsJsonSerializer {
|
11
|
+
def apply(params: List[Params]): Option[Json] = {
|
12
|
+
val map = mutable.Map[String, Any]()
|
13
|
+
params.foreach { p =>
|
14
|
+
val value: Option[Any] = p.value.flatMap { v =>
|
15
|
+
v.float_value
|
16
|
+
.orElse(v.double_value)
|
17
|
+
.orElse(v.int_value)
|
18
|
+
.orElse(v.string_value)
|
19
|
+
}
|
20
|
+
for {
|
21
|
+
key <- p.key
|
22
|
+
value <- value
|
23
|
+
} yield map.put(key, value)
|
24
|
+
}
|
25
|
+
if (map.nonEmpty) {
|
26
|
+
Some(map.toMap.asJson)
|
27
|
+
} else None
|
28
|
+
}
|
29
|
+
}
|
data/src/main/scala/org/embulk/parser/firebase_avro/json/user_dim/UserPropertiesJsonSerializer.scala
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
package org.embulk.parser.firebase_avro.json.user_dim
|
2
|
+
|
3
|
+
import io.circe.Json
|
4
|
+
import io.circe.syntax._
|
5
|
+
import org.embulk.parser.firebase_avro.define.root.user_dim.User_Properties
|
6
|
+
import org.embulk.parser.firebase_avro.json.CustomEncoder.mapEncoder
|
7
|
+
|
8
|
+
import scala.collection.mutable
|
9
|
+
|
10
|
+
object UserPropertiesJsonSerializer {
|
11
|
+
def apply(properties: List[User_Properties]): Option[Json] = {
|
12
|
+
val map = mutable.Map[String, Any]()
|
13
|
+
properties.foreach { p =>
|
14
|
+
val value: Option[Any] = for {
|
15
|
+
v <- p.value
|
16
|
+
iv <- v.value
|
17
|
+
} yield {
|
18
|
+
v.set_timestamp_usec.foreach(a => map.put("set_timestamp_usec", a))
|
19
|
+
v.index.foreach(a => map.put("index", a))
|
20
|
+
iv.float_value
|
21
|
+
.orElse(iv.double_value)
|
22
|
+
.orElse(iv.int_value)
|
23
|
+
.orElse(iv.string_value)
|
24
|
+
}
|
25
|
+
for {
|
26
|
+
key <- p.key
|
27
|
+
value <- value
|
28
|
+
} yield map.put(key, value)
|
29
|
+
}
|
30
|
+
if (map.nonEmpty) {
|
31
|
+
Some(map.toMap.asJson)
|
32
|
+
} else None
|
33
|
+
}
|
34
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
package org.embulk.parser.firebase_avro
|
2
|
+
|
3
|
+
import org.embulk.parser.firebase_avro.define.Root
|
4
|
+
import org.scalacheck.Shapeless._
|
5
|
+
import org.scalatest.{MustMatchers, PropSpec}
|
6
|
+
import org.scalatest.prop.PropertyChecks
|
7
|
+
|
8
|
+
class ParserTest extends PropSpec with PropertyChecks with MustMatchers {
|
9
|
+
property("could be parsing.") {
|
10
|
+
forAll(minSize(1000)) { (root: Root) =>
|
11
|
+
root.user_dim match {
|
12
|
+
case Some(v) =>
|
13
|
+
// could be parse.
|
14
|
+
val result = Parser(root)
|
15
|
+
case None =>
|
16
|
+
intercept[RuntimeException] {
|
17
|
+
Parser(root)
|
18
|
+
}
|
19
|
+
}
|
20
|
+
}
|
21
|
+
}
|
22
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
package org.embulk.parser.firebase_avro.column
|
2
|
+
|
3
|
+
import org.scalatest._
|
4
|
+
import Matchers._
|
5
|
+
|
6
|
+
class ColumnsTest extends FlatSpec with MustMatchers {
|
7
|
+
|
8
|
+
"columuns" should "be indexing" in {
|
9
|
+
val columns = Columns()
|
10
|
+
val summery = columns.indices.sum
|
11
|
+
columns.map(_.embulkColumn).map(_.getIndex).sum should be (summery)
|
12
|
+
}
|
13
|
+
|
14
|
+
"columns" should "be finding" in {
|
15
|
+
Columns.find("user_dim" , "first_open_timestamp_micros")
|
16
|
+
}
|
17
|
+
|
18
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
package org.embulk.parser.firebase_avro.json.event_dim
|
2
|
+
|
3
|
+
import org.embulk.parser.firebase_avro.define.root.event_dim.Params
|
4
|
+
import org.embulk.parser.firebase_avro.define.root.event_dim.params.Value
|
5
|
+
|
6
|
+
import org.scalatest._
|
7
|
+
|
8
|
+
class EventParmsJsonSerializerTest extends FlatSpec with MustMatchers {
|
9
|
+
|
10
|
+
"parameter" should "be encoding" in {
|
11
|
+
val string = Params(Option("key_string") , Option(Value(string_value = Some("abc"))))
|
12
|
+
val int = Params(Option("key_int") , Option(Value(int_value = Some(1))))
|
13
|
+
val double = Params(Option("key_double") , Option(Value(double_value = Some(10D))))
|
14
|
+
val float = Params(Option("key_float") , Option(Value(float_value = Some(10F))))
|
15
|
+
val given = List(string , int , double , float)
|
16
|
+
val that = EventParmsJsonSerializer(given).map(_.noSpaces)
|
17
|
+
that mustBe Some("{\"key_float\":10.0,\"key_int\":1,\"key_string\":\"abc\",\"key_double\":10.0}")
|
18
|
+
}
|
19
|
+
}
|
metadata
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: embulk-parser-firebase_avro
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- smdmts
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-06-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - ~>
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '1.0'
|
19
|
+
name: bundler
|
20
|
+
prerelease: false
|
21
|
+
type: :development
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '10.0'
|
33
|
+
name: rake
|
34
|
+
prerelease: false
|
35
|
+
type: :development
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
description: Parses Firebase Avro files read by other file input plugins.
|
42
|
+
email:
|
43
|
+
- smdmts@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- .circleci/config.yml
|
49
|
+
- .gitignore
|
50
|
+
- .scalafmt.conf
|
51
|
+
- LICENSE.txt
|
52
|
+
- README.md
|
53
|
+
- build.gradle
|
54
|
+
- build.sbt
|
55
|
+
- gradle/wrapper/gradle-wrapper.jar
|
56
|
+
- gradle/wrapper/gradle-wrapper.properties
|
57
|
+
- gradlew
|
58
|
+
- gradlew.bat
|
59
|
+
- lib/embulk/parser/firebase_avro.rb
|
60
|
+
- project/build.properties
|
61
|
+
- project/plugins.sbt
|
62
|
+
- src/main/scala/org/embulk/parser/firebase_avro/FirebaseAvroParserPlugin.scala
|
63
|
+
- src/main/scala/org/embulk/parser/firebase_avro/LoanPattern.scala
|
64
|
+
- src/main/scala/org/embulk/parser/firebase_avro/Parser.scala
|
65
|
+
- src/main/scala/org/embulk/parser/firebase_avro/PluginTask.scala
|
66
|
+
- src/main/scala/org/embulk/parser/firebase_avro/ValueHolder.scala
|
67
|
+
- src/main/scala/org/embulk/parser/firebase_avro/column/Column.scala
|
68
|
+
- src/main/scala/org/embulk/parser/firebase_avro/column/Columns.scala
|
69
|
+
- src/main/scala/org/embulk/parser/firebase_avro/column/EventDimension.scala
|
70
|
+
- src/main/scala/org/embulk/parser/firebase_avro/column/UserDimension.scala
|
71
|
+
- src/main/scala/org/embulk/parser/firebase_avro/define/Root.scala
|
72
|
+
- src/main/scala/org/embulk/parser/firebase_avro/define/root/Event_Dim.scala
|
73
|
+
- src/main/scala/org/embulk/parser/firebase_avro/define/root/User_Dim.scala
|
74
|
+
- src/main/scala/org/embulk/parser/firebase_avro/define/root/event_dim/Params.scala
|
75
|
+
- src/main/scala/org/embulk/parser/firebase_avro/define/root/event_dim/params/Value.scala
|
76
|
+
- src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/App_Info.scala
|
77
|
+
- src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/Bundle_Info.scala
|
78
|
+
- src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/Device_Info.scala
|
79
|
+
- src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/Geo_Info.scala
|
80
|
+
- src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/Ltv_Info.scala
|
81
|
+
- src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/Traffic_Source.scala
|
82
|
+
- src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/User_Properties.scala
|
83
|
+
- src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/user_properties/Value.scala
|
84
|
+
- src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/user_properties/value/Value.scala
|
85
|
+
- src/main/scala/org/embulk/parser/firebase_avro/json/CustomEncoder.scala
|
86
|
+
- src/main/scala/org/embulk/parser/firebase_avro/json/event_dim/EventParmsJsonSerializer.scala
|
87
|
+
- src/main/scala/org/embulk/parser/firebase_avro/json/user_dim/UserPropertiesJsonSerializer.scala
|
88
|
+
- src/test/scala/org/embulk/parser/firebase_avro/Implicitly.scala
|
89
|
+
- src/test/scala/org/embulk/parser/firebase_avro/ParserTest.scala
|
90
|
+
- src/test/scala/org/embulk/parser/firebase_avro/column/ColumnsTest.scala
|
91
|
+
- src/test/scala/org/embulk/parser/firebase_avro/json/event_dim/EventParmsJsonSerializerTest.scala
|
92
|
+
- classpath/avro-1.8.1.jar
|
93
|
+
- classpath/avro4s-core_2.11-1.6.4.jar
|
94
|
+
- classpath/avro4s-macros_2.11-1.6.4.jar
|
95
|
+
- classpath/cats-core_2.11-0.9.0.jar
|
96
|
+
- classpath/cats-kernel_2.11-0.9.0.jar
|
97
|
+
- classpath/cats-macros_2.11-0.9.0.jar
|
98
|
+
- classpath/circe-core_2.11-0.8.0.jar
|
99
|
+
- classpath/circe-generic_2.11-0.8.0.jar
|
100
|
+
- classpath/circe-numbers_2.11-0.8.0.jar
|
101
|
+
- classpath/commons-compress-1.8.1.jar
|
102
|
+
- classpath/embulk-parser-firebase_avro-0.1.0.jar
|
103
|
+
- classpath/jackson-core-asl-1.9.13.jar
|
104
|
+
- classpath/jackson-mapper-asl-1.9.13.jar
|
105
|
+
- classpath/machinist_2.11-0.6.1.jar
|
106
|
+
- classpath/macro-compat_2.11-1.1.1.jar
|
107
|
+
- classpath/paranamer-2.7.jar
|
108
|
+
- classpath/scala-library-2.11.11.jar
|
109
|
+
- classpath/scala-reflect-2.11.8.jar
|
110
|
+
- classpath/shapeless_2.11-2.3.2.jar
|
111
|
+
- classpath/simulacrum_2.11-0.10.0.jar
|
112
|
+
- classpath/snappy-java-1.1.1.3.jar
|
113
|
+
- classpath/xz-1.5.jar
|
114
|
+
homepage: https://github.com/smdmts/embulk-parser-firebase_avro
|
115
|
+
licenses:
|
116
|
+
- MIT
|
117
|
+
metadata: {}
|
118
|
+
post_install_message:
|
119
|
+
rdoc_options: []
|
120
|
+
require_paths:
|
121
|
+
- lib
|
122
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
requirements: []
|
133
|
+
rubyforge_project:
|
134
|
+
rubygems_version: 2.1.9
|
135
|
+
signing_key:
|
136
|
+
specification_version: 4
|
137
|
+
summary: Firebase Avro parser plugin for Embulk
|
138
|
+
test_files: []
|