Class: SequelRecordStore
- Inherits:
-
Object
- Object
- SequelRecordStore
- Defined in:
- lib/sequel_record_store.rb
Constant Summary collapse
- VERSION =
"0.4.0"
Class Method Summary collapse
- .<< ⇒ Object
- .database ⇒ Object
- .dataset ⇒ Object
- .dataset_name ⇒ Object
- .get(id) ⇒ Object (also: [])
- .put(record) ⇒ Object
- .required_attributes(*record) ⇒ Object
- .required_foreign_key(attribute, table) ⇒ Object
- .type_column_map(database) ⇒ Object
- .validations ⇒ Object
Instance Method Summary collapse
- #database ⇒ Object
- #dataset ⇒ Object
- #errors ⇒ Object
- #exists? ⇒ Boolean
-
#initialize(record) ⇒ SequelRecordStore
constructor
A new instance of SequelRecordStore.
- #insert ⇒ Object
- #put ⇒ Object
- #save ⇒ Object
- #transform ⇒ Object
- #typecast ⇒ Object
- #update ⇒ Object
- #validate ⇒ Object
Constructor Details
#initialize(record) ⇒ SequelRecordStore
Returns a new instance of SequelRecordStore.
57 58 59 |
# File 'lib/sequel_record_store.rb', line 57 def initialize(record) @record = record end |
Class Method Details
.<< ⇒ Object
25 26 27 |
# File 'lib/sequel_record_store.rb', line 25 def put(record) new(record).put end |
.database ⇒ Object
5 6 7 |
# File 'lib/sequel_record_store.rb', line 5 def database raise "You must setup your database" end |
.dataset ⇒ Object
13 14 15 |
# File 'lib/sequel_record_store.rb', line 13 def dataset database[dataset_name] end |
.dataset_name ⇒ Object
9 10 11 |
# File 'lib/sequel_record_store.rb', line 9 def dataset_name @dataset_name ||= name.sub(/Store$/,'').tableize.to_sym end |
.get(id) ⇒ Object Also known as: []
17 18 19 |
# File 'lib/sequel_record_store.rb', line 17 def get(id) dataset.where(id: id).first end |
.put(record) ⇒ Object
22 23 24 |
# File 'lib/sequel_record_store.rb', line 22 def put(record) new(record).put end |
.required_attributes(*record) ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/sequel_record_store.rb', line 38 def required_attributes(*record) record.each do |attribute| validations << proc do errors << "#{attribute.to_s.titleize} is required" unless @record[attribute].present? end end end |
.required_foreign_key(attribute, table) ⇒ Object
46 47 48 49 50 51 52 53 54 |
# File 'lib/sequel_record_store.rb', line 46 def required_foreign_key(attribute, table) validations << proc do if @record[attribute].blank? errors << "#{attribute} is required" elsif database[table].where(id: @record[attribute]).get(:id).blank? errors << "no #{table.to_s.singularize} with id=#{@record[attribute]}" end end end |
.type_column_map(database) ⇒ Object
27 28 29 30 31 32 |
# File 'lib/sequel_record_store.rb', line 27 def type_column_map(database) @type_column_map ||= database.schema(dataset_name).each_with_object({}) do |(column,),map| map[[:db_type]] ||= [] map[[:db_type]] << column end end |
.validations ⇒ Object
34 35 36 |
# File 'lib/sequel_record_store.rb', line 34 def validations @validations ||= [] end |
Instance Method Details
#database ⇒ Object
80 81 82 |
# File 'lib/sequel_record_store.rb', line 80 def database self.class.database end |
#dataset ⇒ Object
84 85 86 |
# File 'lib/sequel_record_store.rb', line 84 def dataset self.class.dataset end |
#errors ⇒ Object
88 89 90 |
# File 'lib/sequel_record_store.rb', line 88 def errors @errors ||= [] end |
#exists? ⇒ Boolean
111 112 113 |
# File 'lib/sequel_record_store.rb', line 111 def exists? !dataset.select(1).where(id: @record[:id]).empty? end |
#insert ⇒ Object
115 116 117 |
# File 'lib/sequel_record_store.rb', line 115 def insert @record[:id] = dataset.insert(@record.except(:errors)) end |
#put ⇒ Object
61 62 63 64 65 66 67 68 69 |
# File 'lib/sequel_record_store.rb', line 61 def put typecast transform return { errors: 'no record provided' } if @record.blank? validate return { errors: errors } if errors.present? save end |
#save ⇒ Object
71 72 73 74 75 76 77 78 |
# File 'lib/sequel_record_store.rb', line 71 def save if exists? update else insert end @record end |
#transform ⇒ Object
102 103 |
# File 'lib/sequel_record_store.rb', line 102 def transform end |
#typecast ⇒ Object
92 93 94 95 96 97 98 99 100 |
# File 'lib/sequel_record_store.rb', line 92 def typecast if database.database_type == :postgres Array(self.class.type_column_map(database)['json']).each do |json_column| if @record[json_column] @record[json_column] = Sequel.pg_json(@record[json_column]) end end end end |
#update ⇒ Object
119 120 121 |
# File 'lib/sequel_record_store.rb', line 119 def update dataset.where(id: @record[:id]).update(@record.except(:id, :errors)) end |
#validate ⇒ Object
105 106 107 108 109 |
# File 'lib/sequel_record_store.rb', line 105 def validate self.class.validations.each do |validation| instance_eval(&validation) end end |