sf_cli 1.2.1 → 1.2.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c6cc1ab1222fe6f4c19b78853eed5a06c7e7f9047146b5f59a08a888fb369a54
4
- data.tar.gz: f73f3784ed62def6460450fc6780f13fae73ae5d64ee7652b60379d50fcbc3e5
3
+ metadata.gz: 283b8eacee628f3be4e587040bd604bdbb669b8f0139e5f5a8963690f2f7605a
4
+ data.tar.gz: 9d2303cefa7684784a9505df8692cd0bbce74951f53ec28bd520d1f8c61c5041
5
5
  SHA512:
6
- metadata.gz: 80a77af9028ef5fed8b195d79356c0df6fc3b304a5eab26b8d094333d9148097cabb51b21592091815dc1ae0b768a3f1dbd35b88d01921d02986e5ee9b43add4
7
- data.tar.gz: 1dbc012a4c8b0895f00ac1f741c1262d6b7319de72c08ef5d92f61204acdbb4f052755dd596883a989addaae35589039623d3d82ca9eace7a3ca97ae38a8e291
6
+ metadata.gz: 2abcf466629177011a6d4847e3646cb033cdb34fdf40c9792ea9844678f5de0fdcd2f930cb12ad9e132300aa88ab33d59762caac39322d784af06fc768b6d51d
7
+ data.tar.gz: 4304ff0ee17be410ce5970dd917726e51a1013dfb7e9c7553df0848c4c780f9a4dbbaa4fee0f2eac33907732e37865188cfc0afbd36caa9506828d0d1ceed149
@@ -0,0 +1,4 @@
1
+ module SfCli
2
+ class CommandExecError < StandardError
3
+ end
4
+ end
@@ -1,5 +1,7 @@
1
1
  require 'sf_cli'
2
+ require 'byebug'
2
3
  require 'sf_cli/sf/model'
4
+ require 'sf_cli/sf/model/query_condition'
3
5
  require 'sf_cli/sf/model/sf_command_connection'
4
6
  require 'stringio'
5
7
 
@@ -48,7 +50,8 @@ module SfCli
48
50
  sf.apex.run target_org: target_org, file: StringIO.new(apex_code)
49
51
  end
50
52
 
51
- def query(soql)
53
+ def query(_soql)
54
+ soql = _soql.is_a?(SfCli::Sf::Model::QueryMethods::QueryCondition) ? _soql.to_soql : _soql
52
55
  conf.inspect_mode = false
53
56
  puts sf.data.query(soql, format: :human, target_org: target_org)
54
57
  conf.inspect_mode = true
@@ -1,24 +1,22 @@
1
1
  require 'json'
2
2
  require 'tempfile'
3
3
 
4
+ require_relative '../../command_exec_error'
5
+
4
6
  module SfCli
5
7
  module Sf
6
8
  # @private :nodoc: just for developers
7
9
  module Core
8
10
  module Base
9
- attr_reader :varbose
10
-
11
11
  private
12
12
 
13
13
  def exec(action, flags: {}, switches: {}, redirection: nil, raw_output: false, format: :json) # :doc:
14
14
  cmd = %|sf #{category} #{action}#{as_flag_options(flags)}#{as_switch_options(switches, format)}#{redirect redirection}|
15
- puts cmd if varbose
16
15
 
17
16
  return `#{cmd}` if raw_output
18
17
 
19
18
  json = JSON.parse `#{cmd}`
20
- puts json if varbose
21
- raise StandardError.new(json['message']) if json['status'] != 0
19
+ raise ::SfCli::CommandExecError.new(json['message']) if json['status'] != 0
22
20
 
23
21
  json
24
22
  end
@@ -0,0 +1,13 @@
1
+ require_relative 'base'
2
+
3
+ module SfCli::Sf::Core
4
+ module OrgBase
5
+ include Base
6
+
7
+ def org_exec(action, flags: {}, switches: {}, redirection: nil, raw_output: false)
8
+ fmt = raw_output ? :human : :json
9
+ redirect_type = raw_output ? nil : :null_stderr
10
+ exec(action, flags: flags, switches: switches, redirection: redirect_type, raw_output: raw_output, format: fmt)
11
+ end
12
+ end
13
+ end
@@ -17,6 +17,10 @@ module SfCli::Sf::Data
17
17
  # @example
18
18
  # sf.data.query 'SELECT Id, Name FROM Account LIMIT 1' # => [{Id: "abc", Name: "account name"}]
19
19
  #
20
+ # accounts = sf.data.query('SELECT Id, Name From Account') do |record|
21
+ # record['Name'] += " Changed!" # can manipulate the record in block
22
+ # end
23
+ #
20
24
  # Account = Struct.new(:Id, :Name)
21
25
  # sf.data.query('SELECT Id, Name From Account Limit 3', model_class: Account) # returns an array of Account struct object
22
26
  #
@@ -39,7 +43,7 @@ module SfCli::Sf::Data
39
43
  #
40
44
  # @see https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_data_commands_unified.htm#cli_reference_data_query_unified command reference
41
45
  #
42
- def query(soql, target_org: nil, format: nil, bulk: false, wait: nil, api_version: nil, model_class: nil)
46
+ def query(soql, target_org: nil, format: nil, bulk: false, wait: nil, api_version: nil, model_class: nil, &block)
43
47
  flags = {
44
48
  :"query" => %("#{soql}"),
45
49
  :"target-org" => target_org,
@@ -51,11 +55,18 @@ module SfCli::Sf::Data
51
55
  bulk: bulk,
52
56
  }
53
57
  raw_output = format ? true : false
58
+ redirect_type = raw_output ? nil : :null_stderr
54
59
  format = format&.to_sym || :json
55
60
 
56
- result = exec(__method__, flags: flags, switches: switches, redirection: :null_stderr, raw_output: raw_output, format: format)
61
+ exec_result = exec(__method__, flags: flags, switches: switches, redirection: redirect_type, raw_output: raw_output, format: format)
62
+
63
+ results = return_result(exec_result, raw_output, bulk, model_class)
64
+
65
+ return results if raw_output
66
+
67
+ results.each(&block) if block_given?
57
68
 
58
- return_result(result, raw_output, bulk, model_class)
69
+ results
59
70
  end
60
71
 
61
72
  # Resume a bulk query job, which you previously started, and get records
@@ -12,17 +12,28 @@ module SfCli
12
12
  end
13
13
 
14
14
  def generate(object_name)
15
+ return false if generated? object_name
16
+
15
17
  schema = describe(object_name)
16
18
  class_definition = ClassDefinition.new(schema)
17
19
 
18
20
  instance_eval "::#{object_name} = #{class_definition}"
19
21
  klass = Object.const_get object_name.to_sym
20
22
  klass.connection = connection
23
+
24
+ true
21
25
  end
22
26
 
23
27
  def describe(object_name)
24
28
  connection.describe object_name
25
29
  end
30
+
31
+ def generated?(object_name)
32
+ Object.const_get object_name.to_sym
33
+ true
34
+ rescue NameError
35
+ false
36
+ end
26
37
  end
27
38
  end
28
39
  end
@@ -40,7 +40,7 @@ module SfCli
40
40
  def not(*expr)
41
41
  return self unless valid_expr?(expr)
42
42
 
43
- conditions.append %|NOT(#{to_string_expr(expr)})|
43
+ conditions.append %|(NOT(#{to_string_expr(expr)}))|
44
44
  self
45
45
  end
46
46
 
@@ -132,6 +132,8 @@ module SfCli
132
132
  %|'#{expr[2]}'|
133
133
  when :Time
134
134
  expr[2].to_datetime
135
+ when :NilClass
136
+ :null
135
137
  when :Array
136
138
  candidates = expr[2].map do |o|
137
139
  case o.class.name.to_sym
@@ -139,11 +141,13 @@ module SfCli
139
141
  %|'#{o}'|
140
142
  when :Time
141
143
  o.to_datetime
144
+ when :NilClass
145
+ :null
142
146
  else
143
147
  o
144
148
  end
145
149
  end
146
- %|IN (#{candidates.join(', ')})|
150
+ %|(#{candidates.join(', ')})|
147
151
  else
148
152
  expr[2]
149
153
  end
@@ -165,6 +169,8 @@ module SfCli
165
169
  %|#{k} = '#{v}'|
166
170
  when :Time
167
171
  %|#{k} = #{v.to_datetime}|
172
+ when :NilClass
173
+ %|#{k} = null|
168
174
  when :Array
169
175
  candidates = v.map do |o|
170
176
  case o.class.name.to_sym
@@ -172,6 +178,8 @@ module SfCli
172
178
  %|'#{o}'|
173
179
  when :Time
174
180
  %|#{o.to_datetime}|
181
+ when :NilClass
182
+ :null
175
183
  else
176
184
  o
177
185
  end
@@ -1,4 +1,4 @@
1
- require_relative '../core/base'
1
+ require_relative '../core/org_base'
2
2
  require_relative './login'
3
3
  require_relative './display'
4
4
  require_relative './list'
@@ -16,7 +16,7 @@ module SfCli
16
16
  module Org
17
17
  # @private :nodoc: just for developers
18
18
  class Core
19
- include ::SfCli::Sf::Core::Base
19
+ include ::SfCli::Sf::Core::OrgBase
20
20
  include Login
21
21
  include Display
22
22
  include List
@@ -10,6 +10,7 @@ module SfCli::Sf::Org
10
10
  # Returns the org's connection information
11
11
  # @param target_org [Symbol,String] an alias of paticular org, or username can be used
12
12
  # @param api_version [Numeric] override the api version used for api requests made by this command
13
+ # @param raw_output [Boolian] return the original command's output.
13
14
  #
14
15
  # @note this function returns the org information including security sensitive things such as access token, username and so on.
15
16
  # @return [ConnectionInfo] the org's connection information
@@ -29,18 +30,19 @@ module SfCli::Sf::Org
29
30
  #
30
31
  # @see https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_org_commands_unified.htm#cli_reference_org_display_unified command reference
31
32
  #
32
- def display(target_org: nil, api_version: nil)
33
+ def display(target_org: nil, api_version: nil, raw_output: false)
33
34
  flags = {:"target-org" => target_org, :"api-version" => api_version}
34
- json = exec(__method__, flags: flags, redirection: :null_stderr)
35
+ output = org_exec(__method__, flags: flags, redirection: :null_stderr, raw_output: raw_output)
36
+ return output if raw_output
35
37
 
36
38
  ConnectionInfo.new(
37
- id: json['result']['id'],
38
- access_token: json['result']['accessToken'],
39
- alias: json['result']['alias'],
40
- instance_url: json['result']['instanceUrl'],
41
- user_name: json['result']['username'],
42
- api_version: json['result']['apiVersion'],
43
- status: json['result']['connectedStatus']
39
+ id: output['result']['id'],
40
+ access_token: output['result']['accessToken'],
41
+ alias: output['result']['alias'],
42
+ instance_url: output['result']['instanceUrl'],
43
+ user_name: output['result']['username'],
44
+ api_version: output['result']['apiVersion'],
45
+ status: output['result']['connectedStatus']
44
46
  )
45
47
  end
46
48
  end
@@ -32,6 +32,7 @@ module SfCli::Sf::Org
32
32
  # List orgs you’ve created or authenticated to
33
33
  #
34
34
  # @note this function returns org information including security sensitive things such as access token, username and so on.
35
+ # @param raw_output [Boolian] return the original command's output.
35
36
  # @return [Array] the org configulations
36
37
  #
37
38
  # @example
@@ -48,17 +49,19 @@ module SfCli::Sf::Org
48
49
  #
49
50
  # @see https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_org_commands_unified.htm#cli_reference_org_list_unified command reference
50
51
  #
51
- def list
52
+ def list(raw_output: false)
52
53
  flags = {
53
54
  # reserved for later option addition
54
55
  }
55
- json = exec(__method__, flags: flags, redirection: :null_stderr)
56
+ output = org_exec(__method__, flags: flags, redirection: :null_stderr, raw_output: raw_output)
56
57
 
57
- others = json['result']['other'].map{|config| OrgConfig.new(**config)}
58
- sandboxes = json['result']['sandboxes'].map{|config| OrgConfig.new(**config)}
59
- non_scratch_orgs = json['result']['nonScratchOrgs'].map{|config| OrgConfig.new(**config)}
60
- devhubs = json['result']['devHubs'].map{|config| OrgConfig.new(**config)}
61
- scratch_orgs = json['result']['scratchOrgs'].map{|config| OrgConfig.new(**config)}
58
+ return output if raw_output
59
+
60
+ others = output['result']['other'].map{|config| OrgConfig.new(**config)}
61
+ sandboxes = output['result']['sandboxes'].map{|config| OrgConfig.new(**config)}
62
+ non_scratch_orgs = output['result']['nonScratchOrgs'].map{|config| OrgConfig.new(**config)}
63
+ devhubs = output['result']['devHubs'].map{|config| OrgConfig.new(**config)}
64
+ scratch_orgs = output['result']['scratchOrgs'].map{|config| OrgConfig.new(**config)}
62
65
 
63
66
  (others + sandboxes + non_scratch_orgs + devhubs + scratch_orgs).uniq{|config| config.alias}
64
67
  end
@@ -4,6 +4,7 @@ module SfCli::Sf::Org
4
4
  # List the limits in your org
5
5
  # @param target_org [Symbol,String] an alias of paticular org, or username can be used
6
6
  # @param api_version [Numeric] override the api version used for api requests made by this command
7
+ # @param raw_output [Boolian] return the original command's output.
7
8
  #
8
9
  # @return [Limits] the list of limit information
9
10
  #
@@ -14,15 +15,17 @@ module SfCli::Sf::Org
14
15
  #
15
16
  # @see https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_org_commands_unified.htm#cli_reference_org_list_limits_unified command reference
16
17
  #
17
- def list_limits(target_org: nil, api_version: nil)
18
+ def list_limits(target_org: nil, api_version: nil, raw_output: false)
18
19
  flags = {
19
20
  :"target-org" => target_org,
20
21
  :"api-version" => api_version,
21
22
  }
22
23
  action = __method__.to_s.tr('_', ' ')
23
- json = exec(action, flags: flags, redirection: :null_stderr)
24
+ output = org_exec(action, flags: flags, redirection: :null_stderr, raw_output: raw_output)
24
25
 
25
- Limits.new(json['result'])
26
+ return output if raw_output
27
+
28
+ Limits.new(output['result'])
26
29
  end
27
30
 
28
31
  Limit = Data.define(:name, :remaining, :max)
@@ -7,6 +7,7 @@ module SfCli::Sf::Org
7
7
  # @param target_org [Symbol,String] an alias of paticular org, or username can be used
8
8
  # @param api_version [Numeric] override the api version used for api requests made by this command
9
9
  # @param output_file [String] pathname of the file in which to write the results
10
+ # @param raw_output [Boolian] return the original command's output.
10
11
  #
11
12
  # @return [MetadataList] the list of metadata, which contains its name, its source file path and so on
12
13
  #
@@ -17,7 +18,7 @@ module SfCli::Sf::Org
17
18
  #
18
19
  # @see https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_org_commands_unified.htm#cli_reference_org_list_metadata_unified command reference
19
20
  #
20
- def list_metadata(metadata, folder: nil, target_org: nil, api_version: nil, output_file: nil)
21
+ def list_metadata(metadata, folder: nil, target_org: nil, api_version: nil, output_file: nil, raw_output: false)
21
22
  flags = {
22
23
  :"metadata-type" => metadata,
23
24
  :"folder" => folder,
@@ -26,9 +27,10 @@ module SfCli::Sf::Org
26
27
  :"output-file" => output_file,
27
28
  }
28
29
  action = __method__.to_s.tr('_', ' ')
29
- json = exec(action, flags: flags, redirection: :null_stderr)
30
+ output = org_exec(action, flags: flags, redirection: :null_stderr, raw_output: raw_output)
31
+ return output if raw_output
30
32
 
31
- MetadataList.new(json['result'])
33
+ MetadataList.new(output['result'])
32
34
  end
33
35
 
34
36
  Metadata = Data.define(
@@ -5,6 +5,7 @@ module SfCli::Sf::Org
5
5
  # @param target_org [Symbol,String] an alias of paticular org, or username can be used
6
6
  # @param api_version [Numeric] override the api version used for api requests made by this command
7
7
  # @param output_file [String] pathname of the file in which to write the results
8
+ # @param raw_output [Boolian] return the original command's output.
8
9
  #
9
10
  # @return [Result] the command's output
10
11
  #
@@ -14,20 +15,21 @@ module SfCli::Sf::Org
14
15
  #
15
16
  # @see https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_org_commands_unified.htm#cli_reference_org_list_metadata-types_unified command reference
16
17
  #
17
- def list_metadata_types(target_org: nil, api_version: nil, output_file: nil)
18
+ def list_metadata_types(target_org: nil, api_version: nil, output_file: nil, raw_output: false)
18
19
  flags = {
19
20
  :"target-org" => target_org,
20
21
  :"api-version" => api_version,
21
22
  :"output-file" => output_file,
22
23
  }
23
24
  action = __method__.to_s.tr('_', '-').sub('-', ' ')
24
- json = exec(action, flags: flags, redirection: :null_stderr)
25
+ output = org_exec(action, flags: flags, redirection: :null_stderr, raw_output: raw_output)
26
+ return output if raw_output
25
27
 
26
28
  Result.new(
27
- metadata_objects: MetadataObjects.new(json['result']['metadataObjects']),
28
- organization_namespace: json['result']['organizationNamespace'],
29
- partial_save_allowed: json['result']['partialSaveAllowed'],
30
- test_required: json['result']['testRequired']
29
+ metadata_objects: MetadataObjects.new(output['result']['metadataObjects']),
30
+ organization_namespace: output['result']['organizationNamespace'],
31
+ partial_save_allowed: output['result']['partialSaveAllowed'],
32
+ test_required: output['result']['testRequired']
31
33
  )
32
34
  end
33
35
 
@@ -8,12 +8,13 @@ module SfCli::Sf::Project
8
8
  # @param template [Symbol,String] project template name
9
9
  # @param output_dir [String] output directory
10
10
  # @param manifest [Boolian] switch to create manifest file in the project directory (manifest/package.xml)
11
+ # @param raw_output [Boolian] output what original command shows
11
12
  #
12
13
  # @return [Result] the retsult of project generation
13
14
  #
14
15
  # @see https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_project_commands_unified.htm#cli_reference_project_generate_unified command reference
15
16
  #
16
- def generate(name, manifest: false, template: nil, output_dir: nil)
17
+ def generate(name, manifest: false, template: nil, output_dir: nil, raw_output: false)
17
18
  flags = {
18
19
  :name => name,
19
20
  :template => template,
@@ -22,13 +23,16 @@ module SfCli::Sf::Project
22
23
  switches = {
23
24
  manifest: manifest,
24
25
  }
25
- json = exec(__method__, flags: flags, switches: switches, redirection: :null_stderr)
26
+ command_output_format = raw_output ? :human : :json
27
+ redirect_type = raw_output ? nil : :null_stderr
28
+ output = exec(__method__, flags: flags, switches: switches, redirection: redirect_type, raw_output: raw_output, format: command_output_format)
29
+ return output if raw_output
26
30
 
27
31
  Result.new(
28
- output_dir: json['result']['outputDir'],
29
- files: json['result']['created'],
30
- raw_output: json['result']['rawOutput'],
31
- warnings: json['warnings']
32
+ output_dir: output['result']['outputDir'],
33
+ files: output['result']['created'],
34
+ raw_output: output['result']['rawOutput'],
35
+ warnings: output['warnings']
32
36
  )
33
37
  end
34
38
  end
@@ -6,6 +6,7 @@ module SfCli::Sf::Project
6
6
  # @param output_dir [String] manifest's output directory in the project directory. You can use relative path from the project root (default: nil)
7
7
  # @param from_org [String] username or alias of the org that contains the metadata components from which to build a manifest (default: nil)
8
8
  # @param source_dir [String] paths to the local source files to include in the manifest (default: nil)
9
+ # @param raw_output [Boolian] output what original command shows
9
10
  #
10
11
  # @example
11
12
  # sf.project.generate_manifest metadata: %w[CustomObject Layout] # creates a package.xml, which is initialized with CustomObject and Layout
@@ -13,7 +14,7 @@ module SfCli::Sf::Project
13
14
  #
14
15
  # @see https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_project_commands_unified.htm#cli_reference_project_generate_manifest_unified command reference
15
16
  #
16
- def generate_manifest(name: nil, output_dir: nil, api_version: nil, metadata: [], from_org: nil, source_dir: nil)
17
+ def generate_manifest(name: nil, output_dir: nil, api_version: nil, metadata: [], from_org: nil, source_dir: nil, raw_output: false)
17
18
  flags = {
18
19
  :name => name,
19
20
  :"metadata" => (metadata.empty? ? nil : metadata.join(' ')),
@@ -23,9 +24,12 @@ module SfCli::Sf::Project
23
24
  :"api-version" => api_version,
24
25
  }
25
26
  action = __method__.to_s.tr('_', ' ')
26
- json = exec(action, flags: flags, redirection: :null_stderr)
27
+ command_output_format = raw_output ? :human : :json
28
+ redirect_type = raw_output ? nil : :null_stderr
29
+ output = exec(action, flags: flags, redirection: redirect_type, raw_output: raw_output, format: command_output_format)
30
+ return output if raw_output
27
31
 
28
- json['result']['path']
32
+ output['result']['path']
29
33
  end
30
34
  end
31
35
  end
@@ -23,12 +23,13 @@ module SfCli::Sf::Project
23
23
  # @param unzip [Boolian] number of minutes to wait for command to complete
24
24
  # @param target_metadata_dir [String] indicates that the zip file points to a directory structure for a single package
25
25
  # @param zip_file_name [String] file name to use for the retrieved zip file
26
+ # @param raw_output [Boolian] output what original command shows
26
27
  #
27
28
  # @return [Result] the retsult of the command
28
29
  #
29
30
  # @see https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_project_commands_unified.htm#cli_reference_project_retrieve_start_unified command reference
30
31
  #
31
- def retrieve_start(metadata: nil, manifest: nil, source_dir: nil, package_name: nil, target_org: nil, output_dir: nil,
32
+ def retrieve_start(metadata: nil, manifest: nil, source_dir: nil, package_name: nil, target_org: nil, output_dir: nil, raw_output: false,
32
33
  api_version: nil, wait: nil, target_metadata_dir: nil, zip_file_name: nil, ignore_conflicts: false, single_package: false, unzip: false)
33
34
 
34
35
  flags = {
@@ -49,16 +50,19 @@ module SfCli::Sf::Project
49
50
  :"unzip" => unzip,
50
51
  }
51
52
  action = __method__.to_s.tr('_', ' ')
52
- json = exec(action, flags: flags, switches: switches, redirection: :null_stderr)
53
+ command_output_format = raw_output ? :human : :json
54
+ redirect_type = raw_output ? nil : :null_stderr
55
+ output = exec(action, flags: flags, switches: switches, redirection: redirect_type, raw_output: raw_output, format: command_output_format)
56
+ return output if raw_output
53
57
 
54
58
  Result.new(
55
- done: json['result']['done'],
56
- file_properties: json['result']['fileProperties'].map{|fp| create_file_property(fp)},
57
- id: json['result']['id'],
58
- status: json['result']['status'],
59
- success: json['result']['success'],
60
- messages: json['result']['messages'],
61
- files: json['result']['files'].map{|f| create_retrieved_file(f)}
59
+ done: output['result']['done'],
60
+ file_properties: output['result']['fileProperties'].map{|fp| create_file_property(fp)},
61
+ id: output['result']['id'],
62
+ status: output['result']['status'],
63
+ success: output['result']['success'],
64
+ messages: output['result']['messages'],
65
+ files: output['result']['files'].map{|f| create_retrieved_file(f)}
62
66
  )
63
67
  end
64
68
 
@@ -19,23 +19,29 @@ module SfCli
19
19
  end
20
20
 
21
21
  def field_names
22
- @field_names ||= fields.map{|f| f.name.to_sym}
22
+ @field_names ||= fields.map{|f| f.name.to_sym}.sort
23
23
  end
24
24
 
25
25
  def field_labels
26
- @field_labels ||= fields.map{|f| f.label}
26
+ @field_labels ||= fields.map{|f| f.label}.sort
27
27
  end
28
28
 
29
29
  def children_relations
30
- schema['childRelationships']
31
- .select{|r| r['relationshipName'].nil? == false}
32
- .map{|r| {name: r['relationshipName'].to_sym, field: r['field'].to_sym, class_name: r['childSObject'].to_sym}}
30
+ @children_relations ||=
31
+ schema['childRelationships']
32
+ .select{|r| r['relationshipName'].nil? == false}
33
+ .map{|r| {name: r['relationshipName'].to_sym, field: r['field'].to_sym, class_name: r['childSObject'].to_sym}}
33
34
  end
34
35
 
35
36
  def parent_relations
36
- fields
37
- .select{|f| !(f.relationship_name.nil? || f.reference_to.nil?) && f.reference_to.size > 0}
38
- .map{|f| {name: f.relationship_name.to_sym, field: f.name.to_sym, class_name: f.reference_to.first.to_sym} }
37
+ @parent_relations ||=
38
+ fields
39
+ .select{|f| !(f.relationship_name.nil? || f.reference_to.nil?) && f.reference_to.size > 0}
40
+ .map{|f| {name: f.relationship_name.to_sym, field: f.name.to_sym, class_name: f.reference_to.first.to_sym} }
41
+ end
42
+
43
+ def relations
44
+ @relations ||= Relations.new(children_relations + parent_relations)
39
45
  end
40
46
 
41
47
  def to_h
@@ -212,6 +218,35 @@ module SfCli
212
218
  @schema
213
219
  end
214
220
 
221
+ Relation = Struct.new(:name, :field, :class_name)
222
+
223
+ class Relations
224
+ include Enumerable
225
+
226
+ def initialize(relations)
227
+ @relations = relations.map{|r| Relation.new(name: r[:name], field: r[:field], class_name: r[:class_name])}
228
+ end
229
+
230
+ def each(&block)
231
+ relations.each(&block)
232
+ end
233
+
234
+ def names
235
+ map(&:name).sort
236
+ end
237
+
238
+ def find(name)
239
+ relations.find{|r| r.name == name.to_sym}
240
+ end
241
+
242
+ private
243
+
244
+ def relations
245
+ @relations
246
+ end
247
+ end
248
+
249
+
215
250
  class Fields
216
251
  include Enumerable
217
252
 
@@ -235,7 +270,7 @@ module SfCli
235
270
 
236
271
  find do |field|
237
272
  attr_val = field.__send__(attr_name.to_sym)
238
- attr_val == val
273
+ attr_val == val.to_s
239
274
  end
240
275
  end
241
276
 
@@ -1,3 +1,3 @@
1
1
  module SfCli
2
- VERSION = '1.2.1'
2
+ VERSION = '1.2.3'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sf_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takanobu Maekawa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-04 00:00:00.000000000 Z
11
+ date: 2024-11-02 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A class library for introducing Salesforce CLI to Ruby scripting. Currenty
14
14
  only sf command is the target of development.
@@ -20,11 +20,13 @@ extra_rdoc_files: []
20
20
  files:
21
21
  - bin/sf_cli
22
22
  - lib/sf_cli.rb
23
+ - lib/sf_cli/command_exec_error.rb
23
24
  - lib/sf_cli/console.rb
24
25
  - lib/sf_cli/console/commands.rb
25
26
  - lib/sf_cli/sf/apex/core.rb
26
27
  - lib/sf_cli/sf/apex/run.rb
27
28
  - lib/sf_cli/sf/core/base.rb
29
+ - lib/sf_cli/sf/core/org_base.rb
28
30
  - lib/sf_cli/sf/data/bulk_result_v2.rb
29
31
  - lib/sf_cli/sf/data/core.rb
30
32
  - lib/sf_cli/sf/data/create_record.rb
@@ -69,7 +71,7 @@ homepage: https://github.com/tmkw/sf_cli
69
71
  licenses:
70
72
  - MIT
71
73
  metadata:
72
- homepage_url: https://github.com/tmkw/sf_cli
74
+ homepage_uri: https://github.com/tmkw/sf_cli
73
75
  post_install_message:
74
76
  rdoc_options: []
75
77
  require_paths: