Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

ixtlan-datamapper

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ixtlan-datamapper

  • 0.1.0
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

Ixtlan DataMapper

  • Build Status
  • Dependency Status
  • Code Climate

it adds optimistic persistence support to DataMapper and ActveRecord using the updated_at property/attribute which is automatically updated on any change of the model (for datamapper you need dm-timestamps for that). to load a model use optimistic_get/optimistic_get!/optimistic_find respectively where the first argument is the last updated_at value which the client has. if the client data is uptodate then the optimistic_XYZ method will return the database entity otherwise raise an exception or return nil respectively.

optimistic/conditional get

just include require 'ixtlan/datamapper/optimistic' and have model like:

class User
  include DataMapper::Resource

  property :id, Serial
  property :name, String

  timestamps :at
end

you need the timestamps to get it to work since the updated_at property will be used to determine if the object is stale or not.

now you get the object in an optimistic manner

User.optimistic_get!( updated_at, id )
User.optimistic_get( updated_at, id )

if will raise an Ixtlan::DataMapper::StaleObjectException in case the object with the given id exists but does carry a different updated_at timestamp. otherwise the optimistic_get and optimistic_get! behave the same as get and get!.

now you get the object in an conditional manner

User.conditinal_get!( updated_at, id )
User.conditional_get( updated_at, id )

it the User when the updated_at does not match. when it matches it returns false. in case the id does not exist, it will return either nil of DataMapper::ObjectNotFoundError. this allows constructs like

if u = User.conditinal_get!( request.last_modified, id )
  response.last_modified = u.updated_at
  response.write ....
else
  # in case request.last_modified was nil
  response.last_modified = u.updated_at	  
end

Ixtlan::DataMapper::Immutable

class Group
  include DataMapper::Resource
  include Ixtlan::DataMapper::Immutable

  property :id, Serial
  property :name, String
end

you can create and delete those object but any attempt to change it the name ends in validation error.

require 'ixtlan/datamapper/use_utc'

just convenient file to setup datamapper to use UTC timestamps

Ixtlan::DataMapper:Collection

the collection is virtus object which helps to transport collections of DataMapper objects around. it has the total_count and an offset along an accessor for the list. the contructor deals with offset and limit on the datamapper query.

class UserCollection < Ixtlan::DataMapper::Collection
  attribute :users, Array[User]
  def data=( d )
    self.users = d
  end
end

this

UserCollection.new( User.all( :name.like => 'a%' ), 20, 10 )

will return 10 users starting with 'a' starting with 20th user from all possible users (with 'a').

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

meta-fu

enjoy :)

FAQs

Package last updated on 30 May 2014

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc