cloverly 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []