embulk-parser-firebase_avro 0.1.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.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +27 -0
  3. data/.gitignore +80 -0
  4. data/.scalafmt.conf +2 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +52 -0
  7. data/build.gradle +81 -0
  8. data/build.sbt +29 -0
  9. data/gradle/wrapper/gradle-wrapper.jar +0 -0
  10. data/gradle/wrapper/gradle-wrapper.properties +6 -0
  11. data/gradlew +169 -0
  12. data/gradlew.bat +84 -0
  13. data/lib/embulk/parser/firebase_avro.rb +3 -0
  14. data/project/build.properties +1 -0
  15. data/project/plugins.sbt +3 -0
  16. data/src/main/scala/org/embulk/parser/firebase_avro/FirebaseAvroParserPlugin.scala +66 -0
  17. data/src/main/scala/org/embulk/parser/firebase_avro/LoanPattern.scala +19 -0
  18. data/src/main/scala/org/embulk/parser/firebase_avro/Parser.scala +111 -0
  19. data/src/main/scala/org/embulk/parser/firebase_avro/PluginTask.scala +5 -0
  20. data/src/main/scala/org/embulk/parser/firebase_avro/ValueHolder.scala +5 -0
  21. data/src/main/scala/org/embulk/parser/firebase_avro/column/Column.scala +61 -0
  22. data/src/main/scala/org/embulk/parser/firebase_avro/column/Columns.scala +47 -0
  23. data/src/main/scala/org/embulk/parser/firebase_avro/column/EventDimension.scala +19 -0
  24. data/src/main/scala/org/embulk/parser/firebase_avro/column/UserDimension.scala +28 -0
  25. data/src/main/scala/org/embulk/parser/firebase_avro/define/Root.scala +5 -0
  26. data/src/main/scala/org/embulk/parser/firebase_avro/define/root/Event_Dim.scala +8 -0
  27. data/src/main/scala/org/embulk/parser/firebase_avro/define/root/User_Dim.scala +11 -0
  28. data/src/main/scala/org/embulk/parser/firebase_avro/define/root/event_dim/Params.scala +3 -0
  29. data/src/main/scala/org/embulk/parser/firebase_avro/define/root/event_dim/params/Value.scala +6 -0
  30. data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/App_Info.scala +7 -0
  31. data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/Bundle_Info.scala +3 -0
  32. data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/Device_Info.scala +13 -0
  33. data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/Geo_Info.scala +3 -0
  34. data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/Ltv_Info.scala +3 -0
  35. data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/Traffic_Source.scala +5 -0
  36. data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/User_Properties.scala +3 -0
  37. data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/user_properties/Value.scala +5 -0
  38. data/src/main/scala/org/embulk/parser/firebase_avro/define/root/user_dim/user_properties/value/Value.scala +6 -0
  39. data/src/main/scala/org/embulk/parser/firebase_avro/json/CustomEncoder.scala +21 -0
  40. data/src/main/scala/org/embulk/parser/firebase_avro/json/event_dim/EventParmsJsonSerializer.scala +29 -0
  41. data/src/main/scala/org/embulk/parser/firebase_avro/json/user_dim/UserPropertiesJsonSerializer.scala +34 -0
  42. data/src/test/scala/org/embulk/parser/firebase_avro/Implicitly.scala +9 -0
  43. data/src/test/scala/org/embulk/parser/firebase_avro/ParserTest.scala +22 -0
  44. data/src/test/scala/org/embulk/parser/firebase_avro/column/ColumnsTest.scala +18 -0
  45. data/src/test/scala/org/embulk/parser/firebase_avro/json/event_dim/EventParmsJsonSerializerTest.scala +19 -0
  46. metadata +138 -0
@@ -0,0 +1,5 @@
1
+ package org.embulk.parser.firebase_avro.define
2
+
3
+ import org.embulk.parser.firebase_avro.define.root._
4
+
5
+ case class Root(user_dim: Option[User_Dim], event_dim: List[Event_Dim])
@@ -0,0 +1,8 @@
1
+ package org.embulk.parser.firebase_avro.define.root
2
+
3
+ case class Event_Dim(date: Option[String],
4
+ name: Option[String],
5
+ params: List[event_dim.Params],
6
+ timestamp_micros: Option[Long],
7
+ previous_timestamp_micros: Option[Long],
8
+ value_in_usd: Option[Double])
@@ -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,3 @@
1
+ package org.embulk.parser.firebase_avro.define.root.event_dim
2
+
3
+ case class Params(key: Option[String], value: Option[params.Value])
@@ -0,0 +1,6 @@
1
+ package org.embulk.parser.firebase_avro.define.root.event_dim.params
2
+
3
+ case class Value(string_value: Option[String] = None,
4
+ int_value: Option[Long] = None,
5
+ float_value: Option[Double] = None,
6
+ double_value: Option[Double] = None)
@@ -0,0 +1,7 @@
1
+ package org.embulk.parser.firebase_avro.define.root.user_dim
2
+
3
+ case class App_Info(app_version: Option[String],
4
+ app_instance_id: Option[String],
5
+ app_store: Option[String],
6
+ app_platform: Option[String],
7
+ app_id: Option[String])
@@ -0,0 +1,3 @@
1
+ package org.embulk.parser.firebase_avro.define.root.user_dim
2
+
3
+ case class Bundle_Info(bundle_sequence_id: Option[Long], server_timestamp_offset_micros: Option[Long])
@@ -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,3 @@
1
+ package org.embulk.parser.firebase_avro.define.root.user_dim
2
+
3
+ case class Geo_Info(continent: Option[String], country: Option[String], region: Option[String], city: Option[String])
@@ -0,0 +1,3 @@
1
+ package org.embulk.parser.firebase_avro.define.root.user_dim
2
+
3
+ case class Ltv_Info(revenue: Option[Double], currency: Option[String])
@@ -0,0 +1,5 @@
1
+ package org.embulk.parser.firebase_avro.define.root.user_dim
2
+
3
+ case class Traffic_Source(user_acquired_campaign: Option[String],
4
+ user_acquired_source: Option[String],
5
+ user_acquired_medium: Option[String])
@@ -0,0 +1,3 @@
1
+ package org.embulk.parser.firebase_avro.define.root.user_dim
2
+
3
+ case class User_Properties(key: Option[String], value: Option[user_properties.Value])
@@ -0,0 +1,5 @@
1
+ package org.embulk.parser.firebase_avro.define.root.user_dim.user_properties
2
+
3
+ case class Value(value: Option[org.embulk.parser.firebase_avro.define.root.user_dim.user_properties.value.Value],
4
+ set_timestamp_usec: Option[Long],
5
+ index: Option[Long])
@@ -0,0 +1,6 @@
1
+ package org.embulk.parser.firebase_avro.define.root.user_dim.user_properties.value
2
+
3
+ case class Value(string_value: Option[String] = None,
4
+ int_value: Option[Long] = None,
5
+ float_value: Option[Double] = None,
6
+ double_value: Option[Double] = None)
@@ -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
+ }
@@ -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
+ }
@@ -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,9 @@
1
+ package org.embulk.parser.firebase_avro
2
+
3
+ import org.embulk.parser.firebase_avro.define.Root
4
+ import org.scalacheck.Arbitrary
5
+ import org.scalacheck.Shapeless._
6
+
7
+ object Implicitly {
8
+ implicitly[Arbitrary[Root]]
9
+ }
@@ -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: []