txtextcontrol-reportingcloud 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/.vscode/settings.json +4 -0
- data/Gemfile +4 -0
- data/LICENSE.md +18 -0
- data/README.md +46 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/core_ext/string.rb +28 -0
- data/lib/txtextcontrol/reportingcloud.rb +31 -0
- data/lib/txtextcontrol/reportingcloud/account_settings.rb +88 -0
- data/lib/txtextcontrol/reportingcloud/merge_body.rb +60 -0
- data/lib/txtextcontrol/reportingcloud/merge_settings.rb +112 -0
- data/lib/txtextcontrol/reportingcloud/reportingcloud.rb +322 -0
- data/lib/txtextcontrol/reportingcloud/template.rb +40 -0
- data/lib/txtextcontrol/reportingcloud/template_data_validator.rb +30 -0
- data/lib/txtextcontrol/reportingcloud/template_name_validator.rb +30 -0
- data/lib/txtextcontrol/reportingcloud/version.rb +18 -0
- data/resource/rc_logo_1024.png +0 -0
- data/resource/rc_logo_256.png +0 -0
- data/resource/rc_logo_512.png +0 -0
- data/txtextcontrol-reportingcloud.gemspec +25 -0
- metadata +112 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d69459cfc7d065e32d143d4f0448fc607a858ae5
|
4
|
+
data.tar.gz: ed780300dadb6a31f12f3785983efb806a3a70eb
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0ec77b3c5a03931cb1068abcf690cb9156b1f7a62da9ce5770faa65fa3551006114bcbc27cc939aaecf037e93b0cb7ea3ea4bcb96f8ca6939317780765bd3841
|
7
|
+
data.tar.gz: 4c052c90eb063f0a1700257c7f9a47f44107ff4b656bcd38550907366f6177d36a43d342d269ea317033ad71c89938e5c5a8edfeffccea07d0f426e2e3801b4f
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.md
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
## Copyright © 2016, Text Control GmbH. All rights reserved.
|
2
|
+
|
3
|
+
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
4
|
+
following conditions are met:
|
5
|
+
|
6
|
+
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following
|
7
|
+
disclaimer.
|
8
|
+
|
9
|
+
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
|
10
|
+
disclaimer in the documentation and/or other materials provided with the distribution.
|
11
|
+
|
12
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
13
|
+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
14
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
15
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
16
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
17
|
+
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
18
|
+
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
![Logo](https://raw.githubusercontent.com/TextControl/txtextcontrol-reportingcloud-ruby/master/resource/rc_logo_512.png)
|
2
|
+
|
3
|
+
# ReportingCloud Ruby Wrapper
|
4
|
+
|
5
|
+
This is the official Ruby wrapper for ReportingCloud, which is authored, maintained and fully supported by [Text Control](http://www.textcontrol.com).
|
6
|
+
|
7
|
+
[http://www.reporting.cloud](http://www.reporting.cloud)
|
8
|
+
|
9
|
+
Before using ReportingCloud, please sign up to the service:
|
10
|
+
|
11
|
+
[http://api.reporting.cloud](http://api.reporting.cloud)
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
Add this line to your application's Gemfile:
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
gem 'txtextcontrol-reportingcloud'
|
19
|
+
```
|
20
|
+
|
21
|
+
And then execute:
|
22
|
+
|
23
|
+
$ bundle
|
24
|
+
|
25
|
+
Or install it yourself as:
|
26
|
+
|
27
|
+
$ gem install txtextcontrol-reportingcloud
|
28
|
+
|
29
|
+
## API documentation (YARD)
|
30
|
+
|
31
|
+
All the source code in this library is documented using [YARD](http://yardoc.org/).
|
32
|
+
|
33
|
+
You can read the [API documentation](https://textcontrol.github.io/txtextcontrol-reportingcloud-ruby/) online, or build it yourself, using the following command:
|
34
|
+
|
35
|
+
$ yard doc
|
36
|
+
|
37
|
+
The resultant set of HTML files will be written to `~/txtextcontrol-reportingcloud/doc`.
|
38
|
+
|
39
|
+
If you don't have YARD already installed, you can install it with RubyGems with the following command:
|
40
|
+
|
41
|
+
$ gem install yard
|
42
|
+
|
43
|
+
## Contributing
|
44
|
+
|
45
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/TextControl/txtextcontrol-reportingcloud-ruby.
|
46
|
+
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "txtextcontrol/reportingcloud"
|
5
|
+
|
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
|
+
IRB.start
|
data/bin/setup
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# ReportingCloud Ruby Wrapper
|
2
|
+
#
|
3
|
+
# Official wrapper (authored by Text Control GmbH, publisher of ReportingCloud) to access
|
4
|
+
# ReportingCloud in Ruby.
|
5
|
+
#
|
6
|
+
# Go to http://www.reporting.cloud to learn more about ReportingCloud
|
7
|
+
# Go to https://github.com/TextControl/txtextcontrol-reportingcloud-ruby for the
|
8
|
+
# canonical source repository.
|
9
|
+
#
|
10
|
+
# License: https://raw.githubusercontent.com/TextControl/txtextcontrol-reportingcloud-ruby/master/LICENSE.md
|
11
|
+
#
|
12
|
+
# Copyright: © 2016 Text Control GmbH
|
13
|
+
|
14
|
+
# Extensions to class String.
|
15
|
+
# @author Thorsten Kummerow (@thomerow)
|
16
|
+
class String
|
17
|
+
|
18
|
+
# Removes the first and last characters from a string and returns the
|
19
|
+
# manipulated string.
|
20
|
+
# @return [String] The string without its first and last characters.
|
21
|
+
def remove_first_and_last
|
22
|
+
if self.length == 0 then return '' end
|
23
|
+
result = self.dup
|
24
|
+
result[0] = ''
|
25
|
+
if result.length > 0 then result[result.length - 1] = '' end
|
26
|
+
return result
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# ReportingCloud Ruby Wrapper
|
2
|
+
#
|
3
|
+
# Official wrapper (authored by Text Control GmbH, publisher of ReportingCloud) to access
|
4
|
+
# ReportingCloud in Ruby.
|
5
|
+
#
|
6
|
+
# Go to http://www.reporting.cloud to learn more about ReportingCloud
|
7
|
+
# Go to https://github.com/TextControl/txtextcontrol-reportingcloud-ruby for the
|
8
|
+
# canonical source repository.
|
9
|
+
#
|
10
|
+
# License: https://raw.githubusercontent.com/TextControl/txtextcontrol-reportingcloud-ruby/master/LICENSE.md
|
11
|
+
#
|
12
|
+
# Copyright: © 2016 Text Control GmbH
|
13
|
+
|
14
|
+
require "txtextcontrol/reportingcloud/version"
|
15
|
+
require_relative "./reportingcloud/reportingcloud.rb"
|
16
|
+
|
17
|
+
# The TXTextControl module.
|
18
|
+
module TXTextControl
|
19
|
+
|
20
|
+
# The ReportingCloud module.
|
21
|
+
module ReportingCloud
|
22
|
+
|
23
|
+
# Default API base url.
|
24
|
+
DEFAULT_BASE_URI = "http://api.reporting.cloud"
|
25
|
+
# Default API version.
|
26
|
+
DEFAULT_VERSION = "v1"
|
27
|
+
# Default http request timeout in seconds.
|
28
|
+
DEFAULT_TIMEOUT = 10
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# ReportingCloud Ruby Wrapper
|
2
|
+
#
|
3
|
+
# Official wrapper (authored by Text Control GmbH, publisher of ReportingCloud) to access
|
4
|
+
# ReportingCloud in Ruby.
|
5
|
+
#
|
6
|
+
# Go to http://www.reporting.cloud to learn more about ReportingCloud
|
7
|
+
# Go to https://github.com/TextControl/txtextcontrol-reportingcloud-ruby for the
|
8
|
+
# canonical source repository.
|
9
|
+
#
|
10
|
+
# License: https://raw.githubusercontent.com/TextControl/txtextcontrol-reportingcloud-ruby/master/LICENSE.md
|
11
|
+
#
|
12
|
+
# Copyright: © 2016 Text Control GmbH
|
13
|
+
|
14
|
+
module TXTextControl
|
15
|
+
module ReportingCloud
|
16
|
+
|
17
|
+
# Represents ReportingCloud account settings.
|
18
|
+
# @attr_reader [String, Symbol] serial_number The serial number that is attached to the
|
19
|
+
# account. Possible values are :free, :trial and a 13 character long serial number.
|
20
|
+
# @attr_reader [Integer] created_documents The number of created documents in the
|
21
|
+
# current month.
|
22
|
+
# @attr_reader [Integer] uploaded_templates The number of uploaded templates to the
|
23
|
+
# template storage.
|
24
|
+
# @attr_reader [Integer] max_documents The maximum number of documents that can be
|
25
|
+
# created per month.
|
26
|
+
# @attr_reader [Integer] max_templates The maximum number of templates that can be
|
27
|
+
# uploaded to the template storage.
|
28
|
+
# @attr_reader [DateTime] valid_until The date until the current subscription is valid.
|
29
|
+
# Can be nil.
|
30
|
+
# @author Thorsten Kummerow (@thomerow)
|
31
|
+
class AccountSettings
|
32
|
+
attr_reader :serial_number
|
33
|
+
attr_reader :created_documents
|
34
|
+
attr_reader :uploaded_templates
|
35
|
+
attr_reader :max_documents
|
36
|
+
attr_reader :max_templates
|
37
|
+
attr_reader :valid_until
|
38
|
+
|
39
|
+
# @param [String, Symbol] serial_number The serial number that is attached to the
|
40
|
+
# account. Possible values are :free, :trial and a 13 character long serial number.
|
41
|
+
# @param [Integer] created_documents The number of created documents in the
|
42
|
+
# current month.
|
43
|
+
# @param [Integer] uploaded_templates The number of uploaded templates to the
|
44
|
+
# template storage.
|
45
|
+
# @param [Integer] max_documents The maximum number of documents that can be
|
46
|
+
# created per month.
|
47
|
+
# @param [Integer] max_templates The maximum number of templates that can be
|
48
|
+
# uploaded to the template storage.
|
49
|
+
# @param [DateTime] valid_until The date until the current subscription is valid.
|
50
|
+
# Can be nil.
|
51
|
+
def initialize(serial_number, created_documents, uploaded_templates, max_documents, max_templates, valid_until = nil)
|
52
|
+
case serial_number.downcase
|
53
|
+
when "trial"
|
54
|
+
@serial_number = :trial
|
55
|
+
when "free"
|
56
|
+
@serial_number = :free
|
57
|
+
else
|
58
|
+
@serial_number = serial_number
|
59
|
+
end
|
60
|
+
@created_documents = Integer(created_documents)
|
61
|
+
@uploaded_templates = Integer(uploaded_templates)
|
62
|
+
@max_documents = Integer(max_documents)
|
63
|
+
@max_templates = Integer(max_templates)
|
64
|
+
case valid_until
|
65
|
+
when DateTime
|
66
|
+
@valid_until = valid_until
|
67
|
+
when String
|
68
|
+
@valid_until = DateTime.iso8601(valid_until)
|
69
|
+
else
|
70
|
+
@valid_until = nil
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# Creates an AccountSettings instance from a hash.
|
75
|
+
# @param [Hash] hash The hash to try and create an AccountSettings instance from.
|
76
|
+
# @return [AccountSettings] A newly created AccountSettings instance.
|
77
|
+
def self.from_camelized_hash(hash)
|
78
|
+
sn = hash["serialNumber"]
|
79
|
+
cd = hash["createdDocuments"]
|
80
|
+
ut = hash["uploadedTemplates"]
|
81
|
+
md = hash["maxDocuments"]
|
82
|
+
mt = hash["maxTemplates"]
|
83
|
+
vu = hash["validUntil"]
|
84
|
+
return AccountSettings.new(sn, cd, ut, md, mt, vu)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# ReportingCloud Ruby Wrapper
|
2
|
+
#
|
3
|
+
# Official wrapper (authored by Text Control GmbH, publisher of ReportingCloud) to access
|
4
|
+
# ReportingCloud in Ruby.
|
5
|
+
#
|
6
|
+
# Go to http://www.reporting.cloud to learn more about ReportingCloud
|
7
|
+
# Go to https://github.com/TextControl/txtextcontrol-reportingcloud-ruby for the
|
8
|
+
# canonical source repository.
|
9
|
+
#
|
10
|
+
# License: https://raw.githubusercontent.com/TextControl/txtextcontrol-reportingcloud-ruby/master/LICENSE.md
|
11
|
+
#
|
12
|
+
# Copyright: © 2016 Text Control GmbH
|
13
|
+
|
14
|
+
require "txtextcontrol/reportingcloud/merge_settings"
|
15
|
+
|
16
|
+
module TXTextControl
|
17
|
+
module ReportingCloud
|
18
|
+
|
19
|
+
# Used to pass data to the merge method.
|
20
|
+
# @attr merge_data [Array<Hash>] The merge data. Must be an array of hashes.
|
21
|
+
# @attr template [String] Base64 encoded template document.
|
22
|
+
# Supported formats are RTF, DOC, DOCX and TX.
|
23
|
+
# @attr merge_settings [MergeSettings] Merge settings to specify
|
24
|
+
# merge properties and document properties such as title and
|
25
|
+
# author.
|
26
|
+
# @author Thorsten Kummerow (@thomerow)
|
27
|
+
class MergeBody
|
28
|
+
attr_accessor :merge_data
|
29
|
+
attr_accessor :template
|
30
|
+
attr_accessor :merge_settings
|
31
|
+
|
32
|
+
# The constructor.
|
33
|
+
# @param merge_data [Array<Hash>] The merge data. Must be an array of hashes.
|
34
|
+
# @param template [String] Base64 encoded template document.
|
35
|
+
# Supported formats are RTF, DOC, DOCX and TX.
|
36
|
+
# @param merge_settings [MergeSettings] Merge settings to specify
|
37
|
+
# merge properties and document properties such as title and
|
38
|
+
# author.
|
39
|
+
def initialize(merge_data, merge_settings = nil, template = nil)
|
40
|
+
unless merge_data.kind_of?(Array) && !merge_data.empty? && merge_data[0].kind_of?(Hash)
|
41
|
+
raise ArgumentError, "Merge data must be a non empty array of hashes."
|
42
|
+
end
|
43
|
+
@merge_data = merge_data
|
44
|
+
@template = template
|
45
|
+
@merge_settings = merge_settings
|
46
|
+
end
|
47
|
+
|
48
|
+
# Converts a MergeBody instance to a hash while converting the attribute names
|
49
|
+
# from snake case to camel case.
|
50
|
+
# @return [Hash] A hash representing the MergeBody instance.
|
51
|
+
def to_camelized_hash
|
52
|
+
return {
|
53
|
+
"mergeData" => @merge_data,
|
54
|
+
"template" => @template,
|
55
|
+
"mergeSettings" => @merge_settings.nil? ? nil : merge_settings.to_camelized_hash
|
56
|
+
}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# ReportingCloud Ruby Wrapper
|
2
|
+
#
|
3
|
+
# Official wrapper (authored by Text Control GmbH, publisher of ReportingCloud) to access
|
4
|
+
# ReportingCloud in Ruby.
|
5
|
+
#
|
6
|
+
# Go to http://www.reporting.cloud to learn more about ReportingCloud
|
7
|
+
# Go to https://github.com/TextControl/txtextcontrol-reportingcloud-ruby for the
|
8
|
+
# canonical source repository.
|
9
|
+
#
|
10
|
+
# License: https://raw.githubusercontent.com/TextControl/txtextcontrol-reportingcloud-ruby/master/LICENSE.md
|
11
|
+
#
|
12
|
+
# Copyright: © 2016 Text Control GmbH
|
13
|
+
|
14
|
+
module TXTextControl
|
15
|
+
module ReportingCloud
|
16
|
+
|
17
|
+
# Holds the merge settings needed by the merge method.
|
18
|
+
# @attr remove_empty_fields [Boolean] Specifies whether empty fields
|
19
|
+
# should be removed from the template or not.
|
20
|
+
# @attr remove_empty_blocks [Boolean] Specifies whether the content of
|
21
|
+
# empty merge blocks should be removed from the template or not.
|
22
|
+
# @attr remove_empty_images [Boolean] Specifies whether images which
|
23
|
+
# don't have merge data should be removed from the template or not.
|
24
|
+
# @attr remove_trailing_whitespace [Boolean] Specifies whether trailing
|
25
|
+
# whitespace should be removed before saving a document.
|
26
|
+
# @attr author [String] The document's author.
|
27
|
+
# @attr creation_date [DateTime] The document's creation date.
|
28
|
+
# @attr creator_application [String] The application which created the document.
|
29
|
+
# @attr document_subject [String] The document's subject.
|
30
|
+
# @attr document_title [String] The document's title.
|
31
|
+
# @attr last_modification_date [DateTime] The document's last modification date.
|
32
|
+
# @attr user_password [String] The password needed to open the document.
|
33
|
+
# @author Thorsten Kummerow (@thomerow)
|
34
|
+
class MergeSettings
|
35
|
+
attr_accessor :remove_empty_fields
|
36
|
+
attr_accessor :remove_empty_blocks
|
37
|
+
attr_accessor :remove_empty_images
|
38
|
+
attr_accessor :remove_trailing_whitespace
|
39
|
+
attr_accessor :author
|
40
|
+
attr_accessor :creator_application
|
41
|
+
attr_accessor :document_subject
|
42
|
+
attr_accessor :document_title
|
43
|
+
attr_accessor :user_password
|
44
|
+
|
45
|
+
def initialize
|
46
|
+
@remove_empty_fields = true
|
47
|
+
@remove_empty_blocks = true
|
48
|
+
@remove_empty_images = true
|
49
|
+
@remove_trailing_whitespace = true
|
50
|
+
|
51
|
+
@author = nil
|
52
|
+
@creation_date = nil
|
53
|
+
@creator_application = nil
|
54
|
+
@document_subject = nil
|
55
|
+
@document_title = nil
|
56
|
+
@last_modification_date = nil
|
57
|
+
@user_password = nil
|
58
|
+
end
|
59
|
+
|
60
|
+
def creation_date
|
61
|
+
@creation_date
|
62
|
+
end
|
63
|
+
|
64
|
+
def creation_date=(val)
|
65
|
+
case val
|
66
|
+
when nil
|
67
|
+
@creation_date = nil
|
68
|
+
when String
|
69
|
+
@creation_date = DateTime.iso8601(val)
|
70
|
+
when DateTime
|
71
|
+
@creation_date = val
|
72
|
+
else raise ArgumentError, "Value must be a string or an instance of type DateTime."
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def last_modification_date
|
77
|
+
@last_modification_date
|
78
|
+
end
|
79
|
+
|
80
|
+
def last_modification_date=(val)
|
81
|
+
case val
|
82
|
+
when nil
|
83
|
+
@last_modification_date = nil
|
84
|
+
when String
|
85
|
+
@last_modification_date = DateTime.iso8601(val)
|
86
|
+
when DateTime
|
87
|
+
@last_modification_date = val
|
88
|
+
else raise ArgumentError, "Value must be a string or an instance of type DateTime."
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# Converts a MergeSettings instance to a hash while converting the attribute names
|
93
|
+
# from snake case to camel case.
|
94
|
+
# @return [Hash] A hash representing the MergeSettings instance.
|
95
|
+
def to_camelized_hash
|
96
|
+
return {
|
97
|
+
"removeEmptyFields" => @remove_empty_fields,
|
98
|
+
"removeEmptyBlocks" => @remove_empty_blocks,
|
99
|
+
"removeEmptyImages" => @remove_empty_images,
|
100
|
+
"removeTrailingWhitespace" => @remove_trailing_whitespace,
|
101
|
+
"author" => @author,
|
102
|
+
"creationDate" => @creation_date.nil? ? nil : creation_date.iso8601,
|
103
|
+
"creatorApplication" => @creator_application,
|
104
|
+
"documentSubject" => @document_subject,
|
105
|
+
"documentTitle" => @document_title,
|
106
|
+
"lastModificationDate" => @last_modification_date.nil? ? nil : last_modification_date.iso8601,
|
107
|
+
"userPassword" => @user_password
|
108
|
+
}
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,322 @@
|
|
1
|
+
# ReportingCloud Ruby Wrapper
|
2
|
+
#
|
3
|
+
# Official wrapper (authored by Text Control GmbH, publisher of ReportingCloud) to access
|
4
|
+
# ReportingCloud in Ruby.
|
5
|
+
#
|
6
|
+
# Go to http://www.reporting.cloud to learn more about ReportingCloud
|
7
|
+
# Go to https://github.com/TextControl/txtextcontrol-reportingcloud-ruby for the
|
8
|
+
# canonical source repository.
|
9
|
+
#
|
10
|
+
# License: https://raw.githubusercontent.com/TextControl/txtextcontrol-reportingcloud-ruby/master/LICENSE.md
|
11
|
+
#
|
12
|
+
# Copyright: © 2016 Text Control GmbH
|
13
|
+
|
14
|
+
require "uri"
|
15
|
+
require "net/http"
|
16
|
+
require "json"
|
17
|
+
require "ostruct"
|
18
|
+
require "cgi"
|
19
|
+
require 'txtextcontrol/reportingcloud/template'
|
20
|
+
require 'txtextcontrol/reportingcloud/account_settings'
|
21
|
+
require 'txtextcontrol/reportingcloud/template_name_validator'
|
22
|
+
require 'txtextcontrol/reportingcloud/template_data_validator'
|
23
|
+
require 'core_ext/string'
|
24
|
+
|
25
|
+
module TXTextControl
|
26
|
+
module ReportingCloud
|
27
|
+
|
28
|
+
# The main wrapper class.
|
29
|
+
# @attr username [String] The user name.
|
30
|
+
# @attr password [String] The password.
|
31
|
+
# @attr base_uri [String] The API base url. Is set to "http://api.reporting.cloud"
|
32
|
+
# by default.
|
33
|
+
# @attr api_version [String] The API version. Is set to "v1" by default.
|
34
|
+
# @attr read_timeout [Integer] The timeout for HTTP requests in seconds. Is set to
|
35
|
+
# 10 by default.
|
36
|
+
# @author Thorsten Kummerow (@thomerow)
|
37
|
+
class ReportingCloud
|
38
|
+
attr_accessor :username
|
39
|
+
attr_accessor :password
|
40
|
+
attr_accessor :base_uri
|
41
|
+
attr_accessor :api_version
|
42
|
+
attr_accessor :read_timeout
|
43
|
+
|
44
|
+
# @param username [String] The user name.
|
45
|
+
# @param password [String] The password.
|
46
|
+
# @param base_url [String] The API base url. Is set to "http://api.reporting.cloud"
|
47
|
+
# by default.
|
48
|
+
def initialize(username, password, base_url = nil)
|
49
|
+
base_url ||= DEFAULT_BASE_URI
|
50
|
+
@username = username
|
51
|
+
@password = password
|
52
|
+
@api_version = DEFAULT_VERSION
|
53
|
+
@read_timeout = DEFAULT_TIMEOUT
|
54
|
+
@base_uri = URI.parse(base_url)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Lists all templates from the template storage.
|
58
|
+
# @return [Array<Template>] An array of Template objects.
|
59
|
+
def list_templates
|
60
|
+
res = request("/templates/list", :get)
|
61
|
+
if res.kind_of? Net::HTTPSuccess
|
62
|
+
templates = Array.new
|
63
|
+
data = JSON.parse(res.body, object_class: OpenStruct)
|
64
|
+
data.each do |elem|
|
65
|
+
templates.push(Template.new(elem.templateName, elem.modified, elem.size))
|
66
|
+
end
|
67
|
+
return templates
|
68
|
+
else
|
69
|
+
raise res.body
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# Returns the number of templates in the template storage.
|
74
|
+
# @return [Integer] The number of templates in the template storage.
|
75
|
+
def get_template_count
|
76
|
+
res = request("/templates/count", :get)
|
77
|
+
if res.kind_of? Net::HTTPSuccess
|
78
|
+
return Integer(res.body)
|
79
|
+
else
|
80
|
+
raise res.body
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Merges and returns a template from the template storage or an
|
85
|
+
# uploaded template with JSON data.
|
86
|
+
# @param return_format [Symbol] The format of the created document. Possible
|
87
|
+
# values are :pdf, :rtf, :doc, :docx, :html and :tx.
|
88
|
+
# @param merge_body [MergeBody] The MergeBody object contains the datasource
|
89
|
+
# as a JSON data object and optionally, a template encoded as a Base64 string.
|
90
|
+
# @param template_name [String] The name of the template in the template storage.
|
91
|
+
# If no template name is specified, the template must be uploaded in the
|
92
|
+
# MergeBody object of this request.
|
93
|
+
# @param append [Boolean]
|
94
|
+
# @return [Array<String>] An array of the created documents as
|
95
|
+
# Base64 encoded strings.
|
96
|
+
def merge_document(merge_body, template_name = nil, return_format = :pdf, append = false)
|
97
|
+
if !template_name.to_s.empty? && !merge_body.template.nil? # .to_s.empty: check for nil or ''
|
98
|
+
raise ArgumentError, "Template name and template data must not be present at the same time."
|
99
|
+
elsif template_name.to_s.empty? && merge_body.template.nil?
|
100
|
+
raise ArgumentError, "Either a template name or template data have to be present."
|
101
|
+
end
|
102
|
+
|
103
|
+
# Create query parameters
|
104
|
+
params = {
|
105
|
+
:returnFormat => return_format,
|
106
|
+
:append => append
|
107
|
+
}
|
108
|
+
unless template_name.to_s.empty?
|
109
|
+
params[:templateName] = template_name
|
110
|
+
end
|
111
|
+
|
112
|
+
# Send request
|
113
|
+
res = request("/document/merge", :post, params, merge_body)
|
114
|
+
if res.kind_of? Net::HTTPSuccess
|
115
|
+
return JSON.parse(res.body)
|
116
|
+
else
|
117
|
+
raise res.body
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
# Returns the account settings.
|
122
|
+
# @return [AccountSettings] The account settings.
|
123
|
+
def get_account_settings
|
124
|
+
res = request("/account/settings", :get)
|
125
|
+
if res.kind_of? Net::HTTPSuccess
|
126
|
+
return AccountSettings.from_camelized_hash(JSON.parse(res.body))
|
127
|
+
else
|
128
|
+
raise res.body
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
# Returns a list of thumbnails of a specific template.
|
133
|
+
# @param template_name [String] The filename of the template in the template storage.
|
134
|
+
# @param zoom_factor [Integer] An Integer value between 1 and 400 to set the
|
135
|
+
# percentage zoom factor of the created thumbnail images.
|
136
|
+
# @param from_page [Integer] An Integer value that specifies the first page.
|
137
|
+
# @param to_page [Integer] An Integer value that specifies the last page.
|
138
|
+
# @param image_format [Symbol] Defines the image format of the returned thumbnails.
|
139
|
+
# Possible values are :png, :jpg, :gif and :bmp.
|
140
|
+
# @return [Array<String>] An array of Base64 encoded images.
|
141
|
+
def get_template_thumbnails(template_name, zoom_factor, from_page = 1, to_page = 0, image_format = :png)
|
142
|
+
# Prepare query parameters
|
143
|
+
params = {
|
144
|
+
:templateName => template_name,
|
145
|
+
:zoomFactor => zoom_factor,
|
146
|
+
:fromPage => from_page,
|
147
|
+
:toPage => to_page,
|
148
|
+
}
|
149
|
+
if image_format != :png
|
150
|
+
params[:imageFormat] = image_format
|
151
|
+
end
|
152
|
+
|
153
|
+
# Send request
|
154
|
+
res = request("/templates/thumbnails", :get, params)
|
155
|
+
if res.kind_of? Net::HTTPSuccess
|
156
|
+
return JSON.parse(res.body)
|
157
|
+
else
|
158
|
+
raise res.body
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
# Deletes a template from the template storage.
|
163
|
+
# @param template_name [String] The filename of the template to be deleted
|
164
|
+
# from the template storage.
|
165
|
+
# @return [void]
|
166
|
+
def delete_template(template_name)
|
167
|
+
# Parameter validation
|
168
|
+
TemplateNameValidator.validate(template_name)
|
169
|
+
|
170
|
+
res = request("/templates/delete", :delete, { :templateName => template_name })
|
171
|
+
unless res.kind_of? Net::HTTPSuccess
|
172
|
+
raise res.body
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
# Stores an uploaded template in the template storage (*.doc, *.docx, *.rtf and *.tx)
|
177
|
+
# @param template_name [String] The filename of the template in the template storage.
|
178
|
+
# Existing files with the same filename will be overwritten.
|
179
|
+
# @param template_data [String] A document encoded as a Base64 string.
|
180
|
+
# The supported formats are DOC, DOCX, RTF and TX.
|
181
|
+
# @return [void]
|
182
|
+
def upload_template(template_name, template_data)
|
183
|
+
# Parameter validation
|
184
|
+
TemplateNameValidator.validate(template_name)
|
185
|
+
TemplateDataValidator.validate(template_data)
|
186
|
+
|
187
|
+
res = request("/templates/upload", :post, { :templateName => template_name }, template_data)
|
188
|
+
unless res.kind_of? Net::HTTPSuccess
|
189
|
+
raise res.body
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
# Returns the selected template from the storage.
|
194
|
+
# @param template_name [String] The filename of the template in the template storage.
|
195
|
+
# @return [String] The template document data as a Base64 encoded string.
|
196
|
+
def download_template(template_name)
|
197
|
+
# Parameter validation
|
198
|
+
TemplateNameValidator.validate(template_name)
|
199
|
+
|
200
|
+
res = request("/templates/download", :get, { :templateName => template_name })
|
201
|
+
if res.kind_of? Net::HTTPSuccess
|
202
|
+
return res.body.remove_first_and_last
|
203
|
+
else
|
204
|
+
raise res.body
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
# Checks whether a template exists in the template storage.
|
209
|
+
# @param template_name [String] The filename of the template to be
|
210
|
+
# checked for availability in the template storage.
|
211
|
+
# @return [Boolean] Returns if the template with the given name exists in
|
212
|
+
# the template storage.
|
213
|
+
def template_exists?(template_name)
|
214
|
+
# Parameter validation
|
215
|
+
TemplateNameValidator.validate(template_name)
|
216
|
+
|
217
|
+
res = request("/templates/exists", :get, { :templateName => template_name })
|
218
|
+
if res.kind_of? Net::HTTPSuccess
|
219
|
+
case res.body
|
220
|
+
when "true"
|
221
|
+
return true
|
222
|
+
when "false"
|
223
|
+
return false
|
224
|
+
else raise "Unknown response value received."
|
225
|
+
end
|
226
|
+
else
|
227
|
+
raise res.body
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
# Returns the number of pages of a template in the template storage.
|
232
|
+
# @param template_name [String] The filename of the template in the template
|
233
|
+
# storage to retrieve the number of pages for.
|
234
|
+
# @return [Integer] The number of pages in the template.
|
235
|
+
def get_template_page_count(template_name)
|
236
|
+
# Parameter validation
|
237
|
+
TemplateNameValidator.validate(template_name)
|
238
|
+
|
239
|
+
res = request("/templates/pagecount", :get, { :templateName => template_name })
|
240
|
+
if res.kind_of? Net::HTTPSuccess
|
241
|
+
return Integer(res.body)
|
242
|
+
else
|
243
|
+
raise res.body
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
# Converts a document to another format.
|
248
|
+
# @param template_data [String] The source document encoded as a Base64 string.
|
249
|
+
# The supported document formats are .rtf, .doc, .docx, .html, .pdf and .tx.
|
250
|
+
# @param return_format [Symbol] The format of the created document.
|
251
|
+
# Possible values are: :pdf, :rtf, :doc, :docx, :html and :tx.
|
252
|
+
# @return [String] The created document encoded as a Base64 string.
|
253
|
+
def convert_document(template_data, return_format = :pdf)
|
254
|
+
# Parameter validation
|
255
|
+
TemplateDataValidator.validate(template_data)
|
256
|
+
|
257
|
+
res = request("/document/convert", :post, { :returnFormat => return_format }, template_data)
|
258
|
+
if res.kind_of? Net::HTTPSuccess
|
259
|
+
# Remove leading and trailing quote from string
|
260
|
+
# (inexplicably JSON.parse chokes on simple strings)
|
261
|
+
return res.body.remove_first_and_last
|
262
|
+
else
|
263
|
+
raise res.body
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
# Performs a HTTP request of a given type.
|
268
|
+
# @param request_type [Symbol] The type of the request. Possible values are :get,
|
269
|
+
# :post and :delete.
|
270
|
+
# @param params [Hash] The query parameters.
|
271
|
+
# @param body [Object, Hash, String]
|
272
|
+
# @return [Net::HTTPResponse] The HTTP response.
|
273
|
+
private
|
274
|
+
def request(request_uri, request_type = :get, params = nil, body = nil)
|
275
|
+
# Generate query string from given parameters
|
276
|
+
query_string = query_string_from_hash(params)
|
277
|
+
|
278
|
+
http = Net::HTTP.new(@base_uri.host, @base_uri.port)
|
279
|
+
http.read_timeout = read_timeout
|
280
|
+
|
281
|
+
# Get correct request type
|
282
|
+
req_type = nil
|
283
|
+
case request_type
|
284
|
+
when :get
|
285
|
+
req_type = Net::HTTP::Get
|
286
|
+
when :post
|
287
|
+
req_type = Net::HTTP::Post
|
288
|
+
when :delete
|
289
|
+
req_type = Net::HTTP::Delete
|
290
|
+
else raise "Unknown HTTP request type."
|
291
|
+
end
|
292
|
+
|
293
|
+
# Create HTTP request
|
294
|
+
req = req_type.new("/#{@api_version}#{request_uri}#{query_string}", initheader = { "Content-Type" => "application/json" })
|
295
|
+
req.basic_auth(@username, @password);
|
296
|
+
# If body data is present, use it directly if it is a string or
|
297
|
+
# else convert it to json
|
298
|
+
if !body.nil?
|
299
|
+
if body.kind_of? String
|
300
|
+
req.body = "\"" + body + "\""
|
301
|
+
elsif body.kind_of? Hash
|
302
|
+
req.body = body.to_json
|
303
|
+
elsif body.respond_to?(:to_camelized_hash)
|
304
|
+
req.body = body.to_camelized_hash.to_json
|
305
|
+
elsif body.respond_to?(:to_hash)
|
306
|
+
req.body = body.to_hash.to_json
|
307
|
+
end
|
308
|
+
end
|
309
|
+
# Send request
|
310
|
+
return http.request(req)
|
311
|
+
end
|
312
|
+
|
313
|
+
# Generates a query string from a hash
|
314
|
+
private
|
315
|
+
def query_string_from_hash(hash)
|
316
|
+
return "?" + hash.collect { |k, v| "#{k}=#{CGI::escape(v.to_s)}" }.join('&') unless hash.nil?
|
317
|
+
return ""
|
318
|
+
end
|
319
|
+
|
320
|
+
end
|
321
|
+
end
|
322
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# ReportingCloud Ruby Wrapper
|
2
|
+
#
|
3
|
+
# Official wrapper (authored by Text Control GmbH, publisher of ReportingCloud) to access
|
4
|
+
# ReportingCloud in Ruby.
|
5
|
+
#
|
6
|
+
# Go to http://www.reporting.cloud to learn more about ReportingCloud
|
7
|
+
# Go to https://github.com/TextControl/txtextcontrol-reportingcloud-ruby for the
|
8
|
+
# canonical source repository.
|
9
|
+
#
|
10
|
+
# License: https://raw.githubusercontent.com/TextControl/txtextcontrol-reportingcloud-ruby/master/LICENSE.md
|
11
|
+
#
|
12
|
+
# Copyright: © 2016 Text Control GmbH
|
13
|
+
|
14
|
+
require 'date'
|
15
|
+
|
16
|
+
module TXTextControl
|
17
|
+
module ReportingCloud
|
18
|
+
|
19
|
+
# @attr_reader template_name [String] The template file name.
|
20
|
+
# @attr_reader modified [DateTime] The date and time the template file was
|
21
|
+
# last modified.
|
22
|
+
# @attr_reader size [Integer] The size of the template file in bytes.
|
23
|
+
# @author Thorsten Kummerow (@thomerow)
|
24
|
+
class Template
|
25
|
+
attr_reader :template_name
|
26
|
+
attr_reader :modified
|
27
|
+
attr_reader :size
|
28
|
+
|
29
|
+
def initialize(template_name, modified, size)
|
30
|
+
@template_name = template_name
|
31
|
+
if modified.is_a?(DateTime)
|
32
|
+
@modified = modified
|
33
|
+
else
|
34
|
+
@modified = DateTime.iso8601(modified)
|
35
|
+
end
|
36
|
+
@size = size
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# ReportingCloud Ruby Wrapper
|
2
|
+
#
|
3
|
+
# Official wrapper (authored by Text Control GmbH, publisher of ReportingCloud) to access
|
4
|
+
# ReportingCloud in Ruby.
|
5
|
+
#
|
6
|
+
# Go to http://www.reporting.cloud to learn more about ReportingCloud
|
7
|
+
# Go to https://github.com/TextControl/txtextcontrol-reportingcloud-ruby for the
|
8
|
+
# canonical source repository.
|
9
|
+
#
|
10
|
+
# License: https://raw.githubusercontent.com/TextControl/txtextcontrol-reportingcloud-ruby/master/LICENSE.md
|
11
|
+
#
|
12
|
+
# Copyright: © 2016 Text Control GmbH
|
13
|
+
|
14
|
+
module TXTextControl
|
15
|
+
module ReportingCloud
|
16
|
+
|
17
|
+
# Internal method parameter validator class.
|
18
|
+
# @author Thorsten Kummerow (@thomerow)
|
19
|
+
class TemplateDataValidator
|
20
|
+
|
21
|
+
# Checks if a given value is a String, is not nil and not empty.
|
22
|
+
# @param template_data [String] The string to validate.
|
23
|
+
# @return [Boolean]
|
24
|
+
def self.validate(template_data)
|
25
|
+
raise ArgumentError, "Template data must be a Base64 encoded string." if !template_data.kind_of? String
|
26
|
+
raise ArgumentError, "No template data given." if template_data.to_s.empty?
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# ReportingCloud Ruby Wrapper
|
2
|
+
#
|
3
|
+
# Official wrapper (authored by Text Control GmbH, publisher of ReportingCloud) to access
|
4
|
+
# ReportingCloud in Ruby.
|
5
|
+
#
|
6
|
+
# Go to http://www.reporting.cloud to learn more about ReportingCloud
|
7
|
+
# Go to https://github.com/TextControl/txtextcontrol-reportingcloud-ruby for the
|
8
|
+
# canonical source repository.
|
9
|
+
#
|
10
|
+
# License: https://raw.githubusercontent.com/TextControl/txtextcontrol-reportingcloud-ruby/master/LICENSE.md
|
11
|
+
#
|
12
|
+
# Copyright: © 2016 Text Control GmbH
|
13
|
+
|
14
|
+
module TXTextControl
|
15
|
+
module ReportingCloud
|
16
|
+
|
17
|
+
# Internal method parameter validator class.
|
18
|
+
# @author Thorsten Kummerow (@thomerow)
|
19
|
+
class TemplateNameValidator
|
20
|
+
|
21
|
+
# Checks if a given value is a String, is not nil and not empty.
|
22
|
+
# @param template_name [String] The string to validate.
|
23
|
+
# @return [Boolean]
|
24
|
+
def self.validate(template_name)
|
25
|
+
raise ArgumentError, "Template name must be a String." if !template_name.kind_of? String
|
26
|
+
raise ArgumentError, "No template name given." if template_name.to_s.empty?
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# ReportingCloud Ruby Wrapper
|
2
|
+
#
|
3
|
+
# Official wrapper (authored by Text Control GmbH, publisher of ReportingCloud) to access
|
4
|
+
# ReportingCloud in Ruby.
|
5
|
+
#
|
6
|
+
# Go to http://www.reporting.cloud to learn more about ReportingCloud
|
7
|
+
# Go to https://github.com/TextControl/txtextcontrol-reportingcloud-ruby for the
|
8
|
+
# canonical source repository.
|
9
|
+
#
|
10
|
+
# License: https://raw.githubusercontent.com/TextControl/txtextcontrol-reportingcloud-ruby/master/LICENSE.md
|
11
|
+
#
|
12
|
+
# Copyright: © 2016 Text Control GmbH
|
13
|
+
|
14
|
+
module TXTextControl
|
15
|
+
module ReportingCloud
|
16
|
+
VERSION = "1.0.0"
|
17
|
+
end
|
18
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'txtextcontrol/reportingcloud/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "txtextcontrol-reportingcloud"
|
8
|
+
spec.version = TXTextControl::ReportingCloud::VERSION
|
9
|
+
spec.authors = ["Thorsten Kummerow"]
|
10
|
+
spec.email = ["thorsten@textcontrol.com"]
|
11
|
+
|
12
|
+
spec.summary = "ReportingCloud Ruby Wrapper"
|
13
|
+
spec.description = "Official wrapper (authored by Text Control GmbH, publisher of ReportingCloud) to access ReportingCloud in Ruby."
|
14
|
+
spec.homepage = "http://www.reporting.cloud"
|
15
|
+
spec.licenses = ["BSD-2-Clause"]
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
spec.bindir = "exe"
|
19
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_development_dependency "bundler", "~> 1.12"
|
23
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
24
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: txtextcontrol-reportingcloud
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Thorsten Kummerow
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-06-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.12'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.12'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
description: Official wrapper (authored by Text Control GmbH, publisher of ReportingCloud)
|
56
|
+
to access ReportingCloud in Ruby.
|
57
|
+
email:
|
58
|
+
- thorsten@textcontrol.com
|
59
|
+
executables: []
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- ".gitignore"
|
64
|
+
- ".rspec"
|
65
|
+
- ".travis.yml"
|
66
|
+
- ".vscode/settings.json"
|
67
|
+
- Gemfile
|
68
|
+
- LICENSE.md
|
69
|
+
- README.md
|
70
|
+
- Rakefile
|
71
|
+
- bin/console
|
72
|
+
- bin/setup
|
73
|
+
- lib/core_ext/string.rb
|
74
|
+
- lib/txtextcontrol/reportingcloud.rb
|
75
|
+
- lib/txtextcontrol/reportingcloud/account_settings.rb
|
76
|
+
- lib/txtextcontrol/reportingcloud/merge_body.rb
|
77
|
+
- lib/txtextcontrol/reportingcloud/merge_settings.rb
|
78
|
+
- lib/txtextcontrol/reportingcloud/reportingcloud.rb
|
79
|
+
- lib/txtextcontrol/reportingcloud/template.rb
|
80
|
+
- lib/txtextcontrol/reportingcloud/template_data_validator.rb
|
81
|
+
- lib/txtextcontrol/reportingcloud/template_name_validator.rb
|
82
|
+
- lib/txtextcontrol/reportingcloud/version.rb
|
83
|
+
- resource/rc_logo_1024.png
|
84
|
+
- resource/rc_logo_256.png
|
85
|
+
- resource/rc_logo_512.png
|
86
|
+
- txtextcontrol-reportingcloud.gemspec
|
87
|
+
homepage: http://www.reporting.cloud
|
88
|
+
licenses:
|
89
|
+
- BSD-2-Clause
|
90
|
+
metadata: {}
|
91
|
+
post_install_message:
|
92
|
+
rdoc_options: []
|
93
|
+
require_paths:
|
94
|
+
- lib
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
requirements: []
|
106
|
+
rubyforge_project:
|
107
|
+
rubygems_version: 2.5.1
|
108
|
+
signing_key:
|
109
|
+
specification_version: 4
|
110
|
+
summary: ReportingCloud Ruby Wrapper
|
111
|
+
test_files: []
|
112
|
+
has_rdoc:
|