knuverse-knufactor 0.0.1 → 0.0.2

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: 224e08737aef33c81546244ee7b5c61ee4dee62d
4
- data.tar.gz: abd0db60daee18081303470062a4f120b5300e0c
3
+ metadata.gz: d6495c6005e362bb072ac482e12e65e230948415
4
+ data.tar.gz: e2715ef043a98af50920e28a190c3eea25eecd04
5
5
  SHA512:
6
- metadata.gz: bbc6a2bdc236889d73413e8ebc55b0de64404c457eb522c028f217000f7de000d82088af673bf998a2fe08569864002d7cc43f81838cfcec234fee366bf260a2
7
- data.tar.gz: 5c7d09db089ebf5517c98a3c97a145e134c627f8ca551954318cbb231d6e78cb2358330835c28b66c09d51a508180c370ae448443ebc3851183380f5cb14d76f
6
+ metadata.gz: 1ad718408ab62421877b13b2c111f1df17732a3eae75acde1d1ffd5895e4a3737bf24ee3435ad85dee670dd6b935dc09f79752e7d2332e3992c8eb7deb4f34b4
7
+ data.tar.gz: 13662a52e850d3827f9efab976d72808200f1f1a30cc29bb855e721b1d57ae9e854fb16bf0250ca3fd784c2eb0b9a5fb4a3ec3f030166ab6d83fb8799ab60902
data/README.md CHANGED
@@ -6,6 +6,7 @@ About
6
6
  This project is a Ruby SDK that allows developers to create apps that use Knuverse's Knufactor Cloud APIs.
7
7
 
8
8
  Documentation for the API can be found [here](https://cloud.knuverse.com/docs/)
9
+ Full documentation for this SDK can be found [here](http://www.rubydoc.info/gems/knuverse-knufactor/)
9
10
 
10
11
  Note that this SDK isn't a direct port of the [Python SDK](https://github.com/KnuVerse/knuverse-sdk-python), though it is based heavily on the work done there. This SDK uses a Object-Oriented pattern, which is likely more familiar to Ruby developers than a collection of functions may be.
11
12
 
@@ -3,6 +3,31 @@ module KnuVerse
3
3
  module Helpers
4
4
  # Simple helper class methods for Resource
5
5
  module ResourceClass
6
+ # Determine a list of names to use to access a resource entity attribute
7
+ # @param original_name [String,Symbol] the name of the underlying attribute
8
+ # @param opts [Hash] property options as defined in a {Resource} subclass
9
+ # @return [Array<Symbol>] the list of names
10
+ def determine_getter_names(original_name, opts)
11
+ names = []
12
+ names << (opts[:type] == :boolean ? "#{original_name}?" : original_name)
13
+ if opts[:as]
14
+ Array(opts[:as]).each do |new_name|
15
+ names << (opts[:type] == :boolean ? "#{new_name}?" : new_name)
16
+ end
17
+ end
18
+ names.map(&:to_sym).uniq
19
+ end
20
+
21
+ # Determine a list of names to use to set a resource entity attribute
22
+ # @param original_name [String,Symbol] the name of the underlying attribute
23
+ # @param opts [Hash] property options as defined in a {Resource} subclass
24
+ # @return [Array<Symbol>] the list of names
25
+ def determine_setter_names(original_name, opts)
26
+ names = ["#{original_name}="]
27
+ names.concat Array(opts[:as]).map { |new_name| "#{new_name}=" } if opts[:as]
28
+ names.map(&:to_sym).uniq
29
+ end
30
+
6
31
  # Produce a more human-readable representation of {#i18n_key}
7
32
  # @note ActiveRecord ActiveModel::Name compatibility method
8
33
  # @return [String]
@@ -37,6 +37,8 @@ module KnuVerse
37
37
  end
38
38
 
39
39
  # Set the URI path for a resource method
40
+ # @param kind [Symbol] how to refer to the URI
41
+ # @param uri [String] an API URI to refer to later
40
42
  def self.path(kind, uri)
41
43
  paths[kind.to_sym] = uri
42
44
  end
@@ -53,29 +55,35 @@ module KnuVerse
53
55
  end
54
56
 
55
57
  def self.gen_getter_method(name, opts)
56
- method_name = opts[:type] == :boolean ? "#{name}?" : name
57
- define_method(method_name.to_sym) do
58
- name_as_string = name.to_s
59
- reload if @lazy && !@entity.key?(name_as_string)
60
-
61
- case opts[:type]
62
- when :time
63
- if @entity[name_as_string] && !@entity[name_as_string].to_s.empty?
64
- Time.parse(@entity[name_as_string].to_s).utc
58
+ determine_getter_names(name, opts).each do |method_name|
59
+ define_method(method_name) do
60
+ name_as_string = name.to_s
61
+ reload if @lazy && !@entity.key?(name_as_string)
62
+
63
+ # Casting values based on type
64
+ case opts[:type]
65
+ when :time
66
+ if @entity[name_as_string] && !@entity[name_as_string].to_s.empty?
67
+ Time.parse(@entity[name_as_string].to_s).utc
68
+ end
69
+ else
70
+ @entity[name_as_string]
65
71
  end
66
- else
67
- @entity[name_as_string]
68
72
  end
69
73
  end
70
74
  end
71
75
 
72
76
  def self.gen_setter_method(name, opts)
73
- define_method("#{name}=".to_sym) do |value|
74
- raise Exceptions::ImmutableModification if immutable?
75
- # TODO: allow specifying a list of allowed values and validating against it
76
- @entity[name.to_s] = opts[:type] == :time ? Time.parse(value.to_s).utc : value
77
- @tainted = true
78
- @modified_properties << name.to_sym
77
+ determine_setter_names(name, opts).each do |method_name|
78
+ define_method(method_name) do |value|
79
+ raise Exceptions::ImmutableModification if immutable?
80
+ if opts[:validate]
81
+ raise Exceptions::InvalidArguments unless send("validate_#{name}".to_sym, value)
82
+ end
83
+ @entity[name.to_s] = opts[:type] == :time ? Time.parse(value.to_s).utc : value
84
+ @tainted = true
85
+ @modified_properties << name.to_sym
86
+ end
79
87
  end
80
88
  end
81
89
 
@@ -3,6 +3,7 @@ module KnuVerse
3
3
  module Resources
4
4
  # The Knufactor Client resource
5
5
  # rubocop:disable Style/ExtraSpacing
6
+ # rubocop:disable Metrics/LineLength
6
7
  class Client < Resource
7
8
  property :bypass_expiration
8
9
  property :bypass_limit
@@ -19,25 +20,37 @@ module KnuVerse
19
20
  property :enroll_deadline_remaining_minutes
20
21
  property :has_password, type: :boolean, read_only: true
21
22
  property :has_pin, type: :boolean, read_only: true
22
- property :has_verified, type: :boolean, read_only: true
23
+ property :has_verified, type: :boolean, read_only: true, as: :verified
23
24
  property :help_tip, read_only: true
24
- property :is_disabled, type: :boolean
25
- property :is_gauth, type: :boolean, read_only: true
26
- property :is_tenant_client, type: :boolean, read_only: true
25
+ property :is_disabled, type: :boolean, as: :disabled
26
+ property :is_gauth, type: :boolean, read_only: true, as: :gauth
27
+ property :is_tenant_client, type: :boolean, read_only: true, as: :tenant_client
27
28
  property :last_verification_date, type: :time, read_only: true
28
29
  property :name, read_only: true
29
30
  property :notification, read_only: true
30
31
  property :password, write_only: true
31
- property :password_lock, type: :boolean
32
+ property :password_lock, type: :boolean, as: :password_locked, validate: true
32
33
  property :phone_number_last, read_only: true
33
34
  property :pin_rev, read_only: true
34
35
  property :role
35
36
  property :role_rationale
36
37
  property :row_doubling
37
38
  property :state, read_only: true
38
- property :verification_lock, type: :boolean
39
+ property :verification_lock, type: :boolean, as: :verification_locked, validate: true
39
40
  property :verification_speed
40
41
  property :verification_speed_floor, read_only: true
42
+
43
+ private
44
+
45
+ # Used to validate {#password_lock} on set
46
+ def validate_password_lock(value)
47
+ value == false # only `false` is valid
48
+ end
49
+
50
+ # Used to validate {#password_lock} on set
51
+ def validate_verification_lock(value)
52
+ value == false # only `false` is valid
53
+ end
41
54
  end
42
55
  end
43
56
  end
@@ -4,7 +4,7 @@ module KnuVerse
4
4
  VERSION = [
5
5
  0, # Major
6
6
  0, # Minor
7
- 1, # Patch
7
+ 2, # Patch
8
8
  ].join('.')
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knuverse-knufactor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Gnagy