pose 1.3.4 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +11 -0
- data/Rakefile +4 -2
- data/app/models/pose/assignment.rb +34 -0
- data/app/models/pose/word.rb +24 -0
- data/db/migrate/20130308144915_pose_install.rb +18 -0
- data/lib/generators/pose/remove/templates/remove_migration.rb +3 -5
- data/lib/generators/pose/upgrade/templates/upgrade_migration.rb +9 -0
- data/lib/generators/pose/upgrade/upgrade_generator.rb +35 -0
- data/lib/pose/activerecord_base_additions.rb +5 -2
- data/lib/pose/engine.rb +5 -0
- data/lib/pose/internal_helpers.rb +13 -7
- data/lib/pose/{model_additions.rb → model_class_additions.rb} +8 -8
- data/lib/pose/railtie.rb +1 -2
- data/lib/pose/static_api.rb +5 -6
- data/lib/pose/version.rb +1 -1
- data/lib/pose.rb +5 -7
- data/lib/tasks/pose_tasks.rake +27 -29
- data/spec/dummy/Rakefile +7 -0
- data/spec/{support/models.rb → dummy/app/models/posable_one.rb} +1 -4
- data/spec/dummy/app/models/posable_two.rb +5 -0
- data/spec/dummy/config/application.rb +59 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +37 -0
- data/spec/dummy/config/environments/production.rb +67 -0
- data/spec/dummy/config/environments/test.rb +37 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +2 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/migrate/20130308054001_create_posable_one.rb +8 -0
- data/spec/dummy/db/migrate/20130308054142_create_posable_two.rb +9 -0
- data/spec/dummy/db/schema.rb +41 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/factories/assignments.rb +8 -0
- data/spec/factories/posable_one.rb +5 -0
- data/spec/factories/words.rb +7 -0
- data/spec/internal_helpers_spec.rb +40 -42
- data/spec/models/assignment_spec.rb +46 -0
- data/spec/models/word_spec.rb +42 -0
- data/spec/pose_api_spec.rb +198 -196
- data/spec/spec_helper.rb +21 -77
- data/spec/support/matchers.rb +0 -1
- metadata +83 -102
- data/doc/Pose/InstanceMethods.html +0 -341
- data/doc/Pose.html +0 -774
- data/doc/PoseAssignment.html +0 -125
- data/doc/PoseGenerator.html +0 -255
- data/doc/PoseMigrations.html +0 -261
- data/doc/PoseWord.html +0 -125
- data/doc/_index.html +0 -134
- data/doc/class_list.html +0 -47
- data/doc/css/common.css +0 -1
- data/doc/css/full_list.css +0 -55
- data/doc/css/style.css +0 -322
- data/doc/file_list.html +0 -46
- data/doc/frames.html +0 -13
- data/doc/index.html +0 -134
- data/doc/js/app.js +0 -205
- data/doc/js/full_list.js +0 -167
- data/doc/js/jquery.js +0 -16
- data/doc/method_list.html +0 -150
- data/doc/top-level-namespace.html +0 -172
- data/lib/generators/pose/install/install_generator.rb +0 -56
- data/lib/generators/pose/install/templates/install_migration.rb +0 -24
- data/lib/pose/models/pose_assignment.rb +0 -31
- data/lib/pose/models/pose_word.rb +0 -28
- data/spec/factories.rb +0 -15
- data/spec/pose_assignment_spec.rb +0 -45
- data/spec/pose_word_spec.rb +0 -26
@@ -0,0 +1,67 @@
|
|
1
|
+
Dummy::Application.configure do
|
2
|
+
# Settings specified here will take precedence over those in config/application.rb
|
3
|
+
|
4
|
+
# Code is not reloaded between requests
|
5
|
+
config.cache_classes = true
|
6
|
+
|
7
|
+
# Full error reports are disabled and caching is turned on
|
8
|
+
config.consider_all_requests_local = false
|
9
|
+
config.action_controller.perform_caching = true
|
10
|
+
|
11
|
+
# Disable Rails's static asset server (Apache or nginx will already do this)
|
12
|
+
config.serve_static_assets = false
|
13
|
+
|
14
|
+
# Compress JavaScripts and CSS
|
15
|
+
config.assets.compress = true
|
16
|
+
|
17
|
+
# Don't fallback to assets pipeline if a precompiled asset is missed
|
18
|
+
config.assets.compile = false
|
19
|
+
|
20
|
+
# Generate digests for assets URLs
|
21
|
+
config.assets.digest = true
|
22
|
+
|
23
|
+
# Defaults to nil and saved in location specified by config.assets.prefix
|
24
|
+
# config.assets.manifest = YOUR_PATH
|
25
|
+
|
26
|
+
# Specifies the header that your server uses for sending files
|
27
|
+
# config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
|
28
|
+
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
|
29
|
+
|
30
|
+
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
|
31
|
+
# config.force_ssl = true
|
32
|
+
|
33
|
+
# See everything in the log (default is :info)
|
34
|
+
# config.log_level = :debug
|
35
|
+
|
36
|
+
# Prepend all log lines with the following tags
|
37
|
+
# config.log_tags = [ :subdomain, :uuid ]
|
38
|
+
|
39
|
+
# Use a different logger for distributed setups
|
40
|
+
# config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
|
41
|
+
|
42
|
+
# Use a different cache store in production
|
43
|
+
# config.cache_store = :mem_cache_store
|
44
|
+
|
45
|
+
# Enable serving of images, stylesheets, and JavaScripts from an asset server
|
46
|
+
# config.action_controller.asset_host = "http://assets.example.com"
|
47
|
+
|
48
|
+
# Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
|
49
|
+
# config.assets.precompile += %w( search.js )
|
50
|
+
|
51
|
+
# Disable delivery errors, bad email addresses will be ignored
|
52
|
+
# config.action_mailer.raise_delivery_errors = false
|
53
|
+
|
54
|
+
# Enable threaded mode
|
55
|
+
# config.threadsafe!
|
56
|
+
|
57
|
+
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
|
58
|
+
# the I18n.default_locale when a translation can not be found)
|
59
|
+
config.i18n.fallbacks = true
|
60
|
+
|
61
|
+
# Send deprecation notices to registered listeners
|
62
|
+
config.active_support.deprecation = :notify
|
63
|
+
|
64
|
+
# Log the query plan for queries taking more than this (works
|
65
|
+
# with SQLite, MySQL, and PostgreSQL)
|
66
|
+
# config.active_record.auto_explain_threshold_in_seconds = 0.5
|
67
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
Dummy::Application.configure do
|
2
|
+
# Settings specified here will take precedence over those in config/application.rb
|
3
|
+
|
4
|
+
# The test environment is used exclusively to run your application's
|
5
|
+
# test suite. You never need to work with it otherwise. Remember that
|
6
|
+
# your test database is "scratch space" for the test suite and is wiped
|
7
|
+
# and recreated between test runs. Don't rely on the data there!
|
8
|
+
config.cache_classes = true
|
9
|
+
|
10
|
+
# Configure static asset server for tests with Cache-Control for performance
|
11
|
+
config.serve_static_assets = true
|
12
|
+
config.static_cache_control = "public, max-age=3600"
|
13
|
+
|
14
|
+
# Log error messages when you accidentally call methods on nil
|
15
|
+
config.whiny_nils = true
|
16
|
+
|
17
|
+
# Show full error reports and disable caching
|
18
|
+
config.consider_all_requests_local = true
|
19
|
+
config.action_controller.perform_caching = false
|
20
|
+
|
21
|
+
# Raise exceptions instead of rendering exception templates
|
22
|
+
config.action_dispatch.show_exceptions = false
|
23
|
+
|
24
|
+
# Disable request forgery protection in test environment
|
25
|
+
config.action_controller.allow_forgery_protection = false
|
26
|
+
|
27
|
+
# Tell Action Mailer not to deliver emails to the real world.
|
28
|
+
# The :test delivery method accumulates sent emails in the
|
29
|
+
# ActionMailer::Base.deliveries array.
|
30
|
+
config.action_mailer.delivery_method = :test
|
31
|
+
|
32
|
+
# Raise exception on mass assignment protection for Active Record models
|
33
|
+
config.active_record.mass_assignment_sanitizer = :strict
|
34
|
+
|
35
|
+
# Print deprecation notices to the stderr
|
36
|
+
config.active_support.deprecation = :stderr
|
37
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
|
4
|
+
# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
|
5
|
+
|
6
|
+
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
|
7
|
+
# Rails.backtrace_cleaner.remove_silencers!
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# Add new inflection rules using the following format
|
4
|
+
# (all these examples are active by default):
|
5
|
+
# ActiveSupport::Inflector.inflections do |inflect|
|
6
|
+
# inflect.plural /^(ox)$/i, '\1en'
|
7
|
+
# inflect.singular /^(ox)en/i, '\1'
|
8
|
+
# inflect.irregular 'person', 'people'
|
9
|
+
# inflect.uncountable %w( fish sheep )
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# These inflection rules are supported but not enabled by default:
|
13
|
+
# ActiveSupport::Inflector.inflections do |inflect|
|
14
|
+
# inflect.acronym 'RESTful'
|
15
|
+
# end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# Your secret key for verifying the integrity of signed cookies.
|
4
|
+
# If you change this key, all old signed cookies will become invalid!
|
5
|
+
# Make sure the secret is at least 30 characters and all random,
|
6
|
+
# no regular words or you'll be exposed to dictionary attacks.
|
7
|
+
Dummy::Application.config.secret_token = '018ac8601e03d056975cabe7cc0f7b317982d42610dd4b4ec217334533e33ff6e4e579b07ded701a69dc4e28422de257d228b7fd75a88f013e159b404c29cf46'
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
Dummy::Application.config.session_store :cookie_store, key: '_dummy_session'
|
4
|
+
|
5
|
+
# Use the database for sessions instead of the cookie-based default,
|
6
|
+
# which shouldn't be used to store highly confidential information
|
7
|
+
# (create the session table with "rails generate session_migration")
|
8
|
+
# Dummy::Application.config.session_store :active_record_store
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
#
|
3
|
+
# This file contains settings for ActionController::ParamsWrapper which
|
4
|
+
# is enabled by default.
|
5
|
+
|
6
|
+
# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
|
7
|
+
ActiveSupport.on_load(:action_controller) do
|
8
|
+
wrap_parameters format: [:json]
|
9
|
+
end
|
10
|
+
|
11
|
+
# Disable root element in JSON by default.
|
12
|
+
ActiveSupport.on_load(:active_record) do
|
13
|
+
self.include_root_in_json = false
|
14
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# This file is auto-generated from the current state of the database. Instead
|
3
|
+
# of editing this file, please use the migrations feature of Active Record to
|
4
|
+
# incrementally modify your database, and then regenerate this schema definition.
|
5
|
+
#
|
6
|
+
# Note that this schema.rb definition is the authoritative source for your
|
7
|
+
# database schema. If you need to create the application database on another
|
8
|
+
# system, you should be using db:schema:load, not running all the migrations
|
9
|
+
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
10
|
+
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
11
|
+
#
|
12
|
+
# It's strongly recommended to check this file into your version control system.
|
13
|
+
|
14
|
+
ActiveRecord::Schema.define(:version => 20130308144915) do
|
15
|
+
|
16
|
+
create_table "posable_ones", :force => true do |t|
|
17
|
+
t.string "text"
|
18
|
+
t.boolean "private"
|
19
|
+
end
|
20
|
+
|
21
|
+
create_table "posable_twos", :force => true do |t|
|
22
|
+
t.string "text"
|
23
|
+
t.boolean "private"
|
24
|
+
end
|
25
|
+
|
26
|
+
create_table "pose_assignments", :force => true do |t|
|
27
|
+
t.integer "word_id", :null => false
|
28
|
+
t.integer "posable_id", :null => false
|
29
|
+
t.string "posable_type", :limit => 40, :null => false
|
30
|
+
end
|
31
|
+
|
32
|
+
add_index "pose_assignments", ["posable_id"], :name => "index_pose_assignments_on_posable_id"
|
33
|
+
add_index "pose_assignments", ["word_id"], :name => "index_pose_assignments_on_word_id"
|
34
|
+
|
35
|
+
create_table "pose_words", :force => true do |t|
|
36
|
+
t.string "text", :limit => 80, :null => false
|
37
|
+
end
|
38
|
+
|
39
|
+
add_index "pose_words", ["text"], :name => "index_pose_words_on_text"
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
3
|
+
|
4
|
+
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
5
|
+
require File.expand_path('../../config/boot', __FILE__)
|
6
|
+
require 'rails/commands'
|
@@ -1,12 +1,11 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
|
3
2
|
require "spec_helper"
|
4
3
|
|
5
4
|
describe Pose::Helpers do
|
6
5
|
|
7
6
|
describe '::get_words_to_add' do
|
8
|
-
let(:one) {
|
9
|
-
let(:two) {
|
7
|
+
let(:one) { Pose::Word.new(text: 'one') }
|
8
|
+
let(:two) { Pose::Word.new(text: 'two') }
|
10
9
|
|
11
10
|
context 'having a new word to be added' do
|
12
11
|
it 'returns an array with strings that need to be added' do
|
@@ -23,8 +22,8 @@ describe Pose::Helpers do
|
|
23
22
|
|
24
23
|
|
25
24
|
describe '::get_words_to_remove' do
|
26
|
-
let(:one) {
|
27
|
-
let(:two) {
|
25
|
+
let(:one) { Pose::Word.new(text: 'one') }
|
26
|
+
let(:two) { Pose::Word.new(text: 'two') }
|
28
27
|
|
29
28
|
it "returns an array of word objects that need to be removed" do
|
30
29
|
Pose::Helpers.get_words_to_remove([one, two], %w{one three}).should eql([two])
|
@@ -39,11 +38,11 @@ describe Pose::Helpers do
|
|
39
38
|
describe 'make_array' do
|
40
39
|
|
41
40
|
it 'converts a single value into an array' do
|
42
|
-
Pose::Helpers.make_array(1).should
|
41
|
+
Pose::Helpers.make_array(1).should eq [1]
|
43
42
|
end
|
44
43
|
|
45
44
|
it 'leaves arrays as arrays' do
|
46
|
-
Pose::Helpers.make_array([1]).should
|
45
|
+
Pose::Helpers.make_array([1]).should eq [1]
|
47
46
|
end
|
48
47
|
end
|
49
48
|
|
@@ -57,7 +56,7 @@ describe Pose::Helpers do
|
|
57
56
|
|
58
57
|
it 'sets the given ids as the ids for this class name' do
|
59
58
|
Pose::Helpers.merge_search_result_word_matches @result, 'class1', [1, 2]
|
60
|
-
@result.should
|
59
|
+
@result.should eq({ 'class1' => [1, 2] })
|
61
60
|
end
|
62
61
|
end
|
63
62
|
|
@@ -69,7 +68,7 @@ describe Pose::Helpers do
|
|
69
68
|
|
70
69
|
it 'only keeps the ids that are included in both sets' do
|
71
70
|
Pose::Helpers.merge_search_result_word_matches @result, 'class1', [1, 3]
|
72
|
-
@result.should
|
71
|
+
@result.should eq({ 'class1' => [1] })
|
73
72
|
end
|
74
73
|
end
|
75
74
|
end
|
@@ -77,19 +76,19 @@ describe Pose::Helpers do
|
|
77
76
|
|
78
77
|
describe 'query_terms' do
|
79
78
|
it 'returns all individual words resulting from the given query' do
|
80
|
-
Pose::Helpers.query_terms('foo bar').should
|
79
|
+
Pose::Helpers.query_terms('foo bar').should eq ['foo', 'bar']
|
81
80
|
end
|
82
81
|
|
83
82
|
it 'converts the individual words into their root form' do
|
84
|
-
Pose::Helpers.query_terms('bars').should
|
83
|
+
Pose::Helpers.query_terms('bars').should eq ['bar']
|
85
84
|
end
|
86
85
|
|
87
86
|
it 'splits complex words into separate terms' do
|
88
|
-
Pose::Helpers.query_terms('one-two').should
|
87
|
+
Pose::Helpers.query_terms('one-two').should eq ['one', 'two']
|
89
88
|
end
|
90
89
|
|
91
90
|
it 'removes duplicates' do
|
92
|
-
Pose::Helpers.query_terms('foo-bar foo').should
|
91
|
+
Pose::Helpers.query_terms('foo-bar foo').should eq ['foo', 'bar']
|
93
92
|
end
|
94
93
|
end
|
95
94
|
|
@@ -101,52 +100,52 @@ describe Pose::Helpers do
|
|
101
100
|
end
|
102
101
|
|
103
102
|
it 'removes special characters' do
|
104
|
-
Pose::Helpers.root_word('(bar').should
|
105
|
-
Pose::Helpers.root_word('bar)').should
|
106
|
-
Pose::Helpers.root_word('(bar)').should
|
107
|
-
Pose::Helpers.root_word('>foo').should
|
108
|
-
Pose::Helpers.root_word('<foo').should
|
109
|
-
Pose::Helpers.root_word('"foo"').should
|
110
|
-
Pose::Helpers.root_word('"foo').should
|
111
|
-
Pose::Helpers.root_word("'foo'").should
|
112
|
-
Pose::Helpers.root_word("'foo's").should
|
113
|
-
Pose::Helpers.root_word("foo?").should
|
114
|
-
Pose::Helpers.root_word("foo!").should
|
115
|
-
Pose::Helpers.root_word("foo/bar").should
|
116
|
-
Pose::Helpers.root_word("foo-bar").should
|
117
|
-
Pose::Helpers.root_word("foo--bar").should
|
118
|
-
Pose::Helpers.root_word("foo.bar").should
|
103
|
+
Pose::Helpers.root_word('(bar').should eq ['bar']
|
104
|
+
Pose::Helpers.root_word('bar)').should eq ['bar']
|
105
|
+
Pose::Helpers.root_word('(bar)').should eq ['bar']
|
106
|
+
Pose::Helpers.root_word('>foo').should eq ['foo']
|
107
|
+
Pose::Helpers.root_word('<foo').should eq ['foo']
|
108
|
+
Pose::Helpers.root_word('"foo"').should eq ['foo']
|
109
|
+
Pose::Helpers.root_word('"foo').should eq ['foo']
|
110
|
+
Pose::Helpers.root_word("'foo'").should eq ['foo']
|
111
|
+
Pose::Helpers.root_word("'foo's").should eq ['foo']
|
112
|
+
Pose::Helpers.root_word("foo?").should eq ['foo']
|
113
|
+
Pose::Helpers.root_word("foo!").should eq ['foo']
|
114
|
+
Pose::Helpers.root_word("foo/bar").should eq ['foo', 'bar']
|
115
|
+
Pose::Helpers.root_word("foo-bar").should eq ['foo', 'bar']
|
116
|
+
Pose::Helpers.root_word("foo--bar").should eq ['foo', 'bar']
|
117
|
+
Pose::Helpers.root_word("foo.bar").should eq ['foo', 'bar']
|
119
118
|
end
|
120
119
|
|
121
120
|
it 'removes umlauts' do
|
122
|
-
Pose::Helpers.root_word('fünf').should
|
121
|
+
Pose::Helpers.root_word('fünf').should eq ['funf']
|
123
122
|
end
|
124
123
|
|
125
124
|
it 'splits up numbers' do
|
126
|
-
Pose::Helpers.root_word('11.2.2011').should
|
127
|
-
Pose::Helpers.root_word('11-2-2011').should
|
128
|
-
Pose::Helpers.root_word('30:4-5').should
|
125
|
+
Pose::Helpers.root_word('11.2.2011').should eq ['11', '2', '2011']
|
126
|
+
Pose::Helpers.root_word('11-2-2011').should eq ['11', '2', '2011']
|
127
|
+
Pose::Helpers.root_word('30:4-5').should eq ['30', '4', '5']
|
129
128
|
end
|
130
129
|
|
131
130
|
it 'converts into lowercase' do
|
132
|
-
Pose::Helpers.root_word('London').should
|
131
|
+
Pose::Helpers.root_word('London').should eq ['london']
|
133
132
|
end
|
134
133
|
|
135
134
|
it "stores single-letter words" do
|
136
|
-
Pose::Helpers.root_word('a b').should
|
135
|
+
Pose::Helpers.root_word('a b').should eq ['a', 'b']
|
137
136
|
end
|
138
137
|
|
139
138
|
it "does't encode external URLs" do
|
140
|
-
Pose::Helpers.root_word('http://web.com').should
|
139
|
+
Pose::Helpers.root_word('http://web.com').should eq ['http', 'web', 'com']
|
141
140
|
end
|
142
141
|
|
143
142
|
it "doesn't store empty words" do
|
144
|
-
Pose::Helpers.root_word(' one two ').should
|
143
|
+
Pose::Helpers.root_word(' one two ').should eq ['one', 'two']
|
145
144
|
end
|
146
145
|
|
147
146
|
it "removes duplicates" do
|
148
|
-
Pose::Helpers.root_word('one_one').should
|
149
|
-
Pose::Helpers.root_word('one one').should
|
147
|
+
Pose::Helpers.root_word('one_one').should eq ['one']
|
148
|
+
Pose::Helpers.root_word('one one').should eq ['one']
|
150
149
|
end
|
151
150
|
|
152
151
|
it "splits up complex URLs" do
|
@@ -160,7 +159,7 @@ describe Pose::Helpers do
|
|
160
159
|
|
161
160
|
it 'returns a hash that contains all the given classes' do
|
162
161
|
result = Pose::Helpers.search_classes_and_ids_for_word 'foo', %w{PosableOne PosableTwo}
|
163
|
-
result.keys.sort.should
|
162
|
+
result.keys.sort.should eq %w{PosableOne PosableTwo}
|
164
163
|
end
|
165
164
|
|
166
165
|
it 'returns the ids of all the posable objects that include the given word' do
|
@@ -170,9 +169,8 @@ describe Pose::Helpers do
|
|
170
169
|
|
171
170
|
result = Pose::Helpers.search_classes_and_ids_for_word 'one', %w{PosableOne PosableTwo}
|
172
171
|
|
173
|
-
result['PosableOne'].should
|
174
|
-
result['PosableTwo'].should
|
172
|
+
result['PosableOne'].should eq [pos1.id]
|
173
|
+
result['PosableTwo'].should eq [pos2.id]
|
175
174
|
end
|
176
175
|
end
|
177
176
|
end
|
178
|
-
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Pose
|
4
|
+
describe Assignment do
|
5
|
+
|
6
|
+
describe "delete_class_index" do
|
7
|
+
|
8
|
+
before :each do
|
9
|
+
FactoryGirl.create :assignment, posable_id: 1, posable_type: 'PosableOne'
|
10
|
+
FactoryGirl.create :assignment, posable_id: 2, posable_type: 'PosableTwo'
|
11
|
+
Assignment.delete_class_index PosableOne
|
12
|
+
end
|
13
|
+
|
14
|
+
it "deletes all Assignments for the given class" do
|
15
|
+
expect(Assignment.where(posable_type: 'PosableOne')).to have(0).items
|
16
|
+
end
|
17
|
+
|
18
|
+
it "doesn't delete Assignments for other classes" do
|
19
|
+
expect(Assignment.where(posable_type: 'PosableTwo')).to have(1).items
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
describe "cleanup_orphaned_pose_assignments" do
|
25
|
+
|
26
|
+
it "deletes the assignment if the posable object doesn't exist" do
|
27
|
+
FactoryGirl.create :assignment, posable_id: 2, posable_type: 'PosableOne'
|
28
|
+
expect(Assignment.count).to be > 0
|
29
|
+
Assignment.cleanup_orphaned_pose_assignments
|
30
|
+
expect(Assignment.count).to eql 0
|
31
|
+
end
|
32
|
+
|
33
|
+
it "deletes the assignment if the word doesn't exist" do
|
34
|
+
assignment = FactoryGirl.create :assignment, word: nil, word_id: 27
|
35
|
+
Assignment.cleanup_orphaned_pose_assignments
|
36
|
+
expect(Assignment.find_by_id(assignment.id)).to be_nil
|
37
|
+
end
|
38
|
+
|
39
|
+
it "doesn't delete the assignment if it is still used" do
|
40
|
+
assignment = FactoryGirl.create :assignment
|
41
|
+
Assignment.cleanup_orphaned_pose_assignments
|
42
|
+
expect(Assignment.find_by_id(assignment.id)).to_not be_nil
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Pose
|
4
|
+
describe Word do
|
5
|
+
|
6
|
+
describe 'class methods' do
|
7
|
+
|
8
|
+
describe '::remove_unused_words' do
|
9
|
+
|
10
|
+
shared_examples 'it properly removes unused words' do
|
11
|
+
it 'removes unused words' do
|
12
|
+
FactoryGirl.create :word
|
13
|
+
Word.remove_unused_words
|
14
|
+
expect(Word.count).to eql 0
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'does not remove used words' do
|
18
|
+
FactoryGirl.create :posable_one
|
19
|
+
Word.remove_unused_words
|
20
|
+
expect(Word.count).to be > 0
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'with a SQL database' do
|
26
|
+
before :each do
|
27
|
+
Helpers.should_receive(:is_sql_database?).and_return(true)
|
28
|
+
end
|
29
|
+
|
30
|
+
it_should_behave_like 'it properly removes unused words'
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'without a SQL database' do
|
34
|
+
before :each do
|
35
|
+
Helpers.should_receive(:is_sql_database?).and_return(false)
|
36
|
+
end
|
37
|
+
|
38
|
+
it_should_behave_like 'it properly removes unused words'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|