Class: GAShikomi::Renderer

Inherits:
Object
  • Object
show all
Defined in:
lib/ga_shikomi/renderer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(records, options) ⇒ Renderer

param

Array records

param

Hash oprions



10
11
12
13
# File 'lib/ga_shikomi/renderer.rb', line 10

def initialize(records, options)
  @records = records
  @options = options
end

Instance Attribute Details

#optionsObject (readonly)

Returns the value of attribute options.



14
15
16
# File 'lib/ga_shikomi/renderer.rb', line 14

def options
  @options
end

#recordsObject (readonly)

Returns the value of attribute records.



14
15
16
# File 'lib/ga_shikomi/renderer.rb', line 14

def records
  @records
end

Instance Method Details

#csv(result, opts = {}) ⇒ Object

param

Array result

param

Hash opts



154
155
156
157
158
159
160
161
162
163
164
165
# File 'lib/ga_shikomi/renderer.rb', line 154

def csv(result, opts = {})
  require 'csv'

  fields = opts[:fields] || result.first.keys.sort

  puts CSV.generate {|csv|
    csv << fields if options[:with_csv_header]
    result.each {|r|
      csv << fields.map {|f| r[f]}
    }
  }
end

#pick_id_and_description(item) ⇒ Object

param

Hash item

return

Hash



113
114
115
116
117
118
# File 'lib/ga_shikomi/renderer.rb', line 113

def pick_id_and_description(item)
  {
    'id'          => item['id'],
    'description' => item['attributes']['description']
  }
end

#pick_id_name_type_and_details(item) ⇒ Object

param

Hash item

return

Hash



124
125
126
127
128
129
130
131
# File 'lib/ga_shikomi/renderer.rb', line 124

def pick_id_name_type_and_details(item)
    {
      'id'      => item['id'],
      'name'    => item['name'],
      'type'    => item['type'],
      'details' => item["#{small_camelize(item['type'])}Details"]
    }
end

#rawObject



16
17
18
# File 'lib/ga_shikomi/renderer.rb', line 16

def raw
  pp records
end

#render(fields, &preprocess) ⇒ Object

param

Array

param

Proc preprocess



24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/ga_shikomi/renderer.rb', line 24

def render(fields, &preprocess)
  if options[:format] == 'original'
    pp records
  else
    result = records.map {|e| preprocess.call(e)}

    case options[:format]
    when  'csv'
      csv(result, :fields => fields)
    else
      table(result, :fields => fields)
    end
  end
end

#render_accountsObject



54
55
56
57
58
59
60
61
# File 'lib/ga_shikomi/renderer.rb', line 54

def render_accounts
  render(%w(id permissions)) {|record|
    {
      'id'          => record['id'],
      'permissions' => record['permissions']['effective'].join(',')
    }
  }
end

#render_filtersObject



85
86
87
88
89
# File 'lib/ga_shikomi/renderer.rb', line 85

def render_filters
  render(%w(id name type details)) {|record|
    pick_id_name_type_and_details(record)
  }
end

#render_gaObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/ga_shikomi/renderer.rb', line 39

def render_ga
  case records.size
  when 1
    render(records.first.keys) {|record| record}
  else
    fields = [''] + records['totalsForAllResults'].keys

    @records = records['rows'].map {|row|
      Hash[*fields.zip(row).flatten]
    } + [records['totalsForAllResults'].merge('' => 'totalsForAllResults')]

    render(fields) {|record| record}
  end
end

#render_goalsObject



91
92
93
94
95
# File 'lib/ga_shikomi/renderer.rb', line 91

def render_goals
  render(%w(id name type details)) {|record|
    pick_id_name_type_and_details(record)
  }
end

#render_metadataObject



97
98
99
# File 'lib/ga_shikomi/renderer.rb', line 97

def 
  render(%w(id description)) {|record| pick_id_and_description(record)}
end

#render_profilesObject



74
75
76
77
78
79
80
81
82
83
# File 'lib/ga_shikomi/renderer.rb', line 74

def render_profiles
  render(%w(id name websiteUrl permissions)) {|record|
    {
      'id'          => record['id'],
      'name'        => record['name'],
      'websiteUrl'  => record['websiteUrl'],
      'permissions' => record['permissions']['effective'].join(',')
    }
  }
end

#render_propertiesObject



63
64
65
66
67
68
69
70
71
72
# File 'lib/ga_shikomi/renderer.rb', line 63

def render_properties
  render(%w(id name websiteUrl permissions)) {|record|
    {
      'id'          => record['id'],
      'name'        => record['name'],
      'websiteUrl'  => record['websiteUrl'],
      'permissions' => record['permissions']['effective'].join(',')
    }
  }
end

#render_segmentsObject



101
102
103
104
105
106
107
# File 'lib/ga_shikomi/renderer.rb', line 101

def render_segments
  fields = %w(id segmentId name type)

  render(fields) {|record|
    Hash[*fields.map {|f| [f, record[f]]}.flatten]
  }
end

#small_camelize(str) ⇒ Object

param

String str

return

String str



137
138
139
# File 'lib/ga_shikomi/renderer.rb', line 137

def small_camelize(str)
  str.split('_').map {|e| e.capitalize}.tap {|a| a.first.downcase!}.join
end

#table(result, opts = {}) ⇒ Object

param

Array result

param

Hash opts



145
146
147
148
# File 'lib/ga_shikomi/renderer.rb', line 145

def table(result, opts = {})
  require 'hirb'
  puts Hirb::Helpers::AutoTable.render(result, opts)
end