Class: Menilite::Store
- Inherits:
-
Object
- Object
- Menilite::Store
- Defined in:
- lib/menilite/client/store.rb,
lib/menilite/server/store.rb,
lib/menilite/server/activerecord_store.rb
Constant Summary collapse
- DEFAULT_DB_DIR =
'./.store'
Class Method Summary collapse
Instance Method Summary collapse
- #armodel(model_class) ⇒ Object
- #delete(model_class) ⇒ Object
- #fetch(model_class, filter: nil, order: nil) {|@tables[model_class].values || []| ... } ⇒ Object
- #filename(model_class) ⇒ Object
- #find(model_class, id) ⇒ Object
-
#initialize ⇒ Store
constructor
A new instance of Store.
- #max(model_class, field_name) ⇒ Object
- #register(model_class) ⇒ Object
- #save(model) {|model| ... } ⇒ Object
- #to_model(ar_obj, model_class) ⇒ Object
Constructor Details
#initialize ⇒ Store
Returns a new instance of Store.
5 6 7 |
# File 'lib/menilite/client/store.rb', line 5 def initialize @tables = {} end |
Class Method Details
Instance Method Details
#armodel(model_class) ⇒ Object
31 32 33 |
# File 'lib/menilite/server/activerecord_store.rb', line 31 def armodel(model_class) @armodels[model_class] end |
#delete(model_class) ⇒ Object
72 73 74 |
# File 'lib/menilite/client/store.rb', line 72 def delete(mdoel_class) @tables[model_class] = {} end |
#fetch(model_class, filter: nil, order: nil) {|@tables[model_class].values || []| ... } ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/menilite/client/store.rb', line 55 def fetch(model_class, filter: nil, order: nil, &block) tables = @tables params = filter && (?? + filter.map {|k,v| "#{k}=#{v}" }.join(?&)) params = (params ? params + ?& : ??) + "order=#{[order].flatten.join(?,)}" if order Browser::HTTP.get("api/#{model_class}#{params}") do on :success do |res| tables[model_class] = res.json.map {|value| [value[:id], model_class.new(value)] }.to_h yield tables[model_class].values if block_given? end on :failure do |res| puts ">> Error: #{res.error}" puts ">>>> save: #{model.inspect}" end end end |
#filename(model_class) ⇒ Object
69 70 71 |
# File 'lib/menilite/server/store.rb', line 69 def filename(model_class) @db_dir + "/#{model_class}.db" end |
#find(model_class, id) ⇒ Object
21 22 23 24 25 26 27 |
# File 'lib/menilite/client/store.rb', line 21 def find(model_class, id) return self[model_class][id] if self[model_class][id] res = Browser::HTTP.get!("api/#{model_class.to_s}/#{id}") model = model_class.new(res.json) @tables[model_class][id] = model end |
#max(model_class, field_name) ⇒ Object
76 77 78 79 80 81 82 |
# File 'lib/menilite/client/store.rb', line 76 def max(model_class, field_name) res = Browser::HTTP.get!("api/#{model_class}?order=#{field_name}") if res.json.last model = model_class.new(res.json.last) model.fields[field_name] end end |
#register(model_class) ⇒ Object
13 14 15 |
# File 'lib/menilite/client/store.rb', line 13 def register(model_class) @tables[model_class] = {} end |
#save(model) {|model| ... } ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/menilite/client/store.rb', line 29 def save(model) is_array = model.is_a?(Array) models = is_array ? model : [ model ] model_class = models.first.class table = @tables[model_class] Browser::HTTP.post("api/#{model_class.to_s}", models.to_json) do on :success do |res| results = res.json.map do |value| if table.has_key?(value[:id]) table[value[:id]].update(value) table[value[:id]] else table[value[:id]] = model_class.new(value) end end yield(is_array ? results : results.first) if block_given? end on :failure do |res| puts ">> Error: #{res.error}" puts ">>>> save: #{model.inspect}" end end end |
#to_model(ar_obj, model_class) ⇒ Object
74 75 76 |
# File 'lib/menilite/server/activerecord_store.rb', line 74 def to_model(ar_obj, model_class) model_class.new(fields(ar_obj, model_class)) end |