timestamp_api 0.3.0 → 0.4.0

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
  SHA1:
3
- metadata.gz: 1a9b651bd6a1f81bb14b9edc23be1403ee37a4d3
4
- data.tar.gz: 50238b9ee2ab12eb51b8fd4e5f82657c3cfb0385
3
+ metadata.gz: 8eda86ccc06685b3025de57778e18b1943e0f134
4
+ data.tar.gz: 939a0532a3315cef11d210ef6e538c9c1ec2f17f
5
5
  SHA512:
6
- metadata.gz: 5a72476235ef88e59f68f3e8d56a0d34c657581cf2f0cd4e2bbe626db7ec8d4193f89b5e90d45a14b7a299f326d431c93d204cd0d9ac4bfc9cd2ed974a46caa3
7
- data.tar.gz: f6b28f91da78b36c7d8240fc1c37c5d16b21c2fac7242d4397fdcdb09cb87e0bf5773bcc60b4f46aa865333c337b7305ef3114277f72dce03f37942013e1d4c2
6
+ metadata.gz: df9a1a1057a2669dcaa5c236541ac01e56b50dbb741c287151e5c60e6ae2d04726bd322d2e97f80983fd3a4d1e8afd2527d9075f155d0161da09137944de42d7
7
+ data.tar.gz: d762cc2172b2ed7884302fc5de2137a33ab34e0f5b47f7473123b77488766a00e6c4640a30f6dcb7ba75049fb62c7d460f6c161bca0857a3dbf300ba7bc28cc7
data/README.md CHANGED
@@ -125,14 +125,16 @@ There's also a `bin/console` executable provided with this gem, if you want a RE
125
125
 
126
126
  ### What's implemented already ?
127
127
 
128
- * [x] `Project#all`
129
- * [x] `Project#find`
128
+ * [x] `Project` model
129
+ * [x] `Client` model
130
+ * [x] `Task` model
130
131
  * [x] `belongs_to` relationships
131
132
 
132
133
  ### What's not implemented yet ?
133
134
 
134
135
  * [ ] _all other models_ :scream:
135
136
  * [ ] `has_many` relationships
137
+ * [ ] document and integrate [Inch-CI](https://inch-ci.org)
136
138
 
137
139
  ## Development
138
140
 
data/lib/timestamp_api.rb CHANGED
@@ -13,8 +13,11 @@ require "timestamp_api/model"
13
13
  require "timestamp_api/collection"
14
14
  require "timestamp_api/models/project"
15
15
  require "timestamp_api/models/client"
16
+ require "timestamp_api/models/task"
16
17
 
17
18
  module TimestampAPI
19
+ extend Utils
20
+
18
21
  @api_endpoint = "https://api.ontimestamp.com/api"
19
22
 
20
23
  class << self
@@ -22,8 +25,8 @@ module TimestampAPI
22
25
  end
23
26
 
24
27
  def self.request(method, path, query_params = {})
25
- output(method, path, query_params) if verbose
26
- response = RestClient::Request.execute(request_options(method, path, query_params))
28
+ output(method, path, camelize_keys(query_params)) if verbose
29
+ response = RestClient::Request.execute(request_options(method, path, camelize_keys(query_params)))
27
30
  modelify(JSON.parse(response))
28
31
  rescue RestClient::Forbidden
29
32
  raise InvalidAPIKey
@@ -14,15 +14,15 @@ module TimestampAPI
14
14
  path.nil? ? self.class_variable_get(:@@api_path) : self.class_variable_set(:@@api_path, path)
15
15
  end
16
16
 
17
- def all
17
+ def all(query_params = {})
18
18
  raise APIPathNotSet.new(self) if api_path.nil?
19
- TimestampAPI.request(:get, api_path)
19
+ TimestampAPI.request(:get, api_path, query_params)
20
20
  end
21
21
 
22
- def find(id)
22
+ def find(id, query_params = {})
23
23
  return nil if id.nil?
24
24
  raise APIPathNotSet.new(self) if api_path.nil?
25
- TimestampAPI.request(:get, "#{api_path}/#{id}")
25
+ TimestampAPI.request(:get, "#{api_path}/#{id}", query_params)
26
26
  rescue RestClient::ResourceNotFound
27
27
  raise ResourceNotFound.new(self, id)
28
28
  end
@@ -5,7 +5,11 @@ module TimestampAPI
5
5
  base.class_eval do
6
6
  after_initialize do
7
7
  self.class.class_variable_get(:@@belongs_to).each do |association_name|
8
- instance_variable_set(:"@_#{association_name}_id", json_data[camelize(association_name)]["id"]) if json_data.has_key? camelize(association_name)
8
+ if json_data.has_key? camelize("#{association_name}_id") # e.g. "projectId" in tasks
9
+ instance_variable_set(:"@_#{association_name}_id", json_data[camelize("#{association_name}_id")])
10
+ elsif json_data.has_key? camelize(association_name) # e.g. "client" hash with "id" item in projects
11
+ instance_variable_set(:"@_#{association_name}_id", json_data[camelize(association_name)]["id"])
12
+ end
9
13
  end
10
14
  end
11
15
 
@@ -2,6 +2,6 @@ module TimestampAPI
2
2
  class Client < Model
3
3
  api_path "/clients"
4
4
 
5
- has_attributes :id, :created_at, :updated_at, :account_id, :name, :code, :is_archived, :is_account_default
5
+ has_attributes :id, :created_at, :updated_at, :name, :code, :is_archived, :is_account_default
6
6
  end
7
7
  end
@@ -2,7 +2,7 @@ module TimestampAPI
2
2
  class Project < Model
3
3
  api_path "/projects"
4
4
 
5
- has_attributes :id, :created_at, :updated_at, :account_id, :name, :code, :color, :initiation_date,
5
+ has_attributes :id, :created_at, :updated_at, :name, :code, :color, :initiation_date,
6
6
  :target_completion_date, :is_archived, :is_billable, :is_public, :is_approvable
7
7
 
8
8
  belongs_to :client
@@ -0,0 +1,13 @@
1
+ module TimestampAPI
2
+ class Task < Model
3
+ api_path "/tasks"
4
+
5
+ has_attributes :id, :created_at, :updated_at, :name, :is_archived, :is_billable
6
+
7
+ belongs_to :project
8
+
9
+ def self.for_project_id(project_id)
10
+ all(project_id: project_id)
11
+ end
12
+ end
13
+ end
@@ -1,7 +1,11 @@
1
1
  module TimestampAPI
2
2
  module Utils
3
3
  def camelize(symbol)
4
- symbol.to_s.split('_').each_with_index.map{ |chunk, idx| idx == 0 ? chunk : chunk.capitalize }.join
4
+ symbol.to_s.split('_').each_with_index.map{ |chunk, idx| idx == 0 ? chunk : chunk.capitalize }.join.gsub(/^\w/, &:downcase)
5
+ end
6
+
7
+ def camelize_keys(hash)
8
+ hash.each_with_object({}) { |pair, acc| acc[camelize(pair[0])] = pair[1] }
5
9
  end
6
10
  end
7
11
  end
@@ -1,3 +1,3 @@
1
1
  module TimestampAPI
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: timestamp_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Baudino
@@ -166,6 +166,7 @@ files:
166
166
  - lib/timestamp_api/model_relations.rb
167
167
  - lib/timestamp_api/models/client.rb
168
168
  - lib/timestamp_api/models/project.rb
169
+ - lib/timestamp_api/models/task.rb
169
170
  - lib/timestamp_api/utils.rb
170
171
  - lib/timestamp_api/version.rb
171
172
  - timestamp_api.gemspec