embulk-parser-firebase_avro 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []