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, filter:) ⇒ Object
- #delete_all(model_class) ⇒ Object
- #fetch(model_class, filter: nil, order: nil, includes: nil) ⇒ Object
- #fetch!(model_class, filter: nil, order: nil, includes: nil) {|fetch(model_class, filter, order, includes)| ... } ⇒ Object
- #filename(model_class) ⇒ Object
- #find(model_class, id) ⇒ Object
-
#initialize ⇒ Store
constructor
A new instance of Store.
- #match_filter?(model, filter) ⇒ Boolean
- #max(model_class, field_name) ⇒ Object
- #max!(model_class, field_name, &block) ⇒ 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.
3 4 5 |
# File 'lib/menilite/client/store.rb', line 3 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, filter:) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/menilite/client/store.rb', line 77 def delete(model_class, filter:, &block) tables = @tables Menilite::Http.request_json("api/#{model_class}", :delete, filter) do on :success do |json| res = json.map {|value| tables[model_class].delete(value[:id]) } block.call res if block end on :failure do |res| puts ">> Error: #{res.error}" puts ">>>> delete: #{model.inspect}" end end end |
#delete_all(model_class) ⇒ Object
92 93 94 |
# File 'lib/menilite/client/store.rb', line 92 def delete_all(mdoel_class) @tables[model_class] = {} end |
#fetch(model_class, filter: nil, order: nil, includes: nil) ⇒ Object
23 24 25 |
# File 'lib/menilite/client/store.rb', line 23 def fetch(model_class, filter:) @tables[model_class].find{|x| match_filter?(x, filter) } end |
#fetch!(model_class, filter: nil, order: nil, includes: nil) {|fetch(model_class, filter, order, includes)| ... } ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/menilite/client/store.rb', line 57 def fetch!(model_class, filter: nil, includes: nil, order: nil, &block) tables = @tables param_list = [] param_list << filter.map {|k,v| "#{k}=#{v}" } if filter param_list << "order=#{[order].flatten.join(?,)}" if order param_list << "includes=#{includes}" if includes params = ?? + param_list.join(?&) if param_list.length > 0 Menilite::Http.get_json("api/#{model_class}#{params}") do on :success do |json| tables[model_class] = json.map {|value| [value[:id], Menilite::Deserializer.deserialize(model_class, value, includes)] }.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
73 74 75 |
# File 'lib/menilite/server/store.rb', line 73 def filename(model_class) @db_dir + "/#{model_class}.db" end |
#find(model_class, id) ⇒ Object
19 20 21 |
# File 'lib/menilite/client/store.rb', line 19 def find(model_class, id) self[model_class][id] end |
#match_filter?(model, filter) ⇒ Boolean
27 28 29 |
# File 'lib/menilite/client/store.rb', line 27 def match_filter?(model, filter) filter.all? {|k, v| model[k] == v } end |
#max(model_class, field_name) ⇒ Object
68 69 70 71 |
# File 'lib/menilite/server/store.rb', line 68 def max(model_class, field_name) fetch(model_class) @tables[model_class].reduce(nil) {|v, max| v.fields[field_name] < max ? max : v.fields[field_name] } end |
#max!(model_class, field_name, &block) ⇒ Object
96 97 98 99 100 101 102 103 104 105 |
# File 'lib/menilite/client/store.rb', line 96 def max!(model_class, field_name, &block) Menilite::Http.get_json("api/#{model_class}?order=#{field_name}") do on :success do |json| if json.last model = model_class.new(json.last) yield model.fields[field_name] end end end end |
#register(model_class) ⇒ Object
11 12 13 |
# File 'lib/menilite/client/store.rb', line 11 def register(model_class) @tables[model_class] = {} end |
#save(model) {|model| ... } ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/menilite/client/store.rb', line 31 def save(model) is_array = model.is_a?(Array) models = is_array ? model : [ model ] model_class = models.first.class table = @tables[model_class] Menilite::Http.post_json("api/#{model_class.to_s}", models) do on :success do |json| results = 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
83 84 85 |
# File 'lib/menilite/server/activerecord_store.rb', line 83 def to_model(ar_obj, model_class) model_class.new(fields(ar_obj, model_class)) end |