evva 0.1.4.4 → 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
- SHA1:
3
- metadata.gz: f29745f30be02ffd8aaeaabc97bb6f7aa78e336a
4
- data.tar.gz: 7997447508877d82eea4904e50c43a71a15b9ddb
2
+ SHA256:
3
+ metadata.gz: c9078e38ca6bba5b85a3349fb9e1c3f9c31b8de357080ffb1ab105e6bcbbdaa1
4
+ data.tar.gz: 16b264637125fafdc14a991a9cb984e440b948bdc7d934776329b8aa8ef2d89f
5
5
  SHA512:
6
- metadata.gz: 287b552754e902b50d228fc4813375a88083f79dc11a3cf8475bf29b15842f850036ccc69dcc5ec407735c9263458446f1b23dcdd8f98afccd9ae966f44b8f48
7
- data.tar.gz: 9606d7647b418445d8417063e2dba6652be7c5252c9395b62ec65a1bc35e1f1f21fba68f173fa13f72fc4db4b6c4c44a477d1ae3547558e5b7465035c48dc31d
6
+ metadata.gz: 6efc1abd4ea8d72f7ac2edeccbf111deac25922fa0b1464d754d21e7bfef921efffddd228bb6d6913f3b64a4acfcd8763082f0b36b16e85e28b930d933df879c
7
+ data.tar.gz: 77a4ad5df7074b646def8c880654b551fcde2e10523e3dec622d202fba48ac7bdda6d1a882abcd5c54bc2e6175b2bb68a52c30ab77d1c522f29362bc9a297db3
data/.gitignore CHANGED
@@ -1,6 +1,5 @@
1
1
  *.sublime-*
2
- .ruby-version
3
2
  running
4
3
  coverage
5
4
  .DS_Store*
6
- .byebug_history
5
+ .byebug_history
data/.rspec CHANGED
@@ -1,5 +1,4 @@
1
1
  --color
2
2
  --format documentation
3
3
  --profile
4
- --drb
5
4
  --require spec_helper
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.7.3
data/.travis.yml ADDED
@@ -0,0 +1 @@
1
+ language: ruby
data/Gemfile CHANGED
@@ -1,13 +1,15 @@
1
1
  source 'https://rubygems.org'
2
- ruby '2.3.3'
2
+ ruby '2.7.3'
3
3
 
4
4
  gem 'colorize'
5
- gem 'rubocop'
6
5
  gem 'safe_yaml'
7
- gem 'xml-simple'
8
6
 
9
- gem 'rspec'
10
- gem 'rspec-its'
11
- gem 'simplecov', require: false, group: :test
12
- gem 'simplecov-rcov', require: false
13
- gem 'webmock', '~> 1.20'
7
+ group :test do
8
+ gem 'rake'
9
+ gem 'rspec'
10
+ gem 'rspec-its'
11
+ gem 'simplecov', require: false, group: :test
12
+ gem 'simplecov-rcov', require: false
13
+ gem 'webmock', '~> 1.20'
14
+ gem 'rubocop'
15
+ end
data/Gemfile.lock CHANGED
@@ -10,7 +10,7 @@ GEM
10
10
  diff-lcs (1.3)
11
11
  docile (1.1.5)
12
12
  hashdiff (0.3.7)
13
- json (2.1.0)
13
+ json (2.3.0)
14
14
  parallel (1.12.0)
15
15
  parser (2.4.0.0)
16
16
  ast (~> 2.2)
@@ -18,7 +18,7 @@ GEM
18
18
  public_suffix (3.0.0)
19
19
  rainbow (2.2.2)
20
20
  rake
21
- rake (12.1.0)
21
+ rake (12.3.3)
22
22
  rspec (3.7.0)
23
23
  rspec-core (~> 3.7.0)
24
24
  rspec-expectations (~> 3.7.0)
@@ -56,13 +56,13 @@ GEM
56
56
  addressable (>= 2.3.6)
57
57
  crack (>= 0.3.2)
58
58
  hashdiff
59
- xml-simple (1.1.5)
60
59
 
61
60
  PLATFORMS
62
61
  ruby
63
62
 
64
63
  DEPENDENCIES
65
64
  colorize
65
+ rake
66
66
  rspec
67
67
  rspec-its
68
68
  rubocop
@@ -70,10 +70,9 @@ DEPENDENCIES
70
70
  simplecov
71
71
  simplecov-rcov
72
72
  webmock (~> 1.20)
73
- xml-simple
74
73
 
75
74
  RUBY VERSION
76
- ruby 2.3.3p222
75
+ ruby 2.7.3p183
77
76
 
78
77
  BUNDLED WITH
79
- 1.15.4
78
+ 2.2.26
data/README.md CHANGED
@@ -1,4 +1,10 @@
1
1
  Evva
2
+ ========
3
+
4
+ [![Status](https://travis-ci.org/hole19/evva.svg?branch=master)](https://travis-ci.org/hole19/evva?branch=master)
5
+ [![Gem](https://img.shields.io/gem/v/evva.svg?style=flat)](http://rubygems.org/gems/evva "View this project in Rubygems")
6
+
7
+ Evva automatically generates code for triggering events based on a Google Sheets specification. It generated code for both iOS (Swift) and Android (Kotlin).
2
8
 
3
9
  # Instalation
4
10
 
@@ -19,6 +25,9 @@ Evva
19
25
  data_source:
20
26
  type: google_sheet
21
27
  sheet_id: <GOOGLE-DRIVE-SHEET-ID>
28
+ events_url: <GOOGLE-DRIVE-EVENTS-SHEET-URL>
29
+ people_properties_url: <GOOGLE-DRIVE-PEOPLE-PROPERTIES-SHEET-URL>
30
+ enum_classes_url: <GOOGLE-DRIVE-ENUM-CLASSES-SHEET-URL>
22
31
 
23
32
  out_path: /folder/where/analytics/classes/are
24
33
  event_file_name: /file/with/tracking/functions
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require "rake"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec) do |t|
5
+ t.pattern = Dir.glob("spec/**/*_spec.rb")
6
+ t.rspec_opts = "--format documentation"
7
+ end
8
+
9
+ task default: :spec
data/changelog.md CHANGED
@@ -1,4 +1,10 @@
1
1
  # Change Log
2
+
3
+ ## [0.2.0] - 2021/08/30
4
+ - Google Spreadsheet option stopped working due to a change in the API. This version fixes that.
5
+
6
+ Note: You'll need a new setup. View README.
7
+
2
8
  ## [0.1.4.4] - 2019-02-04
3
9
  - Adds support for dynamic android package name
4
10
 
data/evva.gemspec CHANGED
@@ -18,7 +18,4 @@ Gem::Specification.new do |s|
18
18
 
19
19
  s.add_runtime_dependency 'safe_yaml', '~> 1.0'
20
20
  s.add_runtime_dependency 'colorize', '~> 0.7'
21
- s.add_runtime_dependency 'xml-simple', '~> 1.1'
22
-
23
- s.add_development_dependency 'webmock', '~> 1.20'
24
21
  end
data/evva_config.yml CHANGED
@@ -3,9 +3,12 @@ type: iOS
3
3
  data_source:
4
4
  type: google_sheet
5
5
  sheet_id: 1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4
6
+ events_url: https://path-to-csv
7
+ people_properties_url: https://path-to-csv
8
+ enum_classes_url: https://path-to-csv
6
9
 
7
10
  out_path: analytics
8
11
  event_file_name: MixpanelAnalytics
9
12
  event_enum_file_name: MixpanelEvent
10
13
  people_file_name: MixpanelProperties
11
- package_name: com.hole19golf.hole19.analytics
14
+ package_name: com.hole19golf.hole19.analytics
data/lib/evva/config.rb CHANGED
@@ -66,7 +66,9 @@ module Evva
66
66
  type: Hash,
67
67
  elements: {
68
68
  type: { type: String },
69
- sheet_id: { type: String }
69
+ events_url: { type: String },
70
+ people_properties_url: { type: String },
71
+ enum_classes_url: { type: String },
70
72
  }
71
73
  }.freeze
72
74
 
@@ -1,36 +1,47 @@
1
1
  require 'net/https'
2
- require 'xmlsimple'
2
+ require 'csv'
3
3
 
4
4
  module Evva
5
5
  class GoogleSheet
6
- def initialize(sheet_id)
7
- @sheet_id = sheet_id
6
+ def initialize(events_url, people_properties_url, enum_classes_url)
7
+ @events_url = events_url
8
+ @people_properties_url = people_properties_url
9
+ @enum_classes_url = enum_classes_url
8
10
  end
9
11
 
10
12
  def events
13
+ Logger.info("Downloading data from Google Sheet at #{@events_url}")
14
+ csv = get_csv(@events_url)
15
+
11
16
  event_list = []
12
- iterate_entries(raw_data(@sheet_id, 0)) do |entry|
13
- event_name = entry['eventname'].first
14
- properties = hash_parser(entry['eventproperties'].first)
17
+ csv.each do |row|
18
+ event_name = row['Event Name']
19
+ properties = hash_parser(row['Event Properties'])
15
20
  event_list << Evva::MixpanelEvent.new(event_name, properties)
16
21
  end
17
22
  event_list
18
23
  end
19
24
 
20
25
  def people_properties
26
+ Logger.info("Downloading data from Google Sheet at #{@people_properties_url}")
27
+ csv = get_csv(@people_properties_url)
28
+
21
29
  people_list = []
22
- iterate_entries(raw_data(@sheet_id, 1)) do |entry|
23
- value = entry['propertyname'].first
30
+ csv.each do |row|
31
+ value = row['Property Name']
24
32
  people_list << value
25
33
  end
26
34
  people_list
27
35
  end
28
36
 
29
37
  def enum_classes
38
+ Logger.info("Downloading data from Google Sheet at #{@enum_classes_url}")
39
+ csv = get_csv(@enum_classes_url)
40
+
30
41
  enum_list = []
31
- iterate_entries(raw_data(@sheet_id, 2)) do |entry|
32
- enum_name = entry['enumname'].first
33
- values = entry['possiblevalues'].first.split(',')
42
+ csv.each do |row|
43
+ enum_name = row['Enum Name']
44
+ values = row['Possible Values'].split(',')
34
45
  enum_list << Evva::MixpanelEnum.new(enum_name, values)
35
46
  end
36
47
  enum_list
@@ -38,42 +49,38 @@ module Evva
38
49
 
39
50
  private
40
51
 
41
- def iterate_entries(data)
42
- Logger.info('Downloading dictionary from Google Sheet...')
43
- non_language_columns = %w[id updated category title content link]
44
- data['entry'].each do |entry|
45
- filtered_entry = entry.reject { |c| non_language_columns.include?(c) }
46
- yield(filtered_entry)
52
+ def get_csv(url)
53
+ data = get(url)
54
+
55
+ begin
56
+ CSV.parse(data, headers: true)
57
+ rescue StandardError => e
58
+ raise "Cannot parse. Expected CSV at #{url}: #{e}"
47
59
  end
48
60
  end
49
61
 
50
- def xml_data(uri, headers = nil)
51
- uri = URI.parse(uri)
62
+ def get(url, max_redirects = 1)
63
+ raise "Too may redirects" if max_redirects == -1
64
+
65
+ uri = URI(url)
66
+
52
67
  http = Net::HTTP.new(uri.host, uri.port)
53
68
  http.use_ssl = true
54
69
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
55
- data = http.get(uri.path, headers)
56
- unless data.code.to_i == 200
57
- raise "Cannot access sheet at #{uri} - HTTP #{data.code}"
58
- end
59
70
 
60
- begin
61
- XmlSimple.xml_in(data.body, 'KeyAttr' => 'name')
62
- rescue
63
- raise "Cannot parse. Expected XML at #{uri}"
64
- end
65
- end
71
+ request = Net::HTTP::Get.new(uri.request_uri)
72
+ response = http.request(request)
73
+
74
+ return get(response['location'], max_redirects - 1) if response.is_a? Net::HTTPRedirection
75
+
76
+ raise "Http Error #{response.body}" if response.code.to_i >= 400
66
77
 
67
- def raw_data(sheet_id, sheet_number)
68
- Logger.info('Downloading Google Sheet...')
69
- sheet = xml_data("https://spreadsheets.google.com/feeds/worksheets/#{sheet_id}/public/full")
70
- url = sheet['entry'][sheet_number]['link'][0]['href']
71
- xml_data(url)
78
+ response.body
72
79
  end
73
80
 
74
81
  def hash_parser(property_array)
75
82
  h = {}
76
- unless property_array.empty?
83
+ unless property_array.nil? || property_array.empty?
77
84
  property_array.split(',').each do |prop|
78
85
  split_prop = prop.split(':')
79
86
  prop_name = split_prop[0].to_sym
data/lib/evva/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Evva
2
- VERSION = '0.1.4.4'.freeze
3
- VERSION_UPDATED_AT = '2019-02-04'.freeze
2
+ VERSION = '0.2.0'.freeze
3
+ VERSION_UPDATED_AT = '2021-08-30'.freeze
4
4
  end
data/lib/evva.rb CHANGED
@@ -55,7 +55,7 @@ module Evva
55
55
  source =
56
56
  case config[:type]
57
57
  when 'google_sheet'
58
- Evva::GoogleSheet.new(config[:sheet_id])
58
+ Evva::GoogleSheet.new(config[:events_url], config[:people_properties_url], config[:enum_classes_url])
59
59
  end
60
60
  events_bundle = {}
61
61
  events_bundle[:events] = source.events
@@ -0,0 +1,3 @@
1
+ Enum Name,Possible Values
2
+ PageViewSourceScreen,"course_discovery,synced_courses,nearby,deal"
3
+ PremiumClickBuy,"notes,hi_res_maps,whatever"
@@ -0,0 +1,4 @@
1
+ Event Name,Event Properties
2
+ cp_page_view,"course_id:Long,course_name:String"
3
+ nav_feed_tap,
4
+ cp_view_scorecard,"course_id:Long,course_name:String"
@@ -0,0 +1,3 @@
1
+ Property Name,Comments
2
+ rounds_with_wear,asldkaslkdlaksd
3
+ total_friends,
@@ -2,10 +2,12 @@ type: Android
2
2
 
3
3
  data_source:
4
4
  type: google_sheet
5
- sheet_id: 1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4
5
+ events_url: https://path-to-csv
6
+ people_properties_url: https://path-to-csv
7
+ enum_classes_url: https://path-to-csv
6
8
 
7
9
  out_path: analytics
8
10
  event_file_name: MixpanelAnalytics
9
11
  event_enum_file_name: MixpanelEvent
10
12
  people_file_name: MixpanelProperties
11
- package_name: com.package.name.analytics
13
+ package_name: com.package.name.analytics
@@ -5,8 +5,10 @@ describe Evva::Config do
5
5
  {
6
6
  type: 'EvvaOS',
7
7
  data_source: {
8
- type: 'google_sheet',
9
- sheet_id: 'abc1234567890'
8
+ type: 'google_sheet',
9
+ events_url: 'https://events.csv',
10
+ people_properties_url: 'https://people_properties.csv',
11
+ enum_classes_url: 'https://enum_classes.csv',
10
12
  },
11
13
  out_path: 'clear/path/to/event',
12
14
  event_file_name: 'event/file/name',
@@ -32,7 +34,7 @@ describe Evva::Config do
32
34
  describe '#data_source' do
33
35
  subject(:data_source) { config.data_source }
34
36
 
35
- it { should eq(type: 'google_sheet', sheet_id: 'abc1234567890') }
37
+ it { should eq(type: 'google_sheet', events_url: 'https://events.csv', people_properties_url: 'https://people_properties.csv', enum_classes_url: 'https://enum_classes.csv') }
36
38
 
37
39
  context 'when given an unknown type data source' do
38
40
  before { hash[:data_source] = { type: 'i_dunno' } }
@@ -1,107 +1,77 @@
1
1
  describe Evva::GoogleSheet do
2
- let(:sheet) { Evva::GoogleSheet.new(sheet_id) }
3
- let(:sheet_id) { 'abc1234567890' }
4
- let(:url_info) { "https://spreadsheets.google.com/feeds/worksheets/#{sheet_id}/public/full" }
5
- let(:url_sheet) { "https://spreadsheets.google.com/feeds/list/#{sheet_id}/od6/public/full" }
6
- let(:enum_sheet) { "https://spreadsheets.google.com/feeds/list/#{sheet_id}/osju1vh/public/full" }
7
- let(:people_sheet) { "https://spreadsheets.google.com/feeds/list/#{sheet_id}/ojyi830/public/full" }
8
- let(:file_info) { File.read('spec/fixtures/sample_public_info.html') }
9
- let(:file_sheet) { File.read('spec/fixtures/sample_public_sheet.html') }
10
- let(:enum_file) { File.read('spec/fixtures/sample_public_enums.html') }
11
- let(:people_file) { File.read('spec/fixtures/sample_public_people_properties.html') }
2
+ let(:sheet) { Evva::GoogleSheet.new(events_sheet, people_sheet, enum_sheet) }
3
+
4
+ let(:events_sheet) { "https://wtvr1" }
5
+ let(:people_sheet) { "https://wtvr2" }
6
+ let(:enum_sheet) { "https://wtvr3" }
7
+ let(:events_file) { File.read('spec/fixtures/sample_public_events.csv') }
8
+ let(:people_file) { File.read('spec/fixtures/sample_public_people_properties.csv') }
9
+ let(:enum_file) { File.read('spec/fixtures/sample_public_enums.csv') }
10
+
11
+ before do
12
+ stub_request(:get, events_sheet).to_return(status: 200, body: events_file, headers: {})
13
+ stub_request(:get, people_sheet).to_return(status: 200, body: people_file, headers: {})
14
+ stub_request(:get, enum_sheet).to_return(status: 200, body: enum_file, headers: {})
15
+ end
12
16
 
13
17
  describe '#events' do
14
18
  subject(:events) { sheet.events }
15
- before do
16
- stub_request(:get, url_info).to_return(status: 200, body: file_info, headers: {})
17
- stub_request(:get, url_sheet).to_return(status: 200, body: file_sheet, headers: {})
18
- end
19
-
20
- context 'when given a valid sheet' do
21
- it do
22
- expect { events }.not_to raise_error
23
- end
24
19
 
25
- it 'returns an array with the corresponding events' do
26
- expected = [Evva::MixpanelEvent.new('cp_page_view', { course_id: 'Long', course_name: 'String' }),
27
- Evva::MixpanelEvent.new('nav_feed_tap', {}),
28
- Evva::MixpanelEvent.new('cp_view_scorecard', { course_id: 'Long', course_name: 'String' })]
29
- expect(events).to eq(expected)
30
- end
20
+ it do
21
+ expect { events }.not_to raise_error
31
22
  end
32
23
 
33
- context 'when given an inexistent sheet' do
34
- before { stub_request(:get, url_info).to_return(status: 400, body: 'Not Found', headers: {}) }
35
-
36
- it do
37
- expect { events }.to raise_error /Cannot access sheet/
38
- end
24
+ it 'returns an array with the corresponding events' do
25
+ expected = [Evva::MixpanelEvent.new('cp_page_view', { course_id: 'Long', course_name: 'String' }),
26
+ Evva::MixpanelEvent.new('nav_feed_tap', {}),
27
+ Evva::MixpanelEvent.new('cp_view_scorecard', { course_id: 'Long', course_name: 'String' })]
28
+ expect(events).to eq(expected)
39
29
  end
40
30
 
41
- context 'when given a private sheet' do
42
- before { stub_request(:get, url_info).to_return(status: 302, body: '<HTML></HTML>', headers: {}) }
31
+ context "when given an inexistent sheet" do
32
+ before { stub_request(:get, events_sheet).to_return(status: 400, body: "Not Found", headers: {}) }
43
33
 
44
34
  it do
45
- expect { events }.to raise_error /Cannot access sheet/
35
+ expect { events }.to raise_error /Http Error/
46
36
  end
47
37
  end
48
38
 
49
- context 'when url content is not XML' do
50
- before { stub_request(:get, url_info).to_return(status: 200, body: 'This is not XML; { this: "is json" }', headers: {}) }
39
+ context "when url content is not CSV" do
40
+ before { stub_request(:get, events_sheet).to_return(status: 200, body: "{\"asdsa\": \"This is a json\"}", headers: {}) }
51
41
 
52
42
  it do
53
- expect { events }.to raise_error /Cannot parse. Expected XML/
43
+ expect { events }.to raise_error /Cannot parse. Expected CSV/
54
44
  end
55
45
  end
56
46
  end
57
47
 
58
- describe '#enum_classes' do
59
- subject(:enum_classes) { sheet.enum_classes }
60
- let(:expected_enum) do
61
- [
62
- Evva::MixpanelEnum.new('PageViewSourceScreen', ['course_discovery','synced_courses','nearby','deal']),
63
- Evva::MixpanelEnum.new('PremiumClickBuy', ['notes','hi_res_maps','whatever'])
64
- ]
65
- end
66
-
67
- context 'when given a valid sheet' do
68
- before do
69
- stub_request(:get, url_info).to_return(status: 200, body: file_info, headers: {})
70
- stub_request(:get, enum_sheet).to_return(status: 200, body: enum_file, headers: {})
71
- end
72
-
73
- it do
74
- expect { enum_classes }.not_to raise_error
75
- end
48
+ describe '#people_properties' do
49
+ subject(:people_properties) { sheet.people_properties }
76
50
 
77
- it 'returns an array with the corresponding events' do
78
- expect(enum_classes).to eq expected_enum
79
- end
51
+ it do
52
+ expect { people_properties }.not_to raise_error
80
53
  end
81
- end
82
54
 
83
- describe '#people_properties' do
84
- subject(:people_properties) { sheet.people_properties }
85
- let(:expected_people_properties) do
86
- [
55
+ it 'returns an array with the corresponding events' do
56
+ expect(people_properties).to eq [
87
57
  'rounds_with_wear',
88
58
  'total_friends'
89
59
  ]
90
60
  end
61
+ end
91
62
 
92
- context 'when given a valid sheet' do
93
- before do
94
- stub_request(:get, url_info).to_return(status: 200, body: file_info, headers: {})
95
- stub_request(:get, people_sheet).to_return(status: 200, body: people_file, headers: {})
96
- end
63
+ describe '#enum_classes' do
64
+ subject(:enum_classes) { sheet.enum_classes }
97
65
 
98
- it do
99
- expect { people_properties }.not_to raise_error
100
- end
66
+ it do
67
+ expect { enum_classes }.not_to raise_error
68
+ end
101
69
 
102
- it 'returns an array with the corresponding events' do
103
- expect(people_properties).to eq expected_people_properties
104
- end
70
+ it 'returns an array with the corresponding events' do
71
+ expect(enum_classes).to eq [
72
+ Evva::MixpanelEnum.new('PageViewSourceScreen', ['course_discovery','synced_courses','nearby','deal']),
73
+ Evva::MixpanelEnum.new('PremiumClickBuy', ['notes','hi_res_maps','whatever'])
74
+ ]
105
75
  end
106
76
  end
107
77
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evva
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - RicardoTrindade
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-04 00:00:00.000000000 Z
11
+ date: 2021-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: safe_yaml
@@ -38,34 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.7'
41
- - !ruby/object:Gem::Dependency
42
- name: xml-simple
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '1.1'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '1.1'
55
- - !ruby/object:Gem::Dependency
56
- name: webmock
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '1.20'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '1.20'
69
41
  description: Evva generates all the analytics event tracking functions for you
70
42
  email: ricardo.trindade743@gmail.com
71
43
  executables:
@@ -76,9 +48,12 @@ files:
76
48
  - ".gitignore"
77
49
  - ".rspec"
78
50
  - ".rubocop_todo.yml"
51
+ - ".ruby-version"
52
+ - ".travis.yml"
79
53
  - Gemfile
80
54
  - Gemfile.lock
81
55
  - README.md
56
+ - Rakefile
82
57
  - bin/evva
83
58
  - changelog.md
84
59
  - evva.gemspec
@@ -96,10 +71,9 @@ files:
96
71
  - lib/evva/version.rb
97
72
  - rubocop.yml
98
73
  - spec/evva_spec.rb
99
- - spec/fixtures/sample_public_enums.html
100
- - spec/fixtures/sample_public_info.html
101
- - spec/fixtures/sample_public_people_properties.html
102
- - spec/fixtures/sample_public_sheet.html
74
+ - spec/fixtures/sample_public_enums.csv
75
+ - spec/fixtures/sample_public_events.csv
76
+ - spec/fixtures/sample_public_people_properties.csv
103
77
  - spec/fixtures/test.yml
104
78
  - spec/lib/evva/android_generator_spec.rb
105
79
  - spec/lib/evva/config_spec.rb
@@ -127,8 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
101
  - !ruby/object:Gem::Version
128
102
  version: '0'
129
103
  requirements: []
130
- rubyforge_project:
131
- rubygems_version: 2.5.2
104
+ rubygems_version: 3.1.6
132
105
  signing_key:
133
106
  specification_version: 4
134
107
  summary: An event generating service
@@ -1 +0,0 @@
1
- <?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gsx='http://schemas.google.com/spreadsheets/2006/extended'><id>https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/osju1vh/public/full</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>Enums</title><link rel='alternate' type='application/atom+xml' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/pubhtml'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/osju1vh/public/full'/><link rel='http://schemas.google.com/g/2005#post' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/osju1vh/public/full'/><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/osju1vh/public/full'/><author><name>ricardo.trindade</name><email>ricardo.trindade@hole19golf.com</email></author><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><entry><id>https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/osju1vh/public/full/cokwr</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>PageViewSourceScreen</title><content type='text'>possiblevalues: course_discovery,synced_courses,nearby,deal</content><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/osju1vh/public/full/cokwr'/><gsx:enumname>PageViewSourceScreen</gsx:enumname><gsx:possiblevalues>course_discovery,synced_courses,nearby,deal</gsx:possiblevalues></entry><entry><id>https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/osju1vh/public/full/cpzh4</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>PremiumClickBuy</title><content type='text'>possiblevalues: notes,hi_res_maps,whatever</content><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/osju1vh/public/full/cpzh4'/><gsx:enumname>PremiumClickBuy</gsx:enumname><gsx:possiblevalues>notes,hi_res_maps,whatever</gsx:possiblevalues></entry></feed>
@@ -1 +0,0 @@
1
- <?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gs='http://schemas.google.com/spreadsheets/2006'><id>https://spreadsheets.google.com/feeds/worksheets/abcdefgh/public/full</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#worksheet'/><title type='text'>TestingEvva</title><link rel='alternate' type='application/atom+xml' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/abc1234567890/pubhtml'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full'/><link rel='http://schemas.google.com/g/2005#post' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full'/><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full'/><author><name>ricardo.trindade</name><email>ricardo.trindade@hole19golf.com</email></author><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><entry><id>https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full/od6</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#worksheet'/><title type='text'>Events</title><content type='text'>Events</content><link rel='http://schemas.google.com/spreadsheets/2006#listfeed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full'/><link rel='http://schemas.google.com/spreadsheets/2006#cellsfeed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/cells/abc1234567890/od6/public/full'/><link rel='http://schemas.google.com/visualization/2008#visualizationApi' type='application/atom+xml' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/abc1234567890/gviz/tq?gid=0&amp;pub=1'/><link rel='http://schemas.google.com/spreadsheets/2006#exportcsv' type='text/csv' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/abc1234567890/export?gid=0&amp;format=csv'/><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full/od6'/><gs:colCount>26</gs:colCount><gs:rowCount>1000</gs:rowCount></entry><entry><id>https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full/ojyi830</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#worksheet'/><title type='text'>PeopleProperties</title><content type='text'>PeopleProperties</content><link rel='http://schemas.google.com/spreadsheets/2006#listfeed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/ojyi830/public/full'/><link rel='http://schemas.google.com/spreadsheets/2006#cellsfeed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/cells/abc1234567890/ojyi830/public/full'/><link rel='http://schemas.google.com/visualization/2008#visualizationApi' type='application/atom+xml' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/abc1234567890/gviz/tq?gid=1206814390&amp;pub=1'/><link rel='http://schemas.google.com/spreadsheets/2006#exportcsv' type='text/csv' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/abc1234567890/export?gid=1206814390&amp;format=csv'/><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full/ojyi830'/><gs:colCount>26</gs:colCount><gs:rowCount>1000</gs:rowCount></entry><entry><id>https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full/osju1vh</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#worksheet'/><title type='text'>Enums</title><content type='text'>Enums</content><link rel='http://schemas.google.com/spreadsheets/2006#listfeed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/osju1vh/public/full'/><link rel='http://schemas.google.com/spreadsheets/2006#cellsfeed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/cells/abc1234567890/osju1vh/public/full'/><link rel='http://schemas.google.com/visualization/2008#visualizationApi' type='application/atom+xml' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/abc1234567890/gviz/tq?gid=1726367271&amp;pub=1'/><link rel='http://schemas.google.com/spreadsheets/2006#exportcsv' type='text/csv' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/abc1234567890/export?gid=1726367271&amp;format=csv'/><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full/osju1vh'/><gs:colCount>26</gs:colCount><gs:rowCount>1000</gs:rowCount></entry></feed>
@@ -1 +0,0 @@
1
- <?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gsx='http://schemas.google.com/spreadsheets/2006/extended'><id>https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/ojyi830/public/full</id><updated>2017-09-06T13:27:41.023Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>PeopleProperties</title><link rel='alternate' type='application/atom+xml' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/pubhtml'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/ojyi830/public/full'/><link rel='http://schemas.google.com/g/2005#post' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/ojyi830/public/full'/><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/ojyi830/public/full'/><author><name>ricardo.trindade</name><email>ricardo.trindade@hole19golf.com</email></author><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><entry><id>https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/ojyi830/public/full/cokwr</id><updated>2017-09-06T13:27:41.023Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>roundsWithWear</title><content type='text'>propertyname: rounds_with_wear</content><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/ojyi830/public/full/cokwr'/><gsx:properties>roundsWithWear</gsx:properties><gsx:propertyname>rounds_with_wear</gsx:propertyname></entry><entry><id>https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/ojyi830/public/full/cpzh4</id><updated>2017-09-06T13:27:41.023Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>totalFriends</title><content type='text'>propertyname: total_friends</content><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/ojyi830/public/full/cpzh4'/><gsx:properties>totalFriends</gsx:properties><gsx:propertyname>total_friends</gsx:propertyname></entry></feed>
@@ -1 +0,0 @@
1
- <?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gsx='http://schemas.google.com/spreadsheets/2006/extended'><id>https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>Events</title><link rel='alternate' type='application/atom+xml' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/abc1234567890/pubhtml'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full'/><link rel='http://schemas.google.com/g/2005#post' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full'/><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full'/><author><name>ricardo.trindade</name><email>ricardo.trindade@hole19golf.com</email></author><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><entry><id>https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full/cokwr</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>trackCpPageView</title><content type='text'>eventname: cp_page_view, eventproperties: course_id:Long,course_name:String</content><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full/cokwr'/><gsx:functionname>trackCpPageView</gsx:functionname><gsx:eventname>cp_page_view</gsx:eventname><gsx:eventproperties>course_id:Long,course_name:String</gsx:eventproperties></entry><entry><id>https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full/cpzh4</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>trackNavFeedTap</title><content type='text'>eventname: nav_feed_tap</content><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full/cpzh4'/><gsx:functionname>trackNavFeedTap</gsx:functionname><gsx:eventname>nav_feed_tap</gsx:eventname><gsx:eventproperties></gsx:eventproperties></entry><entry><id>https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full/cre1l</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>trackCpViewScorecard</title><content type='text'>eventname: cp_view_scorecard, eventproperties: course_id:Long,course_name:String</content><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full/cre1l'/><gsx:functionname>trackCpViewScorecard</gsx:functionname><gsx:eventname>cp_view_scorecard</gsx:eventname><gsx:eventproperties>course_id:Long,course_name:String</gsx:eventproperties></entry></feed>