evva 0.1.4.4 → 0.2.0

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