yeshua_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/yeshua_crm/acts_as_draftable/draft.rb +40 -0
- data/lib/yeshua_crm/acts_as_draftable/rcrm_acts_as_draftable.rb +154 -0
- data/lib/yeshua_crm/acts_as_list/list.rb +282 -0
- data/lib/yeshua_crm/acts_as_taggable/rcrm_acts_as_taggable.rb +350 -0
- data/lib/yeshua_crm/acts_as_taggable/tag.rb +81 -0
- data/lib/yeshua_crm/acts_as_taggable/tag_list.rb +111 -0
- data/lib/yeshua_crm/acts_as_taggable/tagging.rb +16 -0
- data/lib/yeshua_crm/acts_as_viewed/rcrm_acts_as_viewed.rb +274 -0
- data/lib/yeshua_crm/acts_as_votable/rcrm_acts_as_votable.rb +80 -0
- data/lib/yeshua_crm/acts_as_votable/rcrm_acts_as_voter.rb +20 -0
- data/lib/yeshua_crm/acts_as_votable/votable.rb +323 -0
- data/lib/yeshua_crm/acts_as_votable/vote.rb +28 -0
- data/lib/yeshua_crm/acts_as_votable/voter.rb +131 -0
- data/lib/yeshua_crm/assets_manager.rb +43 -0
- data/lib/yeshua_crm/currency/formatting.rb +224 -0
- data/lib/yeshua_crm/currency/heuristics.rb +151 -0
- data/lib/yeshua_crm/currency/loader.rb +24 -0
- data/lib/yeshua_crm/currency.rb +439 -0
- data/lib/yeshua_crm/helpers/external_assets_helper.rb +17 -0
- data/lib/yeshua_crm/helpers/form_tag_helper.rb +123 -0
- data/lib/yeshua_crm/helpers/tags_helper.rb +13 -0
- data/lib/yeshua_crm/helpers/vote_helper.rb +35 -0
- data/lib/yeshua_crm/liquid/drops/cells_drop.rb +86 -0
- data/lib/yeshua_crm/liquid/drops/issues_drop.rb +66 -0
- data/lib/yeshua_crm/liquid/drops/news_drop.rb +54 -0
- data/lib/yeshua_crm/liquid/drops/users_drop.rb +72 -0
- data/lib/yeshua_crm/liquid/filters/arrays.rb +177 -0
- data/lib/yeshua_crm/liquid/filters/base.rb +208 -0
- data/lib/yeshua_crm/money_helper.rb +65 -0
- data/lib/yeshua_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/yeshua_crm.gemspec +28 -0
- metadata +206 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../liquid_helper'
|
|
2
|
+
include LiquidHelperMethods
|
|
3
|
+
|
|
4
|
+
module YeshuaCrm
|
|
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 YeshuaCrm
|
|
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 YeshuaCrm
|
|
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 YeshuaCrm::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
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
|
2
|
+
|
|
3
|
+
# module YeshuaCrm
|
|
4
|
+
class TagsHelperTest < ActiveSupport::TestCase
|
|
5
|
+
include YeshuaCrm::TagsHelper
|
|
6
|
+
|
|
7
|
+
def test_tag_cloud
|
|
8
|
+
cloud_elements = []
|
|
9
|
+
|
|
10
|
+
tag_cloud Issue.tag_counts, %w(css1 css2 css3 css4) do |tag, css_class|
|
|
11
|
+
cloud_elements << [tag, css_class]
|
|
12
|
+
end
|
|
13
|
+
assert cloud_elements.include?([tags(:error), "css4"])
|
|
14
|
+
assert cloud_elements.include?([tags(:question), "css4"])
|
|
15
|
+
assert cloud_elements.include?([tags(:bug), "css2"])
|
|
16
|
+
assert cloud_elements.include?([tags(:feature), "css2"])
|
|
17
|
+
assert_equal 4, cloud_elements.size
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# def test_tag_cloud_when_no_tags
|
|
21
|
+
# cloud_elements = []
|
|
22
|
+
# tag_cloud SpecialIssue.tag_counts, %w(css1) do |tag, css_class|
|
|
23
|
+
# # assert false, "tag_cloud should not yield"
|
|
24
|
+
# cloud_elements << [tag, css_class]
|
|
25
|
+
# end
|
|
26
|
+
# assert_equal 0, cloud_elements.size
|
|
27
|
+
# end
|
|
28
|
+
end
|
|
29
|
+
# end
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
require 'rails/all'
|
|
2
|
+
require 'yeshua_crm'
|
|
3
|
+
require 'minitest/autorun'
|
|
4
|
+
|
|
5
|
+
ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + '/debug.log')
|
|
6
|
+
ActiveRecord::Base.configurations = YAML.load_file(File.dirname(__FILE__) + '/database.yml')
|
|
7
|
+
ActiveRecord::Base.establish_connection(ENV['DB'].try(:to_sym) || :sqlite)
|
|
8
|
+
|
|
9
|
+
load(File.dirname(__FILE__) + '/schema.rb')
|
|
10
|
+
Dir.glob(File.expand_path('../models/*.rb', __FILE__)).each { |f| require f }
|
|
11
|
+
|
|
12
|
+
class ActiveSupport::TestCase #:nodoc:
|
|
13
|
+
include ActiveRecord::TestFixtures
|
|
14
|
+
|
|
15
|
+
self.fixture_path = File.dirname(__FILE__) + '/fixtures/'
|
|
16
|
+
|
|
17
|
+
self.use_transactional_tests = true
|
|
18
|
+
self.use_instantiated_fixtures = false
|
|
19
|
+
set_fixture_class :tags => YeshuaCrm::ActsAsTaggable::Tag
|
|
20
|
+
set_fixture_class :taggings => YeshuaCrm::ActsAsTaggable::Tagging
|
|
21
|
+
|
|
22
|
+
set_fixture_class :votable_caches => VotableCache
|
|
23
|
+
fixtures :all
|
|
24
|
+
|
|
25
|
+
def assert_equivalent(expected, actual, message = nil)
|
|
26
|
+
if expected.first.is_a?(ActiveRecord::Base)
|
|
27
|
+
assert_equal expected.sort_by(&:id), actual.sort_by(&:id), message
|
|
28
|
+
else
|
|
29
|
+
assert_equal expected.sort, actual.sort, message
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def assert_tag_counts(tags, expected_values)
|
|
34
|
+
# Map the tag fixture names to real tag names
|
|
35
|
+
expected_values = expected_values.inject({}) do |hash, (tag, count)|
|
|
36
|
+
hash[tags(tag).name] = count
|
|
37
|
+
hash
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
tags.each do |tag|
|
|
41
|
+
value = expected_values.delete(tag.name)
|
|
42
|
+
|
|
43
|
+
assert_not_nil value, "Expected count for #{tag.name} was not provided"
|
|
44
|
+
assert_equal value, tag.count, "Expected value of #{value} for #{tag.name}, but was #{tag.count}"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
unless expected_values.empty?
|
|
48
|
+
assert false, "The following tag counts were not present: #{expected_values.inspect}"
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# From Rails trunk
|
|
53
|
+
def assert_difference(expressions, difference = 1, message = nil, &block)
|
|
54
|
+
expression_evaluations = [expressions].flatten.collect{ |expression| lambda { eval(expression, block.binding) } }
|
|
55
|
+
|
|
56
|
+
original_values = expression_evaluations.inject([]) { |memo, expression| memo << expression.call }
|
|
57
|
+
yield
|
|
58
|
+
expression_evaluations.each_with_index do |expression, i|
|
|
59
|
+
assert_equal original_values[i] + difference, expression.call, message
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def assert_no_difference(expressions, message = nil, &block)
|
|
64
|
+
assert_difference expressions, 0, message, &block
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
|
2
|
+
|
|
3
|
+
class VoteHelperTest < ActiveSupport::TestCase
|
|
4
|
+
def vote
|
|
5
|
+
YeshuaCrm::ActsAsVotable::Vote.new
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test_know_that_like_is_a_true_vote
|
|
9
|
+
assert vote.votable_words.that_mean_true.include? "like"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_know_that_bad_is_a_false_vote
|
|
13
|
+
assert vote.votable_words.that_mean_false.include? "bad"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_be_a_vote_for_true_when_word_is_good
|
|
17
|
+
assert vote.votable_words.meaning_of('good')
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_be_a_vote_for_false_when_word_is_down
|
|
21
|
+
assert !vote.votable_words.meaning_of('down')
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_be_a_vote_for_true_when_the_word_is_unknown
|
|
25
|
+
assert vote.votable_words.meaning_of('lsdhklkadhfs')
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
data/yeshua_crm.gemspec
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'yeshua_crm/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = "yeshua_crm"
|
|
8
|
+
spec.version = YeshuaCrm::VERSION
|
|
9
|
+
spec.authors = ["IntSoft"]
|
|
10
|
+
spec.email = ["contato@intsoft.inf.br"]
|
|
11
|
+
spec.summary = %q{Common libraries for IntSoft plugins for Yeshua}
|
|
12
|
+
spec.description = %q{Common libraries for Yeshua plugins (www.redmineup.com) for IntDoft. Requered Yeshua from http://intsoft.inf.br}
|
|
13
|
+
spec.homepage = ""
|
|
14
|
+
spec.license = "GPL2"
|
|
15
|
+
|
|
16
|
+
#spec.files = "git ls-files -z".split("\x0")
|
|
17
|
+
spec.files = Dir["{lib/**/*.rb,README.rdoc,test/**/*.rb,Rakefile,*.gemspec}"]
|
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
20
|
+
spec.require_paths = ["lib"]
|
|
21
|
+
|
|
22
|
+
spec.add_runtime_dependency 'rails'
|
|
23
|
+
spec.add_runtime_dependency 'liquid', '< 2.6.4'
|
|
24
|
+
|
|
25
|
+
spec.add_development_dependency 'sqlite3'
|
|
26
|
+
spec.add_development_dependency 'mysql2', '~> 0.4.0'
|
|
27
|
+
spec.add_development_dependency 'pg'
|
|
28
|
+
end
|