Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

indicates the thought patterns of someone with an ActiveRecord backgr… #212

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
source 'https://rubygems.org'

# Specify your gem's dependencies in adventure_channel.gemspec
gemspec
30 changes: 30 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
PATH
remote: .
specs:
ohm (3.0.2)
nido
redic (~> 1.5.0)
stal

GEM
remote: https://rubygems.org/
specs:
clap (1.0.0)
cutest (1.2.3)
clap
hiredis (0.6.1)
nido (1.0.0)
redic (1.5.0)
hiredis
stal (0.1.0)
redic

PLATFORMS
ruby

DEPENDENCIES
cutest
ohm!

BUNDLED WITH
1.12.4
96 changes: 96 additions & 0 deletions examples/rogue_associations.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# This attempts to illustrate the redis way of...
# - has_one 1:1 (Rogue - equipment)
# - has_many through (Rogue - inventory) 1:1 many:many 1:1
# - has_one 1:many (equipment - item)
# - Mixin usage to promote DRY code

require "ohm"

def battleable
attribute :name; index :name
attribute :hp, lambda { |x| x.to_i } # cast hp to integer
attribute :mp, lambda { |x| x.to_i }
list :inventory, :Item

attribute :equipment_id
reference :equipment, :Loadout
end

# We define both a `Video` and `Audio` model, with a `list` of *comments*.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's from a different example this comment.

class Rogue < Ohm::Model
battleable # give Rogues all the attributes required to conduct battle

# instead of using Rogue.create, favor Rogue.spawn
def self.spawn(name: nil)
rogue = self.create(name: name)
rogue.equipment = Loadout.create
rogue.save
rogue
end
end

class Monster < Ohm::Model
battleable # give monsters attributes required to conduct battle


end

class Loadout < Ohm::Model
attribute :head_id
reference :head, :Item
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reference macro already defines the head_id attribute, so all the attribute :*_id lines can be removed.

attribute :right_hand_id
reference :right_hand, :Item
attribute :left_hand_id
reference :left_hand, :Item
attribute :body_id
reference :body, :Item
attribute :legs_id
reference :legs, :Item
attribute :feet_id
reference :feet, :Item
attribute :wrist_id
reference :wrist, :Item
attribute :neck_id
reference :neck, :Item
end

class Item < Ohm::Model
attribute :name
attribute :dmg, lambda { |x| x.to_i }
attribute :def, lambda { |x| x.to_i }
attribute :value, lambda { |x| x.to_i }

def sell_to(target)
original_owner = "hmmm...."
end
end




# Now let's require the test framework we're going to use called
# [cutest](http://github.com/djanowski/cutest)
require "cutest"


# And make sure that every run of our test suite has a clean Redis instance.
prepare { Ohm.flush }

test "a rogue can be equipped with leggins" do
rogue = Rogue.spawn

rogue.equipment.legs = Item.create(name: "Starting Leggings", def: "1")

# TODO: Should I do something to make saving a parent also save children?
rogue.save
rogue.equipment.save

rogue = Rogue[rogue.id] # lookup the rogue from the DB to make sure things are persistent
assert_equal rogue.equipment.legs.def, 1
end

test "a rogue can sell her gear" do
rogue = Rogue.spawn


end