moco-ruby

A Ruby Gem to interact with the MOCO API.

Installation

Install the gem and add to the application's Gemfile by executing:

$ bundle add moco-ruby

If bundler is not being used to manage dependencies, install the gem by executing:

$ gem install moco-ruby

Usage

MOCO::API

moco = MOCO::API.new(subdomain, api_key)
assigned_projects = moco.get_assigned_projects(active: 'true')
assigned_projects.each do |project|
  puts "Project \##{project.id} #{project.name} for customer #{project.customer.name}"
  project.tasks.each do |task|
    puts "- Task #{task.name} is #{task.billable ? 'billable' : 'not billable'}"
  end
end

MOCO::Entities

The following entities are currently defined:

  • Project (:id, :active, :name, :customer, :tasks)
  • Task (:id, :active, :name, :project_id, :billable)
  • Activity (:id, :active, :date, :description, :project, :task, :seconds, :hours, :billable, :billed, :user, :customer, :tag)
  • Customer (:id, :name)
  • User (:id, :firstname, :lastname)

The entities implement comparison, hash and JSON conversion.

MOCO::Sync

Intelligently matches and syncs data from one MOCO instance to another. Currently supports activities (time entries) only. See sync_activity.rb for a more detailed example.

source_api = MOCO::API.new(source_instance, source_api_key)
target_api = MOCO::API.new(target_instance, target_api_key)

syncer = MOCO::Sync.new(
  source_api,
  target_api,
  project_match_threshold: options[:match_project_threshold],
  task_match_threshold: options[:match_task_threshold],
  filters: {
    source: options.slice(:from, :to, :project_id, :company_id, :term),
    target: options.slice(:from, :to)
  },
  dry_run: options[:dry_run]
)

Utilities

Utilities can use config.yml to fetch instance data and other configuration. For format, see config.yml.sample.

mocurl

Run an API request against a MOCO instance and return the result nicely formatted. Use config.yml or specify api key with -a.

Usage: mocurl.rb [options] url
       mocurl.rb [options] subdomain path
    -X, --method METHOD              Set HTTP method to use
    -d, --data DATA                  Data to send to server, JSON format
    -a, --api-key API_KEY            Manually specify MOCO API key
    -n, --no-format                  Disable JSON pretty-printing
    -v, --verbose                    Show additional request and response information
    -h, --help                       Show this message

sync_activity

Sync activity data (time entries) from one instance to another, fuzzy matching projects and tasks. It is highly recommended to use filter options (--from, --to) and to use --dry-run first to check the matching performance.

Usage: sync_activity.rb [options] source target
    -f, --from DATE                  Start date (YYYY-MM-DD)
    -t, --to DATE                    End date (YYYY-MM-DD)
    -p, --project PROJECT_ID         Project ID to filter by
    -c, --company COMPANY_ID         Company ID to filter by
    -g, --term TERM                  Term to filter for
    -n, --dry-run                    Match only, but do not edit data
        --match-project-threshold VALUE
                                     Project matching threshold (0.0 - 1.0), default 0.8
        --match-task-threshold VALUE Task matching threshold (0.0 - 1.0), default 0.45