Created
March 13, 2014 11:08
-
-
Save zverok/9526450 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
=begin | |
Воспользовавшись таким классом, ты можешь разделить функционал следующим образом: | |
MnemosyneClient просто делает | |
GraphTable.from_json_ld(get '...graph.jsonld', params) | |
SummaryTable.from_json(get '...summary.json', params) | |
WordsTable.from_json(get url, params) | |
.... | |
GraphTable преобразует данные, и хранит их раздельно (отдельно колонки, отдельно метки, отдельно цифры), что удобно для спек; | |
а при необходимости сводит это всё в таблицу. | |
=end | |
class DataTable | |
def table | |
[ | |
[title, *column_labels], | |
*row_labels.zip(data).map(&:flatten) | |
] | |
end | |
end | |
class GraphTable < DataTable | |
def initialize(json_ld_data, step) | |
@json_ld_data, @step = json_ld_data, step.downcase.to_sym | |
end | |
attr_reader :json_ld_data, :step | |
# уровень логики мнемозины | |
def series | |
json_ld_data. | |
detect{|r| r['type'] == 'series'} | |
end | |
def dates | |
@json_ld_data. | |
select{|r| r['type'] == 'datapoint']}. | |
map{|r| r['label']} | |
end | |
def data | |
@json_ld_data. | |
select{|r| r['type'] == 'datapoint']}. | |
map{|r| r['data']} | |
end | |
# уровень табличной логики | |
def title | |
case step | |
when :hour; "Час" | |
when :day; "День" | |
when :week; "Неделя" | |
when :month; "Месяц" | |
end | |
end | |
def column_labels | |
series.map{|s| s['title']} | |
end | |
def row_labels | |
dates.map{|d| make_date_label(*d)} | |
end | |
private | |
def make_date_label(b, e) | |
case step | |
# .... | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment