Class: Menilite::Store

Inherits:
Object
  • Object
show all
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

Constructor Details

#initializeStore

Returns a new instance of Store.



5
6
7
# File 'lib/menilite/client/store.rb', line 5

def initialize
  @tables = {}
end

Class Method Details

.instanceObject



9
10
11
# File 'lib/menilite/client/store.rb', line 9

def self.instance
  @instance ||= Store.new
end

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

Yields:

  • (@tables[model_class].values || [])


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

Yields:

  • (model)


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