cloverly 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
+ SHA256:
3
+ metadata.gz: daf29a3d340e0882934135b976fb52235a153a416a66c7cd0ea57ca1bcfd3023
4
+ data.tar.gz: 83442804d437490cdb5ce82c1d756ae4232c0824c7d9630495000791510b5a9e
5
+ SHA512:
6
+ metadata.gz: 6551602796e8c7b64473308ea51e859f2e6ea7823358386fc85d367122ef600970f6ac2024adaa974b7851b646867860e97b78c3f230e4187f560cae89eeee1c
7
+ data.tar.gz: 81a2e0665b7b850558efe551b0d600b88009bf68f126b280747be22e27dd8d0819fa7009939367b3fa371bfbab0493bb12a4e826a2581887b76e4b1ca04d8ebf
@@ -0,0 +1,3 @@
1
+ class Cloverly::Account
2
+ include Cloverly::Base
3
+ end
@@ -0,0 +1,35 @@
1
+ module Cloverly::Base
2
+
3
+ def initialize(cloverly_instance)
4
+ @cloverly_instance = cloverly_instance
5
+ end
6
+
7
+ def attributes=(json)
8
+ json.each do |key, value|
9
+ self.define_singleton_method(key, -> { value })
10
+ end
11
+ end
12
+
13
+ def self.included(base)
14
+ base.extend ClassMethods
15
+ base.class_eval do
16
+ end
17
+ end
18
+
19
+ module ClassMethods
20
+ def parse(cloverly_instance, json_response)
21
+
22
+ if json_response.is_a?(Array)
23
+ json_response.map do |item_json|
24
+ self.parse(cloverly_instance, item_json)
25
+ end
26
+ else
27
+ instance = self.new(cloverly_instance)
28
+ instance.attributes = json_response
29
+
30
+ instance
31
+ end
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,2 @@
1
+ class Cloverly::Error < StandardError
2
+ end
@@ -0,0 +1,35 @@
1
+ class Cloverly::Estimate
2
+ include Cloverly::Base
3
+
4
+ def purchase!
5
+ Cloverly::Purchase.parse(@cloverly_instance, @cloverly_instance.post("/2019-03-beta/purchases", {estimate_slug: self.slug}))
6
+ end
7
+
8
+ def cancel!
9
+ self.attributes = @cloverly_instance.delete("/2019-03-beta/estimates/#{slug}")
10
+ end
11
+
12
+ class << self
13
+
14
+ def retrieve(cloverly_instance = nil, slug)
15
+ Cloverly::Estimate.parse(Cloverly.default, Cloverly.default.get("/2019-03-beta/estimates/#{slug}"))
16
+ end
17
+
18
+ def list
19
+ Cloverly::Estimate.parse(Cloverly.default, Cloverly.default.get("/2019-03-beta/estimates/#{slug}"))
20
+ end
21
+
22
+ def shipping(args)
23
+ Cloverly.default.estimate_offset("shipping", args)
24
+ end
25
+
26
+ def carbon(args)
27
+ Cloverly.default.estimate_offset("carbon", args)
28
+ end
29
+
30
+ def vehicle(args)
31
+ Cloverly.default.estimate_offset("vehicle", args)
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,36 @@
1
+ class Cloverly::Purchase
2
+ include Cloverly::Base
3
+
4
+ def self.retrieve(slug)
5
+ self.parse(Cloverly.default, Cloverly.default.get("/2019-03-beta/purchases/#{slug}"))
6
+ end
7
+
8
+ def cancel!
9
+ self.attributes = @cloverly_instance.delete("/2019-03-beta/purchases/#{slug}")
10
+ end
11
+
12
+ class << self
13
+
14
+ def retrieve(slug)
15
+ Cloverly::Purchase.parse(Cloverly.default, Cloverly.default.get("/2019-03-beta/purchases/#{slug}"))
16
+ end
17
+
18
+ def list
19
+ Cloverly::Purchase.parse(Cloverly.default, Cloverly.default.get("/2019-03-beta/purchases/#{slug}"))
20
+ end
21
+
22
+ def shipping(args)
23
+ Cloverly.default.offset("shipping", args)
24
+ end
25
+
26
+ def carbon(args)
27
+ Cloverly.default.offset("carbon", args)
28
+ end
29
+
30
+ def vehicle(args)
31
+ Cloverly.default.offset("vehicle", args)
32
+ end
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,14 @@
1
+ class Cloverly::Source
2
+ include Cloverly::Base
3
+
4
+ class << self
5
+ def retrieve(slug)
6
+ Cloverly::Source.parse(Cloverly.default, Cloverly.default.get("/2019-03-beta/recs/#{slug}"))
7
+ end
8
+
9
+ def list
10
+ Cloverly::Source.parse(Cloverly.default, Cloverly.default.get("/2019-03-beta/recs"))
11
+ end
12
+ end
13
+
14
+ end
data/lib/cloverly.rb ADDED
@@ -0,0 +1,105 @@
1
+ require 'faraday'
2
+ require 'json'
3
+
4
+ class Cloverly
5
+ attr_reader :api_key
6
+
7
+ class << self
8
+ def default=(cloverly)
9
+ @@default = cloverly
10
+ end
11
+
12
+ def default
13
+ @@default
14
+ end
15
+
16
+ def account
17
+ Cloverly::Account.parse(default, default.get('/2019-03-beta/account'))
18
+ end
19
+
20
+ def estimate_offset(type, args = {})
21
+ Cloverly::Estimate.parse(default, default.post("/2019-03-beta/estimates/#{type}", args))
22
+ end
23
+
24
+ def offset(type, args = {})
25
+ Cloverly::Purchase.parse(default, default.post("/2019-03-beta/purchases/#{type}", args))
26
+ end
27
+ end
28
+
29
+ def initialize(api_key)
30
+ @api_key = api_key
31
+ end
32
+
33
+ def account
34
+ Cloverly::Account.parse(self, get('/2019-03-beta/account'))
35
+ end
36
+
37
+ def estimate_offset(type, args = {})
38
+ Cloverly::Estimate.parse(self, post("/2019-03-beta/estimates/#{type}", args))
39
+ end
40
+
41
+ def offset(type, args = {})
42
+ Cloverly::Purchase.parse(self, post("/2019-03-beta/purchases/#{type}", args))
43
+ end
44
+
45
+ def post(path, data)
46
+ response = conn.post do |req|
47
+ req.url path
48
+ req.body = data.to_json
49
+ req.headers['Content-Type'] = 'application/json'
50
+ req.headers['Authorization'] = "Bearer #{api_key}"
51
+ end
52
+
53
+ json_response = JSON.parse(response.body)
54
+
55
+ if json_response["error"].nil?
56
+ json_response
57
+ else
58
+ raise Cloverly::Error.new(json_response["error"])
59
+ end
60
+ end
61
+
62
+ def get(path)
63
+ response = conn.get do |req|
64
+ req.url path
65
+ req.headers['Content-Type'] = 'application/json'
66
+ req.headers['Authorization'] = "Bearer #{api_key}"
67
+ end
68
+
69
+ json_response = JSON.parse(response.body)
70
+
71
+ if json_response.is_a?(Array) || json_response["error"].nil?
72
+ json_response
73
+ else
74
+ raise Cloverly::Error.new(json_response["error"])
75
+ end
76
+ end
77
+
78
+ def delete(path)
79
+ response = conn.delete do |req|
80
+ req.url path
81
+ req.headers['Content-Type'] = 'application/json'
82
+ req.headers['Authorization'] = "Bearer #{api_key}"
83
+ end
84
+
85
+ json_response = JSON.parse(response.body)
86
+
87
+ if json_response.is_a?(Array) || json_response["error"].nil?
88
+ json_response
89
+ else
90
+ raise Cloverly::Error.new(json_response["error"])
91
+ end
92
+ end
93
+
94
+ private
95
+ def conn
96
+ @conn ||= Faraday.new(:url => 'https://api.cloverly.app')
97
+ end
98
+ end
99
+
100
+ require_relative './cloverly/base'
101
+ require_relative './cloverly/error'
102
+ require_relative './cloverly/account'
103
+ require_relative './cloverly/estimate'
104
+ require_relative './cloverly/purchase'
105
+ require_relative './cloverly/source'
metadata ADDED
@@ -0,0 +1,154 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cloverly
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Chris Winslett
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-05-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '1.6'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: faraday
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.9'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.9'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: guard
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: guard-rspec
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: byebug
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: dotenv
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ description: Cloverly API powers carbon offsets via an API
118
+ email: chris@cloverly.com
119
+ executables: []
120
+ extensions: []
121
+ extra_rdoc_files: []
122
+ files:
123
+ - lib/cloverly.rb
124
+ - lib/cloverly/account.rb
125
+ - lib/cloverly/base.rb
126
+ - lib/cloverly/error.rb
127
+ - lib/cloverly/estimate.rb
128
+ - lib/cloverly/purchase.rb
129
+ - lib/cloverly/source.rb
130
+ homepage: https://cloverly.com
131
+ licenses:
132
+ - MIT
133
+ metadata: {}
134
+ post_install_message:
135
+ rdoc_options: []
136
+ require_paths:
137
+ - lib
138
+ required_ruby_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ requirements: []
149
+ rubyforge_project:
150
+ rubygems_version: 2.7.6.2
151
+ signing_key:
152
+ specification_version: 4
153
+ summary: Ruby library for interaction with Cloverly API
154
+ test_files: []