cts-mpx 1.0.3 → 1.1.0

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
  SHA1:
3
- metadata.gz: 73f7461b875dc5f0aca3c72e969e27ad55aa0ba4
4
- data.tar.gz: 7b246e09cb06aa3b55d03e38ae252c65186b8e86
3
+ metadata.gz: 7972d6219f8ea4529c9dc0863e85417d0948cb0c
4
+ data.tar.gz: 40b45a11bd0f15d0ebf9ecddb3ba74b7da06ac3f
5
5
  SHA512:
6
- metadata.gz: ed2b7cb38cde63fefdc304529a621950db81e3f1bd57cb345f603bb840585b7d2c34b203f7062e8104ca2887838ff7009f1b7a4d019e05a5f541decf47461d55
7
- data.tar.gz: 7a06927b1918e397f76df770c47ceeebf701d77a578f4096590ea625d86cb6672f39179642753a7ad479c324b6fc8825172ea9a672ed3cce46536413a96ba5f7
6
+ metadata.gz: 7eb12fb8ae45a387aa7599171b387a4412a0bd4ee4ec4fe5481b812c1fa3c2cece788a1d771630a162026ad004816e30b91f1bd6d369e58b8bcc5050b74d6ca6
7
+ data.tar.gz: 55392ff698ab16f63c8b6de195623e06d293ebf63083b3e983b2d002a36fd6168ec4f59fff6065b3ed69e36717efc9312ec4064c34324e950f16ac16cc0ba783
@@ -55,6 +55,11 @@ Style/FrozenStringLiteralComment:
55
55
  Style/MixinUsage:
56
56
  Exclude:
57
57
  - 'bin/*'
58
+ - 'spec/spec_helper_shared_examples.rb'
59
+
60
+ # it's about the line count, and white space on the left.
61
+ Style/ClassAndModuleChildren:
62
+ Enabled: false
58
63
 
59
64
  # Purty hashes.
60
65
  Layout/AlignHash:
@@ -84,5 +89,8 @@ Metrics/ParameterLists:
84
89
  RSpec/NamedSubject:
85
90
  Enabled: false
86
91
 
92
+ RSpec/DescribeSymbol:
93
+ Enabled: false
94
+
87
95
  Lint/Debugger:
88
96
  Enabled: false
@@ -13,8 +13,7 @@ account = 'http://access.auth.theplatform.com/data/Account/1'
13
13
  ### Login
14
14
 
15
15
  ``` ruby
16
- user = Cts::Mpx::User.create username: username, password: password
17
- user.sign_in
16
+ user = Cts::Mpx::User.create(username: ENV["MPX_USERNAME"], password: ENV["MPX_PASSWORD"]).sign_in
18
17
  ```
19
18
 
20
19
  ### Logout
@@ -38,7 +37,7 @@ puts response.status
38
37
 
39
38
  ``` ruby
40
39
  response = Cts::Mpx::Services::Data.get user: user, service: 'Media Data Service', endpoint: 'Media', account: account, fields: 'id,guid'
41
- puts response.page
40
+ puts response.page.entries
42
41
  ```
43
42
 
44
43
  ### POST
@@ -57,7 +56,7 @@ Cts::Mpx::Services::Data.put user: user, service: 'Media Data Service', endpoin
57
56
 
58
57
  ``` ruby
59
58
  response = Cts::Mpx::Services::Data.delete user: user, service: 'Media Data Service', endpoint: 'Media', account: account, fields: 'id,guid', ids: "1,2,3,4"
60
- puts response.page
59
+ puts response.page.entries
61
60
  ```
62
61
 
63
62
  ## Page class
@@ -78,4 +77,17 @@ puts page.to_s
78
77
 
79
78
  ``` ruby
80
79
  puts page.to_s(true)
81
- ```
80
+ ```
81
+
82
+ ## Query
83
+
84
+ ``` ruby
85
+ media_query = Query.create({
86
+ account_id: "http://access.auth.theplatform.com/data/Account/2034777617",
87
+ service: 'Media Data Service',
88
+ endpoint: 'Media',
89
+ fields: 'id,guid,title,ownerId'
90
+ }).run user: user
91
+
92
+ media_query.entries
93
+ ```
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cts-mpx (1.0.2)
5
- creatable
4
+ cts-mpx (1.0.3)
5
+ creatable (~> 2.2.1)
6
6
  excon
7
7
  oj (= 3.5.0)
8
8
 
@@ -15,7 +15,7 @@ GEM
15
15
  debug_inspector (>= 0.0.1)
16
16
  bump (0.6.1)
17
17
  coderay (1.1.2)
18
- creatable (2.1.1)
18
+ creatable (2.2.1)
19
19
  debug_inspector (0.0.3)
20
20
  diff-lcs (1.3)
21
21
  docile (1.3.1)
data/Guardfile CHANGED
@@ -1,41 +1,38 @@
1
1
  clearing :on
2
2
 
3
- # guard :bundler do
4
- # require 'guard/bundler'
5
- # require 'guard/bundler/verify'
6
- # helper = Guard::Bundler::Verify.new
3
+ guard :bundler do
4
+ require 'guard/bundler'
5
+ require 'guard/bundler/verify'
6
+ helper = Guard::Bundler::Verify.new
7
7
 
8
- # files = ['Gemfile']
9
- # files += Dir['*.gemspec'] if files.any? { |f| helper.uses_gemspec?(f) }
8
+ files = ['Gemfile']
9
+ files += Dir['*.gemspec'] if files.any? { |f| helper.uses_gemspec?(f) }
10
10
 
11
- # # Assume files are symlinked from somewhere
12
- # files.each { |file| watch(helper.real_path(file)) }
13
- # end
11
+ # Assume files are symlinked from somewhere
12
+ files.each { |file| watch(helper.real_path(file)) }
13
+ end
14
14
 
15
- # guard :rubocop, cli: '-fs --color -S -a' do
16
- # watch(%r{.+\.rb$}) { |m| File.dirname(m[0]) }
17
- # watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
18
- # end
15
+ guard :rubocop, cli: '-fs --color -S -a' do
16
+ watch(%r{.+\.rb$}) { |m| File.dirname(m[0]) }
17
+ watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
18
+ end
19
19
 
20
- # guard 'yard', server: false do
21
- # watch(%r{app\/.+\.rb})
22
- # watch(%r{lib\/.+\.rb})
23
- # watch(%r{ext\/.+\.c})
24
- # end
20
+ guard 'yard', server: false do
21
+ watch(%r{app\/.+\.rb})
22
+ watch(%r{lib\/.+\.rb})
23
+ watch(%r{ext\/.+\.c})
24
+ end
25
25
 
26
26
  guard :rspec, cmd: "bundle exec rspec" do
27
27
  require "guard/rspec/dsl"
28
28
  dsl = Guard::RSpec::Dsl.new(self)
29
29
 
30
- # Feel free to open issues for suggestions and improvements
31
-
32
- # RSpec files
33
30
  rspec = dsl.rspec
34
31
  watch(rspec.spec_helper) { rspec.spec_dir }
35
32
  watch(rspec.spec_support) { rspec.spec_dir }
33
+ watch(%r{spec\/spec_*}) { rspec.spec_dir }
36
34
  watch(rspec.spec_files)
37
35
 
38
- # Ruby files
39
36
  ruby = dsl.ruby
40
37
  dsl.watch_spec_files_for(ruby.lib_files)
41
38
  end
@@ -29,10 +29,10 @@
29
29
  "schema": "1.0",
30
30
  "methods": {
31
31
  "getAccountInfoByIds": [
32
- "AccountIds"
32
+ "accountIds"
33
33
  ],
34
34
  "getParentAccountInfoByIds": [
35
- "AccountIds"
35
+ "accountIds"
36
36
  ]
37
37
  }
38
38
  },
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.require_paths = ["lib"]
18
18
  spec.required_ruby_version = '>= 2.4.0'
19
19
 
20
- spec.add_runtime_dependency "creatable"
20
+ spec.add_runtime_dependency "creatable", "~> 2.2.1"
21
21
  spec.add_runtime_dependency "excon"
22
22
  spec.add_runtime_dependency "oj", "3.5.0"
23
23
 
@@ -32,11 +32,9 @@ require 'cts/mpx/entry'
32
32
  require 'cts/mpx/entries'
33
33
  require 'cts/mpx/query'
34
34
 
35
- # Comcast Technical Solutions
36
- module Cts
37
- # Media Platform
38
- module Mpx
39
- Services.initialize
40
- Registry.initialize
41
- end
35
+ # Comcast Technical Solutions - Mpx
36
+ module Cts::Mpx
37
+ Services.initialize
38
+ Registry.initialize
39
+ Driver::Connections.initialize
42
40
  end
@@ -4,43 +4,45 @@ module Cts
4
4
  module Driver
5
5
  module_function
6
6
 
7
- #
7
+ # used when the token has a problem
8
+ class TokenError < RuntimeError
9
+ end
10
+
11
+ # used when the login credentials are incorrect
12
+ class CredentialsError < RuntimeError
13
+ end
14
+
15
+ # used when the services cannot be communicated with
16
+ class ConnectionError < RuntimeError
17
+ end
18
+
19
+ # used when the service returns an exception
20
+ class ServiceError < RuntimeError
21
+ end
22
+
8
23
  # path to our gem directory, includes support for bundled env's.
9
- #
10
24
  # @return [String] full path to the root of our gem directory.
11
- #
12
25
  def gem_dir
13
26
  return Dir.pwd unless Gem.loaded_specs.include? 'cts-mpx'
27
+
14
28
  Gem.loaded_specs['cts-mpx'].full_gem_path
15
29
  end
16
30
 
17
- #
18
31
  # path to our config files
19
- #
20
32
  # @return [String] full path to the root of our gem directory.
21
- #
22
33
  def config_dir
23
34
  "#{gem_dir}/config"
24
35
  end
25
36
 
26
- #
27
37
  # load a json file into a simple hash
28
- #
29
38
  # @param [String] filename filename to load
30
- #
31
39
  # @raise [RuntimeError] if the filename does not exist.
32
40
  # @raise [RuntimeError] if the file cannot be parsed, supplies the exception.
33
- #
34
41
  # @return [Hash] data from the file
35
- #
36
- def load_json_file(filename)
37
- raise "#{filename} does not exist" unless File.exist? filename
38
-
39
- begin
40
- Oj.load File.read filename
41
- rescue Oj::ParseError => exception
42
- raise "#{filename}: #{exception.message}"
43
- end
42
+ def parse_json(string)
43
+ Oj.compat_load string
44
+ rescue Oj::ParseError => exception
45
+ raise "#{string}: #{exception.message}"
44
46
  end
45
47
  end
46
48
  end
@@ -62,32 +62,18 @@ module Cts
62
62
 
63
63
  service = Services[].find { |s| s.name == service && s.endpoints.include?(endpoint) }
64
64
 
65
- h = {}
66
- if service.type == 'data'
67
- h.merge!(token: user.token, schema: service.schema, form: service.form)
68
- h.merge!(query_data(range: range, count: count, entries: entries, sort: sort))
69
- else
70
- h.merge!(token: user.token, schema: service.endpoints[endpoint]['schema'], form: service.form)
71
- end
65
+ h = {
66
+ schema: service.type == 'data' ? service.schema : service.endpoints[endpoint]['schema'],
67
+ form: service.form,
68
+ token: user.token
69
+ }
72
70
 
73
71
  h[:account] = account_id if account_id
74
- h.delete :token if user.token == 'sign_in_token'
75
- h.merge! query
76
- h
77
- end
78
-
79
- # Assembles range, count, entries, sort into a query
80
- # @param [String] range string (service) format of a range.
81
- # @param [TrueFalse] count ask for a count of objects from the services.
82
- # @param [TrueFalse] entries return an array of entries.
83
- # @param [String] sort set the sort field
84
- # @return [Hash] assembled query for a data call
85
- def query_data(range: nil, count: nil, entries: nil, sort: nil)
86
- h = {}
87
- h.store :range, range if range
88
- h.store :count, count if count
89
- h.store :entries, entries if entries
90
- h.store :sort, sort if sort
72
+ h[:count] = count if count
73
+ h[:entries] = entries if entries
74
+ h[:range] = range if range
75
+ h[:sort] = sort if sort
76
+ h[:query]&.merge! query if query.any?
91
77
  h
92
78
  end
93
79
  end
@@ -1,40 +1,51 @@
1
1
  module Cts
2
2
  module Mpx
3
3
  module Driver
4
- #
5
4
  # Container for active connections to the data service.
6
- #
7
5
  module Connections
8
6
  module_function
9
7
 
10
- #
11
8
  # Addressable method for active connections. If you provide a string that is not active, an active one
12
9
  # will be created.
13
- #
14
10
  # @param [String] uri uri of a service to connect to, must contain theplatform.
15
- #
16
11
  # @return [Excon] assembled excon objects with service defaults.
17
12
  # @return [Excon[]] if nil, an array of all open connections.
18
- #
19
13
  def [](uri = nil)
20
- return @open_connections unless uri
14
+ return @collection unless uri
15
+
21
16
  begin
22
17
  parsed_uri = URI.parse uri
23
18
  rescue URI::InvalidURIError
24
- raise ArgumentError, "#{uri} is not a uri"
19
+ raise ArgumentError, "(#{uri}) is not a uri"
25
20
  end
26
21
 
27
- raise ArgumentError, "#{uri} does not contain theplatform in it." unless parsed_uri.host.include? "theplatform"
22
+ raise ArgumentError, "(#{uri}) does not contain theplatform in it." unless parsed_uri.host&.include? "theplatform"
23
+
24
+ c = create_connection parsed_uri unless @collection.include? parsed_uri.host
25
+ @collection.push c
26
+ @collection.last
27
+ c
28
+ end
28
29
 
29
- Excon.new([parsed_uri.scheme, parsed_uri.host].join("://"), persistent: true) unless @open_connections.include? parsed_uri.host
30
+ def create_connection(parsed_uri)
31
+ Excon.new([parsed_uri.scheme, parsed_uri.host].join("://"), persistent: true)
30
32
  end
31
33
 
32
- Excon.defaults[:headers] = {
33
- 'Content-Type' => "application/json",
34
- "User-Agent" => "cts-mpx ruby sdk version #{Cts::Mpx::VERSION}",
35
- 'Content-Encoding' => 'bzip2,xz,gzip,deflate'
36
- }
37
- @open_connections = []
34
+ def collection
35
+ @collection
36
+ end
37
+
38
+ def initialize
39
+ Excon.defaults[:omit_nil] = true
40
+ Excon.defaults[:persistent] = true
41
+ Excon.defaults[:headers] = {
42
+ 'Content-Type' => "application/json",
43
+ "User-Agent" => "cts-mpx ruby sdk version #{Cts::Mpx::VERSION}",
44
+ 'Content-Encoding' => 'bzip2,xz,gzip,deflate'
45
+ }
46
+
47
+ @collection = []
48
+ end
38
49
  end
39
50
  end
40
51
  end
@@ -20,7 +20,7 @@ module Cts
20
20
  # @raise [ArgumentError] if the argument is not of the correct type
21
21
  # @return [nil]
22
22
  def raise_unless_argument_error?(data, type = nil, &block)
23
- raise(ArgumentError, "#{data} is not a valid #{type}") if Validators.argument_error?(data, type, &block)
23
+ raise(ArgumentError, "#{data || 'nil'} is not a valid #{type}") if Validators.argument_error?(data, type, &block)
24
24
 
25
25
  nil
26
26
  end
@@ -39,8 +39,11 @@ module Cts
39
39
  # @param [Object] keyword keyword to assure is supplied
40
40
  # @raise [ArgumentError] if the keyword is not suppplied
41
41
  # @return [nil]
42
- def raise_unless_required_keyword?(keyword: nil)
43
- raise ArgumentError, "#{keyword} is a required keyword." unless keyword && keyword
42
+ def raise_unless_required_keyword?(a_binding, keyword)
43
+ value = a_binding.local_variable_get(keyword)
44
+ raise ArgumentError, "#{keyword} is a required keyword." unless value
45
+
46
+ nil
44
47
  end
45
48
  end
46
49
  end
@@ -58,7 +58,7 @@ module Cts
58
58
  # @return [nil] nil
59
59
  #
60
60
  def required_arguments(keywords, a_binding)
61
- keywords.each { |arg| Exceptions.raise_unless_required_keyword?(keyword: a_binding.local_variable_get(arg)) }
61
+ keywords.each { |keyword| Exceptions.raise_unless_required_keyword?(a_binding, keyword) }
62
62
  nil
63
63
  end
64
64
  end
@@ -37,7 +37,7 @@ module Cts
37
37
 
38
38
  Oj.dump(
39
39
  {
40
- "xmlns" => xmlns,
40
+ "$xmlns" => xmlns,
41
41
  "entries" => entries
42
42
  },
43
43
  indent: indent_depth
@@ -44,6 +44,7 @@ module Cts
44
44
  params[:body] = payload if payload
45
45
 
46
46
  r = socket.send method, params
47
+
47
48
  @response = Response.create original: r
48
49
  @response
49
50
  end
@@ -1,68 +1,56 @@
1
1
  module Cts
2
2
  module Mpx
3
3
  module Driver
4
- #
5
4
  # Class to contain a response from the services, has a few helper methods to make reading the data easier.
6
- #
5
+ # @!attribute original
6
+ # @return [Excon::Response] copy of the original excon response.
7
7
  class Response
8
8
  include Creatable
9
-
10
- # @!attribute original
11
- # @return [Excon::Response] copy of the original excon response.
12
9
  attribute name: 'original', kind_of: Excon::Response
13
10
 
14
- #
15
11
  # Hash output of the data returned from the services.
16
- #
17
12
  # @return [Hash] Hash including keys specific to the service and type of service.
18
- #
19
13
  def data
20
14
  return @data if @data
21
15
 
22
16
  raise 'response does not appear to be healthy' unless healthy?
23
17
 
18
+ # TODO: make the driver.load file become load string.
24
19
  begin
25
- @data = Oj.load(original.body)
20
+ @data = Oj.compat_load(original.body)
26
21
  rescue Oj::ParseError => e
27
22
  raise "could not parse data: #{e}"
28
23
  end
24
+
25
+ raise ServiceError, "title: #{@data['title']} description: #{@data['description']} cid: (#{@data['correlationId']})" if @data['isException']
26
+
29
27
  @data
30
28
  end
31
29
 
32
- #
33
30
  # Is the response healthy? did it have a status code outside 2xx or 3xx.
34
- #
35
31
  # @return [TrueFalse] false if status <= 199 or => 400, otherwise true.
36
- #
37
32
  def healthy?
38
33
  return false if status <= 199 || status >= 400
34
+
39
35
  true
40
36
  end
41
37
 
42
- #
43
38
  # Does this response contain a service exception
44
- #
45
39
  # @return [TrueFalse] true if it does, false if it does not.
46
- #
47
40
  def service_exception?
48
- data['isException'] == true
41
+ original.body.include? '"isException":true,'
49
42
  end
50
43
 
51
- #
52
44
  # a page of data, processes the response.data for any entries.
53
- #
54
45
  # @return [Cts::Mpx::Driver::Page] a page of data.
55
- #
56
46
  def page
57
47
  raise 'response does not appear to be healthy' unless healthy?
48
+
58
49
  Cts::Mpx::Driver::Page.create entries: data['entries'], xmlns: data['$xmlns']
59
50
  end
60
51
 
61
- #
62
52
  # Status code of the response
63
- #
64
53
  # @return [Fixnum] http status code
65
- #
66
54
  def status
67
55
  original.status || nil
68
56
  end
@@ -11,19 +11,6 @@ module Cts
11
11
 
12
12
  attribute name: 'collection', kind_of: Array
13
13
 
14
- # Create a new entries collection from a page
15
- # @param [Page] page the page object to process
16
- # @raise [ArgumentError] if :page is not available
17
- # @return [Entries] a new entries collection
18
- def self.create_from_page(page)
19
- Exceptions.raise_unless_argument_error? page, Page
20
- entries = page.entries.each do |e|
21
- entry = Entry.create(fields: Fields.create_from_data(data: e, xmlns: page.xmlns))
22
- entry.id = entry.fields['id'] if entry.fields['id']
23
- end
24
- Entries.create(collection: entries)
25
- end
26
-
27
14
  # Addressable method, indexed by entry object
28
15
  # @param [Entry] key the entry to return
29
16
  # @return [Self.collection,Entry,nil] Can return the collection, a single entry, or nil if nothing found
@@ -81,7 +68,13 @@ module Cts
81
68
  # A hash of all available entries
82
69
  # @return [Hash]
83
70
  def to_h
84
- map(&:to_h)
71
+ output = { xmlns: {}, entries: [] }
72
+
73
+ each do |entry|
74
+ output[:entries].push entry.to_h[:entry]
75
+ output[:xmlns].merge! entry.fields.xmlns
76
+ end
77
+ output
85
78
  end
86
79
  end
87
80
  end
@@ -16,7 +16,6 @@ module Cts
16
16
  # @return [Entry] the resulting entry
17
17
  def self.load_by_id(user: nil, id: nil, fields: nil, account_id: nil)
18
18
  Driver::Helpers.required_arguments %i[user id], binding
19
-
20
19
  Driver::Exceptions.raise_unless_argument_error? user, User
21
20
  Driver::Exceptions.raise_unless_reference? id
22
21
 
@@ -28,13 +27,12 @@ module Cts
28
27
 
29
28
  # Return the id of the entry.
30
29
  # @return [Entry] the resulting entry
31
- def id
32
- fields['id']
33
- end
30
+ attr_reader :id
34
31
 
35
32
  # Set the id of the entry, will check if it's a valid reference.
36
33
  # @param [String] account_id account_id to set the entry to
37
34
  # @return [Entry] the resulting entry
35
+ # TODO add a spec here to assure @id is set to id
38
36
  def id=(id)
39
37
  if id.nil?
40
38
  fields.remove 'id'
@@ -42,7 +40,7 @@ module Cts
42
40
  else
43
41
  Driver::Exceptions.raise_unless_reference? id
44
42
  result = Services.from_url id
45
- fields['id'] = id
43
+ @id = fields['id'] = id
46
44
  @service = result[:service]
47
45
  @endpoint = result[:endpoint]
48
46
  end
@@ -68,8 +66,7 @@ module Cts
68
66
  # @param [String] fields comma delimited list of fields to collect
69
67
  # @return [Driver::Response] Response of the call.
70
68
  def load(user: nil, fields: nil, account_id: 'urn:theplatform:auth:root')
71
- Driver::Helpers.required_arguments %i[user], binding
72
-
69
+ Driver::Exceptions.raise_unless_required_keyword? binding, :user
73
70
  Driver::Exceptions.raise_unless_argument_error? user, User
74
71
  Driver::Exceptions.raise_unless_argument_error? fields, String if fields
75
72
  Driver::Exceptions.raise_unless_reference? id
@@ -77,9 +74,11 @@ module Cts
77
74
  Registry.fetch_and_store_domain user: user, account_id: account_id
78
75
  response = Services::Data.get account_id: account_id, user: user, service: service, endpoint: endpoint, fields: fields, ids: id.split("/").last
79
76
 
80
- raise 'could not load ' + id unless response.data['entries'].count.positive?
77
+ entries = response.data['entries']
78
+
79
+ raise "could not load #{id}" unless entries.any?
81
80
 
82
- self.fields.parse data: response.data['entries'].first, xmlns: response.data['xmlns']
81
+ self.fields.parse data: entries.first, xmlns: response.data['xmlns']
83
82
  self
84
83
  end
85
84
 
@@ -89,19 +88,18 @@ module Cts
89
88
  def save(user: nil)
90
89
  Driver::Helpers.required_arguments %i[user], binding
91
90
  Driver::Exceptions.raise_unless_argument_error? user, User
91
+ raise ArgumentError, "fields['ownerId'] is a required field" unless fields['ownerId']
92
+ raise ArgumentError, "endpoint is a required attribute" unless endpoint
93
+ raise ArgumentError, "service is a required attribute" unless service
92
94
 
93
95
  p = Driver::Page.create entries: [fields.to_h], xmlns: fields.xmlns
96
+ Registry.fetch_and_store_domain user: user, account_id: fields["ownerId"]
94
97
 
95
- if id
96
- response = Services::Data.put user: user, service: service, endpoint: endpoint, page: p
97
- else
98
- raise ArgumentError, "service is a required keyword" unless service
99
- raise ArgumentError, "endpoint is a required keyword" unless endpoint
100
-
101
- response = Services::Data.post user: user, service: service, endpoint: endpoint, page: p
102
- end
98
+ response_params = { account_id: fields['ownerId'], user: user, service: service, endpoint: endpoint, page: p }
99
+ result = Services::Data.send(id ? :put : :post, response_params)
100
+ result.data if result.service_exception?
103
101
 
104
- response
102
+ self
105
103
  end
106
104
  end
107
105
  end
@@ -12,7 +12,7 @@ module Cts
12
12
 
13
13
  attribute name: 'name', kind_of: String
14
14
  attribute name: 'value'
15
- attribute name: 'xmlns', kind_of: Hash
15
+ attribute(name: 'xmlns', kind_of: Hash) { |o, xmlns| o.xmlns = xmlns if o.custom? }
16
16
 
17
17
  # Return just the name value as key/value
18
18
  # @return [Hash]
@@ -21,10 +21,11 @@ module Cts
21
21
  end
22
22
 
23
23
  # Determines if this field is a custom field or not
24
- # @return [Symbol] :internal or :custom if it is a custom field
25
- def type
26
- return :custom if name.include? "$"
27
- :internal
24
+ # @return [Symbol] true if it is a custom field
25
+ def custom?
26
+ return true if name.include? "$"
27
+
28
+ false
28
29
  end
29
30
 
30
31
  # Set the namespace of the field
@@ -26,8 +26,10 @@ module Cts
26
26
  # @return [Self.collection,Field,nil] Can return the collection, a single field, or nil if nothing found
27
27
  def [](key = nil)
28
28
  return @collection unless key
29
+
29
30
  result = @collection.find { |f| f.name == key }
30
31
  return result.value if result
32
+
31
33
  nil
32
34
  end
33
35
 
@@ -54,6 +56,7 @@ module Cts
54
56
  # @return [Self]
55
57
  def add(field)
56
58
  return self if @collection.include? field
59
+
57
60
  Driver::Exceptions.raise_unless_argument_error? field, Field
58
61
  @collection.push field
59
62
  self
@@ -83,7 +86,7 @@ module Cts
83
86
  data.delete :service
84
87
  data.delete :endpoint
85
88
  reset
86
- @collection = data.map { |k, v| Field.create name: k.to_s, value: v, xmlns: xmlns }
89
+ @collection = data.map { |k, v| Field.create(name: k.to_s, value: v, xmlns: xmlns) }
87
90
  end
88
91
 
89
92
  # Remove a field object from the collection
@@ -59,7 +59,7 @@ module Cts
59
59
  # List of entries created from the page
60
60
  # @return [Entries] populated Entries object
61
61
  def entries
62
- Entries.create_from_page @page
62
+ @page.to_mpx_entries
63
63
  end
64
64
 
65
65
  # Run the query
@@ -97,13 +97,8 @@ module Cts
97
97
  output.store attribute, instance_variable_get("@#{attribute}") unless instance_variable_get("@#{attribute}").nil?
98
98
  end
99
99
 
100
- unless output[:return_count].nil?
101
- output[:count] = output.delete :return_count
102
- end
103
-
104
- unless output[:return_entries].nil?
105
- output[:entries] = output.delete :return_entries
106
- end
100
+ output[:count] = output.delete :return_count unless output[:return_count].nil?
101
+ output[:entries] = output.delete :return_entries unless output[:return_entries].nil?
107
102
 
108
103
  output
109
104
  end
@@ -32,8 +32,8 @@ module Cts
32
32
  return domains['urn:theplatform:auth:root'] if account_id == 'urn:theplatform:auth:root'
33
33
 
34
34
  Driver::Exceptions.raise_unless_argument_error?(user, 'User') { !user.is_a? User }
35
- Driver::Exceptions.raise_unless_argument_error?(account_id, 'account_id') { !Validators.account_id? account_id }
36
35
  user.token!
36
+ Driver::Exceptions.raise_unless_argument_error?(account_id, 'account_id') { !Validators.account_id? account_id }
37
37
 
38
38
  response = Services::Web.post user: user, service: 'Access Data Service', endpoint: 'Registry', method: 'resolveDomain', arguments: { 'accountId' => account_id }
39
39
  response.data['resolveDomainResponse']
@@ -56,7 +56,8 @@ module Cts
56
56
  # find and store the root registry from the US
57
57
  def initialize
58
58
  @domains = {}
59
- store_domain(Driver.load_json_file("#{Driver.config_dir}/root_registry_sea1.json")['resolveDomainResponse'], 'urn:theplatform:auth:root')
59
+ content = File.read "#{Driver.config_dir}/root_registry_sea1.json"
60
+ store_domain(Driver.parse_json(content)['resolveDomainResponse'], 'urn:theplatform:auth:root')
60
61
  end
61
62
  end
62
63
  end
@@ -53,6 +53,7 @@ module Cts
53
53
  Exceptions.raise_unless_account_id account_id
54
54
  reg = Registry.domains[account_id]
55
55
  return reg[name] if reg
56
+
56
57
  nil
57
58
  end
58
59
 
@@ -63,6 +64,7 @@ module Cts
63
64
  Exceptions.raise_unless_account_id account_id
64
65
  u = url account_id
65
66
  return true if u
67
+
66
68
  false
67
69
  end
68
70
  end
@@ -57,7 +57,7 @@ module Cts
57
57
  raise ArgumentError, 'type must be supplied' unless type
58
58
  raise ArgumentError, 'file must be supplied' unless file
59
59
 
60
- @raw_reference.store(type, Driver.load_json_file(file))
60
+ @raw_reference.store(type, Driver.parse_json(File.read(file)))
61
61
  true
62
62
  end
63
63
 
@@ -17,8 +17,10 @@ module Cts
17
17
  services = Services[].select { |s| s.type == 'data' }
18
18
  return services unless key
19
19
  raise ArgumentError, 'key must be a string' unless key.is_a? String
20
+
20
21
  service = services.find { |e| e.name == key }
21
22
  raise ArgumentError, "#{key} must be a service name." unless service
23
+
22
24
  service
23
25
  end
24
26
 
@@ -51,12 +53,10 @@ module Cts
51
53
 
52
54
  host = Driver::Assemblers.host user: user, service: service, account_id: account_id
53
55
  path = Driver::Assemblers.path service: service, endpoint: endpoint, extra_path: extra_path, ids: ids
54
- query = Driver::Assemblers.query user: user, account_id: account_id, service: service, endpoint: endpoint, query: query
56
+ query = Driver::Assemblers.query user: user, account_id: account_id, service: service, endpoint: endpoint, query: query, range: range
57
+
58
+ query[:fields] = fields if Services[service].type == 'data' && fields
55
59
 
56
- if Services[service].type == 'data'
57
- query.merge! Driver::Assemblers.query_data range: range, count: count, entries: entries, sort: sort
58
- query[:fields] = fields if fields
59
- end
60
60
  request = Driver::Request.create(method: method, url: [host, path].join, query: query, headers: headers)
61
61
  request.call
62
62
  end
@@ -74,7 +74,6 @@ module Cts
74
74
  # @return [Response] Response of the call
75
75
  def post(user: nil, account_id: nil, service: nil, endpoint: nil, extra_path: nil, query: {}, page: nil, headers: {}, method: :post)
76
76
  prep_call(user: user, account_id: account_id, service: service, query: query, headers: headers, required_arguments: ['user', 'service', 'endpoint', 'page'], page: page, binding: binding)
77
-
78
77
  host = Driver::Assemblers.host user: user, service: service
79
78
  path = Driver::Assemblers.path service: service, endpoint: endpoint, extra_path: extra_path
80
79
  query = Driver::Assemblers.query user: user, account_id: account_id, service: service, endpoint: endpoint, query: query
@@ -13,6 +13,7 @@ module Cts
13
13
  # @return [Service] a service
14
14
  def [](key = nil)
15
15
  return services unless key
16
+
16
17
  Driver::Exceptions.raise_unless_argument_error?(key, String)
17
18
 
18
19
  service = services.find { |e| e.name == key }
@@ -18,7 +18,7 @@ module Cts
18
18
  attribute name: 'password', kind_of: String
19
19
  attribute name: 'idle_timeout', kind_of: Integer
20
20
  attribute name: 'duration', kind_of: Integer
21
- attribute name: 'token', kind_of: String
21
+ attribute name: 'token', kind_of: [String, NilClass]
22
22
 
23
23
  # Attempt to sign the user in with the provided credentials
24
24
  # @param [Numeric] idle_timeout how long the token will stay alive without communicating with the services
@@ -35,8 +35,10 @@ module Cts
35
35
 
36
36
  self.token = 'sign_in_token'
37
37
  response = Services::Web.post user: self, service: 'User Data Service', endpoint: 'Authentication', method: 'signIn', arguments: arguments, headers: headers
38
+ self.token = nil
38
39
 
39
40
  raise "sign_in exception, status: #{response.status}" unless response.status == 200
41
+
40
42
  self.token = response.data['signInResponse']['token']
41
43
  self
42
44
  end
@@ -27,6 +27,7 @@ module Cts
27
27
  def argument_error?(data, type = nil, &block)
28
28
  return block.yield if block
29
29
  return true unless type && data.is_a?(type)
30
+
30
31
  false
31
32
  end
32
33
 
@@ -1,6 +1,6 @@
1
1
  module Cts
2
2
  module Mpx
3
3
  # @return [String] frozen string of the version of Cts::Mpx
4
- VERSION = "1.0.3".freeze
4
+ VERSION = "1.1.0".freeze
5
5
  end
6
6
  end
@@ -145,7 +145,7 @@
145
145
  fetch_domain(user, account_id = 'urn:theplatform:auth:root')
146
146
  store_domain(data, account_id = 'urn:theplatform:auth:root')
147
147
  initialize
148
- raise_argument_error(data, name)
148
+ raise_argument_exception(data, name)
149
149
  ]
150
150
  [<class> Service|
151
151
  |
@@ -239,4 +239,4 @@
239
239
  [Driver]->[Response]
240
240
  [Services]->[Data]
241
241
  [Services]->[Web]
242
- [Services]->[Ingest]
242
+ [Services]->[Ingest]
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cts-mpx
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ernie Brodeur
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-06 00:00:00.000000000 Z
11
+ date: 2018-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: creatable
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 2.2.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 2.2.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: excon
29
29
  requirement: !ruby/object:Gem::Requirement