Class: Cassanova::Model
- Inherits:
-
Object
- Object
- Cassanova::Model
- Extended by:
- ActiveModel::Naming, ActiveModel::Translation
- Includes:
- ActiveModel::AttributeMethods, ActiveModel::Conversion, ActiveModel::Validations
- Defined in:
- lib/cassanova.rb
Class Method Summary collapse
-
.belongs_to(model_name) ⇒ Object
Relationship Methods ###.
- .cluster ⇒ Object
-
.columns(*syms) ⇒ Object
Config Methods ###.
- .create(data = {}) ⇒ Object
- .database(db) ⇒ Object
- .execute(*query) ⇒ Object
- .has_many(table_name) ⇒ Object
- .hosts(*host_names) ⇒ Object
- .prepare(query) ⇒ Object
- .select(*attrs) ⇒ Object
- .session ⇒ Object
-
.where(conditions = {}) ⇒ Object
Query Methods ###.
Instance Method Summary collapse
- #assign_attributes(data = {}) ⇒ Object
- #attributes ⇒ Object
-
#initialize(data = {}) ⇒ Model
constructor
A new instance of Model.
Constructor Details
#initialize(data = {}) ⇒ Model
Returns a new instance of Model.
17 18 19 20 21 |
# File 'lib/cassanova.rb', line 17 def initialize data={} params = {} data.each{|k,v| params[k.to_s] = v } cassandra_columns.each{|c| send("#{c}=", params[c.to_s]) } end |
Class Method Details
.belongs_to(model_name) ⇒ Object
Relationship Methods ###
92 93 94 95 96 |
# File 'lib/cassanova.rb', line 92 def self.belongs_to model_name define_method(model_name.to_s) do model_name.to_s.classify.constantize.where(:id => send("#{model_name}_id")).first end end |
.cluster ⇒ Object
39 40 41 |
# File 'lib/cassanova.rb', line 39 def self.cluster @@cassandra_cluster ||= Cassandra.cluster(hosts: cassandra_hosts) end |
.columns(*syms) ⇒ Object
Config Methods ###
106 107 108 109 110 111 |
# File 'lib/cassanova.rb', line 106 def self.columns *syms # unless defined? @@cassandra_columns @@cassandra_columns = syms if syms.present? @@cassandra_columns.each{|c| attr_accessor(c) } # end end |
.create(data = {}) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/cassanova.rb', line 69 def self.create data={} obj = self.new(data) obj.created_at = Time.zone.now if obj.attributes.include?("created_at") obj.updated_at = Time.zone.now if obj.attributes.include?("updated_at") if obj.valid? cols = obj.attributes.keys vals = cols.map{|k| obj.send(k) } query = "INSERT INTO #{self.name.underscore.pluralize} (#{cols.join(', ')}) VALUES (#{vals.map{'?'}.join(', ')})" begin query = Cassanova::Model.session.prepare(query) result = Cassanova::Model.session.execute(*[query, vals].flatten) return result.class == Cassandra::Results::Void rescue Exception => e obj.errors.add(:cassandra, e.) return obj end else return obj end end |
.database(db) ⇒ Object
119 120 121 122 123 |
# File 'lib/cassanova.rb', line 119 def self.database db # unless defined? @@cassandra_database @@cassandra_database = db if db.present? # end end |
.execute(*query) ⇒ Object
47 48 49 |
# File 'lib/cassanova.rb', line 47 def self.execute *query session.execute(query) end |
.has_many(table_name) ⇒ Object
98 99 100 101 102 |
# File 'lib/cassanova.rb', line 98 def self.has_many table_name define_method(table_name.to_s) do table_name.to_s.classify.constantize.where("#{self.class.name.underscore}_id" => send("id")).first end end |
.hosts(*host_names) ⇒ Object
113 114 115 116 117 |
# File 'lib/cassanova.rb', line 113 def self.hosts *host_names # unless defined? @@cassandra_hosts @@cassandra_hosts = host_names if host_names.present? # end end |
.prepare(query) ⇒ Object
51 52 53 |
# File 'lib/cassanova.rb', line 51 def self.prepare query session.prepare(query) end |
.select(*attrs) ⇒ Object
63 64 65 66 67 |
# File 'lib/cassanova.rb', line 63 def self.select *attrs query = Cassanova::Query.new(:table_name => self.name.underscore.pluralize) query.select(attrs) return query end |
.session ⇒ Object
43 44 45 |
# File 'lib/cassanova.rb', line 43 def self.session @@cassandra_session ||= cluster.connect(cassandra_database) end |
Instance Method Details
#assign_attributes(data = {}) ⇒ Object
29 30 31 32 33 34 35 36 37 |
# File 'lib/cassanova.rb', line 29 def assign_attributes data={} data.each do |k,v| begin send("#{k}=", v) rescue # only assign valid attributes end end end |
#attributes ⇒ Object
23 24 25 26 27 |
# File 'lib/cassanova.rb', line 23 def attributes attrs = {} cassandra_columns.each{|m| attrs[m.to_s] = send(m) } return attrs end |