Examples below use Mavenlink::Workspace
as an instance.
You also have other collections to use in similar way:
Mavenlink::Assignment # assignments collection Mavenlink.client.assignments
Mavenlink::Attachment # attachments collection Mavenlink.client.attachments
Mavenlink::Expense # expenses collection Mavenlink.client.expenses
Mavenlink::Invoice # invoices collection Mavenlink.client.invoices
Mavenlink::Post # posts collection Mavenlink.client.posts
Mavenlink::Story # stories collection Mavenlink.client.stories
Mavenlink::StoryAllocationDay
Mavenlink::TimeEntry # time_enties collection Mavenlink.client.time_entries
Mavenlink::User # users collection Mavenlink.client.users
Mavenlink::WorkspaceGroup
Mavenlink::Workspace
In order to be able to perform any requests you should set outh_token
obtained by your Mavenlink Account.
Mavenlink.oauth_token = "your_token"
If you are using Rails, put this line into config/initializers/mavenlink.rb
.
If you are using Heroku or Foreman, set MAVENLINK_OAUTH_TOKEN env var.
workspace = Mavenlink::Workspace.create(title: 'new workspace', creator_role: 'buyer')
# Exactly the same:
workspace = Mavenlink::Workspace.new(title: 'New workspace', creator_role: 'maven')
workspace.save # will call "create" and store record in Mavenlink db
workspace.new_record? # -> false
Mavenlink::Workspace.find(9)
# Same as:
workspace = Mavenlink.client.workspaces.find(9)
# Reload record from remote host:
workspace.reload
workspace = Mavenlink::Workspace.find(1)
workspace.title = 'new title' # writes attribute
workspace.save # returns true if record has been saved
workspace.save! # will raise exception if record is invalid
workspace.update_attributes(title: 'title')
workspace.update_attributes!(title: 'title')
workspace.attributes = {title: 'title'}
workspace.save
post = Mavenlink::Post.find(1)
post.destroy
workspace.participants # will return participants as an array of Mavenlink::User instances, will do http API call if association is not "included"
workspace.participants # now it returns cached value
workspace.participants.first # returns Mavenlink::User record
workspace.participants(true) # flushes association cache
participant = workspace.participants.first
participant.full_name = 'new name'
participant.save # performs "update" query, full_name will be changed
In order to include association use include
as follows:
Mavenlink::Workspace.scoped.includes(:participants).search('My Workspace')
Mavenlink::Workspace.includes(:participants).search('My Workspace')
Mavenlink::Workspace.scoped.search('My Workspace').order(:updated_at, :desc).each do |workspace|
if workspace.valid?
workspace.destroy
end
end
Mavenlink::Workspace.search('Something')
Mavenlink::Workspace.scoped.search('Something')
Mavenlink.client.workspaces.search('Something')
Mavenlink::Workspace.filter(include_archived: true).all
Mavenlink::Workspace.scoped.filter(include_archived: true).all
Mavenlink.client.workspaces.filter(include_archived: true).all
Mavenlink::Workspace.page(2).per_page(3)
Mavenlink::Workspace.scoped.page(2).per_page(3)
Mavenlink.client.workspaces.page(2).per_page(3)
Mavenlink::Workspace.limit(2).offset(3)
Mavenlink::Workspace.scoped.limit(2).offset(3)
Mavenlink.client.workspaces.limit(2).offset(3)
You'll never receive full results set if number of records in requested collection is greater than 200. Pagination allows you to go through entire collection.
Mavenlink::Workspace.scoped.each_page do |page|
page.each do |workspace|
p workspace.inspect
end
end
Use your paginator as Enumerable:
Mavenlink::Workspace.scoped.each_page(200).to_a # 200 records per page
Mavenlink::Workspace.scoped.each_page.to_a.flatten # Returns full collection
Mavenlink::Workspace.scoped.each_page(2).each_with_index { |page, i| puts i }
Kaminari pagination is also supported.
By default client side validation is disabled, you can enable it by setting perform_validations
to true
Mavenlink.perform_validations = true
Now any record will be validated before you perform any request to change its attributes.
workspace = Workspace.new(title: 'My workspace')
workspace.save # -> returns false
workspace.errors.full_messages # -> ["Creator role is not included in the list"]
Mavenlink::Workspace.find(7).invite(email: 'john@doe.com', full_name: 'John Doe', invitee_role: 'maven')
Mavenlink.client.expense_categories
client = Mavenlink.client
client.get('/custom_path', {param: 'anything'})
client.post('/custom_path', {param: 'anything'})
client.put('/custom_path', {param: 'anything'})
client.delete('/custom_path', {param: 'anything'})
client = Mavenlink::Client.new(oauth_token: '...')
client.workspaces.each { |workspace| do_something(workspace) }
client.workspaces.includes('participants')
client.workspaces.includes('participants')
client.workspaces.includes('participants, creator')
client.workspaces.includes('participants', 'creator')
client.workspaces.includes(['participants', 'creator'])
client.workspaces.includes(:participants, :creator)
client.workspaces.find(2) # Returns one Mavenlink::Workspace
client.workspaces # Returns sort of "active record relation collection"
client.workspaces.to_a # Same as calling #to_a on activerecord scope
client.workspaces.all # Same as calling #to_a on activerecord scope
client.workspaces.page(3).per_page(20)
client.workspaces.limit(100).offset(10)
client.workspaces.filter(by_something: true)
client.workspaces.search('some text')
client.workspaces.order(:updated_at)
client.workspaces.order('updated_at:desc')
client.workspaces.order(:updated_at, :desc)
client.workspaces.order(:updated_at, 'ASC')
client.workspaces.order(:updated_at, true)
client.workspaces.create(title: 'New workspace')
client.workspaces.only(8).update(title: 'new title')
client.workspaces.only(8).delete
# ...
Run in your project directory bundle exec mavenlink-console
or TOKEN=your_oauth_token bundle exec mavenlink-console
.
Or just mavenlink-console
(depending on your current setup).
- Fork
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Added some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request (
git pull-request
)
Created by Mavenlink, Inc. and available under the MIT License.