hashdown 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +4 -0
- data/hashdown.gemspec +2 -1
- data/lib/hashdown/select_options.rb +3 -3
- data/lib/hashdown/version.rb +1 -1
- data/spec/lib/hashdown/cache_spec.rb +1 -1
- data/spec/lib/hashdown/finder_spec.rb +5 -5
- data/spec/lib/hashdown/select_options_spec.rb +10 -10
- data/spec/support/models.rb +3 -3
- metadata +9 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 295f9605343eb1d2b41d61440ecc6c37bc8de937
|
4
|
+
data.tar.gz: 283e18b01cad8568272ec927408c89115dedcb5e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39c65a9570f4435c0a39618a774fac0c83b94e5e28da7089f3a298422494f0b2140fbf82fc7faa2e315ad7337e1715364fc2e3955d7bd5fda4ab1e872cd30da5
|
7
|
+
data.tar.gz: b7a31edac85a0f18762e2abb0943172ad73bf83a4343a80dbab1b51e0259e6545ab26770a1b773c6be9bd90a881badc83b2b2363af41283affedf8343c7d5ec9
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Hashdown
|
2
2
|
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/hashdown.png)](http://badge.fury.io/rb/hashdown)
|
4
|
+
[![Build Status](https://travis-ci.org/rubysolo/hashdown.png?branch=master)](https://travis-ci.org/rubysolo/hashdown)
|
5
|
+
[![Code Climate](https://codeclimate.com/github/rubysolo/hashdown.png)](https://codeclimate.com/github/rubysolo/hashdown)
|
6
|
+
|
3
7
|
Hashdown is a super lightweight rails plugin that adds hash-style lookups and
|
4
8
|
option lists (for generating dropdowns) to ActiveRecord models. Note: Hashdown
|
5
9
|
has been updated to support Rails 3. If you're looking for the original plugin
|
data/hashdown.gemspec
CHANGED
@@ -7,8 +7,9 @@ Gem::Specification.new do |gem|
|
|
7
7
|
gem.description = %q{Hashdown}
|
8
8
|
gem.summary = %q{super lightweight Rails plugin that adds hash-style lookups and option list (for generating dropdowns) to ActiveRecord models}
|
9
9
|
gem.homepage = "https://github.com/rubysolo/hashdown"
|
10
|
+
gem.license = 'MIT'
|
10
11
|
|
11
|
-
gem.add_dependency 'activerecord', '
|
12
|
+
gem.add_dependency 'activerecord', '~> 4.0'
|
12
13
|
|
13
14
|
gem.add_development_dependency 'pry-nav'
|
14
15
|
gem.add_development_dependency 'rake'
|
@@ -26,7 +26,7 @@ module Hashdown
|
|
26
26
|
def select_options(*args)
|
27
27
|
options = generate_options_for_cache_key(args)
|
28
28
|
|
29
|
-
scope =
|
29
|
+
scope = where(nil)
|
30
30
|
options[:is_sorted] = scope.arel.orders.any?
|
31
31
|
scope = select_options_scope_with_order(scope, options)
|
32
32
|
|
@@ -34,11 +34,11 @@ module Hashdown
|
|
34
34
|
|
35
35
|
Hashdown.cached(cache_key) do
|
36
36
|
if grouping = options[:group]
|
37
|
-
scope.
|
37
|
+
scope.to_a.group_by { |record| grouping.call(record) }.map do |group, records|
|
38
38
|
[group, map_records_to_select_options(records, options)]
|
39
39
|
end
|
40
40
|
else
|
41
|
-
map_records_to_select_options(scope.
|
41
|
+
map_records_to_select_options(scope.to_a, options)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
data/lib/hashdown/version.rb
CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe Hashdown do
|
4
4
|
describe 'cache' do
|
5
5
|
describe 'in a Rails project' do
|
6
|
-
before { Object.const_set('Rails',
|
6
|
+
before { Object.const_set('Rails', double(cache: :rails_cache, env: 'development')) }
|
7
7
|
after { Object.send(:remove_const, 'Rails') }
|
8
8
|
|
9
9
|
it 'delegates to Rails.cache if available' do
|
@@ -34,18 +34,18 @@ describe Hashdown::Finder do
|
|
34
34
|
let(:florida) { State.new(abbreviation: 'FL', name: 'Florida') }
|
35
35
|
|
36
36
|
it 'caches found records' do
|
37
|
-
scope =
|
37
|
+
scope = double(first: florida)
|
38
38
|
State.should_receive(:where).once.and_return(scope)
|
39
39
|
|
40
40
|
2.times { State[:FL].name.should eq 'Florida' }
|
41
41
|
end
|
42
42
|
|
43
43
|
describe 'in test environment' do
|
44
|
-
before { Object.const_set('Rails',
|
44
|
+
before { Object.const_set('Rails', double(env: double(test?: true), cache: ActiveSupport::Cache::MemoryStore.new)) }
|
45
45
|
after { Object.send(:remove_const, 'Rails') }
|
46
46
|
|
47
47
|
it 'forces cache miss' do
|
48
|
-
scope =
|
48
|
+
scope = double(first: florida)
|
49
49
|
State.should_receive(:where).twice.and_return(scope)
|
50
50
|
|
51
51
|
2.times { State[:FL].name.should eq 'Florida' }
|
@@ -53,7 +53,7 @@ describe Hashdown::Finder do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
it 'clears the cache on save' do
|
56
|
-
scope =
|
56
|
+
scope = double(first: florida)
|
57
57
|
State.should_receive(:where).twice.and_return(scope)
|
58
58
|
|
59
59
|
State[:FL].save
|
@@ -61,7 +61,7 @@ describe Hashdown::Finder do
|
|
61
61
|
end
|
62
62
|
|
63
63
|
it 'clears the cache on destroy' do
|
64
|
-
scope =
|
64
|
+
scope = double(first: florida)
|
65
65
|
State.should_receive(:where).twice.and_return(scope)
|
66
66
|
|
67
67
|
State[:FL].destroy
|
@@ -47,22 +47,22 @@ describe Hashdown::SelectOptions do
|
|
47
47
|
|
48
48
|
describe 'cache layer' do
|
49
49
|
let(:states) { State.all }
|
50
|
-
let(:mock_scope) {
|
50
|
+
let(:mock_scope) { double(arel: double(orders: %w( name )), to_sql: "SELECT * FROM states") }
|
51
51
|
|
52
52
|
it 'should cache found records' do
|
53
|
-
mock_scope.should_receive(:
|
54
|
-
State.stub(:
|
53
|
+
mock_scope.should_receive(:to_a).once.and_return(states)
|
54
|
+
State.stub(:where).and_return(mock_scope)
|
55
55
|
|
56
56
|
2.times { State.select_options.length.should eq states.length }
|
57
57
|
end
|
58
58
|
|
59
59
|
describe 'in test environment' do
|
60
|
-
before { Object.const_set('Rails',
|
60
|
+
before { Object.const_set('Rails', double(env: double(test?: true), cache: ActiveSupport::Cache::MemoryStore.new)) }
|
61
61
|
after { Object.send(:remove_const, 'Rails') }
|
62
62
|
|
63
63
|
it 'forces cache miss' do
|
64
|
-
mock_scope.should_receive(:
|
65
|
-
State.stub(:
|
64
|
+
mock_scope.should_receive(:to_a).twice.and_return(states)
|
65
|
+
State.stub(:where).and_return(mock_scope)
|
66
66
|
|
67
67
|
2.times { State.select_options.length.should eq states.length }
|
68
68
|
end
|
@@ -74,8 +74,8 @@ describe Hashdown::SelectOptions do
|
|
74
74
|
end
|
75
75
|
|
76
76
|
it 'clears the cache on save' do
|
77
|
-
mock_scope.should_receive(:
|
78
|
-
State.stub(:
|
77
|
+
mock_scope.should_receive(:to_a).twice.and_return(states)
|
78
|
+
State.stub(:where).and_return(mock_scope)
|
79
79
|
|
80
80
|
State.select_options
|
81
81
|
states.first.save
|
@@ -83,8 +83,8 @@ describe Hashdown::SelectOptions do
|
|
83
83
|
end
|
84
84
|
|
85
85
|
it 'clears the cache on destroy' do
|
86
|
-
mock_scope.should_receive(:
|
87
|
-
State.stub(:
|
86
|
+
mock_scope.should_receive(:to_a).twice.and_return(states)
|
87
|
+
State.stub(:where).and_return(mock_scope)
|
88
88
|
|
89
89
|
State.select_options
|
90
90
|
states.first.destroy
|
data/spec/support/models.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class State < ActiveRecord::Base
|
2
|
-
scope :starting_with_c, where("name like 'C%'")
|
2
|
+
scope :starting_with_c, -> { where("name like 'C%'") }
|
3
3
|
finder :abbreviation
|
4
4
|
selectable
|
5
5
|
|
@@ -10,7 +10,7 @@ end
|
|
10
10
|
|
11
11
|
class SortedState < ActiveRecord::Base
|
12
12
|
self.table_name = 'states'
|
13
|
-
default_scope order(:abbreviation)
|
13
|
+
default_scope { order(:abbreviation) }
|
14
14
|
finder :abbreviation
|
15
15
|
end
|
16
16
|
|
@@ -20,6 +20,6 @@ class StateDefaultNil < ActiveRecord::Base
|
|
20
20
|
end
|
21
21
|
|
22
22
|
class Currency < ActiveRecord::Base
|
23
|
-
default_scope order(:code)
|
23
|
+
default_scope { order(:code) }
|
24
24
|
selectable
|
25
25
|
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hashdown
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Solomon White
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '4.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '4.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: pry-nav
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -106,7 +106,8 @@ files:
|
|
106
106
|
- spec/support/schema.rb
|
107
107
|
- spec/support/seeds.rb
|
108
108
|
homepage: https://github.com/rubysolo/hashdown
|
109
|
-
licenses:
|
109
|
+
licenses:
|
110
|
+
- MIT
|
110
111
|
metadata: {}
|
111
112
|
post_install_message:
|
112
113
|
rdoc_options: []
|
@@ -124,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
125
|
version: '0'
|
125
126
|
requirements: []
|
126
127
|
rubyforge_project:
|
127
|
-
rubygems_version: 2.0.
|
128
|
+
rubygems_version: 2.0.3
|
128
129
|
signing_key:
|
129
130
|
specification_version: 4
|
130
131
|
summary: super lightweight Rails plugin that adds hash-style lookups and option list
|