【发布时间】:2014-09-14 07:14:17
【问题描述】:
我希望了解如何访问方法 A 中设置的变量,然后在方法 B 中使用该变量,以及重用同一部分代码然后只更改查询的干净方法
require 'google/api_client'
module GoogleAnalytics
class Analytic
SERVICE_ACCOUNT_EMAIL_ADDRESS = ENV['SERVICE_ACCOUNT_EMAIL_ADDRESS']
PATH_TO_KEY_FILE = ENV['PATH_TO_KEY_FILE']
PROFILE = ENV['ANALYTICS_PROFILE_ID']
def google_analytics_api
client = Google::APIClient.new(
application_name: "Example Application",
application_version: "1.0")
client.authorization = Signet::OAuth2::Client.new(
:token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
:audience => 'https://accounts.google.com/o/oauth2/token',
:scope => 'https://www.googleapis.com/auth/analytics.readonly',
:issuer => SERVICE_ACCOUNT_EMAIL_ADDRESS,
:signing_key => Google::APIClient::KeyUtils.load_from_pkcs12(PATH_TO_KEY_FILE, 'notasecret')).tap { |auth| auth.fetch_access_token! }
api_method = client.discovered_api('analytics','v3').data.ga.get
# make queries
result = client.execute(:api_method => api_method, :parameters => {
'ids' => PROFILE,
'start-date' => Date.new(2014,1,1).to_s,
'end-date' => Date.today.to_s,
'dimensions' => 'ga:pagePath',
'metrics' => 'ga:pageviews',
'filters' => 'ga:pagePath==/'
})
end
end
end
因此,如果我运行 google_analytics_api 方法,我会得到一组返回的结果,这些结果分配给变量 result。
如果我想要另外 2 个单独的方法来返回不同的结果集怎么办,那么 新用户和跳出率,这将是改变请求参数的两个单独的调用,不是吗?我需要重复整个方法吗?
有没有办法对此进行重构,以便授权调用可以包含在其 on 方法中,而我所更改的只是分配给结果的请求参数?
像这样的
def api_call
logic to make request
end
def new_users
api_call
# make queries
result = client.execute(:api_method => api_method, :parameters => {
'ids' => PROFILE,
'start-date' => Date.new(2014,1,1).to_s,
'end-date' => Date.today.to_s,
'dimensions' => 'ga:pagePath',
'metrics' => 'ga:newUsers',
'filters' => 'ga:pagePath==/'
})
end
虽然其中一个问题是局部变量 client 和 result 在 new_users 方法中可用,但可以将它们更改为什么?带有@的实例变量?还是带有@@ 的类变量?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 methods google-api