m1_api 0.0.3 → 0.0.4

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: 34ca6f636fcd6b356996c136c0e7542f73486f96ee4661c847fd239390fdbf0a
4
- data.tar.gz: 467fa010dbf774620ad8ee142e76e2a2fa12ab7bc559edc63720944fc92bb191
3
+ metadata.gz: 880305cc13e0cde33cdabd9c30e1d4b8dff25a337cb6363bbb574deff09fd656
4
+ data.tar.gz: 03c84cca83c77623a41fe1715bcad2b5396fc440a3e0fccb0d2494017e81fa7f
5
5
  SHA512:
6
- metadata.gz: a452994654dd37d26dc655ceaa9023894d783632a26dd121b7e03fd1c347600874dbd6d7d372257e1931ef8119c0ed8a391e20ca08f8cfdc6276ce471630c67a
7
- data.tar.gz: 74e5c46bf7fcd29c301c332812ed78cd6d163ff7f8a2c10b5846c5630acd6042531e50d118d5b2ed8f6c5c3b85eb5f86a5f46fb51e346c620247f769372f3459
6
+ metadata.gz: 518a8c44b1dedba1c6790d4383bf22102588c1c45208c733c38c5520cb5da97b7e89a715df7346ee1c1a5b115da48a5f2ac241b22c7e73936de703479eaad47e
7
+ data.tar.gz: 61ad53f7ddac12bf53d60fe9eb4c6f78158f366ea45fd9ba8525746106bdb7f1f1e45ac81d32b00b27bf438f80329065818f5bcede0608cdf22a9507cb0b9fb7
@@ -1,127 +1,45 @@
1
- require 'rest-client'
2
- require 'json'
3
- require 'yaml'
4
- require 'erb'
1
+ require_relative './m1_api/yaml_helpers.rb'
5
2
 
6
- ###
7
- ### change it to just authenticate once and use the same token
8
-
9
-
10
- module M1API
3
+ class M1API
11
4
  # autoload :CLI, 'm1_api/cli'
12
5
  autoload :VERSION, 'm1_api/version'
13
6
 
14
- class << self
15
-
16
- @@api_config_file = "#{__dir__}/m1_api/api_configs.yml"
7
+ attr_accessor :api_config_file, :token
17
8
 
18
- def define_custom_api_file(path)
19
- @@api_config_file = path
20
- end
21
-
22
- def read_credentials(credentials_file=nil)
23
- if credentials_file
24
- credentials = load_yaml(credentials_file)
25
- { username: credentials[:M1_USERNAME], password: credentials[:M1_PASSWORD] }
26
- else
27
- {username: ENV['M1_USERNAME'], password: ENV['M1_PASSWORD']}
28
- end
29
- end
9
+ api_config_file = "#{__dir__}/m1_api/api_configs.yml"
30
10
 
31
- def load_yaml(file_path)
32
- YAML.load(ERB.new(File.read(file_path)).result) || {}
33
- rescue SystemCallError
34
- raise "Could not load file: '#{file_path}"
35
- end
36
-
37
- def call_api(api_configs_file, api)
38
- raise 'nyi'
39
- api_config = load_yaml(api_configs_file)[api]
40
- raise "No api '#{api}' defined in '#{api_configs_file}'" unless api_config
41
- params = parse_api_config(api_config)
42
- JSON.parse(RestClient.send(params['method'], params['url']), params['body'], params['headers'])
43
- end
44
-
45
- # might have to convert everything to sym first
46
- def replace_dynamic_string(string, context)
47
- raise 'input is not a string' unless string.is_a?(String)
48
- replace_targets = string.split('>>>').map { |target| target.match(/<<<.*/).to_s }
49
- replace_targets.each do |target|
50
- key = target.match(/<<<(.*)/)
51
- if key
52
- temp_value = context
53
- key[1].split(' ').each do |current_key|
54
- raise "no value '#{current_key}' defined in context" unless temp_value.key?(current_key.to_sym)
55
- temp_value = temp_value[current_key.to_sym]
56
- end
57
- string = string.gsub("#{target}>>>", temp_value)
58
- end
59
- end
60
- string
61
- end
62
-
63
- # need something to deal with uri encode
64
- def replace_dynamic_array(array, context)
65
- raise 'input is not a array' unless array.is_a?(Array)
66
- dup = array.clone
67
- dup.each_with_index do |value, index|
68
- dup[index] = replace_dynamic_string(value, context)
69
- end
70
- dup.join
71
- end
72
-
73
- def replace_dynamic_hash(hash, context = hash)
74
- raise 'input is not a hash' unless hash.is_a?(Hash)
75
- hash.each do |key, value|
76
- if value.is_a?(String)
77
- hash[key] = replace_dynamic_string(value, context)
78
- elsif value.is_a?(Array)
79
- hash[key] = replace_dynamic_array(value, context)
80
- elsif value.is_a?(Hash)
81
- hash[key] = replace_dynamic_hash(value, context)
82
- end
83
- end
84
- hash
85
- end
11
+ def initialize(username, password, api_config_file = nil)
12
+ @api_config_file = api_config_file || "#{__dir__}/m1_api/api_configs.yml"
13
+ credentials = { username: username, password: password }
14
+ res = YamlHelpers.call_api_from_yml(@api_config_file, 'authenticate', credentials)
15
+ raise "failed to authenticate:\n\t#{res}" unless res[:code] == 200 && res[:body]['data']['authenticate']['result']['didSucceed']
16
+ @token = res[:body]['data']['authenticate']['accessToken']
17
+ end
86
18
 
87
- def call_api_from_yml(config_file, api, data = {})
88
- config = load_yaml(config_file)[api.to_sym]
89
- raise "no api defined for #{api}" unless config
90
- context = config.merge data
91
- parsed_config = replace_dynamic_hash(context)
92
- params = [parsed_config[:method], parsed_config[:url], parsed_config[:body], parsed_config[:headers]]
93
- params.delete(nil)
94
- res = RestClient.send(*params)
95
- { code: res.code, body: JSON.parse(res.body) }
96
- rescue Exception => e
97
- return { code: res.code, body: res.body } if res
98
- puts "failed to call api for api #{api}: #{e}"
99
- end
100
-
101
- def authenticate(credentials_file = nil)
102
- credentials = read_credentials(credentials_file)
103
- res = call_api_from_yml(@@api_config_file, 'authenticate', credentials)
104
- raise "failed to authenticate:\n\t#{res}" unless res[:code] == 200 && res[:body]['data']['authenticate']['result']['didSucceed']
105
- res[:body]['data']['authenticate']['accessToken']
19
+ def self.read_credentials(credentials_file=nil)
20
+ if credentials_file
21
+ credentials = YamlHelpers.load_yaml(credentials_file)
22
+ { username: credentials[:M1_USERNAME], password: credentials[:M1_PASSWORD] }
23
+ else
24
+ {username: ENV['M1_USERNAME'], password: ENV['M1_PASSWORD']}
106
25
  end
26
+ end
107
27
 
108
- def check_status(token)
109
- token = { token: token }
110
- res = call_api_from_yml(@@api_config_file, 'check_status', token)
111
- puts res.inspect
112
- end
28
+ def check_status
29
+ res = call_api_from_yml(@@api_config_file, 'check_status', token)
30
+ puts res.inspect
31
+ end
113
32
 
114
- def query_accounts(token)
115
- accounts = {}
116
- data = { token: token }
117
- id_res = call_api_from_yml(@@api_config_file, 'list_account_ids', data)
118
- ids = id_res[:body]['data']['viewer']['_accounts1NFCow']['edges'].map { |account| account['node']['id'] }
119
- ids.each do |id|
120
- data[:account_id] = id
121
- account_res = call_api_from_yml(@@api_config_file, 'query_account', data)
122
- accounts[id] = account_res[:body]['data']['node']
123
- end
124
- accounts
125
- end
33
+ def query_accounts
34
+ accounts = {}
35
+ data = { token: @token }
36
+ id_res = YamlHelpers.call_api_from_yml(@api_config_file, 'list_account_ids', data)
37
+ ids = id_res[:body]['data']['viewer']['_accounts1NFCow']['edges'].map { |account| account['node']['id'] }
38
+ ids.each do |id|
39
+ data[:account_id] = id
40
+ account_res = YamlHelpers.call_api_from_yml(@api_config_file, 'query_account', data)
41
+ accounts[id] = account_res[:body]['data']['node']
42
+ end
43
+ accounts
126
44
  end
127
45
  end
@@ -1,3 +1,3 @@
1
- module M1API
2
- VERSION = Version = '0.0.3'
3
- end
1
+ class M1API
2
+ VERSION = Version = '0.0.4'
3
+ end
@@ -0,0 +1,70 @@
1
+ require 'yaml'
2
+ require 'erb'
3
+ require 'rest-client'
4
+ require 'json'
5
+
6
+ module YamlHelpers
7
+ module_function
8
+
9
+ def load_yaml(file_path)
10
+ YAML.load(ERB.new(File.read(file_path)).result) || {}
11
+ rescue SystemCallError
12
+ raise "Could not load file: '#{file_path}"
13
+ end
14
+
15
+ # might have to convert everything to sym first
16
+ def replace_dynamic_string(string, context)
17
+ raise 'input is not a string' unless string.is_a?(String)
18
+ replace_targets = string.split('>>>').map { |target| target.match(/<<<.*/).to_s }
19
+ replace_targets.each do |target|
20
+ key = target.match(/<<<(.*)/)
21
+ if key
22
+ temp_value = context
23
+ key[1].split(' ').each do |current_key|
24
+ raise "no value '#{current_key}' defined in context" unless temp_value.key?(current_key.to_sym)
25
+ temp_value = temp_value[current_key.to_sym]
26
+ end
27
+ string = string.gsub("#{target}>>>", temp_value)
28
+ end
29
+ end
30
+ string
31
+ end
32
+
33
+ # need something to deal with uri encode
34
+ def replace_dynamic_array(array, context)
35
+ raise 'input is not a array' unless array.is_a?(Array)
36
+ dup = array.clone
37
+ dup.each_with_index do |value, index|
38
+ dup[index] = replace_dynamic_string(value, context)
39
+ end
40
+ dup.join
41
+ end
42
+
43
+ def replace_dynamic_hash(hash, context = hash)
44
+ raise 'input is not a hash' unless hash.is_a?(Hash)
45
+ hash.each do |key, value|
46
+ if value.is_a?(String)
47
+ hash[key] = replace_dynamic_string(value, context)
48
+ elsif value.is_a?(Array)
49
+ hash[key] = replace_dynamic_array(value, context)
50
+ elsif value.is_a?(Hash)
51
+ hash[key] = replace_dynamic_hash(value, context)
52
+ end
53
+ end
54
+ hash
55
+ end
56
+
57
+ def call_api_from_yml(config_file, api, data = {})
58
+ config = load_yaml(config_file)[api.to_sym]
59
+ raise "no api defined for #{api}" unless config
60
+ context = config.merge data
61
+ parsed_config = replace_dynamic_hash(context)
62
+ params = [parsed_config[:method], parsed_config[:url], parsed_config[:body], parsed_config[:headers]]
63
+ params.delete(nil)
64
+ res = RestClient.send(*params)
65
+ { code: res.code, body: JSON.parse(res.body) }
66
+ rescue Exception => e
67
+ return { code: res.code, body: res.body } if res
68
+ puts "failed to call api for api #{api}: #{e}"
69
+ end
70
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: m1_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuan Feng
@@ -48,6 +48,7 @@ files:
48
48
  - lib/m1_api.rb
49
49
  - lib/m1_api/api_configs.yml
50
50
  - lib/m1_api/version.rb
51
+ - lib/m1_api/yaml_helpers.rb
51
52
  homepage: http://github.com/ynotgnef/m1_api
52
53
  licenses:
53
54
  - MIT