aerospike-rails-support 0.1.0

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 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: []