teamweek-ruby 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.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ M2MyYTRlMjEwOWZjNTZjZDYzMWUxMzE4M2M3ZGEwMTViOTM4ZmVlOQ==
5
+ data.tar.gz: !binary |-
6
+ MzU4MDFjMzcwOGM2MDlkNDdiOWJiMDNjZDgyOTY2MzQwNDFmMDY2NQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ Y2Q5ZjgyYTMxMmIyZTE2NGE4MGNiODRiMDI1M2QzOWJkOWJiYWE3YTM1ZDY5
10
+ ODRjNDNhNmVlZjBmNzc2NDc0OTRhYzM1ZmYwMmMwZmY5ZGM5ZDI2ZTIzOWUy
11
+ NGQyZDRmMjQ0YmIzMTAyYTFkODFjNjkxOWQ2NTU5YWZmYmUxMGY=
12
+ data.tar.gz: !binary |-
13
+ MzY1ZjE3ZjU2Zjk1NzRkMmQ1Yjg5NWFkZmQ5ZWZjODY3ZDk1MWY3M2NjODRm
14
+ NmQ4OGUxZTZlNDViNzJmOTRmZmU0NzE3MTdmMGIyNWQ1N2JlZThjZjg3MWY2
15
+ MmE3NDE3MDZiZjA3ZjRjYzQyNmE0NGExM2Y1MTUyZGU1NTk0NzE=
@@ -0,0 +1,7 @@
1
+ require 'json'
2
+ require 'teamweek/api/hash_constructed'
3
+ require 'teamweek/api/importer'
4
+ require 'teamweek/api/client'
5
+ require 'teamweek/api/user'
6
+ require 'teamweek/api/project'
7
+ require 'teamweek/api/task'
@@ -0,0 +1,49 @@
1
+ module Teamweek
2
+ module Api
3
+ class Client
4
+ include Teamweek::Api::Importer
5
+ attr_accessor :client
6
+ attr_accessor :base_uri
7
+
8
+ def initialize(client, account_id, opts={})
9
+ @client = client
10
+ set_base_uri(opts[:base_uri], account_id)
11
+ end
12
+
13
+ # Posts users to Teamweek bulk_import url.
14
+ #
15
+ # @param users: an array of users data as hash.
16
+ # @return [Teamweek::Api::User] the added or found Teamweek user instances
17
+ def import_users(data)
18
+ bulk_import('users', data, Teamweek::Api::User)
19
+ end
20
+
21
+ # Posts projects to Teamweek bulk_import url.
22
+ #
23
+ # @param projects: an array of projects data as hash.
24
+ # @return [Teamweek::Api::Project] the added or found Teamweek project instances
25
+ def import_projects(data)
26
+ bulk_import('projects', data, Teamweek::Api::Project)
27
+ end
28
+
29
+ # Posts tasks to Teamweek bulk_import url.
30
+ #
31
+ # @param tasks: an array of tasks data as hash.
32
+ # @return [Teamweek::Api::Task] the added or found Teamweek task instances
33
+ def import_tasks(data)
34
+ bulk_import('tasks', data, Teamweek::Api::Task)
35
+ end
36
+
37
+ private
38
+
39
+ def set_base_uri(site, account_id)
40
+ site ||= "https://teamweek.com"
41
+ @base_uri = "#{site}/api/v3/#{account_id}"
42
+ end
43
+
44
+ def full_path(uri)
45
+ base_uri + uri
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,15 @@
1
+ module Teamweek
2
+ module Api
3
+ module HashConstructed
4
+ attr_accessor :raw_data
5
+ # initalizes the object by pulling key-value pairs from the hash and
6
+ # mapping them to the object's instance variables
7
+ #
8
+ # @param [Hash] h hash containing key-value pairs to map to object instance variables
9
+ def initialize(h)
10
+ @raw_data = h
11
+ h.each { |k,v| send("#{k}=",v) if respond_to?("#{k}=") }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ module Teamweek
2
+ module Api
3
+ module Importer
4
+
5
+ def bulk_import(entity, data, context)
6
+ response = bulk_post(entity, data)
7
+ response.map { |h| context.new(h) }
8
+ end
9
+
10
+ def bulk_post(entity, data)
11
+ client.post(bulk_uri(entity), { entity => data })
12
+ end
13
+
14
+ def bulk_uri(entity)
15
+ full_path("/#{entity}/bulk_import.json")
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module Teamweek
2
+ module Api
3
+ class Project
4
+ include Teamweek::Api::HashConstructed
5
+ attr_accessor :id
6
+ attr_accessor :name
7
+ attr_accessor :color
8
+ attr_accessor :foreign_id
9
+
10
+
11
+ def to_hash
12
+ {
13
+ id: id,
14
+ name: name,
15
+ color: color
16
+ }
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,29 @@
1
+ module Teamweek
2
+ module Api
3
+ class Task
4
+ include Teamweek::Api::HashConstructed
5
+ attr_accessor :id
6
+ attr_accessor :project_id
7
+ attr_accessor :user_id
8
+ attr_accessor :foreign_id
9
+ attr_accessor :name
10
+ attr_accessor :end_date
11
+ attr_accessor :start_date
12
+ attr_accessor :color
13
+ attr_accessor :done
14
+
15
+ def to_hash
16
+ {
17
+ id: id,
18
+ name: name,
19
+ color: color,
20
+ start_date: start_date,
21
+ end_date: end_date,
22
+ project_id: project_id,
23
+ user_id: user_id,
24
+ done: done
25
+ }
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,27 @@
1
+ module Teamweek
2
+ module Api
3
+ class User
4
+ include Teamweek::Api::HashConstructed
5
+ attr_accessor :id
6
+ attr_accessor :name
7
+ attr_accessor :email
8
+ attr_accessor :dummy
9
+ attr_accessor :initials
10
+ attr_accessor :color
11
+ attr_accessor :foreign_id
12
+ attr_accessor :active
13
+
14
+ def to_hash
15
+ {
16
+ id: id,
17
+ name: name,
18
+ email: email,
19
+ dummy: dummy,
20
+ initials: initials,
21
+ color: color,
22
+ active: active
23
+ }
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,5 @@
1
+ module Teamweek
2
+ module Api
3
+ VERSION = '0.1.0'
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: teamweek-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Toggl OÜ
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.6'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.6'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: A very lightweight ruby library without an http client to communicate
56
+ with Teamweek API
57
+ email:
58
+ - support@teamweek.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - lib/teamweek-ruby.rb
64
+ - lib/teamweek/api/version.rb
65
+ - lib/teamweek/api/hash_constructed.rb
66
+ - lib/teamweek/api/task.rb
67
+ - lib/teamweek/api/importer.rb
68
+ - lib/teamweek/api/user.rb
69
+ - lib/teamweek/api/project.rb
70
+ - lib/teamweek/api/client.rb
71
+ homepage: https://github.com/teamweek/teamweek-ruby
72
+ licenses:
73
+ - MIT
74
+ metadata: {}
75
+ post_install_message:
76
+ rdoc_options: []
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ requirements: []
90
+ rubyforge_project:
91
+ rubygems_version: 2.1.9
92
+ signing_key:
93
+ specification_version: 4
94
+ summary: Ruby gem to communicate with Teamweek API.
95
+ test_files: []