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
@@ -3,21 +3,18 @@ require_relative './query_helper'
3
3
 
4
4
  module SfCli::Sf::Data
5
5
  module Query
6
- # get object records using SOQL.
7
- #
8
- # *soql* --- SOQL<br>
9
- #
10
- # *target_org* --- an alias of paticular org, or username can be used<br>
11
- #
12
- # *format* --- get the command's raw output. human, csv, json can be available<br>
13
- #
14
- # *model_class* --- the object model class<br>
15
- #
16
- # *bulk* --- use Bulk API<br>
17
- #
18
- # *timeout* --- max minutes to wait for the job complete in Bulk API mode<br>
19
- #
20
- # ======
6
+ # Get object records using SOQL.
7
+ # @param soql [String] SOQL
8
+ # @param target_org [Symbol,String] an alias of paticular org, or username can be used
9
+ # @param format [Symbol,String] get the command's raw output. human, csv, json can be available
10
+ # @param model_class [Class] the object model class
11
+ # @param bulk [Boolean] use Bulk API
12
+ # @param wait [Integer] max minutes to wait for the job complete in Bulk API mode
13
+ # @param api_version [Numeric] override the api version used for api requests made by this command
14
+ #
15
+ # @return [Array,[String,Array]] records or a tuple containing a flag and records
16
+ #
17
+ # @example
21
18
  # sf.data.query 'SELECT Id, Name FROM Account LIMIT 1' # => [{Id: "abc", Name: "account name"}]
22
19
  #
23
20
  # Account = Struct.new(:Id, :Name)
@@ -32,24 +29,23 @@ module SfCli::Sf::Data
32
29
  # When using Bulk API, you get the records when the query job completes within time limit.
33
30
  # The method returns a tapple(an array), which changes its contents according to the job result.
34
31
  #
35
- # ======
32
+ # @example
36
33
  # done, result = sf.data.query 'SELECT Id, Name FROM Account', bulk: true # max wait 1 min to get result (default)
37
- # done, result = sf.data.query 'SELECT Id, Name FROM Account', bulk: true, timeout: 5 # max wait 5 min to get result
38
- # done, result = sf.data.query 'SELECT Id, Name FROM Account', bulk: true, timeout: 0 # returns immediately
34
+ # done, result = sf.data.query 'SELECT Id, Name FROM Account', bulk: true, wait: 5 # max wait 5 min to get result
35
+ # done, result = sf.data.query 'SELECT Id, Name FROM Account', bulk: true, wait: 0 # returns immediately
39
36
  #
40
37
  # rows = result if done # if job is completed, the result is an array of record
41
38
  # job_id = result unless done # if job hasn't completed or it has aborted, the result is the job ID
42
39
  #
43
- # 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_query_unified]
44
- #
45
- # About querying with auto generated object model, see the section {"Object Model support"}[link://files/README_rdoc.html#label-Object+Model+support+-28experimental-2C+since+0.0.4-29] in README.
40
+ # @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
46
41
  #
47
- def query(soql, target_org: nil, format: nil, bulk: false, timeout: nil, model_class: nil)
42
+ def query(soql, target_org: nil, format: nil, bulk: false, wait: nil, api_version: nil, model_class: nil)
48
43
  flags = {
49
44
  :"query" => %("#{soql}"),
50
45
  :"target-org" => target_org,
51
46
  :"result-format" => format,
52
- :"wait" => (bulk ? timeout : nil),
47
+ :"wait" => (bulk ? wait : nil),
48
+ :"api-version" => api_version,
53
49
  }
54
50
  switches = {
55
51
  bulk: bulk,
@@ -62,19 +58,18 @@ module SfCli::Sf::Data
62
58
  return_result(result, raw_output, bulk, model_class)
63
59
  end
64
60
 
65
- # resume a bulk query job, which you previously started, and get records
66
- #
67
- # *job_id* --- job ID you want to resume<br>
61
+ # Resume a bulk query job, which you previously started, and get records
62
+ # @param job_id [String] job ID you want to resume
63
+ # @param target_org [Symbol,String] an alias of paticular org, or username can be used
64
+ # @param format [Symbol,String] get the command's raw output. human, csv, json can be available
65
+ # @param model_class [Class] the object model class
66
+ # @param api_version [Numeric] override the api version used for api requests made by this command
68
67
  #
69
- # *target_org* --- an alias of paticular org, or username can be used<br>
68
+ # @return [Array,[String,Array]] records or a tuple containing a flag and records
70
69
  #
71
- # *format* --- get the command's raw output. human, csv, json can be available<br>
72
- #
73
- # *model_class* --- the object model class<br>
74
- #
75
- # ======
70
+ # @example
76
71
  # # start a query job
77
- # result1 = sf.data.query 'SELECT Id, Name FROM Account', bulk: true, timeout: 0 # returns immediately
72
+ # result1 = sf.data.query 'SELECT Id, Name FROM Account', bulk: true, wait: 0 # returns immediately
78
73
  #
79
74
  # result1 # => [false, "<job id>"]
80
75
  #
@@ -86,12 +81,14 @@ module SfCli::Sf::Data
86
81
  #
87
82
  # result2 # => if done is true, this is an array of record. Otherwise it should be the Job ID.
88
83
  #
89
- # 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_query_resume_unified]
90
- def query_resume(job_id:, target_org: nil, format: nil, model_class: nil)
84
+ # @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_resume_unified command reference
85
+ #
86
+ def query_resume(job_id:, target_org: nil, format: nil, api_version: nil, model_class: nil)
91
87
  flags = {
92
88
  :"bulk-query-id" => job_id,
93
89
  :"target-org" => target_org,
94
90
  :"result-format" => format,
91
+ :"api-version" => api_version,
95
92
  }
96
93
  raw_output = format ? true : false
97
94
  format = format || :json
@@ -2,6 +2,7 @@ require_relative './helper_methods'
2
2
 
3
3
  module SfCli::Sf::Data
4
4
  module Query
5
+ # @private
5
6
  class RegularResultAdjuster # :nodoc: all
6
7
  include ::SfCli::Sf::Data::HelperMethods
7
8
 
@@ -20,6 +21,7 @@ module SfCli::Sf::Data
20
21
  end
21
22
  end
22
23
 
24
+ # @private
23
25
  class BulkResultAdjuster # :nodoc: all
24
26
  include ::SfCli::Sf::Data::HelperMethods
25
27
 
@@ -42,6 +44,7 @@ module SfCli::Sf::Data
42
44
  end
43
45
  end
44
46
 
47
+ # @private
45
48
  class RawOutputResultAdjuster # :nodoc: all
46
49
  attr_reader :result
47
50
 
@@ -49,12 +49,13 @@ module SfCli::Sf::Data
49
49
  end
50
50
 
51
51
  # View the status of a bulk job.
52
+ # @param job_id [String] job ID you want to resume
53
+ # @param target_org [Symbol,String] an alias of paticular org, or username can be used
54
+ # @param api_version [Numeric] override the api version used for api requests made by this command
52
55
  #
53
- # *job_id* --- job ID you want to resume<br>
56
+ # @return [JobInfo] job information
54
57
  #
55
- # *target_org* --- an alias of paticular org, or username can be used<br>
56
- #
57
- # ======
58
+ # @example
58
59
  # # start a delete job
59
60
  # jobinfo = sf.data.delete_bulk sobject: :TestCustomObject__c, file: 'delete.csv' # this returns immediately
60
61
  # jobinfo.id # => "750J4000003g1OaIAI" it's job ID
@@ -69,14 +70,15 @@ module SfCli::Sf::Data
69
70
  # - in_progress?
70
71
  # - completed?
71
72
  #
72
- # To know job status more, take a look at {the bulk API developer guide}[https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/bulk_api_2_job_states.htm]
73
+ # To know job status more, take a look at {https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/bulk_api_2_job_states.htm the bulk API developer guide}
73
74
  #
74
- # 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_resume_unified]
75
+ # @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_resume_unified command reference
75
76
  #
76
- def resume(job_id:, target_org: nil)
77
+ def resume(job_id:, target_org: nil, api_version: nil)
77
78
  flags = {
78
79
  :"job-id" => job_id,
79
80
  :"target-org" => target_org,
81
+ :"api-version" => api_version,
80
82
  }
81
83
  json = exec(__method__, flags: flags, redirection: :null_stderr)
82
84
 
@@ -1,16 +1,16 @@
1
1
  module SfCli::Sf::Data
2
2
  module Search
3
- # search objects using SOSL.
3
+ # Search objects using SOSL.
4
+ # @param sosl [String] SOSL
5
+ # @param target_org [Symbol,String] an alias of paticular org, or username can be used
6
+ # @param format [Symbol,String] get the command's raw output. human, csv, json can be available.
7
+ # @param api_version [Numeric] override the api version used for api requests made by this command
4
8
  #
5
- # *sosl* --- SOSL<br>
6
- #
7
- # *target_org* --- an alias of paticular org, or username can be used<br>
8
- #
9
- # *format* --- get the command's raw output. human, csv, json can be available. *NOTE*: if you choose csv, csv files are downloaded in current directory<br>
10
- #
11
- # ======
12
- # # example (in irb):
9
+ # @return [Hash] the search result
10
+ # @note if you choose csv as format, csv files are downloaded in current directory
13
11
  #
12
+ # @example
13
+ # (in irb):
14
14
  # > sf.data.search "FIND {TIM OR YOUNG OR OIL} IN Name Fields"
15
15
  # =>
16
16
  # {"Lead"=>["00Q5j00000WgEuDEAV"],
@@ -24,13 +24,14 @@ module SfCli::Sf::Data
24
24
  # "0065j00001XHJLJAA5"],
25
25
  # "User"=>["0055j00000CcL2bAAF", "0055j00000CcL1YAAV"]}
26
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_search_unified]
27
+ # @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_search_unified command reference
28
28
  #
29
- def search(sosl, target_org: nil, format: nil)
29
+ def search(sosl, target_org: nil, format: nil, api_version: nil)
30
30
  flags = {
31
31
  :"query" => %|"#{sosl}"|,
32
32
  :"target-org" => target_org,
33
33
  :"result-format" => format,
34
+ :"api-version" => api_version,
34
35
  }
35
36
  raw_output = format ? true : false
36
37
  format = format&.to_sym || :json
@@ -1,33 +1,32 @@
1
1
  module SfCli::Sf::Data
2
2
  module UpdateRecord
3
3
 
4
- # update a object record.
5
- #
6
- # *object_type* --- \Object Type (ex. Account)<br>
7
- #
8
- # *record_id* --- id of the object<br>
9
- #
10
- # *where* --- field values that is used to identify a record<br>
11
- #
12
- # *values* --- field values for update<br>
13
- #
14
- # *target_org* --- an alias of paticular org, or username can be used<br>
15
- #
16
- # ==== examples
4
+ # Update 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] field values to identify a record
8
+ # @param values [Hash] field values for update
9
+ # @param target_org [Symbol,String] an alias of paticular org, or username can be used
10
+ # @param api_version [Numeric] override the api version used for api requests made by this command
11
+ #
12
+ # @return [String] ID of the record updated
13
+ #
14
+ # @example
17
15
  # sf.data.update_record :Account, record_id: 'xxxxxxx', values: {Name: 'New Account Name'}
18
16
  # sf.data.update_record :Hoge__c, where: {Name: 'Jonny B.Good', Country: 'USA'}, values: {Phone: 'xxxxx', bar: 2000}
19
17
  #
20
- # 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_update_record_unified]
18
+ # @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_update_record_unified command reference
21
19
  #
22
- def update_record(object_type, record_id: nil, where: nil, values: nil, target_org: nil)
20
+ def update_record(object_type, record_id: nil, where: nil, values: nil, target_org: nil, api_version: nil)
23
21
  where_conditions = field_value_pairs(where)
24
22
  field_values = field_value_pairs(values)
25
23
  flags = {
26
- :"sobject" => object_type,
27
- :"record-id" => record_id,
28
- :"where" => (where_conditions.nil? ? nil : %|"#{where_conditions}"|),
29
- :"values" => (field_values.nil? ? nil : %|"#{field_values}"|),
30
- :"target-org" => target_org,
24
+ :"sobject" => object_type,
25
+ :"record-id" => record_id,
26
+ :"where" => (where_conditions.nil? ? nil : %|"#{where_conditions}"|),
27
+ :"values" => (field_values.nil? ? nil : %|"#{field_values}"|),
28
+ :"target-org" => target_org,
29
+ :"api-version" => api_version,
31
30
  }
32
31
  action = __method__.to_s.tr('_', ' ')
33
32
  json = exec(action, flags: flags, redirection: :null_stderr)
@@ -2,19 +2,19 @@ require_relative './bulk_result_v2'
2
2
 
3
3
  module SfCli::Sf::Data
4
4
  module UpsertBulk
5
- # update records using Bulk API 2.0
5
+ # Update 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 external_id [String] name of the external ID field.Otherwise it must be Id
11
+ # @param wait [Integer] max minutes to wait for the job complete the task
12
+ # @param target_org [Symbol,String] an alias of paticular org, or username can be used
13
+ # @param api_version [Numeric] override the api version used for api requests made by this command
6
14
  #
7
- # *file* --- a \CSV file for update records<br>
15
+ # @return [JobInfo, BulkResultV2] the job result, whose type is changed by situation
8
16
  #
9
- # *sobject* --- \Object Type (ex. Account)<br>
10
- #
11
- # *external_id* --- Name of the external ID field, or the Id field<br>
12
- #
13
- # *timeout* --- max minutes to wait for the job complete the task.<br>
14
- #
15
- # *target_org* --- an alias of paticular org, or username can be used<br>
16
- #
17
- # ======
17
+ # @example
18
18
  # # start a upsert job
19
19
  # jobinfo = sf.data.upsert_bulk sobject: :TestCustomObject__c, file: 'upsert.csv' # this returns immediately
20
20
  # jobinfo.id # => "750J4000003g1OaIAI" it's job ID
@@ -23,17 +23,29 @@ module SfCli::Sf::Data
23
23
  # sf.data.upsert_resume job_id: jobinfo.id
24
24
  #
25
25
  # # Or, you can wait for the job completion with one try.
26
- # result = sf.data.upsert_bulk sobject: :TestCustomObject__c, file: 'upsert.csv', timeout: 5 # wait within 5 minutes
26
+ # result = sf.data.upsert_bulk sobject: :TestCustomObject__c, file: 'upsert.csv', wait: 5 # wait within 5 minutes
27
+ #
28
+ # # you can use IO-like object, which has #read, to `file` keyword:
29
+ # require 'stringio'
30
+ # csv = StringIO.new <<CSV
31
+ # Id,Name
32
+ # 001J400000Ki61uIAB,John Smith
33
+ # 001J400000Ki3WRIAZ,Foo Baz Bar
34
+ # CSV
35
+ # jobinfo = sf.data.upsert_bulk sobject: :TestCustomObject__c, file: csv
27
36
  #
28
- # 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_upsert_bulk_unified]
37
+ # @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_upsert_bulk_unified command reference
29
38
  #
30
- def upsert_bulk(file:, sobject:, external_id:, timeout: nil, target_org: nil)
39
+ def upsert_bulk(file:, sobject:, external_id:, wait: nil, target_org: nil, api_version: nil)
40
+ _file = create_tmpfile_by_io(file)
41
+ path = _file&.path || file
31
42
  flags = {
32
- :"file" => file,
33
- :"sobject" => sobject,
34
- :"external-id" => external_id,
35
- :"wait" => timeout,
36
- :"target-org" => target_org,
43
+ :"file" => path,
44
+ :"sobject" => sobject,
45
+ :"external-id" => external_id,
46
+ :"wait" => wait,
47
+ :"target-org" => target_org,
48
+ :"api-version" => api_version,
37
49
  }
38
50
  action = __method__.to_s.tr('_', ' ')
39
51
  json = exec(action, flags: flags, redirection: :null_stderr)
@@ -45,6 +57,8 @@ module SfCli::Sf::Data
45
57
  job_info: job_info,
46
58
  records: ::SfCli::Sf::Data::BulkRecordsV2.new(**json['result']['records'])
47
59
  )
60
+ ensure
61
+ _file&.close!
48
62
  end
49
63
  end
50
64
  end
@@ -2,35 +2,34 @@ require_relative './bulk_result_v2'
2
2
 
3
3
  module SfCli::Sf::Data
4
4
  module UpsertResume
5
- # resume a bulk upsert job you previously started with Bulk API 2.0 and return a bulk result object.
5
+ # Resume a bulk upsert job you previously started with Bulk API 2.0 and return a bulk result object.
6
+ # @param job_id [String] job ID you want to resume
7
+ # @param wait [Integer] max minutes to wait for the job complete the task
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
- # *job_id* --- job ID you want to resume<br>
11
+ # @return [JobInfo, BulkResultV2] the job result, whose type is changed by situation
8
12
  #
9
- # *timeout* --- max minutes to wait for the job complete the task.<br>
10
- #
11
- # *target_org* --- an alias of paticular org, or username can be used<br>
12
- #
13
- # ======
13
+ # @example
14
14
  # # start a upsert job
15
15
  # jobinfo = sf.data.upsert_bulk sobject: :TestCustomObject__c, file: 'upsert.csv' # this returns immediately
16
16
  # jobinfo.id # => "750J4000003g1OaIAI" it's job ID
17
17
  #
18
18
  # # the job has already started asynchronously.
19
19
  # # So you should check its progress.
20
- # # if you want to wait for the job complete the task, try 'timeout' option.
20
+ # # if you want to wait for the job complete the task, try 'wait' option.
21
21
  # result = sf.data.upsert_resume job_id: jobinfo.id
22
22
  #
23
23
  # puts 'yey!' if result.job_info.completed? # the job has completed
24
24
  #
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_upsert_resume_unified]
25
+ # @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_upsert_resume_unified command reference
28
26
  #
29
- def upsert_resume(job_id:, timeout: nil, target_org: nil)
27
+ def upsert_resume(job_id:, wait: nil, target_org: nil, api_version: nil)
30
28
  flags = {
31
29
  :"job-id" => job_id,
32
- :"wait" => timeout,
30
+ :"wait" => wait,
33
31
  :"target-org" => target_org,
32
+ :"api-version" => api_version,
34
33
  }
35
34
  action = __method__.to_s.tr('_', ' ')
36
35
  json = exec(action, flags: flags, redirection: :null_stderr)
@@ -3,14 +3,15 @@ require 'json'
3
3
 
4
4
  module SfCli
5
5
  module Sf
6
- # ==== description
7
- # The entry class of sf command. It is returned by sf method.
6
+
7
+ # The entry class of sf command. It is returned by the sf method.
8
8
  # With including Singleton module, the instance of this class is guaranteed as singleton.
9
9
  #
10
- # ==== examples
10
+ # @example
11
11
  # sf # returns a instance of SfCli::Sf
12
12
  # sf.org.display # you can follow the similar syntax to the original command by using method chain.
13
13
  #
14
+ # @private :nodoc: just for developers
14
15
  class Main
15
16
  include Singleton
16
17
 
@@ -21,6 +22,9 @@ module SfCli
21
22
  attr_reader category.downcase.to_sym
22
23
  end
23
24
 
25
+ # Generate each sub command object such as org, data and sobject
26
+ # so that it can chain like `sf.org.display`.
27
+ #
24
28
  def initialize
25
29
  OPERATION_CATEGORIES.each do |category|
26
30
  instance_variable_set(:"@#{category.downcase}", Object.const_get(%|::SfCli::Sf::#{category}::Core|).new)
@@ -1,6 +1,7 @@
1
1
  module SfCli
2
2
  module Sf
3
3
  module Model
4
+ # @private :nodoc: just for developers
4
5
  module BaseMethods
5
6
  def self.included(c)
6
7
  c.extend ClassMethods
@@ -5,6 +5,7 @@ require_relative './query_methods'
5
5
  module SfCli
6
6
  module Sf
7
7
  module Model
8
+ # @private :nodoc: just for developers
8
9
  class ClassDefinition
9
10
  attr_reader :schema
10
11
 
@@ -1,6 +1,7 @@
1
1
  module SfCli
2
2
  module Sf
3
3
  module Model
4
+ # @private :nodoc: just for developers
4
5
  module DmlMethods
5
6
  def self.included(c)
6
7
  c.extend ClassMethods
@@ -3,8 +3,9 @@ require_relative './class_definition'
3
3
  module SfCli
4
4
  module Sf
5
5
  module Model
6
+ # @private :nodoc: just for developers
6
7
  class Generator
7
- attr_reader :sf_sobject, :connection
8
+ attr_reader :connection
8
9
 
9
10
  def initialize(connection)
10
11
  @connection = connection
@@ -4,6 +4,7 @@ module SfCli
4
4
  module Sf
5
5
  module Model
6
6
  module QueryMethods
7
+ # @private :nodoc: just for developers
7
8
  class QueryCondition
8
9
  attr_reader :connection, :object_name, :all_field_names, :fields, :conditions, :limit_num, :row_order
9
10
 
@@ -3,6 +3,7 @@ require_relative './query_condition'
3
3
  module SfCli
4
4
  module Sf
5
5
  module Model
6
+ # @private :nodoc: just for developers
6
7
  module QueryMethods
7
8
  def self.included(c)
8
9
  c.extend ClassMethods
@@ -25,6 +26,11 @@ module SfCli
25
26
  connection.find(name.to_sym, id, Object.const_get(name.to_sym))
26
27
  end
27
28
 
29
+ def find_by(*find_condition)
30
+ qc = QueryCondition.new(connection, self.name, self.field_names)
31
+ qc.where(*find_condition).take
32
+ end
33
+
28
34
  def limit(num)
29
35
  qc = QueryCondition.new(connection, self.name, self.field_names)
30
36
  qc.limit(num)
@@ -5,9 +5,18 @@ require_relative '../org/core'
5
5
  module SfCli
6
6
  module Sf
7
7
  module Model
8
+ #
9
+ # Connection object to access Salesforce based on Sf command
10
+ #
8
11
  class SfCommandConnection
9
- attr_reader :sf_data, :sf_org, :sf_sobject, :target_org, :instance_url
12
+ attr_reader :target_org, :instance_url
10
13
 
14
+ # @private :nodoc: just for developers
15
+ attr_reader :sf_data, :sf_org, :sf_sobject
16
+
17
+ # @param target_org [Symbol,String] an alias of paticular org, or username can be used
18
+ # @param instance_url [String] URL of the instance that the org lives on.
19
+ #
11
20
  def initialize(target_org: nil, instance_url: nil)
12
21
  @sf_org = ::SfCli::Sf::Org::Core.new
13
22
  @sf_data = ::SfCli::Sf::Data::Core.new
@@ -24,10 +33,20 @@ module SfCli
24
33
  end
25
34
  end
26
35
 
36
+ # Sf command style query interface for Model module
37
+ #
38
+ # For query details, see {SfCli::Sf::Data::Query sf data query}
39
+ #
40
+ def exec_query(soql, format: nil, bulk: false, wait: nil, model_class: nil)
41
+ sf_data.query(soql, target_org: target_org, format: format, bulk: bulk, wait: wait, model_class: model_class)
42
+ end
43
+
44
+ # @private :nodoc: just for developers
27
45
  def find(object_type, id, klass)
28
46
  sf_data.get_record object_type, record_id: id, target_org: target_org, model_class: klass
29
47
  end
30
48
 
49
+ # @private :nodoc: just for developers
31
50
  def create(object_type, values, klass = nil)
32
51
  id = sf_data.create_record object_type, values: values, target_org: target_org
33
52
  return id if klass.nil?
@@ -35,22 +54,22 @@ module SfCli
35
54
  find(object_type, id, klass)
36
55
  end
37
56
 
57
+ # @private :nodoc: just for developers
38
58
  def update(object_type, id, values)
39
59
  sf_data.update_record object_type, record_id: id, where: nil, values: values, target_org: target_org
40
60
  end
41
61
 
62
+ # @private :nodoc: just for developers
42
63
  def delete(object_type, id)
43
64
  sf_data.delete_record object_type, record_id: id, where: nil, target_org: target_org
44
65
  end
45
66
 
67
+ # @private :nodoc: just for developers
46
68
  def query(soql, klass)
47
69
  sf_data.query soql, target_org: target_org, model_class: klass
48
70
  end
49
71
 
50
- def exec_query(soql, format: nil, bulk: false, timeout: nil, model_class: nil)
51
- sf_data.query(soql, target_org: target_org, format: format, bulk: bulk, timeout: timeout, model_class: model_class)
52
- end
53
-
72
+ # @private :nodoc: just for developers
54
73
  def describe(object_type)
55
74
  sf_sobject.describe(object_type, target_org: target_org)
56
75
  end
@@ -3,20 +3,22 @@ require_relative 'model/generator'
3
3
  module SfCli
4
4
  module Sf
5
5
  #
6
- # ==== description
7
- # The module for \Object \Model definition and generation
8
- #
9
- # see the section {"Object Model support"}[link://files/README_rdoc.html#label-Object+Model+support+-28experimental-2C+since+0.0.4-29] in README.
6
+ # The module for object model definition and generation
10
7
  #
11
8
  module Model
9
+ # The connection object to access Salesforce
12
10
  def self.connection
13
11
  @@connection
14
12
  end
15
13
 
14
+ # set the connection
16
15
  def self.set_connection(conn)
17
16
  @@connection = conn
18
17
  end
19
18
 
19
+ # generate object models
20
+ # @param object_names [Array] a list of object name
21
+ #
20
22
  def self.generate(object_names)
21
23
  generator = Generator.new(connection)
22
24
 
@@ -5,13 +5,13 @@ require_relative './list'
5
5
 
6
6
  module SfCli
7
7
  module Sf
8
+ #
9
+ # Org Commands
10
+ #
11
+ # @see https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_org_commands_unified.htm command reference
12
+ #
8
13
  module Org
9
- #
10
- # ==== description
11
- # The class representing *sf* *org*.
12
- #
13
- # https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_org_commands_unified.htm
14
- #
14
+ # @private :nodoc: just for developers
15
15
  class Core
16
16
  include ::SfCli::Sf::Core::Base
17
17
  include Login
@@ -3,13 +3,15 @@ module SfCli::Sf::Org
3
3
  ConnectionInfo = Struct.new(:id, :access_token, :alias, :instance_url, :user_name, :api_version, :status)
4
4
 
5
5
  #
6
- # returns the org's connection information. (equivalent to *sf* *org* *display*)
6
+ # Returns the org's connection information
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
7
9
  #
8
- # *target_org* --- an alias of paticular org, or username can be used<br>
9
- #
10
- # ======
11
- # # example (in irb):
10
+ # @note this function returns the org information including security sensitive things such as access token, username and so on.
11
+ # @return [ConnectionInfo] the org's connection information
12
12
  #
13
+ # @example
14
+ # (in irb):
13
15
  # > sf.org.display
14
16
  # =>
15
17
  # #<struct SfCli::Sf::Org::Display::ConnectionInfo
@@ -21,10 +23,10 @@ module SfCli::Sf::Org
21
23
  # api_version="61.0",
22
24
  # status="Connected">
23
25
  #
24
- # 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_org_commands_unified.htm#cli_reference_org_display_unified]
26
+ # @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
25
27
  #
26
- def display(target_org: nil)
27
- flags = {:"target-org" => target_org}
28
+ def display(target_org: nil, api_version: nil)
29
+ flags = {:"target-org" => target_org, :"api-version" => api_version}
28
30
  json = exec(__method__, flags: flags, redirection: :null_stderr)
29
31
 
30
32
  ConnectionInfo.new(