yeshoua_crm 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Rakefile +11 -0
- data/lib/yeshoua_crm.rb +87 -0
- data/lib/yeshoua_crm/acts_as_draftable/draft.rb +40 -0
- data/lib/yeshoua_crm/acts_as_draftable/rcrm_acts_as_draftable.rb +154 -0
- data/lib/yeshoua_crm/acts_as_list/list.rb +282 -0
- data/lib/yeshoua_crm/acts_as_taggable/rcrm_acts_as_taggable.rb +350 -0
- data/lib/yeshoua_crm/acts_as_taggable/tag.rb +81 -0
- data/lib/yeshoua_crm/acts_as_taggable/tag_list.rb +111 -0
- data/lib/yeshoua_crm/acts_as_taggable/tagging.rb +16 -0
- data/lib/yeshoua_crm/acts_as_viewed/rcrm_acts_as_viewed.rb +274 -0
- data/lib/yeshoua_crm/acts_as_votable/rcrm_acts_as_votable.rb +80 -0
- data/lib/yeshoua_crm/acts_as_votable/rcrm_acts_as_voter.rb +20 -0
- data/lib/yeshoua_crm/acts_as_votable/votable.rb +323 -0
- data/lib/yeshoua_crm/acts_as_votable/vote.rb +28 -0
- data/lib/yeshoua_crm/acts_as_votable/voter.rb +131 -0
- data/lib/yeshoua_crm/assets_manager.rb +43 -0
- data/lib/yeshoua_crm/currency.rb +439 -0
- data/lib/yeshoua_crm/currency/formatting.rb +224 -0
- data/lib/yeshoua_crm/currency/heuristics.rb +151 -0
- data/lib/yeshoua_crm/currency/loader.rb +24 -0
- data/lib/yeshoua_crm/helpers/external_assets_helper.rb +17 -0
- data/lib/yeshoua_crm/helpers/form_tag_helper.rb +123 -0
- data/lib/yeshoua_crm/helpers/tags_helper.rb +13 -0
- data/lib/yeshoua_crm/helpers/vote_helper.rb +35 -0
- data/lib/yeshoua_crm/liquid/drops/cells_drop.rb +86 -0
- data/lib/yeshoua_crm/liquid/drops/issues_drop.rb +66 -0
- data/lib/yeshoua_crm/liquid/drops/news_drop.rb +54 -0
- data/lib/yeshoua_crm/liquid/drops/users_drop.rb +72 -0
- data/lib/yeshoua_crm/liquid/filters/arrays.rb +177 -0
- data/lib/yeshoua_crm/liquid/filters/base.rb +208 -0
- data/lib/yeshoua_crm/money_helper.rb +65 -0
- data/lib/yeshoua_crm/version.rb +3 -0
- data/test/acts_as_draftable/draft_test.rb +29 -0
- data/test/acts_as_draftable/rcrm_acts_as_draftable_test.rb +185 -0
- data/test/acts_as_taggable/rcrm_acts_as_taggable_test.rb +345 -0
- data/test/acts_as_taggable/tag_list_test.rb +34 -0
- data/test/acts_as_taggable/tag_test.rb +72 -0
- data/test/acts_as_taggable/tagging_test.rb +15 -0
- data/test/acts_as_viewed/rcrm_acts_as_viewed_test.rb +47 -0
- data/test/acts_as_votable/rcrm_acts_as_votable_test.rb +19 -0
- data/test/acts_as_votable/rcrm_acts_as_voter_test.rb +14 -0
- data/test/acts_as_votable/votable_test.rb +507 -0
- data/test/acts_as_votable/voter_test.rb +296 -0
- data/test/currency_test.rb +292 -0
- data/test/liquid/drops/issues_drop_test.rb +34 -0
- data/test/liquid/drops/news_drop_test.rb +38 -0
- data/test/liquid/drops/projects_drop_test.rb +44 -0
- data/test/liquid/drops/uses_drop_test.rb +36 -0
- data/test/liquid/filters/arrays_filter_test.rb +24 -0
- data/test/liquid/filters/base_filter_test.rb +63 -0
- data/test/liquid/liquid_helper.rb +32 -0
- data/test/models/issue.rb +14 -0
- data/test/models/news.rb +3 -0
- data/test/models/project.rb +8 -0
- data/test/models/user.rb +11 -0
- data/test/models/vote_classes.rb +33 -0
- data/test/money_helper_test.rb +12 -0
- data/test/schema.rb +121 -0
- data/test/tags_helper_test.rb +29 -0
- data/test/test_helper.rb +66 -0
- data/test/vote_helper_test.rb +28 -0
- data/yeshoua_crm.gemspec +28 -0
- metadata +206 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../liquid_helper'
|
2
|
+
include LiquidHelperMethods
|
3
|
+
|
4
|
+
module YeshouaCrm
|
5
|
+
class IssuesDropTest < ActiveSupport::TestCase
|
6
|
+
def setup
|
7
|
+
@issue = Issue.first
|
8
|
+
@user = User.first
|
9
|
+
@liquid_render = LiquidRender.new('user' => Liquid::UserDrop.new(@user),
|
10
|
+
'issue' => Liquid::IssueDrop.new(@issue),
|
11
|
+
'issues' => Liquid::IssuesDrop.new(Issue.all))
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_issues_all
|
15
|
+
issues_text = @liquid_render.render('{% for issue in issues.all %} {{issue.subject }} {% endfor %}')
|
16
|
+
Issue.all.map(&:subject).each do |subject|
|
17
|
+
assert_match subject, issues_text
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_issues_size
|
22
|
+
assert_equal '4', @liquid_render.render('{{ issues.size }}')
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_issue_author
|
26
|
+
assert_equal @user.name, @liquid_render.render('{{ issue.author.name }}')
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_issue_delegated
|
30
|
+
assert_equal [@issue.id, @issue.subject, @issue.description].join('|'),
|
31
|
+
@liquid_render.render('{{ issue.id }}|{{ issue.subject }}|{{ issue.description }}')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../liquid_helper'
|
2
|
+
include LiquidHelperMethods
|
3
|
+
|
4
|
+
module YeshouaCrm
|
5
|
+
class NewsDropTest < ActiveSupport::TestCase
|
6
|
+
def setup
|
7
|
+
@news = News.first
|
8
|
+
@user = User.first
|
9
|
+
@liquid_render = LiquidRender.new('user' => Liquid::UserDrop.new(@user),
|
10
|
+
'news' => Liquid::NewsDrop.new(@news),
|
11
|
+
'newss' => Liquid::NewssDrop.new(News.all))
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_newss_all
|
15
|
+
newss_text = @liquid_render.render('{% for news in newss.all %} {{news.title }} {% endfor %}')
|
16
|
+
News.all.map(&:title).each do |title|
|
17
|
+
assert_match title, newss_text
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_newss_last
|
22
|
+
assert_equal News.last.title, @liquid_render.render('{{ newss.last.title }}')
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_newss_size
|
26
|
+
assert_equal '2', @liquid_render.render('{{ newss.size }}')
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_news_author
|
30
|
+
assert_equal @user.name, @liquid_render.render('{{ news.author.name }}')
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_issue_delegated
|
34
|
+
assert_equal [@news.id, @news.title, @news.description].join('|'),
|
35
|
+
@liquid_render.render('{{ news.id }}|{{ news.title }}|{{ news.description }}')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../liquid_helper'
|
2
|
+
include LiquidHelperMethods
|
3
|
+
|
4
|
+
module YeshouaCrm
|
5
|
+
class CellsDropTest < ActiveSupport::TestCase
|
6
|
+
def setup
|
7
|
+
@cell = Cell.first
|
8
|
+
@user = User.first
|
9
|
+
@liquid_render = LiquidRender.new('user' => Liquid::UserDrop.new(@user),
|
10
|
+
'cell' => Liquid::CellDrop.new(@cell),
|
11
|
+
'cells' => Liquid::CellsDrop.new(Cell.all))
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_cells_all
|
15
|
+
cells_text = @liquid_render.render('{% for cell in cells.all %} {{cell.identifier }} {% endfor %}')
|
16
|
+
Cell.all.map(&:identifier).each do |identifier|
|
17
|
+
assert_match identifier, cells_text
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_cells_active
|
22
|
+
cells_text = @liquid_render.render('{% for cell in cells.active %} {{cell.identifier }} {% endfor %}')
|
23
|
+
Cell.where(:status => 1).map(&:identifier).each do |identifier|
|
24
|
+
assert_match identifier, cells_text
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_cells_size
|
29
|
+
assert_equal '2', @liquid_render.render('{{ cells.size }}')
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_cell_issues
|
33
|
+
issues_text = @liquid_render.render('{% for issue in cell.issues %} {{issue.subject }} {% endfor %}')
|
34
|
+
Cell.first.issues.each do |issue|
|
35
|
+
assert_match issue.subject, issues_text
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_cell_delegated
|
40
|
+
assert_equal [@cell.id, @cell.identifier, @cell.description].join('|'),
|
41
|
+
@liquid_render.render('{{ cell.id }}|{{ cell.identifier }}|{{ cell.description }}')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../liquid_helper'
|
2
|
+
include LiquidHelperMethods
|
3
|
+
|
4
|
+
module YeshouaCrm
|
5
|
+
class UsersDropTest < ActiveSupport::TestCase
|
6
|
+
def setup
|
7
|
+
@user = User.first
|
8
|
+
@liquid_render = LiquidRender.new('user' => Liquid::UserDrop.new(@user),
|
9
|
+
'users' => Liquid::UsersDrop.new(User.all))
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_users_all
|
13
|
+
users_text = @liquid_render.render('{% for user in users.all %} {{user.name }} {% endfor %}')
|
14
|
+
User.all.map(&:name).each do |name|
|
15
|
+
assert_match name, users_text
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_users_current
|
20
|
+
assert_equal User.first.name, @liquid_render.render('{{ users.current.name }}')
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_users_size
|
24
|
+
assert_equal '2', @liquid_render.render('{{ users.size }}')
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_user_name
|
28
|
+
assert_equal @user.name, @liquid_render.render('{{ user.name }}')
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_user_delegated
|
32
|
+
assert_equal [@user.name, @user.language].join('|'),
|
33
|
+
@liquid_render.render('{{ user.name }}|{{ user.language }}')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../liquid_helper'
|
2
|
+
include LiquidHelperMethods
|
3
|
+
|
4
|
+
module YeshouaCrm
|
5
|
+
class ArraysFilterTest < ActiveSupport::TestCase
|
6
|
+
def setup
|
7
|
+
@liquid_render = LiquidRender.new
|
8
|
+
@array = '6,7,8,9,1,2,3,4,5'
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_first_filter
|
12
|
+
assert_match '1', @liquid_render.render("{{ '#{@array}' | split: ',' | first: 5 | last }}")
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_sort_filter
|
16
|
+
assert_match '123456789', @liquid_render.render("{{ '#{@array}' | split: ',' | sort }}")
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_where_filter
|
20
|
+
assert_match '{"name"=>"two", "value"=>5}', @liquid_render.render("{{ objects_arr | where: 'name', 'two' }}")
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../liquid_helper'
|
2
|
+
include LiquidHelperMethods
|
3
|
+
|
4
|
+
module YeshouaCrm
|
5
|
+
class BaseFilterTest < ActiveSupport::TestCase
|
6
|
+
def setup
|
7
|
+
@liquid_render = LiquidRender.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_underscore_filter
|
11
|
+
assert_match 'some_text', @liquid_render.render("{{ 'some text' | underscore }}")
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_dasherize_filter
|
15
|
+
assert_match 'some-text', @liquid_render.render("{{ 'some text' | dasherize }}")
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_random_filter
|
19
|
+
assert @liquid_render.render("{{ random: 10 }}").to_i <= 10
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_encode_filter
|
23
|
+
assert_equal 'http%3A%3A%2F%2Fwww.test.com%3Fkey%3Dtest+test+test',
|
24
|
+
@liquid_render.render("{{ 'http:://www.test.com?key=test test test' | encode }}")
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_plus_days_filter
|
28
|
+
assert_match (Date.today + 3.days).strftime(date_format), @liquid_render.render("{{today | plus_days: 3 | date: '#{date_format}'}}")
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_date_range_filter
|
32
|
+
assert_equal '10', @liquid_render.render("{{today | date_range: '#{Date.today - 10.days}'}}")
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_today_filter
|
36
|
+
assert_match Date.today.strftime(date_format), @liquid_render.render('{{today}}')
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_utc_filter
|
40
|
+
assert_match '2017-01-01 10:13:13 UTC', @liquid_render.render("{{'San, 01 Jan 2017 13:13:13 MSK +03:00' | utc}}")
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_modulo_filter
|
44
|
+
assert_equal '3', @liquid_render.render("{{24 | modulo: 7}}")
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_round_filter
|
48
|
+
assert_equal '24.12', @liquid_render.render("{{24.12345 | round: 2}}")
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_ceil_filter
|
52
|
+
assert_equal '25', @liquid_render.render("{{24.11 | ceil }}")
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_floor_filter
|
56
|
+
assert_equal '24', @liquid_render.render("{{24.99 | floor }}")
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_currency_filter
|
60
|
+
assert_equal '99,99 RUB', @liquid_render.render("{{99.99 | currency: 'RUB' }}")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
|
3
|
+
class LiquidRender
|
4
|
+
|
5
|
+
def initialize(drops = {})
|
6
|
+
@objects_hash = [
|
7
|
+
{'name' => 'one', "value" => 10},
|
8
|
+
{'name' => 'two', "value" => 5},
|
9
|
+
{'name' => 'three', "value" => 6}
|
10
|
+
]
|
11
|
+
@registers = {}
|
12
|
+
@assigns = {}
|
13
|
+
@assigns['objects_arr'] = @objects_hash
|
14
|
+
@assigns['now'] = Time.now
|
15
|
+
@assigns['today'] = Date.today.strftime(date_format)
|
16
|
+
drops.each do |key, drop|
|
17
|
+
@assigns[key] = drop
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def render(content)
|
22
|
+
::Liquid::Template.parse(content).render(::Liquid::Context.new({}, @assigns, @registers)).html_safe
|
23
|
+
rescue => e
|
24
|
+
e.message
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
module LiquidHelperMethods
|
29
|
+
def date_format
|
30
|
+
'%d.%m.%Y'
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative 'cell'
|
2
|
+
require_relative 'user'
|
3
|
+
|
4
|
+
class Issue < ActiveRecord::Base
|
5
|
+
belongs_to :cell
|
6
|
+
belongs_to :user
|
7
|
+
belongs_to :author, class_name: 'User'
|
8
|
+
|
9
|
+
rcrm_acts_as_draftable
|
10
|
+
rcrm_acts_as_taggable
|
11
|
+
rcrm_acts_as_viewed
|
12
|
+
|
13
|
+
scope :visible, lambda { where('1=1') }
|
14
|
+
end
|
data/test/models/news.rb
ADDED
data/test/models/user.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
class Voter < ActiveRecord::Base
|
2
|
+
rcrm_acts_as_voter
|
3
|
+
end
|
4
|
+
|
5
|
+
class Votable < ActiveRecord::Base
|
6
|
+
rcrm_acts_as_votable
|
7
|
+
validates_presence_of :name
|
8
|
+
end
|
9
|
+
|
10
|
+
class VotableVoter < ActiveRecord::Base
|
11
|
+
rcrm_acts_as_votable
|
12
|
+
rcrm_acts_as_voter
|
13
|
+
end
|
14
|
+
|
15
|
+
class StiVotable < ActiveRecord::Base
|
16
|
+
rcrm_acts_as_votable
|
17
|
+
end
|
18
|
+
|
19
|
+
class ChildOfStiVotable < StiVotable
|
20
|
+
end
|
21
|
+
|
22
|
+
class StiNotVotable < ActiveRecord::Base
|
23
|
+
validates_presence_of :name
|
24
|
+
end
|
25
|
+
|
26
|
+
class VotableChildOfStiNotVotable < StiNotVotable
|
27
|
+
rcrm_acts_as_votable
|
28
|
+
end
|
29
|
+
|
30
|
+
class VotableCache < ActiveRecord::Base
|
31
|
+
rcrm_acts_as_votable
|
32
|
+
validates_presence_of :name
|
33
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class MoneyHelperTest < ActiveSupport::TestCase
|
4
|
+
include YeshouaCrm::MoneyHelper
|
5
|
+
|
6
|
+
def test_price_to_currency
|
7
|
+
assert_equal '$3.265,65', price_to_currency(3265.65, 'BRL')
|
8
|
+
assert_equal '3.265,65 RUB', price_to_currency(3265.65, 'RUB')
|
9
|
+
assert_equal '3.200,0', price_to_currency(3200, '')
|
10
|
+
assert_equal '3.200,0', price_to_currency(3200, 'Foo')
|
11
|
+
end
|
12
|
+
end
|
data/test/schema.rb
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
ActiveRecord::Schema.define version: 0 do
|
2
|
+
|
3
|
+
create_table :drafts, force: true do |t|
|
4
|
+
t.string :target_type
|
5
|
+
t.references :user
|
6
|
+
t.references :parent, polymorphic: true
|
7
|
+
t.binary :data
|
8
|
+
t.datetime :updated_at
|
9
|
+
end
|
10
|
+
|
11
|
+
create_table "tags", :force => true do |t|
|
12
|
+
t.column "name", :string
|
13
|
+
end
|
14
|
+
|
15
|
+
create_table "taggings", :force => true do |t|
|
16
|
+
t.column "tag_id", :integer
|
17
|
+
t.column "taggable_id", :integer
|
18
|
+
t.column "taggable_type", :string
|
19
|
+
t.column "created_at", :datetime
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
create_table "users", :force => true do |t|
|
24
|
+
t.column "name", :string
|
25
|
+
t.column "language", :string
|
26
|
+
end
|
27
|
+
|
28
|
+
create_table "issues", :force => true do |t|
|
29
|
+
t.integer "cell_id"
|
30
|
+
t.column "subject", :string
|
31
|
+
t.column "description", :string
|
32
|
+
t.column "closed", :boolean
|
33
|
+
t.column "cached_tag_list", :string
|
34
|
+
t.column "user_id", :integer
|
35
|
+
t.column "author_id", :integer
|
36
|
+
t.column "views", :integer, :default => 0
|
37
|
+
t.column "total_views", :integer, :default => 0
|
38
|
+
end
|
39
|
+
|
40
|
+
create_table "votes", :force => true do |t|
|
41
|
+
t.references "votable", :polymorphic => true
|
42
|
+
t.references "voter", :polymorphic => true
|
43
|
+
|
44
|
+
t.boolean "vote_flag"
|
45
|
+
t.string "vote_scope"
|
46
|
+
t.integer "vote_weight"
|
47
|
+
t.string "vote_ip"
|
48
|
+
|
49
|
+
t.timestamps
|
50
|
+
end
|
51
|
+
|
52
|
+
create_table "news", :force => true do |t|
|
53
|
+
t.string "title"
|
54
|
+
t.text "description"
|
55
|
+
t.integer "author_id"
|
56
|
+
end
|
57
|
+
|
58
|
+
create_table "cells", :force => true do |t|
|
59
|
+
t.string "name"
|
60
|
+
t.text "description"
|
61
|
+
t.string "identifier"
|
62
|
+
t.integer "status"
|
63
|
+
end
|
64
|
+
|
65
|
+
create_table :voters, :force => true do |t|
|
66
|
+
t.string :name
|
67
|
+
end
|
68
|
+
|
69
|
+
create_table :not_voters, :force => true do |t|
|
70
|
+
t.string :name
|
71
|
+
end
|
72
|
+
|
73
|
+
create_table :votables, :force => true do |t|
|
74
|
+
t.string :name
|
75
|
+
end
|
76
|
+
|
77
|
+
create_table :votable_voters, :force => true do |t|
|
78
|
+
t.string :name
|
79
|
+
end
|
80
|
+
|
81
|
+
create_table :sti_votables, :force => true do |t|
|
82
|
+
t.string :name
|
83
|
+
t.string :type
|
84
|
+
end
|
85
|
+
|
86
|
+
create_table :sti_not_votables, :force => true do |t|
|
87
|
+
t.string :name
|
88
|
+
t.string :type
|
89
|
+
end
|
90
|
+
|
91
|
+
create_table :not_votables, :force => true do |t|
|
92
|
+
t.string :name
|
93
|
+
end
|
94
|
+
|
95
|
+
create_table :votable_caches, :force => true do |t|
|
96
|
+
t.string :name
|
97
|
+
t.integer :cached_votes_total
|
98
|
+
t.integer :cached_votes_score
|
99
|
+
t.integer :cached_votes_up
|
100
|
+
t.integer :cached_votes_down
|
101
|
+
t.integer :cached_weighted_total
|
102
|
+
t.integer :cached_weighted_score
|
103
|
+
t.float :cached_weighted_average
|
104
|
+
|
105
|
+
t.integer :cached_scoped_test_votes_total
|
106
|
+
t.integer :cached_scoped_test_votes_score
|
107
|
+
t.integer :cached_scoped_test_votes_up
|
108
|
+
t.integer :cached_scoped_test_votes_down
|
109
|
+
t.integer :cached_scoped_weighted_total
|
110
|
+
t.integer :cached_scoped_weighted_score
|
111
|
+
t.float :cached_scoped_weighted_average
|
112
|
+
end
|
113
|
+
|
114
|
+
create_table :viewings, :force => true do |t|
|
115
|
+
t.column :viewer_id, :integer
|
116
|
+
t.column :viewed_id, :integer
|
117
|
+
t.column :viewed_type, :string
|
118
|
+
t.column :ip, :string, :limit => '24'
|
119
|
+
t.column :created_at, :datetime
|
120
|
+
end
|
121
|
+
end
|