taskworld 0.1.0 → 0.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6323ae1c5ff17f6b05ce56dcb55e16989fc5ab25
4
- data.tar.gz: cf3f8b4844925b2a154a1c27926479308fb84e3c
3
+ metadata.gz: c7f7de65beb4c7cdbb0fe2157afbee6c240feed9
4
+ data.tar.gz: a9c1b51583c5ac0fb8a2465e7e46db19740d7a35
5
5
  SHA512:
6
- metadata.gz: e599084b9c065e41c7731f9d8d57273f3ad513510248cf48e08d2178b1e46daaa152315f99897f62a3464f03029664b73f2a6ecc0c842a0f26333d3130b408ef
7
- data.tar.gz: 296004585b0fd98e1046897ed75a4cb28dc1bfecaa1f87553e69f062fd3f45488c7c3a9eef664c2dc00f9c6358b7acb6bb7258151cda8a4753987167c822f729
6
+ metadata.gz: a7a86938d85728c3c09f34844c4a7eed243bcd2ee922a4ef5816df43096e602097db1d3a37cfba7dc8c53e25927a59ec9929600ba61f1da8134fd6c9849329df
7
+ data.tar.gz: 7366978dec0657e1f5f049d8cca81ceef6e23bf8fe2fe4d3fd124afdef2a5787ad4fe2682cb5280577fb3de08e49c42fce3fc7971c465e04ee7bcc831d37224b
data/.travis.yml CHANGED
@@ -3,3 +3,4 @@ language: ruby
3
3
  rvm:
4
4
  - 2.4.3
5
5
  before_install: gem install bundler -v 1.16.1
6
+ script: bundle exec rspec spec/taskworld
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Taskworld
2
+ [![Gem Version](https://badge.fury.io/rb/taskworld.svg)](https://badge.fury.io/rb/taskworld)
3
+ [![Build Status](https://travis-ci.org/yshimada0330/taskworld.svg?branch=master)](https://travis-ci.org/yshimada0330/taskworld)
2
4
 
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/taskworld`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
5
+ A Ruby client for the Taskworld [Web](https://api.taskworld.com/) APIs.
6
6
 
7
7
  ## Installation
8
8
 
@@ -22,22 +22,18 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
26
-
27
- ## Development
28
-
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
-
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
-
33
- ## Contributing
34
-
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/taskworld. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
25
+ ### Web Client
36
26
 
37
- ## License
38
-
39
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
40
-
41
- ## Code of Conduct
27
+ ```ruby
28
+ Taskworld::Client.configure do |config|
29
+ config.server = :usa
30
+ config.email = 'boyd.bankfein@goldmangoose.com'
31
+ config.password = 'm0reM0n1th@nG0D!'
32
+ end
33
+ ```
42
34
 
43
- Everyone interacting in the Taskworld project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/taskworld/blob/master/CODE_OF_CONDUCT.md).
35
+ #### Get all projects
36
+ ```ruby
37
+ client = Taskworld::Client.new
38
+ client.project_get_all(space_id: '59eecc4bb0a6a6bc83f5fc39')
39
+ ```
@@ -0,0 +1,41 @@
1
+ module Taskworld
2
+ class Client
3
+ include Connection
4
+ include Request
5
+ include Endpoints
6
+
7
+ attr_accessor :endpoint, :access_token, :default_space_id, :workspaces
8
+
9
+ class << self
10
+ def configure
11
+ block_given? ? yield(Config) : Config
12
+ end
13
+
14
+ def config
15
+ Config
16
+ end
17
+ end
18
+
19
+ def initialize
20
+ @endpoint ||= Config::ENDPOINTS.fetch(Config.server, Config::DEFAULT_ENDPONT)
21
+ auth
22
+ end
23
+
24
+ private
25
+
26
+ def auth
27
+ response = post('auth', email: Config.email, password: Config.password)
28
+ raise 'fail auth' unless response['ok']
29
+ @access_token = response['access_token']
30
+ @default_space_id = response['default_space_id']
31
+ @workspaces = response['workspaces']
32
+ end
33
+
34
+ def call_required_field_api(required_fields, options)
35
+ required_fields.each do |field|
36
+ throw ArgumentError.new("Required arguments :#{field} missing") if options[field].nil?
37
+ end
38
+ yield
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,22 @@
1
+ module Taskworld
2
+ module Config
3
+ extend self
4
+
5
+ DEFAULT_ENDPONT = 'api.taskworld.com'.freeze
6
+ ENDPOINTS = {
7
+ asia: 'asia-api.taskworld.com',
8
+ europe: 'europe-api.taskworld.com',
9
+ usa: DEFAULT_ENDPONT
10
+ }.freeze
11
+
12
+ attr_accessor :server, :email, :password
13
+
14
+ def reset
15
+ self.server = nil
16
+ self.email = nil
17
+ self.password = nil
18
+ end
19
+
20
+ reset
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ module Taskworld
2
+ module Connection
3
+ private
4
+
5
+ def connection
6
+ options = {
7
+ headers: { Accept: 'application/json; charset=utf-8' }
8
+ }
9
+
10
+ # request_options = {}
11
+ # request_options[:timeout] = timeout if timeout
12
+ # request_options[:open_timeout] = open_timeout if open_timeout
13
+ # options[:request] = request_options if request_options.any?
14
+
15
+ ::Faraday::Connection.new("https://#{endpoint}/v1/", options) do |connection|
16
+ connection.use ::Faraday::Request::Multipart
17
+ connection.use ::Faraday::Request::UrlEncoded
18
+ connection.use ::Faraday::Response::RaiseError
19
+ connection.use ::FaradayMiddleware::ParseJson
20
+ connection.adapter ::Faraday.default_adapter
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,9 @@
1
+ module Taskworld
2
+ module Endpoints
3
+ module Project
4
+ def project_get_all(options = {})
5
+ call_required_field_api(%i(space_id), options) { post('project.get-all', options) }
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Taskworld
2
+ module Endpoints
3
+ module Task
4
+ def task_get(options = {})
5
+ call_required_field_api(%i(space_id task_id), options) { post('task.get', options) }
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Taskworld
2
+ module Endpoints
3
+ module Tasklist
4
+ def tasklist_get_all(options = {})
5
+ call_required_field_api(%i(space_id project_id), options) { post('tasklist.get-all', options) }
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ require_relative 'endpoints/project'
2
+ require_relative 'endpoints/tasklist'
3
+ require_relative 'endpoints/task'
4
+
5
+ module Taskworld
6
+ module Endpoints
7
+ include Project
8
+ include Tasklist
9
+ include Task
10
+ end
11
+ end
@@ -0,0 +1,36 @@
1
+ module Taskworld
2
+ module Request
3
+ def get(path, options = {})
4
+ request(:get, path, options)
5
+ end
6
+
7
+ def post(path, options = {})
8
+ request(:post, path, options)
9
+ end
10
+
11
+ def put(path, options = {})
12
+ request(:put, path, options)
13
+ end
14
+
15
+ def delete(path, options = {})
16
+ request(:delete, path, options)
17
+ end
18
+
19
+ private
20
+
21
+ def request(method, path, options)
22
+ options = options.merge(access_token: access_token) unless access_token.nil?
23
+ response = connection.send(method) do |request|
24
+ case method
25
+ when :get, :delete
26
+ request.url(path, options)
27
+ when :post, :put
28
+ request.path = path
29
+ request.body = options unless options.empty?
30
+ end
31
+ request.options.merge!(options.delete(:request)) if options.key?(:request)
32
+ end
33
+ response.body
34
+ end
35
+ end
36
+ end
@@ -1,3 +1,3 @@
1
1
  module Taskworld
2
- VERSION = "0.1.0"
2
+ VERSION = '0.1.1'
3
3
  end
data/lib/taskworld.rb CHANGED
@@ -1,5 +1,11 @@
1
- require "taskworld/version"
1
+ require 'taskworld/version'
2
2
 
3
- module Taskworld
4
- # Your code goes here...
5
- end
3
+ require 'faraday'
4
+ require 'faraday_middleware'
5
+ require 'json'
6
+
7
+ require 'taskworld/config'
8
+ require 'taskworld/connection'
9
+ require 'taskworld/request'
10
+ require 'taskworld/endpoints'
11
+ require 'taskworld/client'
data/taskworld.gemspec CHANGED
@@ -21,7 +21,10 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
+ spec.add_dependency 'faraday', '>= 0.15'
25
+ spec.add_dependency 'faraday_middleware'
24
26
  spec.add_development_dependency "bundler", "~> 1.16"
25
27
  spec.add_development_dependency "rake", "~> 10.0"
26
28
  spec.add_development_dependency "rspec", "~> 3.0"
29
+ spec.add_development_dependency 'webmock'
27
30
  end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taskworld
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - shimada
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-02 00:00:00.000000000 Z
11
+ date: 2018-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0.15'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0.15'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday_middleware
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: bundler
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +80,20 @@ dependencies:
52
80
  - - "~>"
53
81
  - !ruby/object:Gem::Version
54
82
  version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
55
97
  description: Taskworld Web API client.
56
98
  email:
57
99
  - yoshihiro.shimada@studyplus.jp
@@ -70,6 +112,14 @@ files:
70
112
  - bin/console
71
113
  - bin/setup
72
114
  - lib/taskworld.rb
115
+ - lib/taskworld/client.rb
116
+ - lib/taskworld/config.rb
117
+ - lib/taskworld/connection.rb
118
+ - lib/taskworld/endpoints.rb
119
+ - lib/taskworld/endpoints/project.rb
120
+ - lib/taskworld/endpoints/task.rb
121
+ - lib/taskworld/endpoints/tasklist.rb
122
+ - lib/taskworld/request.rb
73
123
  - lib/taskworld/version.rb
74
124
  - taskworld.gemspec
75
125
  homepage: https://github.com/yshimada0330/taskworld
@@ -92,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
142
  version: '0'
93
143
  requirements: []
94
144
  rubyforge_project:
95
- rubygems_version: 2.6.14
145
+ rubygems_version: 2.6.13
96
146
  signing_key:
97
147
  specification_version: 4
98
148
  summary: Taskworld Web API client.