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 +5 -5
- data/.gitignore +1 -2
- data/.rspec +0 -1
- data/.ruby-version +1 -0
- data/.travis.yml +1 -0
- data/Gemfile +10 -8
- data/Gemfile.lock +5 -6
- data/README.md +9 -0
- data/Rakefile +9 -0
- data/changelog.md +6 -0
- data/evva.gemspec +0 -3
- data/evva_config.yml +4 -1
- data/lib/evva/config.rb +3 -1
- data/lib/evva/google_sheet.rb +42 -35
- data/lib/evva/version.rb +2 -2
- data/lib/evva.rb +1 -1
- data/spec/fixtures/sample_public_enums.csv +3 -0
- data/spec/fixtures/sample_public_events.csv +4 -0
- data/spec/fixtures/sample_public_people_properties.csv +3 -0
- data/spec/fixtures/test.yml +4 -2
- data/spec/lib/evva/config_spec.rb +5 -3
- data/spec/lib/evva/google_sheet_spec.rb +44 -74
- metadata +9 -36
- data/spec/fixtures/sample_public_enums.html +0 -1
- data/spec/fixtures/sample_public_info.html +0 -1
- data/spec/fixtures/sample_public_people_properties.html +0 -1
- data/spec/fixtures/sample_public_sheet.html +0 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: c9078e38ca6bba5b85a3349fb9e1c3f9c31b8de357080ffb1ab105e6bcbbdaa1
         | 
| 4 | 
            +
              data.tar.gz: 16b264637125fafdc14a991a9cb984e440b948bdc7d934776329b8aa8ef2d89f
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 6efc1abd4ea8d72f7ac2edeccbf111deac25922fa0b1464d754d21e7bfef921efffddd228bb6d6913f3b64a4acfcd8763082f0b36b16e85e28b930d933df879c
         | 
| 7 | 
            +
              data.tar.gz: 77a4ad5df7074b646def8c880654b551fcde2e10523e3dec622d202fba48ac7bdda6d1a882abcd5c54bc2e6175b2bb68a52c30ab77d1c522f29362bc9a297db3
         | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/.rspec
    CHANGED
    
    
    
        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. | 
| 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 | 
            -
             | 
| 10 | 
            -
            gem ' | 
| 11 | 
            -
            gem ' | 
| 12 | 
            -
            gem ' | 
| 13 | 
            -
            gem ' | 
| 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. | 
| 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. | 
| 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. | 
| 75 | 
            +
               ruby 2.7.3p183
         | 
| 77 76 |  | 
| 78 77 | 
             
            BUNDLED WITH
         | 
| 79 | 
            -
                | 
| 78 | 
            +
               2.2.26
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,4 +1,10 @@ | |
| 1 1 | 
             
            Evva
         | 
| 2 | 
            +
            ========
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            [](https://travis-ci.org/hole19/evva?branch=master)
         | 
| 5 | 
            +
            [](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
    
    
    
        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
    
    
    
        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
    
    
    
        data/lib/evva/google_sheet.rb
    CHANGED
    
    | @@ -1,36 +1,47 @@ | |
| 1 1 | 
             
            require 'net/https'
         | 
| 2 | 
            -
            require ' | 
| 2 | 
            +
            require 'csv'
         | 
| 3 3 |  | 
| 4 4 | 
             
            module Evva
         | 
| 5 5 | 
             
              class GoogleSheet
         | 
| 6 | 
            -
                def initialize( | 
| 7 | 
            -
                  @ | 
| 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 | 
            -
                   | 
| 13 | 
            -
                    event_name =  | 
| 14 | 
            -
                    properties = hash_parser( | 
| 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 | 
            -
                   | 
| 23 | 
            -
                    value =  | 
| 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 | 
            -
                   | 
| 32 | 
            -
                    enum_name =  | 
| 33 | 
            -
                    values =  | 
| 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  | 
| 42 | 
            -
                   | 
| 43 | 
            -
             | 
| 44 | 
            -
                   | 
| 45 | 
            -
                     | 
| 46 | 
            -
             | 
| 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  | 
| 51 | 
            -
                   | 
| 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 | 
            -
                   | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 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 | 
            -
             | 
| 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
    
    
    
        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[: | 
| 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
         | 
    
        data/spec/fixtures/test.yml
    CHANGED
    
    | @@ -2,10 +2,12 @@ type: Android | |
| 2 2 |  | 
| 3 3 | 
             
            data_source:
         | 
| 4 4 | 
             
              type: google_sheet
         | 
| 5 | 
            -
               | 
| 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: | 
| 9 | 
            -
                     | 
| 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',  | 
| 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( | 
| 3 | 
            -
             | 
| 4 | 
            -
              let(: | 
| 5 | 
            -
              let(: | 
| 6 | 
            -
              let(:enum_sheet) { "https:// | 
| 7 | 
            -
              let(: | 
| 8 | 
            -
              let(: | 
| 9 | 
            -
              let(: | 
| 10 | 
            -
             | 
| 11 | 
            -
               | 
| 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 | 
            -
             | 
| 26 | 
            -
             | 
| 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 | 
            -
                 | 
| 34 | 
            -
                   | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 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  | 
| 42 | 
            -
                  before { stub_request(:get,  | 
| 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 / | 
| 35 | 
            +
                    expect { events }.to raise_error /Http Error/
         | 
| 46 36 | 
             
                  end
         | 
| 47 37 | 
             
                end
         | 
| 48 38 |  | 
| 49 | 
            -
                context  | 
| 50 | 
            -
                  before { stub_request(:get,  | 
| 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  | 
| 43 | 
            +
                    expect { events }.to raise_error /Cannot parse. Expected CSV/
         | 
| 54 44 | 
             
                  end
         | 
| 55 45 | 
             
                end
         | 
| 56 46 | 
             
              end
         | 
| 57 47 |  | 
| 58 | 
            -
              describe '# | 
| 59 | 
            -
                subject(: | 
| 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 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
                  end
         | 
| 51 | 
            +
                it do
         | 
| 52 | 
            +
                  expect { people_properties }.not_to raise_error
         | 
| 80 53 | 
             
                end
         | 
| 81 | 
            -
              end
         | 
| 82 54 |  | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 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 | 
            -
             | 
| 93 | 
            -
             | 
| 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 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 66 | 
            +
                it do
         | 
| 67 | 
            +
                  expect { enum_classes }.not_to raise_error
         | 
| 68 | 
            +
                end
         | 
| 101 69 |  | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 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. | 
| 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:  | 
| 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. | 
| 100 | 
            -
            - spec/fixtures/ | 
| 101 | 
            -
            - spec/fixtures/sample_public_people_properties. | 
| 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 | 
            -
             | 
| 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&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&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&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&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&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&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>
         |