prontoforms 0.3.1 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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.