tour_cms_api 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e9755cbf0a64d81fc71b84e41de66aefb90e6460a4de6b591173666566d6b468
4
+ data.tar.gz: d3b77c59e8155ac6bad5ad6d17d465d766e34e5b76ed82951c6ee6d2f2ee787c
5
+ SHA512:
6
+ metadata.gz: f21714e56efb5290f83148e37d947895d7403b4e5a6df8916532150d12716b8137feea53f5512c86aca73f86dd0416fe8c879a8b84abb80f7ece5e49199bf618
7
+ data.tar.gz: bb6b66115dc704921d593365a4a2866e1209de646adc4c6ca3c2e55b41af35cbd272efe0049b298d2836ff0a27c5577d5c82c06ceb5978f2f6bad19461960934
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+ gem 'activesupport', ">= 3.0.0"
6
+
7
+ # Add dependencies to develop your gem here.
8
+ # Include everything needed to run rake, tests, features, etc.
9
+ group :development do
10
+ gem "shoulda", ">= 0"
11
+ gem "bundler", "~> 2.3.8"
12
+ gem "jeweler", "~> 2.3.9"
13
+ if RUBY_VERSION > '1.9' then
14
+ gem 'simplecov', '>= 0.8.2'
15
+ else
16
+ gem 'rcov', '>= 0'
17
+ end
18
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,91 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activesupport (6.1.5.1)
5
+ concurrent-ruby (~> 1.0, >= 1.0.2)
6
+ i18n (>= 1.6, < 2)
7
+ minitest (>= 5.1)
8
+ tzinfo (~> 2.0)
9
+ zeitwerk (~> 2.3)
10
+ addressable (2.4.0)
11
+ builder (3.2.4)
12
+ concurrent-ruby (1.1.10)
13
+ descendants_tracker (0.0.4)
14
+ thread_safe (~> 0.3, >= 0.3.1)
15
+ docile (1.4.0)
16
+ faraday (0.9.2)
17
+ multipart-post (>= 1.2, < 3)
18
+ git (1.11.0)
19
+ rchardet (~> 1.8)
20
+ github_api (0.16.0)
21
+ addressable (~> 2.4.0)
22
+ descendants_tracker (~> 0.0.4)
23
+ faraday (~> 0.8, < 0.10)
24
+ hashie (>= 3.4)
25
+ mime-types (>= 1.16, < 3.0)
26
+ oauth2 (~> 1.0)
27
+ hashie (5.0.0)
28
+ highline (2.0.3)
29
+ i18n (1.10.0)
30
+ concurrent-ruby (~> 1.0)
31
+ jeweler (2.3.9)
32
+ builder
33
+ bundler
34
+ git (>= 1.2.5)
35
+ github_api (~> 0.16.0)
36
+ highline (>= 1.6.15)
37
+ nokogiri (>= 1.5.10)
38
+ psych
39
+ rake
40
+ rdoc
41
+ semver2
42
+ jwt (2.3.0)
43
+ mime-types (2.99.3)
44
+ mini_portile2 (2.8.0)
45
+ minitest (5.15.0)
46
+ multi_json (1.15.0)
47
+ multi_xml (0.6.0)
48
+ multipart-post (2.1.1)
49
+ nokogiri (1.13.4)
50
+ mini_portile2 (~> 2.8.0)
51
+ racc (~> 1.4)
52
+ oauth2 (1.4.8)
53
+ faraday (>= 0.8, < 3.0)
54
+ jwt (>= 1.0, < 3.0)
55
+ multi_json (~> 1.3)
56
+ multi_xml (~> 0.5)
57
+ rack (>= 1.2, < 3)
58
+ psych (4.0.3)
59
+ stringio
60
+ racc (1.6.0)
61
+ rack (2.2.3)
62
+ rake (13.0.6)
63
+ rchardet (1.8.0)
64
+ rdoc (6.4.0)
65
+ psych (>= 4.0.0)
66
+ semver2 (3.4.2)
67
+ shoulda (2.11.3)
68
+ simplecov (0.21.2)
69
+ docile (~> 1.1)
70
+ simplecov-html (~> 0.11)
71
+ simplecov_json_formatter (~> 0.1)
72
+ simplecov-html (0.12.3)
73
+ simplecov_json_formatter (0.1.4)
74
+ stringio (3.0.1)
75
+ thread_safe (0.3.6)
76
+ tzinfo (2.0.4)
77
+ concurrent-ruby (~> 1.0)
78
+ zeitwerk (2.5.4)
79
+
80
+ PLATFORMS
81
+ ruby
82
+
83
+ DEPENDENCIES
84
+ activesupport (>= 3.0.0)
85
+ bundler (~> 2.3.8)
86
+ jeweler (~> 2.3.9)
87
+ shoulda
88
+ simplecov (>= 0.8.2)
89
+
90
+ BUNDLED WITH
91
+ 2.3.8
data/LICENSE.txt ADDED
@@ -0,0 +1,18 @@
1
+ Permission is hereby granted, free of charge, to any person obtaining
2
+ a copy of this software and associated documentation files (the
3
+ "Software"), to deal in the Software without restriction, including
4
+ without limitation the rights to use, copy, modify, merge, publish,
5
+ distribute, sublicense, and/or sell copies of the Software, and to
6
+ permit persons to whom the Software is furnished to do so, subject to
7
+ the following conditions:
8
+
9
+ The above copyright notice and this permission notice shall be
10
+ included in all copies or substantial portions of the Software.
11
+
12
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,96 @@
1
+ # tourcms
2
+
3
+ A simple wrapper for connecting to [TourCMS Marketplace API](http://www.tourcms.com/support/api/mp/). This wrapper mirrors the TourCMS PHP library.
4
+
5
+ ## Install
6
+
7
+ gem install tour_cms
8
+
9
+ ## Usage
10
+
11
+ Using the library is as simple as creating a **TourCMS::Connection** object:
12
+
13
+ conn = TourCMS::Connection.new(marketplace_id, private_key, result_type)
14
+
15
+ Your Marketplace ID and Private Key can be found in the TourCMS Partner Portal. The result type can be one of **hash** or **raw** where **raw** will return the raw XML from the API and **hash** will return a Ruby Hash of the result.
16
+
17
+ ### Working with your connection in Raw mode
18
+
19
+ # Instantiate the connection
20
+ conn = TourCMS::Connection.new("12345", "mydeepsecret", "raw")
21
+ # Check we're working
22
+ conn.api_rate_limit_status
23
+ => "<?xml version="1.0" encoding="utf-8" ?><response><request>GET /api/rate_limit_status.xml</request>
24
+ <error>OK</error><remaining_hits>1999</remaining_hits><hourly_limit>2000</hourly_limit></response>"
25
+ # List the channels we have access to
26
+ conn.list_channels
27
+ => "<?xml version="1.0" encoding="utf-8" ?><response><request>GET /p/channels/list.xml</request>
28
+ <error>OK</error><channel>(...)</channel><channel>(...)</channel><channel>(...)</channel></response>"
29
+ # Show a particular channel
30
+ conn.show_channel(1234567)
31
+ => "<?xml version="1.0" encoding="utf-8" ?><response><request>GET /p/channels/list.xml</request>
32
+ <error>OK</error><channel>(...)</channel></response>"
33
+
34
+ ### Working with your connection in Hash mode
35
+
36
+ # Instantiate the connection
37
+ conn = TourCMS::Connection.new("12345", "mydeepsecret", "hash")
38
+ # Check we're working
39
+ obj = conn.api_rate_limit_status
40
+ => {:request=>"GET /api/rate_limit_status.xml", :remaining_hits=>1999, :error=>"OK", :hourly_limit=>2000}
41
+ obj[:hourly_limit]
42
+ => 2000
43
+ # List the channels we have access to
44
+ obj = conn.list_channels
45
+ => {Hash of all connected TourCMS channels and their properties}
46
+ # See how many TourCMS channels you're connected to.
47
+ obj['channel'].count
48
+ => 100
49
+ obj['channel'].first['channel_name']
50
+ => "My Adventure Tour Operator"
51
+ # Show a particular channel
52
+ obj = conn.show_channel(1234567)
53
+ obj[:channel][:channel_id]
54
+ => "1234567"
55
+ # Search for all tours in GB
56
+ obj = conn.search_tours({:country => "PT", :per_page => "10", :page => "1"})
57
+ obj['tour'].first['tour_name']
58
+ => "Canyoning"
59
+
60
+ ### Passing parameters
61
+
62
+ Many TourCMS methods accept parameters. Most methods take a hash of parameters like so:
63
+
64
+ obj = conn.search_tours({:country => "PT", :per_page => "10", :page => "1"})
65
+
66
+ ## List of functions in TourCMS::Connection
67
+
68
+ * api\_rate\_limit\_status
69
+ * list\_channels
70
+ * show\_channel
71
+ * search\_tours
72
+ * search\_hotels\_range
73
+ * search\_hotels\_specific
74
+ * list\_tours
75
+ * list\_tour\_images
76
+ * show\_tour
77
+ * show\_tour\_departures
78
+ * show\_tour\_freesale
79
+
80
+ ## Dependencies
81
+
82
+ This gem depends on ActiveSupport 3.0.0+
83
+
84
+ ## Contributing to tourcms
85
+
86
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
87
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
88
+ * Fork the project
89
+ * Start a feature/bugfix branch
90
+ * Commit and push until you are happy with your contribution
91
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
92
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
93
+
94
+ ## Copyright
95
+
96
+ See LICENSE.txt for further details.
data/Rakefile ADDED
@@ -0,0 +1,49 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'rake'
11
+
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |gem|
14
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
+ gem.name = "tour_cms"
16
+ gem.homepage = "https://github.com/luispimenta/tour_cms"
17
+ gem.license = "MIT"
18
+ gem.summary = %Q{A Ruby Library for the TourCMS API}
19
+ gem.description = %Q{A simple Ruby wrapper for interacting with the TourCMS API}
20
+ gem.email = "email@luispimenta.me"
21
+ gem.authors = ["Luis Pimenta"]
22
+ end
23
+ Jeweler::RubygemsDotOrgTasks.new
24
+
25
+ require 'rake/testtask'
26
+ Rake::TestTask.new(:test) do |test|
27
+ test.libs << 'lib' << 'test'
28
+ test.pattern = 'test/**/test_*.rb'
29
+ test.verbose = true
30
+ end
31
+
32
+ require 'rcov/rcovtask'
33
+ Rcov::RcovTask.new do |test|
34
+ test.libs << 'test'
35
+ test.pattern = 'test/**/test_*.rb'
36
+ test.verbose = true
37
+ end
38
+
39
+ task :default => :test
40
+
41
+ require 'rake/rdoctask'
42
+ Rake::RDocTask.new do |rdoc|
43
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
+
45
+ rdoc.rdoc_dir = 'rdoc'
46
+ rdoc.title = "tour_cms #{version}"
47
+ rdoc.rdoc_files.include('README*')
48
+ rdoc.rdoc_files.include('lib/**/*.rb')
49
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -0,0 +1,97 @@
1
+ module TourCMS
2
+ class Connection
3
+ def initialize(marketp_id, private_key, result_type = "raw")
4
+ Integer(marketp_id) rescue raise ArgumentError, "Marketplace ID must be an Integer"
5
+ @marketp_id = marketp_id
6
+ @private_key = private_key
7
+ @result_type = result_type
8
+ @base_url = "https://api.tourcms.com"
9
+ end
10
+
11
+ def api_rate_limit_status(channel = 0)
12
+ request("/api/rate_limit_status.xml", channel)
13
+ end
14
+
15
+ def list_channels
16
+ request("/p/channels/list.xml")
17
+ end
18
+
19
+ def show_channel(channel)
20
+ request("/c/channel/show.xml", channel)
21
+ end
22
+
23
+ def search_tours(params = {}, channel = 0)
24
+ if channel == 0
25
+ request("/p/tours/search.xml", 0, params)
26
+ else
27
+ request("/c/tours/search.xml", channel, params)
28
+ end
29
+ end
30
+
31
+ def search_hotels_range(params = {}, tour = "", channel = 0)
32
+ if channel == 0
33
+ request("/p/hotels/search_range.xml", 0, params.merge({"single_tour_id" => tour}))
34
+ else
35
+ request("/c/hotels/search_range.xml", channel, params.merge({"single_tour_id" => tour}))
36
+ end
37
+ end
38
+
39
+ def search_hotels_specific(params = {}, tour = "", channel = 0)
40
+ if channel == 0
41
+ request("/p/hotels/search-avail.xml", 0, params.merge({"single_tour_id" => tour}))
42
+ else
43
+ request("/c/hotels/search-avail.xml", channel, params.merge({"single_tour_id" => tour}))
44
+ end
45
+ end
46
+
47
+ def list_tours(channel = 0)
48
+ if channel == 0
49
+ request("/p/tours/list.xml")
50
+ else
51
+ request("/c/tours/list.xml", channel)
52
+ end
53
+ end
54
+
55
+ def list_tour_images(channel = 0)
56
+ if channel == 0
57
+ request("/p/tours/images/list.xml")
58
+ else
59
+ request("/c/tours/images/list.xml", channel)
60
+ end
61
+ end
62
+
63
+ def show_tour(tour, channel)
64
+ request("/c/tour/show.xml", channel, {"id" => tour})
65
+ end
66
+
67
+ def show_tour_departures(tour, channel)
68
+ request("/c/tour/datesprices/dep/show.xml", channel, {"id" => tour})
69
+ end
70
+
71
+ def show_tour_freesale(tour, channel)
72
+ request("/c/tour/datesprices/freesale/show.xml", channel, {"id" => tour})
73
+ end
74
+
75
+ private
76
+
77
+ def generate_signature(path, verb, channel, outbound_time)
78
+ string_to_sign = "#{channel}/#{@marketp_id}/#{verb}/#{outbound_time}#{path}".strip
79
+
80
+ dig = OpenSSL::HMAC.digest('sha256', @private_key, string_to_sign)
81
+ b64 = Base64.encode64(dig).chomp
82
+ CGI.escape(b64).gsub("+", "%20")
83
+ end
84
+
85
+ def request(path, channel = 0, params = {}, verb = "GET")
86
+ url = @base_url + path + "?#{params.to_query}"
87
+ req_time = Time.now.utc
88
+ signature = generate_signature(path + "?#{params.to_query}", verb, channel, req_time.to_i)
89
+
90
+ headers = {"Content-type" => "text/xml", "charset" => "utf-8", "Date" => req_time.strftime("%a, %d %b %Y %H:%M:%S GMT"),
91
+ "Authorization" => "TourCMS #{channel}:#{@marketp_id}:#{signature}" }
92
+
93
+ response = open(url, headers).read
94
+ @result_type == "raw" ? response : Hash.from_xml(response)["response"]
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,12 @@
1
+ $: << File.dirname(__FILE__)
2
+
3
+ require 'active_support'
4
+ require 'active_support/core_ext'
5
+
6
+ require 'openssl'
7
+ require 'base64'
8
+ require 'cgi'
9
+ require 'open-uri'
10
+ require 'rubygems'
11
+
12
+ require 'tour_cms/connection'
data/test/helper.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+ require 'tourcms'
16
+
17
+ class Test::Unit::TestCase
18
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestTourcms < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
data/tour_cms.gemspec ADDED
@@ -0,0 +1,65 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "tour_cms_api"
8
+ s.version = "1.0.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Luis Pimenta"]
12
+ s.date = %q{2022-04-30}
13
+ s.description = %q{A simple Ruby wrapper for interacting with the TourCMS API}
14
+ s.email = %q{email@luispimenta.me}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ "Gemfile",
21
+ "Gemfile.lock",
22
+ "LICENSE.txt",
23
+ "README.md",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "lib/tour_cms/connection.rb",
27
+ "lib/tour_cms_api.rb",
28
+ "test/helper.rb",
29
+ "test/test_tourcms.rb",
30
+ "tour_cms.gemspec"
31
+ ]
32
+ s.homepage = %q{https://github.com/luispimenta/tour_cms}
33
+ s.licenses = ["MIT"]
34
+ s.require_paths = ["lib"]
35
+ s.rubygems_version = %q{1.7.2}
36
+ s.summary = %q{A Ruby Library for the TourCMS API}
37
+ s.test_files = [
38
+ "test/helper.rb",
39
+ "test/test_tourcms.rb"
40
+ ]
41
+
42
+ if s.respond_to? :specification_version then
43
+ s.specification_version = 3
44
+
45
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
+ s.add_runtime_dependency(%q<activesupport>, [">= 3.0.0"])
47
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
48
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
49
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
50
+ s.add_development_dependency(%q<rcov>, [">= 0"])
51
+ else
52
+ s.add_dependency(%q<activesupport>, [">= 3.0.0"])
53
+ s.add_dependency(%q<shoulda>, [">= 0"])
54
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
55
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
56
+ s.add_dependency(%q<rcov>, [">= 0"])
57
+ end
58
+ else
59
+ s.add_dependency(%q<activesupport>, [">= 3.0.0"])
60
+ s.add_dependency(%q<shoulda>, [">= 0"])
61
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
62
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
63
+ s.add_dependency(%q<rcov>, [">= 0"])
64
+ end
65
+ end
metadata ADDED
@@ -0,0 +1,127 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tour_cms_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Luis Pimenta
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-04-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 3.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: shoulda
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: jeweler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.5.2
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.5.2
69
+ - !ruby/object:Gem::Dependency
70
+ name: rcov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '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'
83
+ description: A simple Ruby wrapper for interacting with the TourCMS API
84
+ email: email@luispimenta.me
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files:
88
+ - LICENSE.txt
89
+ - README.md
90
+ files:
91
+ - Gemfile
92
+ - Gemfile.lock
93
+ - LICENSE.txt
94
+ - README.md
95
+ - Rakefile
96
+ - VERSION
97
+ - lib/tour_cms/connection.rb
98
+ - lib/tour_cms_api.rb
99
+ - test/helper.rb
100
+ - test/test_tourcms.rb
101
+ - tour_cms.gemspec
102
+ homepage: https://github.com/luispimenta/tour_cms
103
+ licenses:
104
+ - MIT
105
+ metadata: {}
106
+ post_install_message:
107
+ rdoc_options: []
108
+ require_paths:
109
+ - lib
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirements: []
121
+ rubygems_version: 3.0.3.1
122
+ signing_key:
123
+ specification_version: 3
124
+ summary: A Ruby Library for the TourCMS API
125
+ test_files:
126
+ - test/helper.rb
127
+ - test/test_tourcms.rb