prontoforms 0.3.1 → 1.0.1

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: e363d8b04b4054609edf5c8e22598b3c6a86a04f0e749f4b25bd78b731960259
4
- data.tar.gz: dc9862112d51ab6548238d9169ec9107115ca95d133a33c5ce44e369a4d11e9d
3
+ metadata.gz: d15ef56d13e8ea0e980e73be80c8a766b9d82ab5947899aea364e5e5f8562bd0
4
+ data.tar.gz: 75e60d77da7d5bfabf8494029a5e80f24f8548fb1f8781847e4adf2e4b43b797
5
5
  SHA512:
6
- metadata.gz: 2c10a51687e5a8c06deed0034a90972ad0bf3f09c09dac034566fb8475eb7cdbd7996027d8ead0ce78be2d8f0af47d1f4017dae38c4f99c7ee6fe74da1c7f2f0
7
- data.tar.gz: e064a89db1bad77d3bff769598c587649621e488e173cbec29664831d43a024c4ded3200d97cf8ba4be314bf4dcd15415d8ea2f5699994a9f8defc37c4988387
6
+ metadata.gz: 7b3883d2eb0c2a740546ac2d9deb955dc90e68c66dec3409b3fa05ba025111b4fd8340c84b40861071a7a47851250df95062edcd08f43f3b24fb9b14954f1a90
7
+ data.tar.gz: 0d483ea0b5b6cb8bf112a3c6097c6ff2af4180a8c5b6c859afc7b724a57e5a0999b14c49aecc03d887f3bf09d5de85668254f52ab9a87bb9131bceb83515c713
@@ -0,0 +1,66 @@
1
+ name: Checks
2
+
3
+ on:
4
+ push:
5
+ branches: [master]
6
+
7
+ jobs:
8
+ test:
9
+ name: Run automated tests
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - name: Checkout repository
13
+ uses: actions/checkout@v2
14
+
15
+ - name: Set up ruby
16
+ uses: actions/setup-ruby@v1
17
+ with:
18
+ ruby-version: 2.6
19
+
20
+ - name: Install dependencies
21
+ run: |
22
+ gem install bundler -v 2.1.4
23
+ bundle install
24
+
25
+ - name: Test
26
+ run: bundle exec rake
27
+
28
+ - name: Report test coverage
29
+ uses: paambaati/codeclimate-action@v2.7.4
30
+ env:
31
+ CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
32
+
33
+ rubocop:
34
+ name: Rubocop
35
+ runs-on: ubuntu-latest
36
+ strategy:
37
+ fail-fast: false
38
+
39
+ steps:
40
+ - name: Checkout repository
41
+ uses: actions/checkout@v2
42
+
43
+ - name: Set up Ruby
44
+ uses: ruby/setup-ruby@v1
45
+ with:
46
+ ruby-version: 2.6
47
+
48
+ - name: Install Code Scanning integration
49
+ run: bundle add code-scanning-rubocop --version 0.3.0 --skip-install
50
+
51
+ - name: Install dependencies
52
+ run: |
53
+ gem install bundler -v 2.1.4
54
+ bundle install
55
+
56
+ - name: Rubocop run
57
+ run: |
58
+ bash -c "
59
+ bundle exec rubocop --require code_scanning --format CodeScanning::SarifFormatter -o rubocop.sarif
60
+ [[ $? -ne 2 ]]
61
+ "
62
+
63
+ - name: Upload Sarif output
64
+ uses: github/codeql-action/upload-sarif@v1
65
+ with:
66
+ sarif_file: rubocop.sarif
@@ -0,0 +1,12 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.6
3
+ NewCops: enable
4
+
5
+ Style/ClassAndModuleChildren:
6
+ Enabled: false
7
+
8
+ Style/StringLiterals:
9
+ EnforcedStyle: single_quotes
10
+
11
+ Layout/FirstHashElementIndentation:
12
+ Enabled: false
@@ -1,6 +1,16 @@
1
1
  ---
2
+ os: linux
3
+ dist: xenial
2
4
  language: ruby
3
5
  cache: bundler
4
6
  rvm:
5
7
  - 2.6.0
6
8
  before_install: gem install bundler -v 2.1.4
9
+ before_script:
10
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
11
+ - chmod +x ./cc-test-reporter
12
+ - ./cc-test-reporter before-build
13
+ script:
14
+ - bundle exec rspec
15
+ after_script:
16
+ - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
@@ -1,7 +1,15 @@
1
1
  # prontoforms changelog
2
2
 
3
+ ## [Unreleased]
4
+ ### Added
5
+ * Added Form resource
6
+ * Can retrieve forms by form space
7
+
8
+ ## [v0.3.1] - 15 Sep 2020
9
+ ### Removed
10
+ * Unused `InvalidHttpVerb` error class
3
11
 
4
- ## [v0.3.0]
12
+ ## [v0.3.0] - 15 Sep 2020
5
13
  ### Added
6
14
  * Autogenerated documentation via YARD.
7
15
 
@@ -16,7 +24,8 @@
16
24
  ## [v0.1.0] - 25 Aug 2020
17
25
  * Initial release
18
26
 
19
- [Unreleased]: https://github.com/paulholden2/prontoforms/compare/v0.3.0...HEAD
27
+ [Unreleased]: https://github.com/paulholden2/prontoforms/compare/v0.3.1...HEAD
20
28
  [v0.1.0]: https://github.com/paulholden2/prontoforms/releases/tag/v0.1.0
21
29
  [v0.2.0]: https://github.com/paulholden2/prontoforms/releases/tag/v0.2.0
22
30
  [v0.3.0]: https://github.com/paulholden2/prontoforms/releases/tag/v0.3.0
31
+ [v0.3.1]: https://github.com/paulholden2/prontoforms/releases/tag/v0.3.1
data/Gemfile CHANGED
@@ -1,4 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in prontoforms.gemspec
4
6
  gemspec
7
+
8
+ group :development, :test do
9
+ gem 'simplecov', '~> 0.17.1'
10
+ end
data/README.md CHANGED
@@ -1,7 +1,12 @@
1
1
  # ProntoForms
2
2
 
3
+ [![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fpaulholden2%2Fprontoforms%2Fbadge%3Fref%3Dmaster&style=flat)](https://actions-badge.atrox.dev/paulholden2/prontoforms/goto?ref=master) [![Gem Version](https://badge.fury.io/rb/prontoforms.svg)](https://badge.fury.io/rb/prontoforms) [![Inline docs](http://inch-ci.org/github/paulholden2/prontoforms.svg?branch=master)](http://inch-ci.org/github/paulholden2/prontoforms) [![Maintainability](https://api.codeclimate.com/v1/badges/e47cd40058313e1c1c38/maintainability)](https://codeclimate.com/github/paulholden2/prontoforms/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/e47cd40058313e1c1c38/test_coverage)](https://codeclimate.com/github/paulholden2/prontoforms/test_coverage)
4
+
3
5
  A library for interacting with the ProntoForms REST API in Ruby applications.
4
6
 
7
+ Note: version 0.4.0 included a breaking change, and has been yanked from
8
+ RubyGems. If you are using it, please upgrade to 1.x or revert to 0.3.1.
9
+
5
10
  ## Installation
6
11
 
7
12
  Add this line to your application's Gemfile:
@@ -20,7 +25,16 @@ Or install it yourself as:
20
25
 
21
26
  ## Usage
22
27
 
23
- Check back later
28
+ To get started, first [create a ProntoForms API key] in your ProntoForms
29
+ account. Then you can begin using the API client in your Ruby application:
30
+
31
+ ```rb
32
+ client = ProntoForms::Client.new(api_key_id, api_key_secret)
33
+ client.form_spaces # Returns all FormSpaces in your account
34
+ ```
35
+
36
+ Review [the documentation](https://rubydoc.info/github/paulholden2/prontoforms)
37
+ for more information on how to use this library to interact with ProntoForms.
24
38
 
25
39
  ## Development
26
40
 
@@ -37,3 +51,5 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/paulho
37
51
  ## License
38
52
 
39
53
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
54
+
55
+ [create a ProntoForms API key]: https://support.prontoforms.com/hc/en-us/articles/217496468-Setup-an-API-Application-on-ProntoForms#Create
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
6
- task :default => :spec
8
+ task default: :spec
@@ -1,14 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "prontoforms"
4
+ require 'bundler/setup'
5
+ require 'prontoforms'
6
+ require 'irb'
5
7
 
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
8
  IRB.start(__FILE__)
data/bin/setup CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env bash
2
+ # frozen_string_literal: true
3
+
2
4
  set -euo pipefail
3
5
  IFS=$'\n\t'
4
6
  set -vx
5
7
 
6
8
  bundle install
7
-
8
- # Do any other automated setup that you need to do here
@@ -1,7 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'prontoforms/version'
2
4
  require 'prontoforms/client'
3
5
 
4
6
  module ProntoForms
7
+ # Base error class.
5
8
  class Error < StandardError
6
9
  attr_reader :message
7
10
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'faraday'
2
4
  require 'json'
3
5
  require 'prontoforms/resource_list'
@@ -6,12 +8,15 @@ require 'prontoforms/form_submission'
6
8
  require 'prontoforms/user'
7
9
 
8
10
  module ProntoForms
11
+ # Allows you to retrieve resources from ProntoForms and perform other
12
+ # functions with the API.
9
13
  class Client
10
- # @return [String]
14
+ # @return [String] ProntoForms API key ID
11
15
  attr_reader :api_key_id
12
- # @return [String]
16
+ # @return [String] ProntoForms API key secret
13
17
  attr_reader :api_key_secret
14
18
 
19
+ # Create a client and use provided API credentials
15
20
  # @param api_key_id Your ProntoForms REST API key
16
21
  # @param api_key_secret Your ProntoForms REST API secret
17
22
  def initialize(api_key_id, api_key_secret)
@@ -32,14 +37,13 @@ module ProntoForms
32
37
  req.url url
33
38
  query.each { |k, v| req.params[k] = v }
34
39
  end
35
- if res.success?
36
- ResourceList.new(JSON.parse(res.body), {
37
- 'p' => 0,
38
- 's' => 100
39
- }.merge(query), method, resource, self)
40
- else
41
- nil
42
- end
40
+
41
+ data = JSON.parse(res.body)
42
+
43
+ return nil if data.fetch('pageData').size.zero?
44
+
45
+ ResourceList.new(data, { 'p' => 0, 's' => 100 }.merge(query), method,
46
+ resource, self)
43
47
  end
44
48
  end
45
49
 
@@ -50,29 +54,39 @@ module ProntoForms
50
54
  # @param id [String] The user identifier
51
55
  # @return [User] A User object for the requested user
52
56
  def user(id)
53
- return nil if id.nil?
57
+ raise ArgumentError, 'id must be provided' if id.nil?
58
+
54
59
  res = connection.get do |req|
55
- req.url "users/#{id.to_s}"
60
+ req.url "users/#{id}"
56
61
  end
57
- if res.success?
58
- data = JSON.parse(res.body)
59
- User.new(data, self)
60
- else
61
- nil
62
+
63
+ User.new(JSON.parse(res.body), self)
64
+ end
65
+
66
+ # Retrieve a form space by its identifier
67
+ # @param id [String] The form space identifier
68
+ # @return [FormSpace] A FormSpace object
69
+ def form_space(id)
70
+ raise ArgumentError, 'id must be provided' if id.nil?
71
+
72
+ res = connection.get do |req|
73
+ req.url "formspaces/#{id}"
62
74
  end
75
+
76
+ FormSpace.new(JSON.parse(res.body), self)
63
77
  end
64
78
 
79
+ # Retrieve a form submission by identifier
80
+ # @param id [String] The form submission identifier
81
+ # @return [FormSubmission] A FormSubmission object
65
82
  def form_submission(id)
66
83
  return nil if id.nil?
84
+
67
85
  res = connection.get do |req|
68
- req.url "data/#{id.to_s}"
69
- end
70
- if res.success?
71
- data = JSON.parse(res.body)
72
- FormSubmission.new(data, self)
73
- else
74
- nil
86
+ req.url "data/#{id}"
75
87
  end
88
+
89
+ FormSubmission.new(JSON.parse(res.body), self)
76
90
  end
77
91
 
78
92
  # Create a connection that can be used to execute a request against the
@@ -82,6 +96,7 @@ module ProntoForms
82
96
  def connection
83
97
  Faraday.new(url: 'https://api.prontoforms.com/api/1.1') do |conn|
84
98
  conn.basic_auth(api_key_id, api_key_secret)
99
+ conn.use Faraday::Response::RaiseError
85
100
  end
86
101
  end
87
102
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'prontoforms/resource'
4
+
5
+ module ProntoForms
6
+ # A Document is a configuration that generates output data or files when
7
+ # attached to a form.
8
+ class Document < Resource
9
+ def self.resource_name
10
+ 'documents'
11
+ end
12
+
13
+ # @return [String] The Document identifier
14
+ property :id, key: 'identifier'
15
+ # @return [String] Document type
16
+ property :type, key: 'type'
17
+ # @return [String] Document name
18
+ property :name, key: 'name'
19
+ # @return [String] Document descriptiojn
20
+ property :description, key: 'description'
21
+ # @return [String] Document form version
22
+ property :form_document_version, key: 'formDocumentVersion'
23
+ # @return [Boolean] Whether the document is standard (system generated)
24
+ property :standard, key: 'standard'
25
+ # @return [String] Whether the document auto-links to new forms
26
+ property :auto_link, key: 'autoLink'
27
+
28
+ alias standard? standard
29
+ alias auto_link? auto_link
30
+ end
31
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'prontoforms/resource'
4
+
5
+ module ProntoForms
6
+ # A form includes inputs, validations, logic, and other configuration that
7
+ # facilitates data capture for a specific purpose.
8
+ class Form < Resource
9
+ def self.resource_name
10
+ 'forms'
11
+ end
12
+
13
+ # @return [String] The Form identifier
14
+ property :id, key: 'identifier'
15
+ # @return [String] Form name
16
+ property :name, key: 'name'
17
+ # @return [String] Form description
18
+ property :description, key: 'description'
19
+ # @return [String] Form state
20
+ property :state, key: 'state'
21
+ end
22
+ end
@@ -1,6 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'prontoforms/resource'
4
+ require 'prontoforms/form'
5
+ require 'prontoforms/document'
2
6
 
3
7
  module ProntoForms
8
+ # Represents a form space resource in ProntoForms. Form spaces are the
9
+ # primary organizational unit for forms, data sources, destinations, and
10
+ # other resources.
4
11
  class FormSpace < Resource
5
12
  # @return [String] The FormSpace identifier
6
13
  property :id, key: 'identifier'
@@ -10,5 +17,32 @@ module ProntoForms
10
17
  property :problem_contact_email, key: 'problemContactEmail'
11
18
  # @return [Boolean] Whether updates are automatically pushed to devices
12
19
  property :push_updates_to_device, key: 'pushUpdatesToDevice'
20
+
21
+ # Get all documents in the form space
22
+ # @return [ResourceList] A ResourceList containing Document objects
23
+ def documents
24
+ res = client.connection.get do |req|
25
+ req.url "formspaces/#{id}/documents"
26
+ end
27
+
28
+ ResourceList.new(JSON.parse(res.body), {
29
+ 'p' => 0,
30
+ 's' => 100
31
+ }, :documents, Document, self)
32
+ end
33
+
34
+ # Get all forms in the form space
35
+ # @return [ResourceList] A ResourceList containing Form objects
36
+ def forms(query: {})
37
+ res = client.connection.get do |req|
38
+ req.url "formspaces/#{id}/forms"
39
+ query.each { |k, v| req.params[k] = v }
40
+ end
41
+
42
+ ResourceList.new(JSON.parse(res.body), {
43
+ 'p' => 0,
44
+ 's' => 100
45
+ }.merge(query), :forms, Form, self)
46
+ end
13
47
  end
14
48
  end
@@ -1,25 +1,41 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
2
4
  require 'prontoforms/resource'
3
5
 
4
6
  module ProntoForms
7
+ # A FormSubmission represents submitted form data in ProntoForms. It
8
+ # includes various metadata about the submission as well.
5
9
  class FormSubmission < Resource
6
- def self.resource_name() 'data'; end
10
+ def self.resource_name
11
+ 'data'
12
+ end
7
13
 
14
+ # @return [String] The FormSubmission identifier
8
15
  property :id, key: 'identifier'
16
+ # @return [String] Submission reference number
9
17
  property :reference_number, key: 'referenceNumber'
18
+ # @return [String] Submission state. One of: Complete, Processing,
19
+ # Dispatched
10
20
  property :state, key: 'state'
21
+ # @return [String] Submission data state
11
22
  property :data_state, key: 'dataState'
23
+ # @return [Boolean] Has the submission data been persisted on the server
12
24
  property :data_persisted, key: 'dataPersisted'
25
+ # @return [String] The form's version identifier
13
26
  property :form_version_id, key: 'formVersionId'
27
+ # @return [String] The form's identifier
14
28
  property :form_id, key: 'formId'
29
+ # @return [String] Submitter's user identifier
15
30
  property :user_id, key: 'userId'
31
+ # @return [String] Submitter's username
16
32
  property :username, key: 'username'
17
- # Aliases
18
- property :data_persisted?, key: 'dataPersisted'
19
- property :submitter_id, key: 'userId'
20
- property :submitter_username, key: 'username'
21
- property :dispatcher, key: 'dispatcher'
22
33
 
34
+ alias data_persisted? data_persisted
35
+ alias submitter_id user_id
36
+ alias submitter_username username
37
+
38
+ # @return [DateTime] Timestamp the submission was received by the server
23
39
  property :server_receive_date do
24
40
  str = data.fetch('serverReceiveDate')
25
41
  str.nil? ? nil : DateTime.strptime(str)
@@ -34,15 +50,64 @@ module ProntoForms
34
50
  # Retrieve the dispatching User, if the form was dispatched
35
51
  # @return [User] The user that dispatched the form, or nil
36
52
  def dispatcher
53
+ return nil unless dispatched?
54
+
37
55
  client.user(document.dig('dispatcher', 'identifier'))
38
56
  end
39
57
 
58
+ # Check if the form was dispatched
59
+ # @return [Boolean] True if the form was dispatched; false otherwise
60
+ def dispatched?
61
+ !document.dig('dispatcher', 'identifier').nil?
62
+ end
63
+
64
+ # Retrieve the form space for the form submission
65
+ # @return [FormSpace] Form space for the submission's form
66
+ def form_space
67
+ client.form_space(data.dig('form', 'formSpaceId'))
68
+ end
69
+
70
+ # Retrieve the form for the form submission
71
+ # @return [Form] Form for the submission
72
+ def form
73
+ client.form(data.dig('form', 'formId'))
74
+ end
75
+
76
+ # Retrieve the standard PDF document for the form submission
77
+ # @return [IO] Readable stream containing the PDF contents
78
+ def pdf
79
+ io = StringIO.new
80
+ client.connection.get do |req|
81
+ req.url "#{resource_name}/#{id}/documents/#{pdf_document.id}"
82
+ req.options.on_data = proc do |chunk|
83
+ io << chunk
84
+ end
85
+ end
86
+
87
+ io.rewind
88
+ io
89
+ end
90
+
40
91
  private
41
92
 
93
+ # Retrieve the standard PDF document for the form submission
94
+ # @return [Document] PDF document for the form submission
95
+ # @raises RuntimeError
96
+ def pdf_document
97
+ document = form_space.documents.items.find do |doc|
98
+ doc.type == 'Pdf' && doc.standard?
99
+ end
100
+
101
+ raise "No PDF document found for form space #{fs.id}" if document.nil?
102
+
103
+ document
104
+ end
105
+
42
106
  # Returns additional data about the submission. Uses cached data,
43
107
  # otherwise it loads and returns the data via #document!
44
108
  def document
45
- return @document if !@document.nil?
109
+ return @document unless @document.nil?
110
+
46
111
  document!
47
112
  end
48
113
 
@@ -51,10 +116,9 @@ module ProntoForms
51
116
  res = client.connection.get do |req|
52
117
  req.url "#{resource_name}/#{id}/document.json"
53
118
  end
54
- if res.success?
55
- @document = JSON.parse(res.body)
56
- @document
57
- end
119
+
120
+ @document = JSON.parse(res.body)
121
+ @document
58
122
  end
59
123
  end
60
124
  end
@@ -1,19 +1,28 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'date'
2
4
 
3
5
  module ProntoForms
6
+ # Base class for resource-related classes.
4
7
  class Resource
5
- attr_reader :data, :client, :parent
8
+ # @return [Hash] Retrieve raw JSON data associated with this resource
9
+ attr_reader :data
10
+ # @return [Client] API client
11
+ attr_reader :client
12
+ # @return [Resource] Parent object (applicable to child resources)
13
+ attr_reader :parent
6
14
 
15
+ # Defines a property of the resource
16
+ # @return [nil]
17
+ # @api private
7
18
  def self.property(name, key: nil, &block)
8
- define_method(name) {
19
+ define_method(name) do
9
20
  if block_given?
10
21
  instance_eval(&block)
11
22
  elsif !key.nil?
12
23
  data.fetch(key)
13
- else
14
- nil
15
24
  end
16
- }
25
+ end
17
26
  end
18
27
 
19
28
  def initialize(data, client, parent = nil)
@@ -22,11 +31,13 @@ module ProntoForms
22
31
  @parent = parent
23
32
  end
24
33
 
34
+ # The resource's identifier
25
35
  def self.resource_name
26
- name = self.to_s.split("::").last
36
+ name = to_s.split('::').last
27
37
  "#{name.downcase}s"
28
38
  end
29
39
 
40
+ # The resource's identifier
30
41
  def resource_name
31
42
  self.class.resource_name
32
43
  end
@@ -1,29 +1,46 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'prontoforms/resource'
2
4
 
3
5
  module ProntoForms
6
+ # A wrapper for retrieving paged resources.
4
7
  class ResourceList < Resource
5
- attr_reader :query, :method, :resource, :client, :parent
8
+ # @return [Hash] Query parameters for this resource list for e.g. filters
9
+ attr_reader :query
10
+ # @return [Symbol] Method to send to parent object (usually the client)
11
+ attr_reader :method
12
+ # @return [Class] Resource class
13
+ attr_reader :resource
14
+ # @return [Client] API client
15
+ attr_reader :client
16
+ # @return [Resource] Parent object (for child resources)
17
+ attr_reader :parent
6
18
 
19
+ # Initialize the resource list
20
+ # TODO: splat
21
+ # rubocop:disable Metrics/ParameterLists
7
22
  def initialize(data, query, method, resource, client, parent = nil)
8
23
  super(data, client)
9
24
  @query = query
10
25
  @method = method
11
26
  @resource = resource
27
+ @parent = parent
12
28
  end
29
+ # rubocop:enable Metrics/ParameterLists
13
30
 
14
31
  # Retrieve the next page of results, using the same number of items per
15
32
  # page as the original request.
16
33
  # @return [ResourceList] A ResourceList with the next set of results
17
34
  def next
18
- client.send(method, query: query.merge({ 'p' => query['p'] + 1}))
35
+ client.send(method, query: query.merge({ 'p' => query['p'] + 1 }))
19
36
  end
20
37
 
21
38
  # Retrieve the result set
22
39
  # @return [Array] Array of resource objects
23
40
  def items
24
- @data.fetch('pageData').map { |item|
41
+ @data.fetch('pageData').map do |item|
25
42
  resource.new(item, client, parent)
26
- }
43
+ end
27
44
  end
28
45
  end
29
46
  end
@@ -1,8 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'prontoforms/resource'
2
4
 
3
5
  module ProntoForms
6
+ # A ProntoForms user account.
4
7
  class User < Resource
5
- def self.resource_name() 'users'; end
8
+ def self.resource_name
9
+ 'users'
10
+ end
6
11
 
7
12
  # @return [String] The User identifier
8
13
  property :id, key: 'identifier'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ProntoForms
2
- VERSION = '0.3.1'
4
+ VERSION = '1.0.1'
3
5
  end
@@ -1,16 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'lib/prontoforms/version'
2
4
 
5
+ # rubocop:disable Layout/LineLength
3
6
  Gem::Specification.new do |spec|
4
- spec.name = 'prontoforms'
5
- spec.version = ProntoForms::VERSION
6
- spec.authors = ['Paul Holden']
7
- spec.email = ['paul@holdensoftware.com']
7
+ spec.name = 'prontoforms'
8
+ spec.version = ProntoForms::VERSION
9
+ spec.authors = ['Paul Holden']
10
+ spec.email = ['paul@codelunker.com']
8
11
 
9
- spec.summary = 'A library for using the ProntoForms REST API in Ruby applications.'
10
- spec.description = 'A library for using the ProntoForms REST API in Ruby applications.'
11
- spec.homepage = 'https://github.com/paulholden2/prontoforms'
12
- spec.license = 'MIT'
13
- spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
12
+ spec.summary = 'A library for using the ProntoForms REST API in Ruby applications.'
13
+ spec.description = 'A library for using the ProntoForms REST API in Ruby applications.'
14
+ spec.homepage = 'https://github.com/paulholden2/prontoforms'
15
+ spec.license = 'MIT'
16
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.6.0')
14
17
 
15
18
  spec.metadata['allowed_push_host'] = 'https://rubygems.org'
16
19
 
@@ -19,18 +22,27 @@ Gem::Specification.new do |spec|
19
22
  spec.metadata['changelog_uri'] = 'https://github.com/paulholden2/prontoforms/blog/master/CHANGELOG.md'
20
23
 
21
24
  # Specify which files should be added to the gem when it is released.
22
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
23
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
24
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
+ # The `git ls-files -z` loads the files in the RubyGem that have been added
26
+ # into git.
27
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
28
+ `git ls-files -z`.split("\x0").reject do |f|
29
+ f.match(%r{^(test|spec|features)/})
30
+ end
25
31
  end
26
- spec.bindir = 'exe'
27
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
+
33
+ spec.bindir = 'exe'
34
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
35
  spec.require_paths = ['lib']
29
36
 
30
37
  spec.add_dependency 'faraday', '~> 1.0'
31
38
 
32
39
  spec.add_development_dependency 'bundler', '~> 2.0'
33
- spec.add_development_dependency 'rake', '~> 10.0'
40
+ spec.add_development_dependency 'rake', '>= 12.3.3'
34
41
  spec.add_development_dependency 'rspec', '~> 3.0'
42
+ spec.add_development_dependency 'rubocop', '~> 0.82.0'
43
+ spec.add_development_dependency 'sinatra', '~> 2.0'
44
+ spec.add_development_dependency 'sinatra-contrib', '~> 2.0'
45
+ spec.add_development_dependency 'webmock', '~> 3.6'
35
46
  spec.add_development_dependency 'yard', '~> 0.9'
36
47
  end
48
+ # rubocop:enable Layout/LineLength
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prontoforms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Holden
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-15 00:00:00.000000000 Z
11
+ date: 2020-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: 12.3.3
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: 12.3.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,62 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.82.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.82.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: sinatra
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: sinatra-contrib
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: webmock
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '3.6'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3.6'
69
125
  - !ruby/object:Gem::Dependency
70
126
  name: yard
71
127
  requirement: !ruby/object:Gem::Requirement
@@ -82,13 +138,15 @@ dependencies:
82
138
  version: '0.9'
83
139
  description: A library for using the ProntoForms REST API in Ruby applications.
84
140
  email:
85
- - paul@holdensoftware.com
141
+ - paul@codelunker.com
86
142
  executables: []
87
143
  extensions: []
88
144
  extra_rdoc_files: []
89
145
  files:
146
+ - ".github/workflows/checks.yml"
90
147
  - ".gitignore"
91
148
  - ".rspec"
149
+ - ".rubocop.yml"
92
150
  - ".travis.yml"
93
151
  - CHANGELOG.md
94
152
  - Gemfile
@@ -99,6 +157,8 @@ files:
99
157
  - bin/setup
100
158
  - lib/prontoforms.rb
101
159
  - lib/prontoforms/client.rb
160
+ - lib/prontoforms/document.rb
161
+ - lib/prontoforms/form.rb
102
162
  - lib/prontoforms/form_space.rb
103
163
  - lib/prontoforms/form_submission.rb
104
164
  - lib/prontoforms/resource.rb
@@ -122,14 +182,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
122
182
  requirements:
123
183
  - - ">="
124
184
  - !ruby/object:Gem::Version
125
- version: 2.3.0
185
+ version: 2.6.0
126
186
  required_rubygems_version: !ruby/object:Gem::Requirement
127
187
  requirements:
128
188
  - - ">="
129
189
  - !ruby/object:Gem::Version
130
190
  version: '0'
131
191
  requirements: []
132
- rubygems_version: 3.0.8
192
+ rubygems_version: 3.1.4
133
193
  signing_key:
134
194
  specification_version: 4
135
195
  summary: A library for using the ProntoForms REST API in Ruby applications.