camp3 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: acaca1e71ced016869c478adced37506d71282d7274f0635c8fb4fb00d22cba4
4
- data.tar.gz: 385b6160ed82eeb7d4da434ab382fb816cfebc2708c93d4c2d6bc4bf54d8f21e
3
+ metadata.gz: 1494749b2bca6c9abf1b88fb92f095cb7b9a304a7109984dc625a1db82bd3983
4
+ data.tar.gz: 62cb4e89f50f16c162e8c74e06286fe8437980d5f542751a1b3cb49a3b38475e
5
5
  SHA512:
6
- metadata.gz: 1b6065106d591e7b48958949d9040908e588d43db9ccb12e5d27aff0778efae1560f1f38d62080aa324baaf01fb77762cd0558e24d204b1c46b6744b3c784c34
7
- data.tar.gz: eae0fda0bfd0b6ef2bd4825e593e33de074dc1ec288d581cd00ca340655dcb65e4e1fa458d1cd70f9fd919d749f7dab01a4a30568870ac8ef8450d23fda3dad2
6
+ metadata.gz: 173586f31acad3b9d8219694c3268d5611d8c24eddf057f552c8fd3ab757745eb21a0ed4adb7d729da12e7e650c919602b5856bf595fad9ca6d8c94a90534b9c
7
+ data.tar.gz: 403f48695817d15d305ec6aca49c3bf91aecb76cce9292001dbbd8505fdff54284d2c585178c364a1c45e44d0a28a1bda5dd50f6477e4efde3e85b12a7168fe7
@@ -0,0 +1,60 @@
1
+ name: Release Metadata
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - v*
7
+
8
+ jobs:
9
+ changelog:
10
+ name: Update Changelog
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - name: Checkout code
14
+ uses: actions/checkout@v2
15
+ - name: Update Changelog
16
+ uses: heinrichreimer/github-changelog-generator-action@v2.1.1
17
+ with:
18
+ token: ${{ secrets.GITHUB_TOKEN }}
19
+ - uses: stefanzweifel/git-auto-commit-action@v4
20
+ with:
21
+ # Required
22
+ commit_message: Update Changelog
23
+ file_pattern: CHANGELOG.md
24
+
25
+ release_notes:
26
+ name: Create Release Notes
27
+ runs-on: ubuntu-latest
28
+ needs: changelog
29
+ steps:
30
+ - name: Get version from tag
31
+ env:
32
+ GITHUB_REF: ${{ github.ref }}
33
+ run: |
34
+ export CURRENT_VERSION=${GITHUB_TAG/refs\/tags\/v/}
35
+ echo "::set-env name=CURRENT_VERSION::$CURRENT_VERSION"
36
+
37
+ - name: Checkout code
38
+ uses: actions/checkout@v2
39
+ with:
40
+ ref: master
41
+
42
+ - name: Get Changelog Entry
43
+ id: changelog_reader
44
+ uses: mindsers/changelog-reader-action@v1
45
+ with:
46
+ version: ${{ env.CURRENT_VERSION }}
47
+ path: ./CHANGELOG.md
48
+
49
+ - name: Create Release
50
+ id: create_release
51
+ uses: actions/create-release@v1
52
+ env:
53
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
54
+ with:
55
+ tag_name: ${{ github.ref }}
56
+ release_name: Release ${{ github.ref }}
57
+ body: ${{ steps.changelog_reader.outputs.log_entry }}
58
+ draft: false
59
+ prerelease: false
60
+
@@ -104,7 +104,6 @@ Layout/TrailingWhitespace:
104
104
  - 'lib/camp3/authorization.rb'
105
105
  - 'lib/camp3/client.rb'
106
106
  - 'lib/camp3/configuration.rb'
107
- - 'lib/camp3/objectified_hash.rb'
108
107
  - 'lib/camp3/resource.rb'
109
108
  - 'spec/configuration_spec.rb'
110
109
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- camp3 (0.1.0)
4
+ camp3 (0.0.1)
5
5
  httparty (~> 0.18)
6
6
  rack-oauth2 (~> 1.14)
7
7
 
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # camp3 ![CI](https://github.com/renehernandez/camp3/workflows/CI/badge.svg)
1
+ # camp3 ![CI](https://github.com/renehernandez/camp3/workflows/CI/badge.svg) [![Gem Version](https://badge.fury.io/rb/camp3.svg)](https://badge.fury.io/rb/camp3)
2
2
 
3
3
  Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/camp3`. To experiment with that code, run `bin/console` for an interactive prompt.
4
4
 
@@ -7,7 +7,6 @@ require "camp3/logging"
7
7
  require "camp3/error"
8
8
  require "camp3/configuration"
9
9
  require "camp3/authorization"
10
- require "camp3/objectified_hash"
11
10
  require "camp3/resource"
12
11
  require "camp3/paginated_response"
13
12
  require "camp3/page_links"
@@ -4,7 +4,7 @@ class Camp3::Client
4
4
  module ResourceAPI
5
5
 
6
6
  def resource(url)
7
- get(url, override_path: true)
7
+ get(url_transform(url), override_path: true)
8
8
  end
9
9
 
10
10
  end
@@ -1,14 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Camp3
4
- # Wrapper for the Gitlab REST API.
4
+ # Wrapper for the Camp3 REST API.
5
5
  class Client < Request
6
6
  Dir[File.expand_path('api/*.rb', __dir__)].each { |f| require f }
7
7
 
8
8
  # Keep in alphabetical order
9
9
  include Authorization
10
- include ProjectAPI
11
10
  include MessageAPI
11
+ include ProjectAPI
12
+ include ResourceAPI
12
13
  include TodoAPI
13
14
 
14
15
  # @private
@@ -48,5 +49,16 @@ module Camp3
48
49
  def only_show_last_four_chars(token)
49
50
  "#{'*' * (token.size - 4)}#{token[-4..-1]}"
50
51
  end
52
+
53
+ # Utility method for transforming Basecamp Web URLs into API URIs
54
+ # e.g 'https://3.basecamp.com/1/buckets/2/todos/3' will be
55
+ # converted into 'https://3.basecampapi.com/1/buckets/2/todos/3.json'
56
+ #
57
+ # @return [String]
58
+ def url_transform(url)
59
+ api_uri = url.gsub('3.basecamp.com', '3.basecampapi.com')
60
+ api_uri += '.json' unless url.end_with? '.json'
61
+ api_uri
62
+ end
51
63
  end
52
64
  end
@@ -79,7 +79,7 @@ module Camp3
79
79
  # Handle error response message in case of nested hashes
80
80
  def handle_message(message)
81
81
  case message
82
- when Camp3::ObjectifiedHash
82
+ when Camp3::Resource
83
83
  message.to_h.sort.map do |key, val|
84
84
  "'#{key}' #{(val.is_a?(Hash) ? val.sort.map { |k, v| "(#{k}: #{v.join(' ')})" } : [val].flatten).join(' ')}"
85
85
  end.join(', ')
@@ -11,7 +11,7 @@ module Camp3
11
11
 
12
12
  attr_accessor :access_token
13
13
 
14
- # Converts the response body to an ObjectifiedHash.
14
+ # Converts the response body to a Resource.
15
15
  def self.parse(body)
16
16
  body = decode(body)
17
17
 
@@ -1,8 +1,60 @@
1
1
  module Camp3
2
- class Resource < ObjectifiedHash
2
+ class Resource
3
3
 
4
4
  Dir[File.expand_path('resources/*.rb', __dir__)].each { |f| require f }
5
5
 
6
+ # Creates a new Resource object.
7
+ def initialize(hash)
8
+ @hash = hash
9
+ @data = resourcify_data
10
+ end
11
+
12
+ # @return [Hash] The original hash.
13
+ def to_hash
14
+ hash
15
+ end
16
+ alias to_h to_hash
17
+
18
+ # @return [String] Formatted string with the class name, object id and original hash.
19
+ def inspect
20
+ "#<#{self.class}:#{object_id} {hash: #{hash.inspect}}"
21
+ end
22
+
23
+ def [](key)
24
+ data[key]
25
+ end
26
+
27
+ private
28
+
29
+ attr_reader :hash, :data
30
+
31
+ def resourcify_data
32
+ result = @hash.each_with_object({}) do |(key, value), data|
33
+ value = resourcify_value(value)
34
+
35
+ data[key.to_s] = value
36
+ end
37
+
38
+ result
39
+ end
40
+
41
+ def resourcify_value(input)
42
+ return Resource.new(input) if input.is_a? Hash
43
+
44
+ return input unless input.is_a? Array
45
+
46
+ input.map { |curr| resourcify_value(curr) }
47
+ end
48
+
49
+ # Respond to messages for which `self.data` has a key
50
+ def method_missing(method_name, *args, &block)
51
+ @data.key?(method_name.to_s) ? @data[method_name.to_s] : super
52
+ end
53
+
54
+ def respond_to_missing?(method_name, include_private = false)
55
+ @hash.keys.map(&:to_sym).include?(method_name.to_sym) || super
56
+ end
57
+
6
58
  def self.create(hash)
7
59
  klass = detect_type(hash["url"])
8
60
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Camp3
4
- VERSION = "0.0.1"
4
+ VERSION = "0.0.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: camp3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - renehernandez
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-06-29 00:00:00.000000000 Z
11
+ date: 2020-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -76,6 +76,7 @@ files:
76
76
  - ".editorconfig"
77
77
  - ".github/workflows/ci.yml"
78
78
  - ".github/workflows/gem-push.yml"
79
+ - ".github/workflows/release_metadata.yml"
79
80
  - ".gitignore"
80
81
  - ".rspec"
81
82
  - ".rubocop.yml"
@@ -103,7 +104,6 @@ files:
103
104
  - lib/camp3/configuration.rb
104
105
  - lib/camp3/error.rb
105
106
  - lib/camp3/logging.rb
106
- - lib/camp3/objectified_hash.rb
107
107
  - lib/camp3/page_links.rb
108
108
  - lib/camp3/paginated_response.rb
109
109
  - lib/camp3/request.rb
@@ -1,54 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Camp3
4
- # Converts hashes to the objects.
5
- class ObjectifiedHash
6
- # Creates a new ObjectifiedHash object.
7
- def initialize(hash)
8
- @hash = hash
9
- @data = objectify_data
10
- end
11
-
12
- # @return [Hash] The original hash.
13
- def to_hash
14
- hash
15
- end
16
- alias to_h to_hash
17
-
18
- # @return [String] Formatted string with the class name, object id and original hash.
19
- def inspect
20
- "#<#{self.class}:#{object_id} {hash: #{hash.inspect}}"
21
- end
22
-
23
- private
24
-
25
- attr_reader :hash, :data
26
-
27
- def objectify_data
28
- result = @hash.each_with_object({}) do |(key, value), data|
29
- value = objectify_value(value)
30
-
31
- data[key.to_s] = value
32
- end
33
-
34
- result
35
- end
36
-
37
- def objectify_value(input)
38
- return ObjectifiedHash.new(input) if input.is_a? Hash
39
-
40
- return input unless input.is_a? Array
41
-
42
- input.map { |curr| objectify_value(curr) }
43
- end
44
-
45
- # Respond to messages for which `self.data` has a key
46
- def method_missing(method_name, *args, &block)
47
- @data.key?(method_name.to_s) ? @data[method_name.to_s] : super
48
- end
49
-
50
- def respond_to_missing?(method_name, include_private = false)
51
- @hash.keys.map(&:to_sym).include?(method_name.to_sym) || super
52
- end
53
- end
54
- end