mondo 0.1.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
+ SHA1:
3
+ metadata.gz: f0ad81c1a965f26c73a422a50269614cfc126a41
4
+ data.tar.gz: 2f28b956a9746dac9c368ea4089e04816312ef64
5
+ SHA512:
6
+ metadata.gz: 672dbe7dae1285eab18e90d6bdef348ced0bc66abc09c43491fc0bfc0d88a5180f76ffc16ba5a727ec54450cbdd1ca5644431a8511ba69a0613376f469161a1c
7
+ data.tar.gz: 4ceba43608623a96f5b58e161014a7a7b4452c04731a5890d98ea78c3dabe11cff3c636bff91b94524760ea542fd73ce767d2f57bef5754befe695211673bf3e
data/.gitignore ADDED
@@ -0,0 +1,13 @@
1
+ lib/*seed*.rb
2
+ lib/example.rb
3
+ lib/*test*.rb
4
+ doc/
5
+ Gemfile.lock
6
+ mondo*.gem
7
+ .yardoc
8
+ .yardopts
9
+ mondo-*.gem
10
+ mondo-ruby.zip
11
+ .rvmrc
12
+ .rbx
13
+ .bundle
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,15 @@
1
+ script: "rake spec"
2
+ rvm:
3
+ - 2.1.0
4
+ - 2.0.0
5
+ - 1.9.3
6
+ - 1.9.2
7
+ - jruby-19mode
8
+ - rbx-2
9
+ install:
10
+ - bundle install --retry=3
11
+ notifications:
12
+ email:
13
+ recipients:
14
+ - engineering@getmondo.co.uk
15
+
data/CHANGELOG.md ADDED
@@ -0,0 +1,4 @@
1
+ ## 0.1.0 - September 12, 2015
2
+
3
+ - Initial release
4
+
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :development do
6
+ gem "guard", "~> 0.8.8"
7
+ gem "rspec", "~> 3.1"
8
+ if RUBY_PLATFORM.downcase.include?("darwin")
9
+ gem "guard-rspec", "~> 0.5.4"
10
+ gem "rb-fsevent", "~> 0.9"
11
+ gem "growl", "~> 1.0.3"
12
+ end
13
+ end
data/Guardfile ADDED
@@ -0,0 +1,6 @@
1
+ guard 'rspec', :version => 2, :cli => '--color --format doc' do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/mondo/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
4
+ watch('lib/mondo.rb') { "spec/mondo_spec.rb" }
5
+ watch('spec/spec_helper.rb') { "spec" }
6
+ end
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Mondo (Focus FS Ltd)
2
+
3
+ Permission is hereby granted, free of charge, to any person
4
+ obtaining a copy of this software and associated documentation
5
+ files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use,
7
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the
9
+ Software is furnished to do so, subject to the following
10
+ conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,85 @@
1
+ # Mondo Ruby Client
2
+
3
+ The Mondo Ruby client provides a simple Ruby interface to the Mondo API.
4
+
5
+ API documentation, usage guides, and setup information can be found at [getmondo.co.uk/docs](https://getmondo.co.uk/docs/).
6
+
7
+ ## Initialize your client
8
+
9
+ ```ruby
10
+ mondo = Mondo::Client.new(
11
+ token: YOUR_TOKEN,
12
+ account_id: YOUR_ACCOUNT_ID
13
+ )
14
+ ```
15
+
16
+ ## Configure a different API URL
17
+ ```ruby
18
+ mondo.api_url = "https://otherurl.com"
19
+ ```
20
+
21
+ ## Ping
22
+
23
+ Check your client is configured correctly
24
+
25
+ ```ruby
26
+ mondo.ping
27
+ => "pong"
28
+ ```
29
+
30
+ ## List Transactions
31
+
32
+ ```ruby
33
+ mondo.transactions
34
+ => [
35
+ #<Mondo::Transaction -7GBP LOWER EAST SIDE DELI LONDON EC2A GBR tx_00008zphrT5MZQoOhLbTur>,
36
+ #<Mondo::Transaction -5GBP SACAT MARKS & SPENCER LONDON GBR tx_00008zqEXy8SiMLdEqVVmT>,
37
+ #<Mondo::Transaction -31GBP OZONE COFFEE ROASTERS UNITED KINGDO GBR tx_00008zrYsmW9IVgPz3bUiv>,
38
+ #<Mondo::Transaction -26GBP LAN TANA LONDON GBR tx_00008zru1CYoS6lW6nhpeD>,
39
+ #<Mondo::Transaction -5GBP PRET A MANGER LONDON GBR tx_00008zvemPnUEdNo8attNB>,
40
+ #<Mondo::Transaction -4GBP EXPRESS OFF LICENSE LONDON GBR tx_00008zxnkK6vh3rvN38W6z>,
41
+ #<Mondo::Transaction -13GBP LOWER EAST SIDE DELI LONDON EC2A GBR tx_00008zy3PP7LTxxiXVEXAn>,
42
+ #<Mondo::Transaction -6GBP OZONE COFFEE ROASTERS LONDON GBR tx_00008zy8VxynHJGWOqY3aD>,
43
+ #<Mondo::Transaction -28GBP FGW SELF SERVICE PADDINGTON GBR tx_00008zyGtoILjhPUwlZli5>,
44
+ #<Mondo::Transaction -6GBP EXPRESS OFF LICENSE LONDON GBR tx_00008zzwuRFvGsQCml15Kj>
45
+ ]
46
+
47
+ mondo.transactions(expand: :merchant, limit: 3, since: "2015-08-10T23:00:00Z")
48
+ => [
49
+ #<Mondo::Transaction -6GBP OZONE COFFEE ROASTERS LONDON GBR tx_00008zy8VxynHJGWOqY3aD>,
50
+ #<Mondo::Transaction -28GBP FGW SELF SERVICE PADDINGTON GBR tx_00008zyGtoILjhPUwlZli5>,
51
+ #<Mondo::Transaction -6GBP EXPRESS OFF LICENSE LONDON GBR tx_00008zzwuRFvGsQCml15Kj>
52
+ ]
53
+
54
+ # TODO - make a Merchant object
55
+ mondo.transactions.last.merchant
56
+ =>
57
+ {
58
+ "id"=>"merch_00008z40hJLCkWMs15lQDx",
59
+ "group_id"=>"grp_00008yEdbBXWcsqVNdftbd",
60
+ "created"=>"2015-08-15T11:07:04Z",
61
+ "name"=>"East Midlands Trains",
62
+ "logo"=>"https://pbs.twimg.com/profile_images/532472643694235648/vxJSda4F_400x400.png",
63
+ "address"=>{
64
+ "address"=>"St Pancras Station",
65
+ "city"=>"London",
66
+ "region"=>"",
67
+ "country"=>"GBR",
68
+ "postcode"=>"NW1 2QP",
69
+ "latitude"=>51.531427,
70
+ "longitude"=>-0.126133
71
+ }
72
+ }
73
+ ```
74
+
75
+ ## Update Transaction Tags
76
+
77
+ ```ruby
78
+ tx = mondo.transactions.first
79
+
80
+ # You can store deeply-nested key-value data on metadata. All values are stored & returned as strings.
81
+ tx.metadata[:tags] += "#expenses" # tag this "expenses"
82
+
83
+ tx.save_metadata
84
+ => true
85
+ ```
data/Rakefile ADDED
@@ -0,0 +1,82 @@
1
+ require 'yard'
2
+ require 'rspec/core/rake_task'
3
+
4
+ desc "Generate YARD documentation"
5
+ YARD::Rake::YardocTask.new do |t|
6
+ files = ['lib/**/*.rb', '-', 'CHANGELOG.md', 'LICENSE']
7
+ t.files = files.reject { |f| f =~ /seed|example/ }
8
+ end
9
+
10
+ desc "Run an IRB session with mondo pre-loaded"
11
+ task :console do
12
+ exec "irb -I lib -r mondo"
13
+ end
14
+
15
+ desc "Run the specs"
16
+ RSpec::Core::RakeTask.new(:spec) do |t|
17
+ t.rspec_opts = %w[--color]
18
+ end
19
+
20
+
21
+ def generate_changelog(last_version, new_version)
22
+ commits = `git log v#{last_version}.. --oneline`.split("\n")
23
+ msgs = commits.map { |commit| commit.sub(/^[a-f0-9]+/, '-') }
24
+ date = Time.now.strftime("%B %d, %Y")
25
+ "## #{new_version} - #{date}\n\n#{msgs.join("\n")}\n\n\n"
26
+ end
27
+
28
+ def update_changelog(last_version, new_version)
29
+ contents = File.read('CHANGELOG.md')
30
+ if contents =~ /## #{new_version}/
31
+ puts "CHANGELOG already contains v#{new_version}, skipping"
32
+ return false
33
+ end
34
+ changelog = generate_changelog(last_version, new_version)
35
+ File.open('CHANGELOG.md', 'w') { |f| f.write(changelog + contents) }
36
+ end
37
+
38
+ def update_version_file(new_version)
39
+ path = "lib/#{Dir.glob('*.gemspec').first.split('.').first}/version.rb"
40
+ contents = File.read(path)
41
+ contents.sub!(/VERSION\s+=\s+["'][\d\.]+["']/, "VERSION = '#{new_version}'")
42
+ File.open(path, 'w') { |f| f.write(contents) }
43
+ end
44
+
45
+ def bump_version(part)
46
+ last_version = `git tag -l --sort=v:refname | tail -1`.strip.sub(/^v/, '')
47
+ major, minor, patch = last_version.scan(/\d+/).map(&:to_i)
48
+
49
+ case part
50
+ when :major
51
+ major += 1
52
+ minor = patch = 0
53
+ when :minor
54
+ minor += 1
55
+ patch = 0
56
+ when :patch
57
+ patch += 1
58
+ end
59
+ new_version = "#{major}.#{minor}.#{patch}"
60
+
61
+ update_changelog(last_version, new_version)
62
+ puts "Updated CHANGELOG"
63
+
64
+ update_version_file(new_version)
65
+ puts "Updated version.rb"
66
+ end
67
+
68
+ desc "Update the version, auto-generating the changelog"
69
+ namespace :version do
70
+ namespace :bump do
71
+ task :major do
72
+ bump_version :major
73
+ end
74
+ task :minor do
75
+ bump_version :minor
76
+ end
77
+ task :patch do
78
+ bump_version :patch
79
+ end
80
+ end
81
+ end
82
+
@@ -0,0 +1,157 @@
1
+ require 'multi_json'
2
+ require 'oauth2'
3
+ require 'openssl'
4
+ require 'uri'
5
+ require 'cgi'
6
+ require 'time'
7
+ require 'base64'
8
+
9
+ module Mondo
10
+ class Client
11
+ DEFAULT_API_URL = 'https://api.getmondo.co.uk'
12
+
13
+ attr_accessor :access_token, :account_id, :api_url
14
+
15
+ def initialize(args = {})
16
+ Utils.symbolize_keys! args
17
+ self.access_token = args.fetch(:token)
18
+ self.account_id = args.fetch(:account_id, nil)
19
+ self.api_url = args.fetch(:api_url, DEFAULT_API_URL)
20
+ raise ClientError.new("You must provide a token") unless self.access_token
21
+ end
22
+
23
+ # Replies "pong"
24
+ def ping
25
+ api_request(:get, "/ping").parsed["ping"]
26
+ end
27
+
28
+ # Issue an GET request to the API server
29
+ #
30
+ # @note this method is for internal use
31
+ # @param [String] path the path that will be added to the API prefix
32
+ # @param [Hash] params query string parameters
33
+ # @return [Hash] hash the parsed response data
34
+ def api_get(path, params = {})
35
+ api_request(:get, path, :params => params)
36
+ end
37
+
38
+ # Issue a POST request to the API server
39
+ #
40
+ # @note this method is for internal use
41
+ # @param [String] path the path that will be added to the API prefix
42
+ # @param [Hash] data a hash of data that will be sent as the request body
43
+ # @return [Hash] hash the parsed response data
44
+ def api_post(path, data = {})
45
+ api_request(:post, path, :data => data)
46
+ end
47
+
48
+ # Issue a PUT request to the API server
49
+ #
50
+ # @note this method is for internal use
51
+ # @param [String] path the path that will be added to the API prefix
52
+ # @param [Hash] data a hash of data that will be sent as the request body
53
+ # @return [Hash] hash the parsed response data
54
+ def api_put(path, data = {})
55
+ api_request(:put, path, :data => data)
56
+ end
57
+
58
+ # Issue a PATCH request to the API server
59
+ #
60
+ # @note this method is for internal use
61
+ # @param [String] path the path that will be added to the API prefix
62
+ # @param [Hash] data a hash of data that will be sent as the request body
63
+ # @return [Hash] hash the parsed response data
64
+ def api_patch(path, data = {})
65
+ api_request(:patch, path, :data => data)
66
+ end
67
+
68
+ # Issue a DELETE request to the API server
69
+ #
70
+ # @note this method is for internal use
71
+ # @param [String] path the path that will be added to the API prefix
72
+ # @param [Hash] data a hash of data that will be sent as the request body
73
+ # @return [Hash] hash the parsed response data
74
+ def api_delete(path, data = {})
75
+ api_request(:delete, path, :data => data)
76
+ end
77
+
78
+ # Issue a request to the API server, returning the full response
79
+ #
80
+ # @note this method is for internal use
81
+ # @param [Symbol] method the HTTP method to use (e.g. +:get+, +:post+)
82
+ # @param [String] path the path that will be added to the API prefix
83
+ # @option [Hash] opts additional request options (e.g. form data, params)
84
+ def api_request(method, path, opts = {})
85
+ request(method, path, opts)
86
+ end
87
+
88
+ # @method transaction
89
+ # @return [Transactions] all transactions for this user
90
+ def transactions(opts = {})
91
+ raise ClientError.new("You must provide an account id to query transactions") unless self.account_id
92
+ opts.merge!(account_id: self.account_id)
93
+ resp = api_get("/transactions", opts)
94
+ return resp unless resp.error.nil?
95
+ resp.parsed["transactions"].map { |tx| Transaction.new(tx, self) }
96
+ end
97
+
98
+ def user_agent
99
+ @user_agent ||=
100
+ begin
101
+ gem_info = "mondo-ruby/v#{Mondo::VERSION}"
102
+ ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'ruby'
103
+ ruby_version = RUBY_VERSION
104
+ ruby_version += " p#{RUBY_PATCHLEVEL}" if defined?(RUBY_PATCHLEVEL)
105
+ comment = ["#{ruby_engine} #{ruby_version}"]
106
+ comment << RUBY_PLATFORM if defined?(RUBY_PLATFORM)
107
+ "#{gem_info} (#{comment.join("; ")})"
108
+ end
109
+ end
110
+
111
+ private
112
+
113
+ # Send a request to the Mondo API servers
114
+ #
115
+ # @param [Symbol] method the HTTP method to use (e.g. +:get+, +:post+)
116
+ # @param [String] path the path fragment of the URL
117
+ # @option [Hash] opts query string parameters, headers
118
+ def request(method, path, opts = {})
119
+ raise ClientError, 'Access token missing' unless @access_token
120
+
121
+ opts[:headers] = {} if opts[:headers].nil?
122
+ opts[:headers]['Accept'] = 'application/json'
123
+ opts[:headers]['Content-Type'] = 'application/json' unless method == :get
124
+ opts[:headers]['User-Agent'] = user_agent
125
+ opts[:headers]['Authorization'] = "Bearer #{@access_token}"
126
+
127
+ opts[:body] = MultiJson.encode(opts[:data]) if !opts[:data].nil?
128
+ path = URI.encode(path)
129
+
130
+ resp = connection.run_request(method, path, opts[:body], opts[:headers]) do |req|
131
+ req.params = opts[:params] if !opts[:params].nil?
132
+ end
133
+
134
+ response = Response.new(resp)
135
+
136
+ case response.status
137
+ when 301, 302, 303, 307
138
+ # TODO
139
+ when 200..299, 300..399
140
+ # on non-redirecting 3xx statuses, just return the response
141
+ response
142
+ when 400..599
143
+ error = ApiError.new(response)
144
+ raise(error, "Status code #{response.status}")
145
+ else
146
+ error = ApiError.new(response)
147
+ raise(error, "Unhandled status code value of #{response.status}")
148
+ end
149
+ end
150
+
151
+ # The Faraday connection object
152
+ def connection
153
+ @connection ||= Faraday.new(self.api_url, { ssl: { verify: false } })
154
+ end
155
+ end
156
+ end
157
+
@@ -0,0 +1,48 @@
1
+ require 'multi_json'
2
+
3
+ module Mondo
4
+ class Error < StandardError
5
+ end
6
+
7
+ class ApiError < Error
8
+ attr_reader :response, :code, :description
9
+
10
+ def initialize(response)
11
+ @response = response
12
+ @code = response.status
13
+
14
+ begin
15
+ parsed_response = MultiJson.decode(response.body)
16
+ errors = parsed_response["error"] || parsed_response["errors"]
17
+ @description = stringify_errors(errors)
18
+ rescue MultiJson::ParseError
19
+ @description = response.body ? response.body.strip : "Unknown error"
20
+ end
21
+ end
22
+
23
+ def to_s
24
+ "#{super} [#{self.code}] #{self.description}"
25
+ end
26
+
27
+ private
28
+
29
+ def stringify_errors(errors)
30
+ case errors
31
+ when Array
32
+ errors.join(", ")
33
+ when Hash
34
+ errors.flat_map do |field, messages|
35
+ messages.map { |message| "#{field} #{message}" }
36
+ end.join(", ")
37
+ else
38
+ errors.to_s
39
+ end
40
+ end
41
+ end
42
+
43
+ class ClientError < Error
44
+ end
45
+
46
+ class SignatureError < Error
47
+ end
48
+ end
@@ -0,0 +1,29 @@
1
+ module Mondo
2
+ class Resource
3
+
4
+ attr_accessor :client
5
+
6
+ def initialize(hash={}, client)
7
+ self.raw_data = hash
8
+ self.client = client
9
+ hash.each { |key,val| send("#{key}=", val) if respond_to?("#{key}=") }
10
+ self.to_s
11
+ end
12
+
13
+ class << self
14
+ def date_writer(*args)
15
+ args.each do |attr|
16
+ define_method("#{attr.to_s}=".to_sym) do |date|
17
+ date = date.is_a?(String) ? DateTime.parse(date) : date
18
+ instance_variable_set("@#{attr}", date)
19
+ end
20
+ end
21
+ end
22
+
23
+ def date_accessor(*args)
24
+ attr_reader *args
25
+ date_writer *args
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ module Mondo
2
+ class Response
3
+ attr_reader :response, :parsed
4
+ attr_accessor :error, :options
5
+
6
+ # Initializes a Response instance
7
+ #
8
+ # @param [Faraday::Response] response The Faraday response instance
9
+ def initialize(resp)
10
+ @response = resp
11
+ @parsed = -> { MultiJson.load(body) rescue body }.call
12
+ end
13
+
14
+ # The HTTP response headers
15
+ def headers
16
+ response.headers
17
+ end
18
+
19
+ # The HTTP response status code
20
+ def status
21
+ response.status
22
+ end
23
+
24
+ # The HTTP response body
25
+ def body
26
+ response.body || ''
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,40 @@
1
+ module Mondo
2
+ class Transaction < Resource
3
+
4
+ attr_accessor :id,
5
+ :description,
6
+ :amount,
7
+ :currency,
8
+ :merchant,
9
+ :notes,
10
+ :metadata,
11
+ :raw_data
12
+
13
+ date_accessor :created
14
+
15
+ def to_s
16
+ "#<#{self.class} #{self.amount_with_currency} #{self.description} #{id}>"
17
+ end
18
+
19
+ def inspect
20
+ self.to_s
21
+ end
22
+
23
+ # TODO - proper currency library
24
+ def amount_with_currency
25
+ "#{amount/100}#{currency}"
26
+ end
27
+
28
+ def save_metadata
29
+ self.client.api_patch("/transactions/#{self.id}", metadata: self.metadata)
30
+ end
31
+
32
+ def tags
33
+ metadata["tags"]
34
+ end
35
+
36
+ def tags=(t)
37
+ metadata["tags"] = t
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,29 @@
1
+ require 'uri'
2
+
3
+ module Mondo
4
+ module Utils
5
+ extend self
6
+
7
+ # String Helpers
8
+ def camelize(str)
9
+ str.split('_').map(&:capitalize).join
10
+ end
11
+
12
+ def underscore(str)
13
+ str.gsub(/(.)([A-Z])/) { "#{$1}_#{$2.downcase}" }.downcase
14
+ end
15
+
16
+ # Hash Helpers
17
+ def symbolize_keys(hash)
18
+ symbolize_keys! hash.dup
19
+ end
20
+
21
+ def symbolize_keys!(hash)
22
+ hash.keys.each do |key|
23
+ sym_key = key.to_s.to_sym rescue key
24
+ hash[sym_key] = hash.delete(key) unless hash.key?(sym_key)
25
+ end
26
+ hash
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,3 @@
1
+ module Mondo
2
+ VERSION = '0.1.0'.freeze
3
+ end
data/lib/mondo.rb ADDED
@@ -0,0 +1,10 @@
1
+ module Mondo
2
+ require './lib/mondo/version'
3
+ require './lib/mondo/client'
4
+ require './lib/mondo/response'
5
+ require './lib/mondo/resource'
6
+ require './lib/mondo/errors'
7
+ require './lib/mondo/utils'
8
+
9
+ require './lib/mondo/transaction'
10
+ end
data/mondo.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ require File.expand_path('../lib/mondo/version', __FILE__)
2
+
3
+ Gem::Specification.new do |gem|
4
+ gem.add_runtime_dependency 'oauth2', '~> 1.0'
5
+ gem.add_runtime_dependency 'multi_json', '~> 1.10'
6
+
7
+ gem.add_development_dependency 'rspec', '~> 2.13'
8
+ gem.add_development_dependency 'yard', '~> 0.8'
9
+ gem.add_development_dependency 'activesupport', '~> 3.2'
10
+ gem.add_development_dependency 'rake', '~> 10.3'
11
+
12
+ gem.authors = ['Tom Blomfield']
13
+ gem.description = %q{A Ruby wrapper for the Mondo API}
14
+ gem.email = ['engineering@getmondo.co.uk']
15
+ gem.files = `git ls-files`.split("\n")
16
+ gem.homepage = 'https://github.com/mondough/mondo-ruby'
17
+ gem.name = 'mondo'
18
+ gem.require_paths = ['lib']
19
+ gem.summary = %q{Ruby wrapper for the Mondo API}
20
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
+ gem.version = Mondo::VERSION.dup
22
+ gem.licenses = ['MIT']
23
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mondo do
4
+ before do
5
+ end
6
+
7
+ describe "tests" do
8
+ it "run" do
9
+ expect(1+1).to eq(2)
10
+ end
11
+ end
12
+ end
13
+
@@ -0,0 +1,2 @@
1
+ require 'active_support/hash_with_indifferent_access'
2
+ require './lib/mondo'
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mondo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Tom Blomfield
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-09-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: oauth2
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: multi_json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.10'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.10'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.13'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.13'
55
+ - !ruby/object:Gem::Dependency
56
+ name: yard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.8'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.8'
69
+ - !ruby/object:Gem::Dependency
70
+ name: activesupport
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.2'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.2'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '10.3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '10.3'
97
+ description: A Ruby wrapper for the Mondo API
98
+ email:
99
+ - engineering@getmondo.co.uk
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - ".rspec"
106
+ - ".travis.yml"
107
+ - CHANGELOG.md
108
+ - Gemfile
109
+ - Guardfile
110
+ - LICENSE
111
+ - README.md
112
+ - Rakefile
113
+ - lib/mondo.rb
114
+ - lib/mondo/client.rb
115
+ - lib/mondo/errors.rb
116
+ - lib/mondo/resource.rb
117
+ - lib/mondo/response.rb
118
+ - lib/mondo/transaction.rb
119
+ - lib/mondo/utils.rb
120
+ - lib/mondo/version.rb
121
+ - mondo.gemspec
122
+ - spec/client_spec.rb
123
+ - spec/spec_helper.rb
124
+ homepage: https://github.com/mondough/mondo-ruby
125
+ licenses:
126
+ - MIT
127
+ metadata: {}
128
+ post_install_message:
129
+ rdoc_options: []
130
+ require_paths:
131
+ - lib
132
+ required_ruby_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ required_rubygems_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ requirements: []
143
+ rubyforge_project:
144
+ rubygems_version: 2.4.6
145
+ signing_key:
146
+ specification_version: 4
147
+ summary: Ruby wrapper for the Mondo API
148
+ test_files:
149
+ - spec/client_spec.rb
150
+ - spec/spec_helper.rb