gooddata 0.6.10 → 0.6.11

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.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +9 -0
  3. data/.travis.yml +4 -0
  4. data/CHANGELOG.md +6 -0
  5. data/README.md +1 -0
  6. data/gooddata.gemspec +38 -40
  7. data/lib/gooddata/bricks/base_downloader.rb +1 -1
  8. data/lib/gooddata/bricks/middleware/base_middleware.rb +36 -0
  9. data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +8 -38
  10. data/lib/gooddata/bricks/middleware/decode_params_middleware.rb +14 -0
  11. data/lib/gooddata/bricks/middleware/fs_upload_middleware.rb +7 -6
  12. data/lib/gooddata/bricks/middleware/gooddata_middleware.rb +7 -5
  13. data/lib/gooddata/bricks/middleware/logger_middleware.rb +1 -1
  14. data/lib/gooddata/bricks/middleware/restforce_middleware.rb +20 -14
  15. data/lib/gooddata/bricks/middleware/undot_params_middleware.rb +33 -0
  16. data/lib/gooddata/cli/commands/api_cmd.rb +1 -1
  17. data/lib/gooddata/cli/commands/auth_cmd.rb +1 -1
  18. data/lib/gooddata/cli/commands/console_cmd.rb +2 -2
  19. data/lib/gooddata/cli/commands/process_cmd.rb +54 -7
  20. data/lib/gooddata/cli/commands/project_cmd.rb +9 -9
  21. data/lib/gooddata/cli/commands/projects_cmd.rb +1 -1
  22. data/lib/gooddata/cli/commands/run_ruby_cmd.rb +24 -7
  23. data/lib/gooddata/cli/commands/scaffold_cmd.rb +2 -2
  24. data/lib/gooddata/cli/commands/user_cmd.rb +1 -1
  25. data/lib/gooddata/cli/hooks.rb +3 -3
  26. data/lib/gooddata/commands/datasets.rb +1 -1
  27. data/lib/gooddata/commands/project.rb +2 -2
  28. data/lib/gooddata/commands/role.rb +1 -1
  29. data/lib/gooddata/commands/runners.rb +2 -2
  30. data/lib/gooddata/connection.rb +2 -2
  31. data/lib/gooddata/core/nil_logger.rb +1 -1
  32. data/lib/gooddata/core/rest.rb +12 -8
  33. data/lib/gooddata/data/guesser.rb +1 -1
  34. data/lib/gooddata/exceptions/attr_element_not_found.rb +1 -1
  35. data/lib/gooddata/extensions/enumerable.rb +1 -1
  36. data/lib/gooddata/extensions/hash.rb +20 -0
  37. data/lib/gooddata/helpers/csv_helper.rb +1 -1
  38. data/lib/gooddata/helpers/global_helpers.rb +59 -1
  39. data/lib/gooddata/mixins/md_lock.rb +83 -0
  40. data/lib/gooddata/mixins/md_object_indexer.rb +1 -1
  41. data/lib/gooddata/mixins/md_object_query.rb +1 -1
  42. data/lib/gooddata/mixins/md_relations.rb +0 -9
  43. data/lib/gooddata/models/dashboard_builder.rb +1 -1
  44. data/lib/gooddata/models/domain.rb +2 -2
  45. data/lib/gooddata/models/empty_result.rb +5 -5
  46. data/lib/gooddata/models/execution.rb +74 -0
  47. data/lib/gooddata/models/execution_detail.rb +74 -0
  48. data/lib/gooddata/models/membership.rb +1 -1
  49. data/lib/gooddata/models/metadata/attribute.rb +4 -6
  50. data/lib/gooddata/models/metadata/dashboard.rb +2 -0
  51. data/lib/gooddata/models/metadata/fact.rb +2 -2
  52. data/lib/gooddata/models/metadata/metric.rb +4 -1
  53. data/lib/gooddata/models/metadata/report.rb +84 -34
  54. data/lib/gooddata/models/metadata/report_definition.rb +28 -17
  55. data/lib/gooddata/models/metadata.rb +1 -1
  56. data/lib/gooddata/models/model.rb +1 -1
  57. data/lib/gooddata/models/process.rb +70 -54
  58. data/lib/gooddata/models/profile.rb +47 -10
  59. data/lib/gooddata/models/project.rb +74 -30
  60. data/lib/gooddata/models/project_blueprint.rb +9 -10
  61. data/lib/gooddata/models/project_builder.rb +2 -2
  62. data/lib/gooddata/models/project_creator.rb +4 -4
  63. data/lib/gooddata/models/report_data_result.rb +1 -1
  64. data/lib/gooddata/models/schedule.rb +39 -32
  65. data/lib/gooddata/models/to_manifest.rb +5 -5
  66. data/lib/gooddata/models/to_wire.rb +3 -3
  67. data/lib/gooddata/rest/client.rb +64 -31
  68. data/lib/gooddata/rest/connection.rb +7 -7
  69. data/lib/gooddata/rest/connections/dummy_connection.rb +5 -5
  70. data/lib/gooddata/rest/connections/rest_client_connection.rb +106 -44
  71. data/lib/gooddata/rest/object.rb +1 -1
  72. data/lib/gooddata/version.rb +1 -1
  73. data/spec/bricks/bricks_spec.rb +67 -0
  74. data/spec/bricks/default-config.json +8 -0
  75. data/spec/data/gooddata_version_process/gooddata_version.rb +3 -0
  76. data/spec/data/gooddata_version_process/gooddata_version.zip +0 -0
  77. data/spec/data/ruby_params_process/ruby_params.rb +3 -0
  78. data/spec/helpers/process_helper.rb +12 -0
  79. data/spec/helpers/schedule_helper.rb +21 -0
  80. data/spec/integration/create_project_spec.rb +19 -0
  81. data/spec/integration/full_process_schedule_spec.rb +129 -8
  82. data/spec/integration/full_project_spec.rb +52 -2
  83. data/spec/spec_helper.rb +1 -0
  84. data/spec/unit/core/rest_spec.rb +76 -3
  85. data/spec/unit/helpers_spec.rb +43 -0
  86. data/spec/unit/models/metric_spec.rb +33 -0
  87. data/spec/unit/models/params_spec.rb +96 -0
  88. data/spec/unit/models/profile_spec.rb +16 -0
  89. data/spec/unit/models/schedule_spec.rb +12 -3
  90. metadata +350 -187
  91. data/lib/gooddata/helper/class_helper.rb +0 -1
  92. data/lib/gooddata/helper/helpers.rb +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 175e3df2f037ccb6001560d204998e8de3082422
4
- data.tar.gz: 11fd46bd19cdf28cf062520df37958bca0074dc4
3
+ metadata.gz: 599d5759ccffd91b5e59aa9fde03eccee81c4138
4
+ data.tar.gz: 95ec2b6b381f940b686fe29c201c99ec1b1300c9
5
5
  SHA512:
6
- metadata.gz: 8a0c62a95ae6631b5b94fc9af128e795debb4e892e216d58477565eb45e70fe678c024ad1893ec76db2a76bccc10d8658d57ac2dac819511f59e9854f6558b14
7
- data.tar.gz: 3108128b8750a1ea5826e1d050419a08504e3b99da75ef29542333d2f3a32e879cd0f2fd8a9fe36fc661ae10493b2c334492d92ae97ab05c76938c9314576929
6
+ metadata.gz: b82f86ca736a3dbb5d6402c1085a3062c6d3213ff5f2f782f115496408d97d230779870be2923fcb5aa472615c539d65b08c52b022628b06467d2e6ad15816aa
7
+ data.tar.gz: 018ad7f05291a4f5ce238254d3f24ab3680d2dc0ab4a374990004db785bd1e9b15534cf553d88958ead9eb5bc5b82c8b94507cdc876955144d155283bc016bb7
data/.rubocop.yml CHANGED
@@ -1,3 +1,6 @@
1
+ AbcSize:
2
+ Enabled: false
3
+
1
4
  ClassLength:
2
5
  Enabled: false
3
6
 
@@ -7,6 +10,9 @@ CyclomaticComplexity:
7
10
  Documentation:
8
11
  Enabled: false
9
12
 
13
+ EachWithObject:
14
+ Enabled: false
15
+
10
16
  Eval:
11
17
  Enabled: false
12
18
 
@@ -21,3 +27,6 @@ LineLength:
21
27
 
22
28
  MethodLength:
23
29
  Enabled: false
30
+
31
+ PerceivedComplexity:
32
+ Enabled: false
data/.travis.yml CHANGED
@@ -1,5 +1,9 @@
1
1
  language: ruby
2
2
 
3
+ os:
4
+ - linux
5
+ - osx
6
+
3
7
  branches:
4
8
  except:
5
9
  - gh-pages
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # GoodData Ruby SDK Changelog
2
2
 
3
+ ## 0.6.11
4
+ - Ability to download deployed process
5
+ - Added locking objects capabilities
6
+ - Added removing color mapping form a report definition
7
+ - Report defintions are deleted along with a report
8
+
3
9
  ## 0.6.10
4
10
  - Fixed client default missing in ProjectMetadata
5
11
  - Listing schedules on processes is working
data/README.md CHANGED
@@ -10,6 +10,7 @@ The best documentation for the GoodData API can be found using these resources:
10
10
  * http://developer.gooddata.com/api
11
11
  * https://secure.gooddata.com/gdc
12
12
  * http://rubydoc.info/gems/gooddata/frames
13
+ * http://developer.gooddata.com/ruby-cookbook
13
14
 
14
15
  ## Status
15
16
 
data/gooddata.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $:.push File.expand_path("../lib/", __FILE__)
3
- require "gooddata/version"
3
+ require 'gooddata/version'
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = %q{gooddata}
@@ -9,54 +9,52 @@ Gem::Specification.new do |s|
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [
12
- "Pavel Kolesnikov",
13
- "Thomas Watson Steen",
14
- "Tomas Svarovsky",
15
- "Tomas Korcak"
12
+ 'Pavel Kolesnikov',
13
+ 'Thomas Watson Steen',
14
+ 'Tomas Svarovsky',
15
+ 'Tomas Korcak'
16
16
  ]
17
17
 
18
18
  s.summary = %q{A convenient Ruby wrapper around the GoodData RESTful API}
19
19
  s.description = %q{Use the GoodData::Client class to integrate GoodData into your own application or use the CLI to work with GoodData directly from the command line.}
20
20
  s.email = %q{pavel@gooddata.com}
21
- s.executables = ["gooddata"]
22
- s.extra_rdoc_files = [
23
- "LICENSE",
24
- "README.md"
25
- ]
21
+ s.executables = ['gooddata']
22
+ s.extra_rdoc_files = %w(LICENSE README.md)
23
+
26
24
  s.files = `git ls-files`.split($/)
27
25
  s.homepage = %q{http://github.com/gooddata/gooddata-ruby}
28
26
  s.require_paths = ["lib"]
29
27
 
30
- s.add_development_dependency "debase" if RUBY_VERSION >= '2.1'
31
- s.add_development_dependency "rake", "~> 10.3.1"
32
- s.add_development_dependency "rake-notes", "~> 0.2.0"
33
- s.add_development_dependency "redcarpet", "~> 3.1.1" if RUBY_PLATFORM != 'java'
34
- s.add_development_dependency "rspec", "~> 2.14.1"
28
+ # s.add_development_dependency "debase" if RUBY_VERSION >= '2.1'
29
+ s.add_development_dependency 'rake', '~> 10.3', '>= 10.3.1'
30
+ s.add_development_dependency 'rake-notes', '~> 0.2', '>= 0.2.0'
31
+ s.add_development_dependency 'redcarpet', '~> 3.1', '>= 3.1.1' if RUBY_PLATFORM != 'java'
32
+ s.add_development_dependency 'rspec', '~> 2.14', '>= 2.14.1'
35
33
  # s.add_development_dependency "ruby-debug-base"
36
- s.add_development_dependency "ruby-debug-ide" if RUBY_VERSION >= '2.1'
37
- s.add_development_dependency "rubocop", "~> 0.20.1"
38
- s.add_development_dependency "simplecov", "~> 0.8.2"
39
- s.add_development_dependency "yard", "~> 0.8.7.3"
40
- s.add_development_dependency "yard-rspec", "~> 0.1"
41
- s.add_development_dependency "ZenTest", "~> 4.10.0"
42
- s.add_development_dependency "coveralls", "~> 0.7.0"
34
+ # s.add_development_dependency "ruby-debug-ide" if RUBY_VERSION >= '2.1'
35
+ s.add_development_dependency 'rubocop', '~> 0.27', '>= 0.27.0'
36
+ s.add_development_dependency 'simplecov', '~> 0.9', '>= 0.9.1'
37
+ s.add_development_dependency 'yard', '~> 0.8.7.3'
38
+ s.add_development_dependency 'yard-rspec', '~> 0.1'
39
+ s.add_development_dependency 'ZenTest', '~> 4.10', '>= 4.11.0'
40
+ s.add_development_dependency 'coveralls', '~> 0.7', '>= 0.7.0'
43
41
 
44
- s.add_dependency "activesupport", "~> 4.1.0"
45
- s.add_dependency "bundler", ">= 1.6.1"
46
- s.add_dependency 'docile', '~> 1.1.3'
47
- s.add_dependency "erubis", "~> 2.7.0"
48
- s.add_dependency "gli", "~> 2.10.0"
49
- s.add_dependency "highline", "~> 1.6.21"
50
- s.add_dependency "i18n", "~> 0.6.9"
51
- s.add_dependency "json_pure", "~> 1.8.1"
52
- s.add_dependency "multi_json", "~> 1.10.0"
53
- s.add_dependency "parseconfig", "~> 1.0.4"
54
- s.add_dependency 'pmap', '~> 1.0.1'
55
- s.add_dependency "pry", "~> 0.9.12.6"
56
- s.add_dependency "restforce", "~> 1.4.3"
57
- s.add_dependency "rest-client", "~> 1.6.7"
58
- s.add_dependency "rubyzip", "~> 1.1.0"
59
- s.add_dependency "terminal-table", "~> 1.4.5"
60
- s.add_dependency "salesforce_bulk_query", "~> 0.0"
61
- s.add_dependency "aws-sdk", "~> 1.45"
42
+ s.add_dependency 'activesupport', '~> 4.1', '>= 4.1.0'
43
+ s.add_dependency 'bundler', '~> 1.7', '>= 1.7.3'
44
+ s.add_dependency 'docile', '~> 1.1', '>= 1.1.5'
45
+ s.add_dependency 'erubis', '~> 2.7', '>= 2.7.0'
46
+ s.add_dependency 'gli', '~> 2.12', '>= 2.12.2'
47
+ s.add_dependency 'highline', '~> 1.6', '>= 1.6.21'
48
+ s.add_dependency 'i18n', '~> 0.6', '>= 0.6.9'
49
+ s.add_dependency 'json_pure', '~> 1.8', '>= 1.8.1'
50
+ s.add_dependency 'multi_json', '~> 1.10', '>= 1.10.0'
51
+ s.add_dependency 'parseconfig', '~> 1.0', '>= 1.0.4'
52
+ s.add_dependency 'pmap', '~> 1.0', '>= 1.0.1'
53
+ s.add_dependency 'pry', '~> 0.9.12.6' # '~> 0.10', '>= 0.10.1'
54
+ s.add_dependency 'restforce', '~> 1.5', '>= 1.5.0'
55
+ s.add_dependency 'rest-client', '~> 1.7', '>= 1.7.2'
56
+ s.add_dependency 'rubyzip', '~> 1.1', '>= 1.1.0'
57
+ s.add_dependency 'terminal-table', '~> 1.4', '>= 1.4.5'
58
+ s.add_dependency 'salesforce_bulk_query', '~> 0.0'
59
+ s.add_dependency 'aws-sdk', '~> 1.45'
62
60
  end
@@ -23,7 +23,7 @@ module GoodData
23
23
  def backup(meta)
24
24
  @logger.info 'would send a backup list of files to backup' if @logger
25
25
 
26
- files = meta['objects'].map { |k, o| o }.reduce([]) do |a, e|
26
+ files = meta['objects'].map { |_k, o| o }.reduce([]) do |a, e|
27
27
  a + e['filenames']
28
28
  end
29
29
 
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ require 'hashie'
2
3
 
3
4
  module GoodData
4
5
  module Bricks
@@ -7,6 +8,41 @@ module GoodData
7
8
 
8
9
  include Bricks::Utils
9
10
 
11
+ # Loads defaults to params from a json file in @config.
12
+ #
13
+ # The idea is to have a set of parameter defaults
14
+ # for a middleware. The defaults are loaded from a json file.
15
+ # If a brick user wants to override a default, they can
16
+ # do that in runtime params which come to the method in 'params'.
17
+ #
18
+ # A deep merge is done on the params. Arrays and other
19
+ # non-hash types are overwritten (params win).
20
+ #
21
+ # ### Examples
22
+ #
23
+ # A brick developer develops a SalesforceDownloaderMiddleware
24
+ # with default preset 'gse' having a configuration preset
25
+ # {"entities": ["Acount", "Event", "OpportunityLineItem", "Opportunity", "User"]}
26
+ #
27
+ # The brick user only wants to use Opportunity, so he passes
28
+ # runtime parameter {"entities": ["Opportunity"]} which overrides
29
+ # the default.
30
+ # See spec/bricks/bricks_spec.rb for usage.
31
+ def load_defaults(params)
32
+ # if default params given, fill what's not given in runtime params
33
+ if @config
34
+ # load it from file and merge it
35
+ defaults = { 'config' => MultiJson.load(File.read(@config)) }
36
+ default_params = defaults.extend(Hashie::Extensions::DeepMerge)
37
+ params = default_params.deep_merge(params)
38
+ end
39
+ params
40
+ end
41
+
42
+ def call(params)
43
+ load_defaults(params)
44
+ end
45
+
10
46
  def initialize(options = {})
11
47
  @app = options[:app]
12
48
  end
@@ -9,53 +9,23 @@ module GoodData
9
9
  class BulkSalesforceMiddleware < Bricks::Middleware
10
10
  DEFAULT_VERSION = '29.0'
11
11
 
12
- def call(params)
13
- username = params['salesforce_username']
14
- password = params['salesforce_password']
15
- token = params['salesforce_token']
16
- oauth_refresh_token = params['salesforce_oauth_refresh_token']
17
-
18
- client_id = params['salesforce_client_id']
19
- client_secret = params['salesforce_client_secret']
20
- host = params['salesforce_host']
21
- version = params['salesforce_api_version'] || DEFAULT_VERSION
22
-
23
- app_info = {
24
- :client_id => client_id,
25
- :client_secret => client_secret
26
- }
27
- app_info[:host] = host unless host.nil?
12
+ def self.create_client(params)
28
13
  salesforce = nil
29
- client_params = nil
30
-
31
- if username && password && token
32
- # use basic auth
33
- client_params = {
34
- :username => username,
35
- :password => password,
36
- :security_token => token
37
- }.merge(app_info)
38
-
39
- elsif oauth_refresh_token
40
- # use oauth
41
- client_params = {
42
- :refresh_token => oauth_refresh_token
43
- }.merge(app_info)
44
- end
45
-
46
- if client_params
47
-
48
- client_params[:api_version] = version
14
+ if params['salesforce_client']
49
15
 
50
- client = params['salesforce_client'] || Restforce.new(client_params)
16
+ client = params['salesforce_client']
51
17
  client.authenticate!
52
18
 
53
19
  salesforce = SalesforceBulkQuery::Api.new(client, :logger => params['GDC_LOGGER'])
54
20
  # SalesforceBulkQuery adds its own Restforce logging so turn it off
55
21
  Restforce.log = false if params['GDC_LOGGER']
56
22
  end
23
+ params.merge('salesforce_bulk_client' => salesforce)
24
+ end
57
25
 
58
- @app.call(params.merge('salesforce_bulk_client' => salesforce))
26
+ def call(params)
27
+ params = self.class.create_client(params)
28
+ @app.call(params)
59
29
  end
60
30
  end
61
31
  end
@@ -0,0 +1,14 @@
1
+ require_relative 'base_middleware'
2
+
3
+ module GoodData
4
+ module Bricks
5
+ # Converts params from encoded hash to decoded hash
6
+ class DecodeParamsMiddleware < Bricks::Middleware
7
+ def call(params)
8
+ params = params.to_hash
9
+
10
+ @app.call(GoodData::Helpers.decode_params(params))
11
+ end
12
+ end
13
+ end
14
+ end
@@ -8,26 +8,27 @@ require_relative 'base_middleware'
8
8
 
9
9
  module GoodData
10
10
  module Bricks
11
- class FsUploadMiddleware < Bricks::Middleware
11
+ class FsProjectUploadMiddleware < Bricks::Middleware
12
12
  def initialize(options = {})
13
13
  super
14
14
  @destination = options[:destination]
15
15
  end
16
16
 
17
17
  def call(params)
18
- returning(@app.call(params)) do |result|
18
+ returning(@app.call(params)) do |_result|
19
19
  destination = @destination
20
20
  (params['gdc_files_to_upload'] || []).each do |f|
21
- path = f[:path]
22
21
  case destination.to_s
23
22
  when 'staging'
24
- url = GoodData.get_user_webdav_path(path)
25
- GoodData.upload_to_user_webdav(path)
26
- puts "Uploaded local file \"#{path}\" to url \"#{url + path}\""
23
+ GoodData.upload_to_project_webdav(f[:path], directory: f[:webdav_directory])
24
+ puts "Uploaded local file \"#{f[:path]}\" to webdav."
27
25
  end
28
26
  end
29
27
  end
30
28
  end
31
29
  end
30
+
31
+ # Alias to make it backwards compatible
32
+ FsUploadMiddleware = FsProjectUploadMiddleware
32
33
  end
33
34
  end
@@ -16,16 +16,18 @@ module GoodData
16
16
  project_id = params['GDC_PROJECT_ID']
17
17
 
18
18
  fail 'SST (SuperSecureToken) not present in params' if params[token_name].nil?
19
+
19
20
  server = if !params[protocol_name].empty? && !params[server_name].empty?
20
21
  "#{params[protocol_name]}://#{params[server_name]}"
21
22
  end
22
23
 
23
- fail 'GoodData username is missing. Expected param :GDC_USERNAME' if params['GDC_USERNAME'].nil?
24
- fail 'GoodData password is missing. Expected param :GDC_PASSWORD' if params['GDC_PASSWORD'].nil?
25
-
26
- client = GoodData.connect(params['GDC_USERNAME'], params['GDC_PASSWORD'], :server => server)
24
+ client = if params['GDC_USERNAME'].nil? || params['GDC_PASSWORD'].nil?
25
+ GoodData.connect(sst_token: params['GDC_SST'], server: server)
26
+ else
27
+ GoodData.connect(params['GDC_USERNAME'], params['GDC_PASSWORD'], server: server)
28
+ end
27
29
  GoodData.logger = logger
28
- GoodData.with_project(project_id, :client => client) do |p|
30
+ GoodData.with_project(project_id, :client => client) do |_p|
29
31
  @app.call(params)
30
32
  end
31
33
  end
@@ -10,7 +10,7 @@ module GoodData
10
10
  def call(params)
11
11
  logger = params['GDC_LOGGER'] = params[:GDC_LOGGER_FILE].nil? ? Logger.new(STDOUT) : Logger.new(params[:GDC_LOGGER_FILE])
12
12
  logger.info('Pipeline starts')
13
- returning(@app.call(params)) do |result|
13
+ returning(@app.call(params)) do |_result|
14
14
  logger.info('Pipeline ending')
15
15
  end
16
16
  end
@@ -10,15 +10,16 @@ module GoodData
10
10
  class RestForceMiddleware < Bricks::Middleware
11
11
  DEFAULT_VERSION = '29.0'
12
12
 
13
- def call(params)
14
- username = params['salesforce_username']
15
- password = params['salesforce_password']
16
- token = params['salesforce_token']
17
- client_id = params['salesforce_client_id']
18
- client_secret = params['salesforce_client_secret']
19
- oauth_refresh_token = params['salesforce_oauth_refresh_token']
20
- host = params['salesforce_host']
21
- version = params['salesforce_api_version'] || DEFAULT_VERSION
13
+ def self.create_client(params)
14
+ downloader_config = params['config']['downloader']['salesforce']
15
+ username = downloader_config['username']
16
+ password = downloader_config['password']
17
+ token = downloader_config['token']
18
+ client_id = downloader_config['client_id']
19
+ client_secret = downloader_config['client_secret']
20
+ oauth_refresh_token = downloader_config['oauth_refresh_token']
21
+ host = downloader_config['host']
22
+ version = downloader_config['api_version'] || DEFAULT_VERSION
22
23
 
23
24
  credentials = if username && password && token
24
25
  {
@@ -34,17 +35,22 @@ module GoodData
34
35
 
35
36
  client = if credentials
36
37
  credentials.merge!(
37
- :client_id => client_id,
38
- :client_secret => client_secret
39
- )
38
+ :client_id => client_id,
39
+ :client_secret => client_secret
40
+ )
40
41
  credentials[:host] = host unless host.nil?
41
42
  credentials[:api_version] = version
42
43
 
43
- Restforce.log = true if params['salesforce_client_logger']
44
+ Restforce.log = true if params['GDC_LOGGER']
44
45
 
45
46
  Restforce.new(credentials)
46
47
  end
47
- @app.call(params.merge('salesforce_client' => client))
48
+ params.merge('salesforce_client' => client)
49
+ end
50
+
51
+ def call(params)
52
+ params = self.class.create_client(params)
53
+ @app.call(params)
48
54
  end
49
55
  end
50
56
  end
@@ -0,0 +1,33 @@
1
+ # encoding: UTF-8
2
+
3
+ require_relative 'base_middleware'
4
+
5
+ module GoodData
6
+ module Bricks
7
+ # Converts params from double underscore notation to nested hash under 'config'
8
+ # Parameters starting GDC_ are considered system params and aren't converted.
9
+ #
10
+ # This is useful because the executor platform can currently
11
+ # do just key-value parameters. Also it makes it easier for
12
+ # a user, as there aren't as much curly braces.
13
+ #
14
+ #
15
+ # ### Examples
16
+ # If you pass params in form:
17
+ # {"my__namespace__param": "value"}
18
+ #
19
+ # you'll get:
20
+ # {"my": {"namespace": {"param": value}}}
21
+ class UndotParamsMiddleware < Bricks::Middleware
22
+ def call(params)
23
+ params = params.to_hash
24
+ unless params['config']
25
+ # split the params to those starting with GDC and those that don't, put other params under config
26
+ gdc_params, other_params = params.partition { |k, _| k =~ /GDC_.*/ }.map { |h| Hash[h] }
27
+ params = gdc_params.merge('config' => other_params.undot)
28
+ end
29
+ @app.call(params)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -12,7 +12,7 @@ GoodData::CLI.module_eval do
12
12
 
13
13
  c.desc 'Info about the API version etc'
14
14
  c.command :info do |info|
15
- info.action do |global_options, options, args|
15
+ info.action do |global_options, options, _args|
16
16
  opts = options.merge(global_options)
17
17
  GoodData.connect(opts)
18
18
  pp GoodData::Command::Api.info
@@ -10,7 +10,7 @@ GoodData::CLI.module_eval do
10
10
 
11
11
  c.desc 'Store your credentials to ~/.gooddata so client does not have to ask you every single time'
12
12
  c.command :store do |store|
13
- store.action do |global_options, options, args|
13
+ store.action do |_global_options, _options, _args|
14
14
  GoodData::Command::Auth.store
15
15
  end
16
16
  end
@@ -8,7 +8,7 @@ GoodData::CLI.module_eval do
8
8
  desc 'Interactive session with gooddata sdk loaded'
9
9
  command :console do |c|
10
10
 
11
- c.action do |global_options, options, args|
11
+ c.action do |global_options, _options, _args|
12
12
  username = global_options[:username]
13
13
  fail ArgumentError, 'No username specified' if username.nil? || username.empty?
14
14
 
@@ -27,7 +27,7 @@ GoodData::CLI.module_eval do
27
27
 
28
28
  puts "Use 'exit' to quit the live session. Use 'q' to jump out of displaying a large output."
29
29
  binding.pry(:quiet => true,
30
- :prompt => [proc do |target_self, nest_level, pry|
30
+ :prompt => [proc do |_target_self, _nest_level, _pry|
31
31
  'sdk_live_sesion: '
32
32
  end])
33
33
  end
@@ -5,6 +5,16 @@ require 'pp'
5
5
  require_relative '../shared'
6
6
  require_relative '../../commands/process'
7
7
 
8
+ def read_params_file(filename)
9
+ # read params from a file
10
+ # if filename nil, return empty hash
11
+ if filename
12
+ JSON.parse(IO.read(filename))
13
+ else
14
+ {}
15
+ end
16
+ end
17
+
8
18
  GoodData::CLI.module_eval do
9
19
 
10
20
  desc 'Work with deployed processes'
@@ -31,6 +41,18 @@ GoodData::CLI.module_eval do
31
41
  c.default_value nil
32
42
  c.flag :executable
33
43
 
44
+ c.desc 'Specify parameters file to execute the process with'
45
+ c.default_value nil
46
+ c.flag :params
47
+
48
+ c.desc 'Specify hidden paremeters to execute the process with'
49
+ c.default_value nil
50
+ c.flag :hidden_params
51
+
52
+ c.desc 'Specify cron expression for the schedule'
53
+ c.default_value nil
54
+ c.flag :cron
55
+
34
56
  c.desc "Lists all user's processes deployed on the plaform"
35
57
  c.command :list do |list|
36
58
  list.action do |global_options, options, args|
@@ -46,7 +68,7 @@ GoodData::CLI.module_eval do
46
68
 
47
69
  c.desc 'Gives you some basic info about the process'
48
70
  c.command :show do |get|
49
- get.action do |global_options, options, args|
71
+ get.action do |global_options, options, _args|
50
72
  opts = options.merge(global_options)
51
73
  client = GoodData.connect(opts)
52
74
  pp GoodData::Command::Process.get(opts.merge(client: client)).raw_data
@@ -55,7 +77,7 @@ GoodData::CLI.module_eval do
55
77
 
56
78
  c.desc 'Deploys provided directory to the server'
57
79
  c.command :deploy do |deploy|
58
- deploy.action do |global_options, options, args|
80
+ deploy.action do |global_options, options, _args|
59
81
  opts = options.merge(global_options)
60
82
  dir = opts[:dir]
61
83
  name = opts[:name]
@@ -69,7 +91,7 @@ GoodData::CLI.module_eval do
69
91
 
70
92
  c.desc 'Delete specific process'
71
93
  c.command :delete do |deploy|
72
- deploy.action do |global_options, options, args|
94
+ deploy.action do |global_options, options, _args|
73
95
  opts = options.merge(global_options)
74
96
  process_id = opts[:process_id]
75
97
  fail 'You have to provide a process id. Use --process_id param' if process_id.nil? || process_id.empty?
@@ -80,16 +102,41 @@ GoodData::CLI.module_eval do
80
102
  end
81
103
 
82
104
  c.desc 'Execute specific deployed process'
83
- # TODO: Add params. HOW?
84
105
  c.command :execute do |deploy|
85
- deploy.action do |global_options, options, args|
106
+ deploy.action do |global_options, options, _args|
86
107
  opts = options.merge(global_options)
87
108
  process_id = opts[:process_id]
88
109
  executable = opts[:executable]
110
+
111
+ fail 'You have to provide a process id. Use --process_id param' if process_id.nil? || process_id.empty?
112
+ fail 'You have to provide an executable for the process. Use --executable param' if executable.nil? || executable.empty?
113
+ client = GoodData.connect(options)
114
+ project = client.projects(options[:project_id])
115
+ process = project.processes(options[:process_id])
116
+ params = read_params_file(options[:params])
117
+ hidden_params = read_params_file(options[:hidden_params])
118
+ process.execute(options[:executable], params: params, hidden_params: hidden_params)
119
+ end
120
+ end
121
+
122
+ c.desc 'Schedule specific deployed process'
123
+ c.command :schedule do |schedule|
124
+ schedule.action do |global_options, command_options, _|
125
+ options = command_options.merge(global_options)
126
+ process_id = options[:process_id]
127
+ executable = options[:executable]
128
+ cron = options[:cron]
129
+
89
130
  fail 'You have to provide a process id. Use --process_id param' if process_id.nil? || process_id.empty?
90
131
  fail 'You have to provide an executable for the process. Use --executable param' if executable.nil? || executable.empty?
91
- GoodData.connect(opts)
92
- pp GoodData::Command::Process.execute_process(process_id, executable, opts)
132
+ fail 'You have to provide a cron expression for the schedule. Use --cron param' if cron.nil? || cron.empty?
133
+
134
+ client = GoodData.connect(options)
135
+ project = client.projects(options[:project_id])
136
+ process = project.processes(options[:process_id])
137
+ params = read_params_file(options[:params])
138
+ hidden_params = read_params_file(options[:hidden_params])
139
+ process.create_schedule(cron, options[:executable], params: params, hidden_params: hidden_params)
93
140
  end
94
141
  end
95
142
  end