sf_cli 0.0.7 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/{rdoc/README.rdoc → README.rdoc} +25 -39
  3. data/lib/sf_cli/console/commands.rb +52 -0
  4. data/lib/sf_cli/console.rb +5 -0
  5. data/lib/sf_cli/sf/apex/core.rb +5 -6
  6. data/lib/sf_cli/sf/apex/run.rb +32 -42
  7. data/lib/sf_cli/sf/core/base.rb +8 -0
  8. data/lib/sf_cli/sf/data/bulk_result_v2.rb +2 -3
  9. data/lib/sf_cli/sf/data/core.rb +5 -6
  10. data/lib/sf_cli/sf/data/create_record.rb +9 -9
  11. data/lib/sf_cli/sf/data/delete_bulk.rb +32 -16
  12. data/lib/sf_cli/sf/data/delete_record.rb +11 -10
  13. data/lib/sf_cli/sf/data/delete_resume.rb +14 -14
  14. data/lib/sf_cli/sf/data/get_record.rb +11 -13
  15. data/lib/sf_cli/sf/data/helper_methods.rb +1 -0
  16. data/lib/sf_cli/sf/data/query.rb +32 -35
  17. data/lib/sf_cli/sf/data/query_helper.rb +3 -0
  18. data/lib/sf_cli/sf/data/resume.rb +9 -7
  19. data/lib/sf_cli/sf/data/search.rb +12 -11
  20. data/lib/sf_cli/sf/data/update_record.rb +19 -20
  21. data/lib/sf_cli/sf/data/upsert_bulk.rb +33 -19
  22. data/lib/sf_cli/sf/data/upsert_resume.rb +12 -13
  23. data/lib/sf_cli/sf/main.rb +7 -3
  24. data/lib/sf_cli/sf/model/base_methods.rb +1 -0
  25. data/lib/sf_cli/sf/model/class_definition.rb +1 -0
  26. data/lib/sf_cli/sf/model/dml_methods.rb +1 -0
  27. data/lib/sf_cli/sf/model/generator.rb +2 -1
  28. data/lib/sf_cli/sf/model/query_condition.rb +1 -0
  29. data/lib/sf_cli/sf/model/query_methods.rb +6 -0
  30. data/lib/sf_cli/sf/model/sf_command_connection.rb +24 -5
  31. data/lib/sf_cli/sf/model.rb +6 -4
  32. data/lib/sf_cli/sf/org/core.rb +6 -6
  33. data/lib/sf_cli/sf/org/display.rb +10 -8
  34. data/lib/sf_cli/sf/org/list.rb +12 -13
  35. data/lib/sf_cli/sf/org/login.rb +22 -28
  36. data/lib/sf_cli/sf/project/core.rb +10 -72
  37. data/lib/sf_cli/sf/project/generate.rb +35 -0
  38. data/lib/sf_cli/sf/project/generate_manifest.rb +31 -0
  39. data/lib/sf_cli/sf/sobject/core.rb +10 -47
  40. data/lib/sf_cli/sf/sobject/describe.rb +31 -0
  41. data/lib/sf_cli/sf/sobject/list.rb +20 -0
  42. data/lib/sf_cli.rb +5 -12
  43. metadata +13 -12
  44. data/CHANGELOG.md +0 -57
  45. data/lib/sf_cli/sf/console.rb +0 -33
  46. data/rdoc/ObjectModel.rdoc +0 -83
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98f07645a79ccfa6a8f8bbac048a4da5aae6f21bf294445a0888f861d91b8f27
4
- data.tar.gz: a608a4eeb21ff2fd065cac874d6834e1a6c8aec83f9a40ada0f73917e4029ffb
3
+ metadata.gz: 64f11658c0b90ce494643c625b80f6826ec42597723315fd52690aefc6d97c8c
4
+ data.tar.gz: e0318c64547346287a378766a3441249cf2906539693bc982e486d6bca4b7836
5
5
  SHA512:
6
- metadata.gz: 9f5949bdba034feb1a7265a79fa9cd41c9e6f9d1402e4cf173fc585b0ab44d904570591382066633f5258f55503f0503410d648fb3700856029471678090efed
7
- data.tar.gz: 32a39625a575b1f9e465d9090c1e63a0ec8ee8ed605c4f5c3104b3866121a931780cf7c2f82200ab84ca5924ff798790cf116cf9580280ab1e1e6a26458d1ef4
6
+ metadata.gz: 57c9f53f54298b2bcb7e566bceb48704012154c6a160e08402eb48d998cd2dc361d1f021bedb7866fade1beecfddab30affb0dcffa812cdfb20b7b6417c69df5
7
+ data.tar.gz: 875b18097589d7f4df8a212a078bbaf98e35de738782a8d4522f2a198861f280457ed23828838a77c645d170305423985edc16ee4e23ef77bd0afaeb8f0986af
@@ -5,75 +5,61 @@ This is a class library for introducing {Salesforce CLI}[https://developer.sales
5
5
  It is designed to be similar usability to the original command.<br>
6
6
  Currently only *sf* command is the target of development.
7
7
 
8
+ [rubygems] https://rubygems.org/gems/sf_cli
9
+ [official document] https://tmkw.github.io/sf_cli/
10
+
8
11
  == prerequisite
9
- Salesforce CLI must be installed.<br>
12
+ {Salesforce CLI}[https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_top.htm] must be installed.<br>
10
13
  As of as of September in 2024, ver.2.56.7 is the development target.
11
14
 
12
15
  == install
13
16
  Rubygem::
14
- the simplest way:
15
- $ gem install sf_cli
17
+ the simplest way:
18
+ $ gem install sf_cli
16
19
  Bundler::
17
- in Gemfile:
18
- gem 'sf_cli'
19
- then,
20
- $ bundle install
21
- == Documents
22
- Class Library Reference::
23
- {Online document}[https://www.rubydoc.info/gems/sf_cli/0.0.7] at rubygems.org
24
-
25
- Or,
26
- Generate locally:
27
- $ git clone https://github.com/tmkw/sf_cli.git
28
- $ cd sf_cli
29
- $ bundle install
30
- $ bundle exec rake rdoc
31
- *As* *of* *0.0.7*, *this* *may* *be* *better* *to* *know* *what* *it* *is* *exactly*.
32
- Salesforce CLI and Sf command::
33
- 1. {Salesforce CLI reference}[https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_top.htm]
34
- 2. {sf command reference}[https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_unified.htm]
35
-
36
- == Short Examples
20
+ in Gemfile:
21
+ gem 'sf_cli'
22
+ then,
23
+ $ bundle install
24
+ == Usage
25
+ Load module
37
26
  require 'sf_cli'
38
27
 
39
- # login to org
28
+ Login to org
40
29
  sf.org.login_web
41
30
 
42
- # get salesforce object schema
31
+ Get Salesforce Object schema
43
32
  sf.sobject.describe :Account
44
33
 
45
- # get a record
34
+ Get a record
46
35
  sf.data.get_record :Account, record_id: 'xxxxxxx'
47
36
  sf.data.get_record :Account, where: {Name: 'Jonny B.Good', Country: 'USA'}
48
37
 
49
- # execute soql
38
+ Execute SOQL
50
39
  sf.data.query "SELECT Id, Name FROM Account LIMIT 1" # => [{Id: "abc", Name: "account name"}]
51
40
 
52
- # create a record
41
+ Create a record
53
42
  sf.data.create_record :TheCustomObject__c, values: {Name: "John Smith", Age: 33}
54
43
 
55
- # update a record
44
+ Update a record
56
45
  sf.data.update_record :Account, record_id: 'xxxxxxx', values: {Name: 'New Account Name'}
57
46
  sf.data.update_record :Hoge__c, where: {Name: 'Jonny B.Good', Country: 'USA'}, values: {Phone: 'xxxxx', bar: 2000}
58
47
 
59
- # delete a record
48
+ Delete a record
60
49
  sf.data.delete_record :Hoge__c, record_id: 'xxxxxxx'
61
50
  sf.data.delete_record :Hoge__c, where: {Name: 'Jonny B.Good', Country: 'USA'}
62
51
 
63
- # using Bulk API 2.0
64
- sf.data.upsert_bulk sobject: :TestCustomObject__c, file: 'upsert.csv', timeout: 5 # waiting for 5 minutes at maximum
52
+ Using Bulk API 2.0
53
+ sf.data.upsert_bulk sobject: :TestCustomObject__c, file: 'upsert.csv', wait: 5 # waiting for 5 minutes at maximum
65
54
 
66
- # run Apex
55
+ Run Apex
67
56
  sf.apex.run file: 'path/to/file'
68
57
  sf.apex.run file: StringIO.new("System.debug('Hello World')")
69
- == \Object Model Support
70
- As of now, there is experimental support for object model in Salesforce.
71
- === Short examples
72
- ===== With sf command:
58
+ == Object Model Support
59
+ With sf command:
73
60
  rows = sf.data.query "SELECT Id, Name FROM Contact WHERE Name = 'Akin Kristen'", model_class: Contact
74
61
  rows.first # <Contact: @Id="0035j00001RW3xbAAD", @Name="Akin Kristen">
75
62
  rows.first.Name # Akin Kristen
76
- ===== Doing the same thing with model independently
63
+ Doing the same thing independently:
77
64
  contact = Contact.select(:Id, :Name).where(Name: 'Akin Kristen').take
78
65
  contact.Name # Akin Kristen
79
- For more details, take a look at {the object model section}[link://files/rdoc/ObjectModel_rdoc.html]
@@ -0,0 +1,52 @@
1
+ require 'sf_cli'
2
+ require 'sf_cli/sf/model'
3
+ require 'sf_cli/sf/model/sf_command_connection'
4
+ require 'stringio'
5
+
6
+ module SfCli
7
+ # @private :nodoc: just for developers
8
+ module Console
9
+ #
10
+ # Developer Console commands
11
+ # @example
12
+ # $ bundle exec rake irb[your_target_org]
13
+ # irb(main):001> gen :Account, :Contact # generate Account and Contact class
14
+ # => [:Account, :Contact]
15
+ #
16
+ # irb(main):002> Account.describe.label
17
+ # => "Account"
18
+ #
19
+ # irb(main):003> apex "System.debug('abc');" # execute Apex code
20
+ # => returns the result
21
+ #
22
+ module Commands
23
+ def use(_target_org)
24
+ target_org = _target_org.to_sym == :default ? nil : _target_org
25
+ org_info = sf.org.display target_org: target_org
26
+ conn = SfCli::Sf::Model::SfCommandConnection.new target_org: target_org, instance_url: org_info.instance_url
27
+ SfCli::Sf::Model.set_connection conn
28
+ end
29
+
30
+ def generate(*object_types)
31
+ SfCli::Sf::Model.generate object_types
32
+ end
33
+
34
+ def connection
35
+ SfCli::Sf::Model.connection
36
+ end
37
+
38
+ def target_org
39
+ connection.target_org
40
+ end
41
+
42
+ def apex(apex_code = nil)
43
+ return sf.apex.run target_org: target_org if apex_code.nil?
44
+
45
+ sf.apex.run target_org: target_org, file: StringIO.new(apex_code)
46
+ end
47
+
48
+ alias :gen :generate
49
+ alias :conn :connection
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,5 @@
1
+ require 'sf_cli/console/commands'
2
+
3
+ include SfCli::Console::Commands
4
+
5
+ use ARGV[0]
@@ -3,13 +3,12 @@ require_relative './run'
3
3
 
4
4
  module SfCli
5
5
  module Sf
6
+ # Apex Commands
7
+ #
8
+ # @see https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_apex_commands_unified.htm command reference
9
+ #
6
10
  module Apex
7
- #
8
- # ==== description
9
- # The class representing *sf* *apex*.
10
- #
11
- # https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_apex_commands_unified.htm
12
- #
11
+ # @private :nodoc: just for developers
13
12
  class Core
14
13
  include ::SfCli::Sf::Core::Base
15
14
  include Run
@@ -1,22 +1,28 @@
1
1
  require 'tempfile'
2
- require 'stringio'
3
2
 
4
3
  module SfCli::Sf::Apex
5
4
  module Run
6
5
  #
7
- # run apex code and returns its result
6
+ # Run apex code and returns its result.
7
+ # If you don't specify the script file, it starts interactive mode.
8
+ # @see https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_apex_commands_unified.htm#cli_reference_apex_run_unified CLI reference
8
9
  #
9
- # *target_org* --- an alias of paticular org, or username can be used<br>
10
+ # @param target_org [Symbol,String]
11
+ # an alias of paticular org, or username can be used.
12
+ # @param file [String,#read]
13
+ # (1) path to a local file that contains Apex code.
14
+ # (2) object that has #read method
15
+ # @param api_version [Numeric]
16
+ # override the api version used for api requests made by this command
10
17
  #
11
- # *file* --- (1) path to a local file that contains \Apex code. (2) StringIO object
18
+ # @return [ApexResult] Apex execution result.
12
19
  #
13
- # == Examples
14
- # Execute apex code in a file
20
+ # @example Execute apex code in a file
15
21
  # result = sf.apex.run file: "path/to/apex"
16
22
  # result.success # true if the execution succeeds
17
23
  # result.logs # execution log
18
24
  #
19
- # StringIO is usable instead of file path
25
+ # @example StringIO is usable instead of file path
20
26
  # require 'stringio'
21
27
  #
22
28
  # pseudo_file = StringIO.new <<~EOS
@@ -26,9 +32,7 @@ module SfCli::Sf::Apex
26
32
  #
27
33
  # sf.apex.run target_org: :dev, file: pseudo_file
28
34
  #
29
- # == Interactive Mode
30
- #
31
- # If you don't specify *file* argument, it starts interactive mode that may be helpful in IRB environment.
35
+ # @example Interactive Mode
32
36
  # irb(main:) > sf.apex.run target_org: :dev
33
37
  #
34
38
  # Account acc = [SELECT Id, Name FROM Account LIMIT 1];
@@ -48,48 +52,34 @@ module SfCli::Sf::Apex
48
52
  # "Execute Anonymous: Account acc = [SELECT Id, Name FROM Account LIMIT 1];",
49
53
  # "Execute Anonymous: System.debug(acc.Name);",
50
54
  # ....]
51
- # For more command details, see {the command reference}[https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_apex_commands_unified.htm#cli_reference_apex_run_unified]
52
55
  #
53
- def run(target_org: nil, file: nil)
54
- return run_interactive(target_org) if file.nil?
55
- return run_by_io(target_org, file) if file.is_a? StringIO
56
-
57
- return unless file.is_a? String
58
-
59
- flags = {:"target-org" => target_org, :"file" => file}
56
+ def run(target_org: nil, file: nil, api_version: nil)
57
+ _file = crate_tmpfile(file)
58
+ path = _file&.path || file
59
+ flags = {:"target-org" => target_org, :"file" => path, :"api-version" => api_version}
60
60
 
61
61
  json = exec(__method__, flags: flags, redirection: :null_stderr)
62
62
  ApexResult.new(json['result'])
63
+ ensure
64
+ _file&.close!
63
65
  end
64
66
 
65
67
  private
66
68
 
67
- def run_by_io(target_org, io)
68
- file = Tempfile.open(%w[sf apex]){|f| f.write(io.read); f}
69
-
70
- flags = {:"target-org" => target_org, :"file" => file.path}
71
- json = exec(:run, flags: flags, redirection: :null_stderr)
72
- ApexResult.new(json['result'])
73
- ensure
74
- file&.close!
69
+ def crate_tmpfile(path_or_io)
70
+ return create_tmpfile_by_user_input if path_or_io.nil?
71
+ create_tmpfile_by_io(path_or_io)
75
72
  end
76
73
 
77
- def run_interactive(target_org)
78
- file = Tempfile.open(%w[sf apex]) do |f|
79
- s = $stdin.gets
80
- while s
81
- f.puts(s)
82
- s = $stdin.gets
83
- end
84
- f
85
- end
86
-
87
- flags = {:"target-org" => target_org, :"file" => file.path}
88
-
89
- json = exec(:run, flags: flags, redirection: :null_stderr)
90
- ApexResult.new(json['result'])
91
- ensure
92
- file&.close!
74
+ def create_tmpfile_by_user_input
75
+ Tempfile.open(%w[sf apex]) do |f|
76
+ s = $stdin.gets
77
+ while s
78
+ f.puts(s)
79
+ s = $stdin.gets
80
+ end
81
+ f
82
+ end
93
83
  end
94
84
 
95
85
  class ApexResult
@@ -1,7 +1,9 @@
1
1
  require 'json'
2
+ require 'tempfile'
2
3
 
3
4
  module SfCli
4
5
  module Sf
6
+ # @private :nodoc: just for developers
5
7
  module Core
6
8
  module Base
7
9
  attr_reader :varbose
@@ -76,6 +78,12 @@ module SfCli
76
78
  ' 2> /dev/null'
77
79
  end
78
80
  end
81
+
82
+ def create_tmpfile_by_io(io)
83
+ return nil unless io.respond_to? :read
84
+
85
+ Tempfile.open(%w[sf]){|f| f.write(io.read); f}
86
+ end
79
87
  end
80
88
  end
81
89
  end
@@ -1,7 +1,6 @@
1
1
  module SfCli
2
2
  module Sf
3
3
  module Data
4
- #
5
4
  # Bulk Job information.
6
5
  #
7
6
  # You can check the job status using the following method:
@@ -9,11 +8,11 @@ module SfCli
9
8
  # - upload_completed?
10
9
  # - in_progress?
11
10
  # - completed?
12
- # ==== example:
11
+ # @example
13
12
  # result = sf.data.delete_resume job_id: jobinfo.id
14
13
  # puts 'yey!' if result.job_info.completed? # the job has completed
15
14
  #
16
- # For more details, see {the guide document}[https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/bulk_api_2_job_states.htm]
15
+ # See Also: {https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/bulk_api_2_job_states.htm the guide document}
17
16
  #
18
17
  JobInfo = Struct.new(
19
18
  :id,
@@ -13,13 +13,12 @@ require_relative './search'
13
13
 
14
14
  module SfCli
15
15
  module Sf
16
+ #
17
+ # Data Command
18
+ # @see https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_data_commands_unified.htm command reference
19
+ #
16
20
  module Data
17
- #
18
- # ==== description
19
- # The class representing *sf* *data*
20
- #
21
- # https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_data_commands_unified.htm
22
- #
21
+ # @private :nodoc: just for developers
23
22
  class Core
24
23
  include ::SfCli::Sf::Core::Base
25
24
  include Query
@@ -1,25 +1,25 @@
1
1
  module SfCli::Sf::Data
2
2
  module CreateRecord
3
3
  # create a object record.
4
+ # @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_create_record_unified command reference
5
+ # @param object_type [Symbol, String] object type(ex. Account)
6
+ # @param values [Hash] field values to be assigned
7
+ # @param target_org [Symbol, String] an alias of paticular org, or username can be used
8
+ # @param api_version [Numeric] override the api version used for api requests made by this command
4
9
  #
5
- # *object_type* --- \Object Type (ex. Account)<br>
10
+ # @return [String] record ID
6
11
  #
7
- # *values* --- field values to be assigned<br>
8
- #
9
- # *target_org* --- an alias of paticular org, or username can be used<br>
10
- #
11
- # ======
12
+ # @example
12
13
  # # create a TheCustomObject record with name and age
13
14
  # sf.data.create_record :TheCustomObject__c, values: {Name: "John Smith", Age: 33}
14
15
  #
15
- # For more command details, see {the command reference}[https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_data_commands_unified.htm#cli_reference_data_create_record_unified]
16
- #
17
- def create_record(object_type, values: {}, target_org: nil)
16
+ def create_record(object_type, values: {}, target_org: nil, api_version: nil)
18
17
  field_values = field_value_pairs(values)
19
18
  flags = {
20
19
  :"sobject" => object_type,
21
20
  :"values" => (field_values.nil? ? nil : %|"#{field_values}"|),
22
21
  :"target-org" => target_org,
22
+ :"api-version" => api_version,
23
23
  }
24
24
  action = __method__.to_s.tr('_', ' ')
25
25
  json = exec(action, flags: flags, redirection: :null_stderr)
@@ -2,17 +2,18 @@ require_relative './bulk_result_v2'
2
2
 
3
3
  module SfCli::Sf::Data
4
4
  module DeleteBulk
5
- # delete records using Bulk API 2.0
6
- #
7
- # *file* --- a CSV file, which is written record IDs to delete<br>
8
- #
9
- # *sobject* --- \Object Type (ex. Account)<br>
10
- #
11
- # *timeout* --- max minutes to wait for the job complete the task.<br>
12
- #
13
- # *target_org* --- an alias of paticular org, or username can be used<br>
14
- #
15
- # ======
5
+ # Delete records using Bulk API 2.0
6
+ # @param file [String,#read]
7
+ # (1)path of a CSV file, which is written record IDs to delete.
8
+ # (2) IO-like object, which has #read method
9
+ # @param sobject [Symbol, String] object type (ex. Account)
10
+ # @param wait [Integer] max minutes to wait for the job complete the task.
11
+ # @param target_org [Symbol, String] an alias of paticular org, or username can be used
12
+ # @param api_version [Numeric] override the api version used for api requests made by this command
13
+ #
14
+ # @return [JobInfo, BulkResultV2] the job result, whose type is changed by situation
15
+ #
16
+ # @example
16
17
  # # start a delete job
17
18
  # jobinfo = sf.data.delete_bulk sobject: :TestCustomObject__c, file: 'delete.csv' # this returns immediately
18
19
  # jobinfo.id # => "750J4000003g1OaIAI" it's job ID
@@ -21,16 +22,29 @@ module SfCli::Sf::Data
21
22
  # sf.data.delete_resume job_id: jobinfo.id
22
23
  #
23
24
  # # Or, you can wait for the job completion with one try.
24
- # result = sf.data.delete_bulk sobject: :TestCustomObject__c, file: 'delete.csv', timeout: 5 # wait within 5 minutes
25
+ # result = sf.data.delete_bulk sobject: :TestCustomObject__c, file: 'delete.csv', wait: 5 # wait within 5 minutes
26
+ #
27
+ # # you can use IO-like object, which has #read, to `file` keyword:
28
+ # require 'stringio'
29
+ # csv = StringIO.new <<CSV
30
+ # Id
31
+ # 001J400000Ki61uIAB
32
+ # 001J400000Ki3WRIAZ
33
+ # CSV
34
+ # jobinfo = sf.data.delete_bulk sobject: :TestCustomObject__c, file: csv
35
+ #
36
+ # @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_delete_bulk_unified command reference
25
37
  #
26
- # For more command details, see {the command reference}[https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_data_commands_unified.htm#cli_reference_data_delete_bulk_unified]
27
38
  #
28
- def delete_bulk(file:, sobject:, timeout: nil, target_org: nil)
39
+ def delete_bulk(file:, sobject:, wait: nil, target_org: nil, api_version: nil)
40
+ _file = create_tmpfile_by_io(file)
41
+ path = _file&.path || file
29
42
  flags = {
30
- :"file" => file,
43
+ :"file" => path,
31
44
  :"sobject" => sobject,
32
- :"wait" => timeout,
45
+ :"wait" => wait,
33
46
  :"target-org" => target_org,
47
+ :"api-version" => api_version,
34
48
  }
35
49
  action = __method__.to_s.tr('_', ' ')
36
50
  json = exec(action, flags: flags, redirection: :null_stderr)
@@ -42,6 +56,8 @@ module SfCli::Sf::Data
42
56
  job_info: job_info,
43
57
  records: ::SfCli::Sf::Data::BulkRecordsV2.new(**json['result']['records'])
44
58
  )
59
+ ensure
60
+ _file&.close!
45
61
  end
46
62
  end
47
63
  end
@@ -1,28 +1,29 @@
1
1
  module SfCli::Sf::Data
2
2
  module DeleteRecord
3
- # delete a object record.
3
+ # Delete a object record.
4
4
  #
5
- # *object_type* --- \Object Type (ex. Account)<br>
5
+ # @param object_type [Symbol, String] Object Type (ex. Account)
6
+ # @param record_id [String] Id of the object
7
+ # @param where [Hash] conditions to identify a record
8
+ # @param target_org [Symbol, String] an alias of paticular org, or username can be used
9
+ # @param api_version [Numeric] override the api version used for api requests made by this command
6
10
  #
7
- # *record_id* --- id of the object<br>
11
+ # @return [String] ID that is deleted.
8
12
  #
9
- # *where* --- hash object that is used to identify a record<br>
10
- #
11
- # *target_org* --- an alias of paticular org, or username can be used<br>
12
- #
13
- # ======
13
+ # @example
14
14
  # sf.data.delete_record :Hoge__c, record_id: 'xxxxxxx'
15
15
  # sf.data.delete_record :Hoge__c, where: {Name: 'Jonny B.Good', Country: 'USA'}
16
16
  #
17
- # For more command details, see {the command reference}[https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_data_commands_unified.htm#cli_reference_data_delete_record_unified]
17
+ # @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_delete_record_unified the command reference
18
18
  #
19
- def delete_record(object_type, record_id: nil, where: nil, target_org: nil)
19
+ def delete_record(object_type, record_id: nil, where: nil, target_org: nil, api_version: nil)
20
20
  where_conditions = field_value_pairs(where)
21
21
  flags = {
22
22
  :"sobject" => object_type,
23
23
  :"record-id" => record_id,
24
24
  :"where" => (where_conditions.nil? ? nil : %|"#{where_conditions}"|),
25
25
  :"target-org" => target_org,
26
+ :"api-version" => api_version,
26
27
  }
27
28
  action = __method__.to_s.tr('_', ' ')
28
29
  json = exec(action, flags: flags, redirection: :null_stderr)
@@ -2,35 +2,35 @@ require_relative './bulk_result_v2'
2
2
 
3
3
  module SfCli::Sf::Data
4
4
  module DeleteResume
5
- # resume a bulk delete job you previously started with Bulk API 2.0 and return a bulk result object.
5
+ # Resume a bulk delete job you previously started with Bulk API 2.0 and return a bulk result object.
6
6
  #
7
- # *job_id* --- job ID you want to resume<br>
7
+ # @param job_id [String] job ID you want to resume<br>
8
+ # @param wait [Integer] max minutes to wait for the job complete the task.<br>
9
+ # @param target_org [Symbol, String] an alias of paticular org, or username can be used<br>
10
+ # @param api_version [Numeric] override the api version used for api requests made by this command
8
11
  #
9
- # *timeout* --- max minutes to wait for the job complete the task.<br>
12
+ # @return [JobInfo, BulkResultV2] the job result, whose type is changed by situation
10
13
  #
11
- # *target_org* --- an alias of paticular org, or username can be used<br>
12
- #
13
- # ======
14
+ # @example
14
15
  # # start a delete job
15
16
  # jobinfo = sf.data.delete_bulk sobject: :TestCustomObject__c, file: 'delete.csv' # this returns immediately
16
17
  # jobinfo.id # => "750J4000003g1OaIAI" it's job ID
17
18
  #
18
19
  # # the job has already started asynchronously.
19
20
  # # So you should check its progress.
20
- # # if you want to wait for the job complete the task, try 'timeout' option.
21
+ # # if you want to wait for the job complete the task, try 'wait' option.
21
22
  # result = sf.data.delete_resume job_id: jobinfo.id
22
23
  #
23
24
  # puts 'yey!' if result.job_info.completed? # the job has completed
24
25
  #
25
- # To know more about a job result, take a look at SfCli::Sf::Data module
26
- #
27
- # For more command details, see {the command reference}[https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_data_commands_unified.htm#cli_reference_data_delete_resume_unified]
26
+ # @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_delete_resume_unified the command reference
28
27
  #
29
- def delete_resume(job_id:, timeout: nil, target_org: nil)
28
+ def delete_resume(job_id:, wait: nil, target_org: nil, api_version: nil)
30
29
  flags = {
31
- :"job-id" => job_id,
32
- :"wait" => timeout,
33
- :"target-org" => target_org,
30
+ :"job-id" => job_id,
31
+ :"wait" => wait,
32
+ :"target-org" => target_org,
33
+ :"api-version" => api_version,
34
34
  }
35
35
  action = __method__.to_s.tr('_', ' ')
36
36
  json = exec(action, flags: flags, redirection: :null_stderr)
@@ -1,26 +1,24 @@
1
1
  module SfCli::Sf::Data
2
2
  module GetRecord
3
3
 
4
- # get a object record. (eqivalent to *sf* *data* *get* *record*)
4
+ # Get a object record.
5
+ # @param object_type [Symbol,String] object type(ex. Account)
6
+ # @param record_id [String] id of the object
7
+ # @param where [Hash] conditions to identify a record
8
+ # @param target_org [Symbol,String] an alias of paticular org, not default one
9
+ # @param model_class [Class] the object model class
5
10
  #
6
- # *object_type* --- \Object Type (ex. Account)<br>
11
+ # @return [Hash,Class] if proper model class is specified, the return value is the instance of the class. Otherwise, it's a Hash object.
7
12
  #
8
- # *record_id* --- id of the object<br>
9
- #
10
- # *where* --- hash object that is used to identify a record<br>
11
- #
12
- # *target_org* --- an alias of paticular org, not default one<br>
13
- #
14
- # *model_class* --- the object model class<br>
15
- #
16
- # ======
13
+ # @example
17
14
  # sf.data.get_record :Account, record_id: 'xxxxxxx'
18
15
  # sf.data.get_record :Account, where: {Name: 'Jonny B.Good', Country: 'USA'}
19
16
  #
20
17
  # CustomObject = Struct.new(:Id, :Name)
21
- # sf.data.get_record :TheCustomObject__c, record_id: 'xxxxx', model_class: CustomObject # returns a CustomObject instance
18
+ # obj = sf.data.get_record :TheCustomObject__c, record_id: 'xxxxx', model_class: CustomObject # returns a CustomObject instance
19
+ # obj.Name # Name field of the record
22
20
  #
23
- # For more command details, see {the command reference}[https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_data_commands_unified.htm#cli_reference_data_get_record_unified]
21
+ # @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_get_record_unified command reference
24
22
  #
25
23
  def get_record(object_type, record_id: nil, where: nil, target_org: nil, model_class: nil)
26
24
  where_conditions = field_value_pairs(where)
@@ -1,6 +1,7 @@
1
1
  module SfCli
2
2
  module Sf
3
3
  module Data
4
+ # @private
4
5
  module HelperMethods
5
6
  def prepare_record(hash) # :doc:
6
7
  hash.delete 'attributes'