aerospike-rails-support 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8d3de2397f87ac2dec60139a0e10325513c797c7
4
+ data.tar.gz: 3d1dccc239e88d378231f353f32c5591dc7b3c89
5
+ SHA512:
6
+ metadata.gz: 86ba4521823fed5f1946230530dadd30566d85c7e4d7402cece6733f29f26c1536e9ab26d69455175b15141eb1d8dafa1f6961c842feeff96ba60721e923cc05
7
+ data.tar.gz: 5d7a50fdf77f6956d2cd6551e16c29a0b3f9193a49af565c5e64ded5ef104a3085a4d5ef0c0cd93362bb2b085b38d77e14f4717ace1b50fd227f1c7956f029ac
data/.gitignore ADDED
@@ -0,0 +1,182 @@
1
+ # Created by https://www.gitignore.io/api/ruby,rubymine,intellij,emacs,vim
2
+
3
+ ### Ruby ###
4
+ *.gem
5
+ *.rbc
6
+ /.config
7
+ /coverage/
8
+ /InstalledFiles
9
+ /pkg/
10
+ /spec/reports/
11
+ /spec/examples.txt
12
+ /test/tmp/
13
+ /test/version_tmp/
14
+ /tmp/
15
+
16
+ ## Specific to RubyMotion:
17
+ .dat*
18
+ .repl_history
19
+ build/
20
+
21
+ ## Documentation cache and generated files:
22
+ /.yardoc/
23
+ /_yardoc/
24
+ /doc/
25
+ /rdoc/
26
+
27
+ ## Environment normalisation:
28
+ /.bundle/
29
+ /vendor/bundle
30
+ /lib/bundler/man/
31
+
32
+ # for a library or gem, you might want to ignore these files since the code is
33
+ # intended to run in multiple environments; otherwise, check them in:
34
+ Gemfile.lock
35
+ .ruby-version
36
+ .ruby-gemset
37
+
38
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
39
+ .rvmrc
40
+
41
+
42
+ ### RubyMine ###
43
+ # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio
44
+
45
+ *.iml
46
+
47
+ ## Directory-based project format:
48
+ .idea/
49
+ # if you remove the above rule, at least ignore the following:
50
+
51
+ # User-specific stuff:
52
+ # .idea/workspace.xml
53
+ # .idea/tasks.xml
54
+ # .idea/dictionaries
55
+
56
+ # Sensitive or high-churn files:
57
+ # .idea/dataSources.ids
58
+ # .idea/dataSources.xml
59
+ # .idea/sqlDataSources.xml
60
+ # .idea/dynamic.xml
61
+ # .idea/uiDesigner.xml
62
+
63
+ # Gradle:
64
+ # .idea/gradle.xml
65
+ # .idea/libraries
66
+
67
+ # Mongo Explorer plugin:
68
+ # .idea/mongoSettings.xml
69
+
70
+ ## File-based project format:
71
+ *.ipr
72
+ *.iws
73
+
74
+ ## Plugin-specific files:
75
+
76
+ # IntelliJ
77
+ /out/
78
+
79
+ # mpeltonen/sbt-idea plugin
80
+ .idea_modules/
81
+
82
+ # JIRA plugin
83
+ atlassian-ide-plugin.xml
84
+
85
+ # Crashlytics plugin (for Android Studio and IntelliJ)
86
+ com_crashlytics_export_strings.xml
87
+ crashlytics.properties
88
+ crashlytics-build.properties
89
+
90
+
91
+ ### Intellij ###
92
+ # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio
93
+
94
+ *.iml
95
+
96
+ ## Directory-based project format:
97
+ .idea/
98
+ # if you remove the above rule, at least ignore the following:
99
+
100
+ # User-specific stuff:
101
+ # .idea/workspace.xml
102
+ # .idea/tasks.xml
103
+ # .idea/dictionaries
104
+
105
+ # Sensitive or high-churn files:
106
+ # .idea/dataSources.ids
107
+ # .idea/dataSources.xml
108
+ # .idea/sqlDataSources.xml
109
+ # .idea/dynamic.xml
110
+ # .idea/uiDesigner.xml
111
+
112
+ # Gradle:
113
+ # .idea/gradle.xml
114
+ # .idea/libraries
115
+
116
+ # Mongo Explorer plugin:
117
+ # .idea/mongoSettings.xml
118
+
119
+ ## File-based project format:
120
+ *.ipr
121
+ *.iws
122
+
123
+ ## Plugin-specific files:
124
+
125
+ # IntelliJ
126
+ /out/
127
+
128
+ # mpeltonen/sbt-idea plugin
129
+ .idea_modules/
130
+
131
+ # JIRA plugin
132
+ atlassian-ide-plugin.xml
133
+
134
+ # Crashlytics plugin (for Android Studio and IntelliJ)
135
+ com_crashlytics_export_strings.xml
136
+ crashlytics.properties
137
+ crashlytics-build.properties
138
+
139
+
140
+ ### Emacs ###
141
+ # -*- mode: gitignore; -*-
142
+ *~
143
+ \#*\#
144
+ /.emacs.desktop
145
+ /.emacs.desktop.lock
146
+ *.elc
147
+ auto-save-list
148
+ tramp
149
+ .\#*
150
+
151
+ # Org-mode
152
+ .org-id-locations
153
+ *_archive
154
+
155
+ # flymake-mode
156
+ *_flymake.*
157
+
158
+ # eshell files
159
+ /eshell/history
160
+ /eshell/lastdir
161
+
162
+ # elpa packages
163
+ /elpa/
164
+
165
+ # reftex files
166
+ *.rel
167
+
168
+ # AUCTeX auto folder
169
+ /auto/
170
+
171
+ # cask packages
172
+ .cask/
173
+
174
+
175
+ ### Vim ###
176
+ [._]*.s[a-w][a-z]
177
+ [._]s[a-w][a-z]
178
+ *.un~
179
+ Session.vim
180
+ .netrwhist
181
+ *~
182
+
data/.rspec ADDED
@@ -0,0 +1,4 @@
1
+ -r spec_helper
2
+ --color
3
+ --fail-fast
4
+ --format documentation
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require 'rspec/core/rake_task'
2
+ require 'rubygems/tasks'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ Gem::Tasks.new
6
+
7
+ task default: :spec
@@ -0,0 +1,21 @@
1
+ Gem::Specification.new do |gem|
2
+ gem.name = 'aerospike-rails-support'
3
+ gem.version = '0.1.0'
4
+ gem.date = '2015-09-28'
5
+ gem.summary = 'Provide Aerospike Sub Storage Service for Rails'
6
+ gem.description = 'Provide Aerospike Sub Storage Service for Rails as cache and session store'
7
+ gem.authors = ['Jiung Jeong']
8
+ gem.email = 'ethernuiel@sanultari.com'
9
+ gem.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^spec/}) }
10
+ gem.license = 'MIT'
11
+
12
+ gem.add_dependency 'aerospike', '~> 1.0', '>= 1.0.9'
13
+ gem.add_dependency 'hashie', '~> 3.4', '>= 3.4.2'
14
+
15
+ gem.add_development_dependency 'activesupport', '~> 4.2', '>= 4.2.3'
16
+ gem.add_development_dependency 'actionpack', '~> 4.2', '>= 4.2.3'
17
+ gem.add_development_dependency 'rake', '~> 10.4', '>= 10.4.2'
18
+ gem.add_development_dependency 'rubygems-tasks', '~> 0.2', '>= 0.2.4'
19
+ gem.add_development_dependency 'bundler', '~> 1.8', '>= 1.8.2'
20
+ gem.add_development_dependency 'rspec', '~> 3.3'
21
+ end
@@ -0,0 +1,51 @@
1
+ require 'aerospike'
2
+
3
+ class ActionDispatch::Session::AerospikeStore < ActionDispatch::Session::AbstractStore
4
+ DEFAULT_OPTIONS = {
5
+ host: '127.0.0.1',
6
+ port: 3000,
7
+ ns: 'test',
8
+ set: 'session_rails',
9
+ bin: 'data'
10
+ }
11
+
12
+ def initialize(app, options = {})
13
+ options.merge!(DEFAULT_OPTIONS) { |_, old, _| old }
14
+ @client = Aerospike::Client.new(options.delete(:host), options.delete(:port), options)
15
+ options[:expire_after] ||= options[:expiration]
16
+ options[:expire_after] ||= options[:expires_in]
17
+ @options = options.deep_dup
18
+ super
19
+ end
20
+
21
+ def get_session(_, sid)
22
+ unless sid and (session = @client.get(key_from(sid, @options)).bins[@options[:bin]])
23
+ sid, session = generate_sid, {}
24
+ end
25
+ [sid, session]
26
+ end
27
+
28
+ # Set a session in the cache.
29
+ def set_session(_, sid, session, options)
30
+ merged = options.to_hash.merge!(@options) {|_, old, _| old}
31
+ key = key_from(sid, merged)
32
+ if session
33
+ @client.put(key, Aerospike::Bin.new(merged[:bin], session), expiration: merged[:expire_after])
34
+ else
35
+ @client.delete(key)
36
+ end
37
+ sid
38
+ end
39
+
40
+ # Remove a session from the cache.
41
+ def destroy_session(_, sid, options)
42
+ merged = options.to_hash.merge!(@options) {|_, old, _| old}
43
+ @client.delete(key_from(sid, merged), merged)
44
+ generate_sid
45
+ end
46
+
47
+ private
48
+ def key_from(name, options)
49
+ Aerospike::Key.new(options[:ns], options[:set], name)
50
+ end
51
+ end
@@ -0,0 +1,78 @@
1
+ require 'aerospike'
2
+
3
+ module ActiveSupport
4
+ module Cache
5
+ class AerospikeStore < Store
6
+ DEFAULT_OPTIONS = {
7
+ ns: 'test',
8
+ set: 'rails_cache',
9
+ bin: 'data',
10
+ host: '127.0.0.1',
11
+ port: 3000,
12
+ timeout: 0.1,
13
+ ttl: 60,
14
+ unless_exist: false
15
+ }
16
+
17
+ def initialize(options = {})
18
+ options.merge!(DEFAULT_OPTIONS) { |_, user, _| user }
19
+ @client = Aerospike::Client.new(options.delete(:host), options.delete(:port), options.dup)
20
+ super
21
+ end
22
+
23
+ def clear(options = nil)
24
+ @client.query(Aerospike::Statement.new(@options[:ns], @options[:set])).each do |entry|
25
+ @client.delete(entry.key)
26
+ end
27
+ end
28
+
29
+ def increment(name, amount = 1, options = nil)
30
+ options = merged_options(options)
31
+ instrument(:increment, name, amount: amount) do
32
+ @client.add(key_from(namespaced_key(name, options), options), Aerospike::Bin.new(@options[:bin], amount))
33
+ end
34
+ end
35
+
36
+ def decrement(name, amount = 1, options = nil)
37
+ options = merged_options(options)
38
+ instrument(:decrement, name, amount: amount) do
39
+ @client.add(key_from(namespaced_key(name, options), options), Aerospike::Bin.new(@options[:bin], (amount * -1)))
40
+ end
41
+ end
42
+
43
+ protected
44
+ def read_entry(key, options) # :nodoc:
45
+ value = @client.get(key_from(key, options))
46
+ return nil if value.nil?
47
+ Entry.new(@client.get(key_from(key, options)).bins[options[:bin]])
48
+ rescue Aerospike::Exceptions::Aerospike => e
49
+ Rails.logger.error e if defined? Rails
50
+ nil
51
+ end
52
+
53
+ def write_entry(key, entry, options) # :nodoc:
54
+ options = merged_options(options)
55
+ options[:expiration] ||= options[:expires_in] if options.include? :expires_in
56
+ options[:expiration] ||= options[:ttl] if options.include? :ttl
57
+ options[:record_exists_action] ||= options[:unless_exist]? Aerospike::RecordExistsAction::CREATE_ONLY : Aerospike::RecordExistsAction::REPLACE
58
+ data = Aerospike::Bin.new(options[:bin], entry.value)
59
+ @client.put key_from(key, options), data, options
60
+ true
61
+ rescue Aerospike::Exceptions::Aerospike => e
62
+ Rails.logger.error e if defined? Rails
63
+ false
64
+ end
65
+
66
+ def delete_entry(key, options) # :nodoc:
67
+ @client.delete(key_from(key, options))
68
+ rescue Aerospike::Exceptions::Aerospike => e
69
+ Rails.logger.error e if defined? Rails
70
+ end
71
+
72
+ private
73
+ def key_from(key, options)
74
+ Aerospike::Key.new(options[:ns], options[:set], key)
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,5 @@
1
+ require 'active_support'
2
+ require 'action_dispatch'
3
+
4
+ require 'action_dispatch/session/aerospike_store'
5
+ require 'active_support/cache/aerospike_store'
@@ -0,0 +1 @@
1
+ require 'aerospike/rails/support'
metadata ADDED
@@ -0,0 +1,207 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aerospike-rails-support
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jiung Jeong
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-09-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: aerospike
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.9
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.9
33
+ - !ruby/object:Gem::Dependency
34
+ name: hashie
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.4'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 3.4.2
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '3.4'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 3.4.2
53
+ - !ruby/object:Gem::Dependency
54
+ name: activesupport
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '4.2'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 4.2.3
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '4.2'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 4.2.3
73
+ - !ruby/object:Gem::Dependency
74
+ name: actionpack
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '4.2'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 4.2.3
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '4.2'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 4.2.3
93
+ - !ruby/object:Gem::Dependency
94
+ name: rake
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '10.4'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 10.4.2
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '10.4'
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 10.4.2
113
+ - !ruby/object:Gem::Dependency
114
+ name: rubygems-tasks
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '0.2'
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 0.2.4
123
+ type: :development
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '0.2'
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 0.2.4
133
+ - !ruby/object:Gem::Dependency
134
+ name: bundler
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '1.8'
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: 1.8.2
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '1.8'
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: 1.8.2
153
+ - !ruby/object:Gem::Dependency
154
+ name: rspec
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '3.3'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '3.3'
167
+ description: Provide Aerospike Sub Storage Service for Rails as cache and session
168
+ store
169
+ email: ethernuiel@sanultari.com
170
+ executables: []
171
+ extensions: []
172
+ extra_rdoc_files: []
173
+ files:
174
+ - ".gitignore"
175
+ - ".rspec"
176
+ - Gemfile
177
+ - Rakefile
178
+ - aerospike-rails-support.gemspec
179
+ - lib/action_dispatch/session/aerospike_store.rb
180
+ - lib/active_support/cache/aerospike_store.rb
181
+ - lib/aerospike-rails-support.rb
182
+ - lib/aerospike/rails/support.rb
183
+ homepage:
184
+ licenses:
185
+ - MIT
186
+ metadata: {}
187
+ post_install_message:
188
+ rdoc_options: []
189
+ require_paths:
190
+ - lib
191
+ required_ruby_version: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
196
+ required_rubygems_version: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ requirements: []
202
+ rubyforge_project:
203
+ rubygems_version: 2.4.5
204
+ signing_key:
205
+ specification_version: 4
206
+ summary: Provide Aerospike Sub Storage Service for Rails
207
+ test_files: []