Skip to content

Commit 331cbd0

Browse files
committed
add json links columns to allow search.
1 parent be0b10a commit 331cbd0

File tree

7 files changed

+35
-18
lines changed

7 files changed

+35
-18
lines changed

Gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ source 'https://rubygems.org' do
123123
gem 'test-unit'
124124
gem 'foreigner'
125125
gem 'state_machine'
126+
gem 'activerecord-postgres-json'
126127

127128
# ElasticSearch client
128129
gem 'tire'

Gemfile.lock

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ GEM
2424
activesupport (= 3.2.22)
2525
arel (~> 3.0.2)
2626
tzinfo (~> 0.3.29)
27+
activerecord-postgres-json (0.2.1)
28+
activerecord (>= 3.2, < 4)
29+
multi_json
2730
activeresource (3.2.22)
2831
activemodel (= 3.2.22)
2932
activesupport (= 3.2.22)
@@ -689,6 +692,7 @@ PLATFORMS
689692
ruby
690693

691694
DEPENDENCIES
695+
activerecord-postgres-json!
692696
acts-as-taggable-on (~> 3.4)!
693697
acts_as_follower (= 0.1.1)!
694698
annotate!

app/models/skill.rb

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55
# id :integer not null, primary key
66
# user_id :integer
7-
# name :string(255) not null
7+
# name :citext not null
88
# endorsements_count :integer default(0)
99
# created_at :datetime
1010
# updated_at :datetime
@@ -15,6 +15,7 @@
1515
# attended_events :text
1616
# deleted :boolean default(FALSE), not null
1717
# deleted_at :datetime
18+
# links :json default("{}")
1819
#
1920

2021
class Skill < ActiveRecord::Base
@@ -23,7 +24,7 @@ class Skill < ActiveRecord::Base
2324
SPACE = ' '
2425
BLANK = ''
2526

26-
belongs_to :user
27+
belongs_to :user, touch: true
2728
has_many :endorsements
2829

2930
validates_presence_of :tokenized
@@ -38,8 +39,11 @@ class Skill < ActiveRecord::Base
3839
serialize :repos, Array
3940
serialize :attended_events, Array
4041
serialize :speaking_events, Array
42+
serialize :links, ActiveRecord::Coders::JSON
43+
4144

4245
default_scope where(deleted: false)
46+
scope :deleted, ->{unscoped.where(deleted: true)}
4347

4448
def self.tokenize(value)
4549
v = value.to_s.gsub('&', 'and').downcase.gsub(/\s|\./, BLANK)
@@ -48,19 +52,19 @@ def self.tokenize(value)
4852
end
4953

5054
def self.deleted?(user_id, skill_name)
51-
Skill.with_deleted.where(user_id: user_id, name: skill_name, deleted: true).any?
52-
end
53-
54-
def merge_with(another_skill)
55-
if another_skill.user_id == self.user_id
56-
another_skill.endorsements.each do |endorsement|
57-
self.endorsed_by(endorsement.endorser)
58-
end
59-
self.repos += another_skill.repos
60-
self.attended_events += another_skill.attended_events
61-
self.speaking_events += another_skill.speaking_events
62-
end
63-
end
55+
deleted.where(user_id: user_id, name: skill_name).any?
56+
end
57+
58+
# def merge_with(another_skill)
59+
# if another_skill.user_id == self.user_id
60+
# another_skill.endorsements.each do |endorsement|
61+
# self.endorsed_by(endorsement.endorser)
62+
# end
63+
# self.repos += another_skill.repos
64+
# self.attended_events += another_skill.attended_events
65+
# self.speaking_events += another_skill.speaking_events
66+
# end
67+
# end
6468

6569
def endorsed_by(endorser)
6670
# endorsed is only in here during migration of endorsement to skill
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class ConvertSkillsColumnsToDatabaseJson < ActiveRecord::Migration
2+
def up
3+
add_column :skills, :links, :json, default: '{}'
4+
end
5+
end

db/schema.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#
1212
# It's strongly recommended to check this file into your version control system.
1313

14-
ActiveRecord::Schema.define(:version => 20150726134416) do
14+
ActiveRecord::Schema.define(:version => 20150726135616) do
1515

1616
add_extension "citext"
1717
add_extension "hstore"
@@ -266,6 +266,7 @@
266266
t.text "attended_events"
267267
t.boolean "deleted", :default => false, :null => false
268268
t.datetime "deleted_at"
269+
t.json "links", :default => "{}"
269270
end
270271

271272
add_index "skills", ["deleted", "user_id"], :name => "index_skills_on_deleted_and_user_id"

spec/fabricators/skill_fabricator.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55
# id :integer not null, primary key
66
# user_id :integer
7-
# name :string(255) not null
7+
# name :citext not null
88
# endorsements_count :integer default(0)
99
# created_at :datetime
1010
# updated_at :datetime
@@ -15,6 +15,7 @@
1515
# attended_events :text
1616
# deleted :boolean default(FALSE), not null
1717
# deleted_at :datetime
18+
# links :json default("{}")
1819
#
1920

2021
Fabricator(:skill) do

spec/models/skill_spec.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55
# id :integer not null, primary key
66
# user_id :integer
7-
# name :string(255) not null
7+
# name :citext not null
88
# endorsements_count :integer default(0)
99
# created_at :datetime
1010
# updated_at :datetime
@@ -15,6 +15,7 @@
1515
# attended_events :text
1616
# deleted :boolean default(FALSE), not null
1717
# deleted_at :datetime
18+
# links :json default("{}")
1819
#
1920

2021
require 'vcr_helper'

0 commit comments

Comments
 (0)