timestamp_api 0.3.0 → 0.4.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 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