redis_model 0.1.0 → 0.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 24e2a96b8cb23085ea04a00d6b724bad2cd2dc3c
4
- data.tar.gz: 1b8e76b298b35262e60622763cafcdbf1cc9b676
3
+ metadata.gz: 5fb4d160afa7d9fa830478c51ac1627684059245
4
+ data.tar.gz: e038641ca83e3a3fbd8024b4b02721a6179e3bca
5
5
  SHA512:
6
- metadata.gz: 006173a4ef7c04224396e6f0fbcef54c31b553781a1c00bfc07d86dcc421a291e6959d4aafe879530cb3699346228db85dd360431e81a74b62df30f4d88065f1
7
- data.tar.gz: f7098aa9a4162d1c5000f8ac6cc9a062ed3cd9800f68cfd49a91dcb1290ff0e2e85b6e6e8c779ea6dae8b78e0f1dc515c8c835138c469972f507ad55a867463d
6
+ metadata.gz: e1b8a0a541d27c7d2bbadf7d5e7677b956442ee75e25efdaee7d11870648925f0e64a76d068aab03e6c9390e407e347e48656fdadee1abd9cb43bfbb0e81a803
7
+ data.tar.gz: 057df964c16d69b200d0612a24e953fb64810183f17ae42ae6b583e3e2b2a5f622610c3743df95aa79a3421533a858fde4b990a416d2f07dd24124ce9c8e8f90
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ .rspec
data/Guardfile ADDED
@@ -0,0 +1,51 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ ## Uncomment and set this to only include directories you want to watch
5
+ # directories %w(app lib config test spec feature)
6
+
7
+ ## Uncomment to clear the screen before every task
8
+ # clearing :on
9
+
10
+ ## Guard internally checks for changes in the Guardfile and exits.
11
+ ## If you want Guard to automatically start up again, run guard in a
12
+ ## shell loop, e.g.:
13
+ ##
14
+ ## $ while bundle exec guard; do echo "Restarting Guard..."; done
15
+ ##
16
+ ## Note: if you are using the `directories` clause above and you are not
17
+ ## watching the project directory ('.'), the you will want to move the Guardfile
18
+ ## to a watched dir and symlink it back, e.g.
19
+ #
20
+ # $ mkdir config
21
+ # $ mv Guardfile config/
22
+ # $ ln -s config/Guardfile .
23
+ #
24
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
25
+
26
+ # Note: The cmd option is now required due to the increasing number of ways
27
+ # rspec may be run, below are examples of the most common uses.
28
+ # * bundler: 'bundle exec rspec'
29
+ # * bundler binstubs: 'bin/rspec'
30
+ # * spring: 'bin/rspec' (This will use spring if running and you have
31
+ # installed the spring binstubs per the docs)
32
+ # * zeus: 'zeus rspec' (requires the server to be started separately)
33
+ # * 'just' rspec: 'rspec'
34
+
35
+ guard :rspec, cmd: "bundle exec rspec" do
36
+ require "guard/rspec/dsl"
37
+ dsl = Guard::RSpec::Dsl.new(self)
38
+
39
+ # Feel free to open issues for suggestions and improvements
40
+
41
+ # RSpec files
42
+ rspec = dsl.rspec
43
+ watch(rspec.spec_helper) { rspec.spec_dir }
44
+ watch(rspec.spec_support) { rspec.spec_dir }
45
+ watch(rspec.spec_files)
46
+
47
+ # Ruby files
48
+ ruby = dsl.ruby
49
+ dsl.watch_spec_files_for(ruby.lib_files)
50
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
51
+ end
@@ -119,6 +119,21 @@ module RedisModel
119
119
 
120
120
  def self.included(klass)
121
121
  klass.extend ClassMethods
122
+
123
+ if klass.respond_to?(:after_destroy)
124
+ klass.after_destroy :clear_redis_model_attributes
125
+ end
126
+ end
127
+
128
+ # Public: Clears attributes defined by RedisModel.
129
+ #
130
+ # Returns nothing.
131
+ def clear_redis_model_attributes
132
+ RedisModel::Schema.collection.each do |klass, _|
133
+ if klass < RedisModel::BelongedTo && Object.const_get(klass.to_s.deconstantize) >= self.class
134
+ self.send(klass.to_s.demodulize.underscore).del
135
+ end
136
+ end
122
137
  end
123
138
  end
124
139
  end
@@ -1,3 +1,3 @@
1
1
  module RedisModel
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
data/redis_model.gemspec CHANGED
@@ -25,4 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency 'rake'
26
26
  spec.add_development_dependency 'rspec'
27
27
  spec.add_development_dependency 'kaminari'
28
+ spec.add_development_dependency 'activerecord'
29
+ spec.add_development_dependency 'sqlite3'
30
+ spec.add_development_dependency 'guard'
28
31
  end
@@ -9,6 +9,10 @@ class TestModel
9
9
  end
10
10
  end
11
11
 
12
+ class TestActiveRecordModel < ActiveRecord::Base
13
+ self.table_name = 'ar_model'
14
+ end
15
+
12
16
  describe RedisModel::Attribute do
13
17
  let(:parent_klass) { dynamic_class(TestModel) }
14
18
 
@@ -74,4 +78,46 @@ describe RedisModel::Attribute do
74
78
  it { expect(definition_helper).to respond_to(:sorted_set) }
75
79
  it { expect { definition_helper.counter :my_counter }.to change { parent_klass.new('test').methods } }
76
80
  end
81
+
82
+ describe '#clear_redis_modeL_attributes' do
83
+ let(:parent_klass) { dynamic_class(TestModel) }
84
+ let(:attribute_name) { :my_counter }
85
+ let(:attribute_type) { :counter }
86
+ let(:test_id) { 'test' }
87
+ let(:object) { parent_klass.new(test_id) }
88
+ let(:redis_model_attribute) { object.send(attribute_name) }
89
+
90
+ context 'when current class defines the attribute' do
91
+ before { parent_klass.redis_model_attribute attribute_name, attribute_type }
92
+ before { redis_model_attribute.set(1) }
93
+
94
+ it { expect { object.clear_redis_model_attributes }.to change { RedisModel::Base.connection.get(redis_model_attribute.key_label) }.to(nil) }
95
+ end
96
+
97
+ context 'when parent class defines the attribute' do
98
+ let(:current_klass) { dynamic_class(parent_klass) }
99
+ let(:object) { current_klass.new(test_id) }
100
+
101
+ before { parent_klass.redis_model_attribute attribute_name, attribute_type }
102
+ before { redis_model_attribute.set(1) }
103
+
104
+ it { expect { object.clear_redis_model_attributes }.to change { RedisModel::Base.connection.get(redis_model_attribute.key_label) }.to(nil) }
105
+ end
106
+
107
+ context 'when parent class is activerecord model' do
108
+ let(:parent_klass) { dynamic_class(TestActiveRecordModel) }
109
+ let(:object) { parent_klass.create }
110
+
111
+ before { parent_klass.redis_model_attribute attribute_name, attribute_type }
112
+ before { redis_model_attribute.set(1) }
113
+
114
+ context 'when it is cleared explicitly' do
115
+ it { expect { object.clear_redis_model_attributes }.to change { RedisModel::Base.connection.get(redis_model_attribute.key_label) }.to(nil) }
116
+ end
117
+
118
+ context 'when it is invoked via activerecord callback' do
119
+ it { expect { object.destroy }.to change { RedisModel::Base.connection.get(redis_model_attribute.key_label) }.to(nil) }
120
+ end
121
+ end
122
+ end
77
123
  end
@@ -8,7 +8,7 @@ describe RedisModel::Types::Base do
8
8
  before { klass.send(:include, RedisModel::Types::Base) }
9
9
 
10
10
  describe '#exists?' do
11
- it { expect(object.exists?).to be_false }
11
+ it { expect(object.exists?).to eq(false) }
12
12
  it { expect { RedisModel::Base.connection.set(object.key_label, 'value') }.to change { object.exists? } }
13
13
  end
14
14
 
@@ -57,6 +57,6 @@ describe RedisModel::Types::Set do
57
57
 
58
58
  before { elements.each { |element| RedisModel::Base.connection.sadd(object.key_label, element) } }
59
59
 
60
- it { expect(object.pick(5).all? { |e| elements.include?(e) }).to be_true }
60
+ it { expect(object.pick(5).all? { |e| elements.include?(e) }).to eq(true) }
61
61
  end
62
62
  end
@@ -34,14 +34,14 @@ describe RedisModel::Types::SortedSet do
34
34
 
35
35
  describe '#include?' do
36
36
  context 'when sorted set does not exist' do
37
- it { expect(object.include?(members.keys.first)).to be_false }
37
+ it { expect(object.include?(members.keys.first)).to eq(false) }
38
38
  end
39
39
 
40
40
  context 'when sorted set has been populated before' do
41
41
  before { populate }
42
42
 
43
- it { expect(object.include?(members.keys.first)).to be_true }
44
- it { expect(object.include?('unknown key')).to be_false }
43
+ it { expect(object.include?(members.keys.first)).to eq(true) }
44
+ it { expect(object.include?('unknown key')).to eq(false) }
45
45
  end
46
46
  end
47
47
 
@@ -234,7 +234,7 @@ describe RedisModel::Types::SortedSet do
234
234
  key_label = intersected.key_label
235
235
  end
236
236
 
237
- expect(RedisModel::Base.connection.exists(key_label)).to be_false
237
+ expect(RedisModel::Base.connection.exists(key_label)).to eq(false)
238
238
  end
239
239
 
240
240
  context 'when seed is given' do
@@ -295,7 +295,7 @@ describe RedisModel::Types::SortedSet do
295
295
  key_label = intersected.key_label
296
296
  end
297
297
 
298
- expect(RedisModel::Base.connection.exists(key_label)).to be_false
298
+ expect(RedisModel::Base.connection.exists(key_label)).to eq(false)
299
299
  end
300
300
  end
301
301
  end
@@ -0,0 +1,5 @@
1
+ require 'active_record'
2
+
3
+ ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
4
+ ActiveRecord::Migration.verbose = false
5
+ require File.join(File.dirname(__FILE__), 'schema')
@@ -0,0 +1,5 @@
1
+ ActiveRecord::Schema.define(version: 20150101000000) do
2
+ create_table "ar_model", force: true do |t|
3
+ t.string 'foo'
4
+ end
5
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Inbeom Hwang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-25 00:00:00.000000000 Z
11
+ date: 2015-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -94,6 +94,48 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: activerecord
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: sqlite3
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: guard
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
97
139
  description: RedisModel provides various types of interfaces to handle values on Redis
98
140
  email:
99
141
  - hwanginbeom@gmail.com
@@ -103,6 +145,7 @@ extra_rdoc_files: []
103
145
  files:
104
146
  - ".gitignore"
105
147
  - Gemfile
148
+ - Guardfile
106
149
  - LICENSE.txt
107
150
  - README.md
108
151
  - Rakefile
@@ -145,7 +188,9 @@ files:
145
188
  - spec/redis_model/types/string_spec.rb
146
189
  - spec/redis_model/types/timestamp_spec.rb
147
190
  - spec/spec_helper.rb
191
+ - spec/support/active_record.rb
148
192
  - spec/support/dynamic_class.rb
193
+ - spec/support/schema.rb
149
194
  homepage: http://gitlab.ultracaption.net/inbeom/redis_model
150
195
  licenses:
151
196
  - MIT
@@ -187,4 +232,6 @@ test_files:
187
232
  - spec/redis_model/types/string_spec.rb
188
233
  - spec/redis_model/types/timestamp_spec.rb
189
234
  - spec/spec_helper.rb
235
+ - spec/support/active_record.rb
190
236
  - spec/support/dynamic_class.rb
237
+ - spec/support/schema.rb