mite.cmd 0.1.10
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.
- data/.gitignore +5 -0
- data/LICENSE +20 -0
- data/README.textile +162 -0
- data/Rakefile +33 -0
- data/TODO +4 -0
- data/VERSION +1 -0
- data/bin/mite +13 -0
- data/lib/mite_cmd.rb +34 -0
- data/lib/mite_cmd/application.rb +180 -0
- data/lib/mite_cmd/autocomplete.rb +48 -0
- data/lib/mite_ext.rb +53 -0
- data/lib/string_ext.rb +50 -0
- data/mite.cmd.gemspec +75 -0
- data/spec/mite_cmd/application_spec.rb +532 -0
- data/spec/mite_cmd/autocomplete_spec.rb +106 -0
- data/spec/mite_cmd_spec.rb +51 -0
- data/spec/mite_ext_spec.rb +99 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/string_ext_spec.rb +67 -0
- data/vendor/yolk-mite-rb-0.0.3/CHANGES.txt +11 -0
- data/vendor/yolk-mite-rb-0.0.3/LICENSE +20 -0
- data/vendor/yolk-mite-rb-0.0.3/README.textile +70 -0
- data/vendor/yolk-mite-rb-0.0.3/Rakefile +24 -0
- data/vendor/yolk-mite-rb-0.0.3/VERSION.yml +4 -0
- data/vendor/yolk-mite-rb-0.0.3/lib/mite-rb.rb +105 -0
- data/vendor/yolk-mite-rb-0.0.3/lib/mite/customer.rb +9 -0
- data/vendor/yolk-mite-rb-0.0.3/lib/mite/project.rb +16 -0
- data/vendor/yolk-mite-rb-0.0.3/lib/mite/service.rb +7 -0
- data/vendor/yolk-mite-rb-0.0.3/lib/mite/time_entry.rb +54 -0
- data/vendor/yolk-mite-rb-0.0.3/lib/mite/time_entry_group.rb +36 -0
- data/vendor/yolk-mite-rb-0.0.3/lib/mite/tracker.rb +34 -0
- data/vendor/yolk-mite-rb-0.0.3/lib/mite/user.rb +19 -0
- metadata +92 -0
@@ -0,0 +1,105 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__))
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'active_support'
|
5
|
+
require 'active_resource'
|
6
|
+
|
7
|
+
# The official ruby library for interacting with the RESTful API of mite,
|
8
|
+
# a sleek time tracking webapp.
|
9
|
+
|
10
|
+
module Mite
|
11
|
+
|
12
|
+
class << self
|
13
|
+
attr_accessor :email, :password, :host_format, :domain_format, :protocol, :port
|
14
|
+
attr_reader :account, :key
|
15
|
+
|
16
|
+
# Sets the account name, and updates all resources with the new domain.
|
17
|
+
def account=(name)
|
18
|
+
resources.each do |klass|
|
19
|
+
klass.site = klass.site_format % (host_format % [protocol, domain_format % name, ":#{port}"])
|
20
|
+
end
|
21
|
+
@account = name
|
22
|
+
end
|
23
|
+
|
24
|
+
# Sets up basic authentication credentials for all resources.
|
25
|
+
def authenticate(user, password)
|
26
|
+
resources.each do |klass|
|
27
|
+
klass.user = user
|
28
|
+
klass.password = password
|
29
|
+
end
|
30
|
+
@user = user
|
31
|
+
@password = password
|
32
|
+
true
|
33
|
+
end
|
34
|
+
|
35
|
+
# Sets the mite.api key for all resources.
|
36
|
+
def key=(value)
|
37
|
+
resources.each do |klass|
|
38
|
+
klass.headers['X-MiteApiKey'] = value
|
39
|
+
end
|
40
|
+
@key = value
|
41
|
+
end
|
42
|
+
|
43
|
+
def resources
|
44
|
+
@resources ||= []
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
self.host_format = '%s://%s%s'
|
49
|
+
self.domain_format = '%s.mite.yo.lk'
|
50
|
+
self.protocol = 'http'
|
51
|
+
self.port = ''
|
52
|
+
|
53
|
+
class Base < ActiveResource::Base
|
54
|
+
class << self
|
55
|
+
|
56
|
+
def inherited(base)
|
57
|
+
Mite.resources << base
|
58
|
+
class << base
|
59
|
+
attr_accessor :site_format
|
60
|
+
end
|
61
|
+
base.site_format = '%s'
|
62
|
+
base.timeout = 20
|
63
|
+
super
|
64
|
+
end
|
65
|
+
|
66
|
+
# Common shortcuts known from ActiveRecord
|
67
|
+
def all(options={})
|
68
|
+
find_every(options)
|
69
|
+
end
|
70
|
+
|
71
|
+
def first(options={})
|
72
|
+
find_every(options).first
|
73
|
+
end
|
74
|
+
|
75
|
+
def last(options={})
|
76
|
+
find_every(options).last
|
77
|
+
end
|
78
|
+
|
79
|
+
# Undo destroy action on the resource with the ID in the +id+ parameter.
|
80
|
+
def undo_destroy(id)
|
81
|
+
returning(self.new(:id => id)) { |res| res.undo_destroy }
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# Undo destroy action.
|
86
|
+
def undo_destroy
|
87
|
+
path = element_path(prefix_options).sub(/\.([\w]+)/, '/undo_delete.\1')
|
88
|
+
|
89
|
+
returning connection.post(path, "", self.class.headers) do |response|
|
90
|
+
load_attributes_from_response(response)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
class Error < StandardError; end
|
97
|
+
end
|
98
|
+
|
99
|
+
require 'mite/customer'
|
100
|
+
require 'mite/project'
|
101
|
+
require 'mite/service'
|
102
|
+
require 'mite/time_entry'
|
103
|
+
require 'mite/time_entry_group'
|
104
|
+
require 'mite/tracker'
|
105
|
+
require 'mite/user'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Mite::Project < Mite::Base
|
2
|
+
|
3
|
+
def time_entries(options = {})
|
4
|
+
TimeEntry.find(:all, :params => options.update(:project_id => id))
|
5
|
+
end
|
6
|
+
|
7
|
+
def customer
|
8
|
+
@customer ||= Customer.find(customer_id) unless customer_id.blank?
|
9
|
+
end
|
10
|
+
|
11
|
+
def customer=(customer)
|
12
|
+
self.customer_id = customer ? customer.id : nil
|
13
|
+
@customer = customer
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
class Mite::TimeEntry < Mite::Base
|
2
|
+
|
3
|
+
def service
|
4
|
+
@service ||= Service.find(service_id) unless service_id.blank?
|
5
|
+
end
|
6
|
+
|
7
|
+
def service=(service)
|
8
|
+
self.service_id = service ? service.id : nil
|
9
|
+
@service = service
|
10
|
+
end
|
11
|
+
|
12
|
+
def project
|
13
|
+
@project ||= Project.find(project_id) unless project_id.blank?
|
14
|
+
end
|
15
|
+
|
16
|
+
def project=(project)
|
17
|
+
self.project_id = project ? project.id : nil
|
18
|
+
@project = project
|
19
|
+
end
|
20
|
+
|
21
|
+
def customer
|
22
|
+
@customer ||= begin
|
23
|
+
p = project
|
24
|
+
p.customer unless p.blank?
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def tracking?
|
29
|
+
!!attributes["tracker"]
|
30
|
+
end
|
31
|
+
|
32
|
+
def start_tracker
|
33
|
+
attributes["tracker"] = Mite::Tracker.start(id) || nil
|
34
|
+
end
|
35
|
+
|
36
|
+
def stop_tracker
|
37
|
+
Mite::Tracker.stop if tracking?
|
38
|
+
end
|
39
|
+
|
40
|
+
def load(attr)
|
41
|
+
super(attr)
|
42
|
+
if attributes["tracking"]
|
43
|
+
attributes["tracker"] = Mite::Tracker.new.load(attributes.delete("tracking").attributes)
|
44
|
+
end
|
45
|
+
self
|
46
|
+
end
|
47
|
+
|
48
|
+
class << self
|
49
|
+
def find_every(options={})
|
50
|
+
return super(options) if !options[:params] || !options[:params][:group_by]
|
51
|
+
TimeEntryGroup.all(options)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class Mite::TimeEntryGroup < Mite::Base
|
2
|
+
self.collection_name = "time_entries"
|
3
|
+
|
4
|
+
attr_accessor :time_entries_params
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def find_every(options={})
|
8
|
+
return TimeEntry.all(options) if !options[:params] || !options[:params][:group_by]
|
9
|
+
|
10
|
+
returning super(options) do |records|
|
11
|
+
records.each do |record|
|
12
|
+
if record.attributes["time_entries_params"]
|
13
|
+
record.time_entries_params = record.attributes.delete("time_entries_params").attributes.stringify_keys
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def time_entries(options={})
|
21
|
+
return [] unless time_entries_params.is_a?(Hash)
|
22
|
+
|
23
|
+
empty_result = false
|
24
|
+
|
25
|
+
options[:params] ||= {}
|
26
|
+
options[:params].stringify_keys!
|
27
|
+
options[:params].merge!(time_entries_params) do |key, v1, v2|
|
28
|
+
empty_result = (v1 != v2)
|
29
|
+
v2
|
30
|
+
end
|
31
|
+
|
32
|
+
return [] if empty_result
|
33
|
+
|
34
|
+
TimeEntry.all(options)
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class Mite::Tracker < Mite::Base
|
2
|
+
|
3
|
+
self.collection_name = "tracker"
|
4
|
+
|
5
|
+
def self.current
|
6
|
+
tracking_time_entry = connection.get(collection_path, headers)["tracking_time_entry"]
|
7
|
+
tracking_time_entry ? instantiate_record(tracking_time_entry) : nil
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.start(time_entry_or_id)
|
11
|
+
id = time_entry_or_id.is_a?(Mite::TimeEntry) ? time_entry_or_id.id : time_entry_or_id
|
12
|
+
self.new(:id => id).start
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.stop
|
16
|
+
tracker = current
|
17
|
+
tracker ? tracker.stop : false
|
18
|
+
end
|
19
|
+
|
20
|
+
def start
|
21
|
+
response = connection.put(element_path(prefix_options), encode, self.class.headers)
|
22
|
+
load(self.class.format.decode(response.body)["tracking_time_entry"])
|
23
|
+
response.is_a?(Net::HTTPSuccess) ? self : false
|
24
|
+
end
|
25
|
+
|
26
|
+
def stop
|
27
|
+
connection.delete(element_path, self.class.headers).is_a?(Net::HTTPSuccess) ? self : false
|
28
|
+
end
|
29
|
+
|
30
|
+
def time_entry
|
31
|
+
Mite::TimeEntry.find(id)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Mite::User < Mite::Base
|
2
|
+
|
3
|
+
def time_entries(options = {})
|
4
|
+
TimeEntry.find(:all, :params => options.update(:user_id => id))
|
5
|
+
end
|
6
|
+
|
7
|
+
def save
|
8
|
+
raise Error, "Cannot modify users over mite.api"
|
9
|
+
end
|
10
|
+
|
11
|
+
def create
|
12
|
+
raise Error, "Cannot create users over mite.api"
|
13
|
+
end
|
14
|
+
|
15
|
+
def destroy
|
16
|
+
raise Error, "Cannot destroy users over mite.api"
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mite.cmd
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.10
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Lukas Rieder
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-02-11 00:00:00 +01:00
|
13
|
+
default_executable: mite
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: A simple command line interface for mite, a sleek time tracking webapp.
|
17
|
+
email: l.rieder@gmail.com
|
18
|
+
executables:
|
19
|
+
- mite
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- LICENSE
|
24
|
+
- README.textile
|
25
|
+
files:
|
26
|
+
- .gitignore
|
27
|
+
- LICENSE
|
28
|
+
- README.textile
|
29
|
+
- Rakefile
|
30
|
+
- TODO
|
31
|
+
- VERSION
|
32
|
+
- bin/mite
|
33
|
+
- lib/mite_cmd.rb
|
34
|
+
- lib/mite_cmd/application.rb
|
35
|
+
- lib/mite_cmd/autocomplete.rb
|
36
|
+
- lib/mite_ext.rb
|
37
|
+
- lib/string_ext.rb
|
38
|
+
- mite.cmd.gemspec
|
39
|
+
- spec/mite_cmd/application_spec.rb
|
40
|
+
- spec/mite_cmd/autocomplete_spec.rb
|
41
|
+
- spec/mite_cmd_spec.rb
|
42
|
+
- spec/mite_ext_spec.rb
|
43
|
+
- spec/spec_helper.rb
|
44
|
+
- spec/string_ext_spec.rb
|
45
|
+
- vendor/yolk-mite-rb-0.0.3/CHANGES.txt
|
46
|
+
- vendor/yolk-mite-rb-0.0.3/LICENSE
|
47
|
+
- vendor/yolk-mite-rb-0.0.3/README.textile
|
48
|
+
- vendor/yolk-mite-rb-0.0.3/Rakefile
|
49
|
+
- vendor/yolk-mite-rb-0.0.3/VERSION.yml
|
50
|
+
- vendor/yolk-mite-rb-0.0.3/lib/mite-rb.rb
|
51
|
+
- vendor/yolk-mite-rb-0.0.3/lib/mite/customer.rb
|
52
|
+
- vendor/yolk-mite-rb-0.0.3/lib/mite/project.rb
|
53
|
+
- vendor/yolk-mite-rb-0.0.3/lib/mite/service.rb
|
54
|
+
- vendor/yolk-mite-rb-0.0.3/lib/mite/time_entry.rb
|
55
|
+
- vendor/yolk-mite-rb-0.0.3/lib/mite/time_entry_group.rb
|
56
|
+
- vendor/yolk-mite-rb-0.0.3/lib/mite/tracker.rb
|
57
|
+
- vendor/yolk-mite-rb-0.0.3/lib/mite/user.rb
|
58
|
+
has_rdoc: true
|
59
|
+
homepage: http://github.com/Overbryd/mite.cmd
|
60
|
+
licenses: []
|
61
|
+
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options:
|
64
|
+
- --charset=UTF-8
|
65
|
+
require_paths:
|
66
|
+
- lib
|
67
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: "0"
|
72
|
+
version:
|
73
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: "0"
|
78
|
+
version:
|
79
|
+
requirements: []
|
80
|
+
|
81
|
+
rubyforge_project:
|
82
|
+
rubygems_version: 1.3.5
|
83
|
+
signing_key:
|
84
|
+
specification_version: 3
|
85
|
+
summary: A simple command line interface for basic mite tasks.
|
86
|
+
test_files:
|
87
|
+
- spec/mite_cmd/application_spec.rb
|
88
|
+
- spec/mite_cmd/autocomplete_spec.rb
|
89
|
+
- spec/mite_cmd_spec.rb
|
90
|
+
- spec/mite_ext_spec.rb
|
91
|
+
- spec/spec_helper.rb
|
92
|
+
- spec/string_ext_spec.rb
|