dynamosaurus 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +36 -0
- data/dynamosaurus.gemspec +1 -1
- data/lib/dynamosaurus.rb +1 -154
- data/lib/dynamosaurus/logger.rb +154 -0
- data/lib/dynamosaurus/version.rb +1 -1
- data/spec/dynamosaurus_spec.rb +3 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 070ed235ecd54d002a4af5a36cb42ac7c0052c7a
|
4
|
+
data.tar.gz: 604cb47dc88d5ea6b28db9f313a43f0b55fee132
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 60a53aaf8e3651d4e778c2b9c2bcbc1439819dbbba4afb475055fcc046b54c0141c6d33b20a0f8a3978a199d7159dedbe3a48cb614f9d6d448e6329a4a517272
|
7
|
+
data.tar.gz: 8bca0a468f5261405dc01dfec37c501571994018921a31bc400c0cdff40e93485d916db0b49139565fc86f0579228439cdc74aab2cad5bcb427b2a293bb3bad7
|
data/README.md
CHANGED
@@ -44,6 +44,42 @@ Or install it yourself as:
|
|
44
44
|
|
45
45
|
# delete
|
46
46
|
kvs.delete
|
47
|
+
|
48
|
+
class SimpleOrderedKVS < Dynamosaurus::DynamoBase
|
49
|
+
key :simple_key, :string, :simple_id, :string
|
50
|
+
secondary_index :updated_at_index, :updated_at, :number
|
51
|
+
end
|
52
|
+
|
53
|
+
# create
|
54
|
+
SimpleOrderedKVS.put({:simple_key => "key", :simple_id => "1"})
|
55
|
+
|
56
|
+
# get
|
57
|
+
SimpleOrderedKVS.get(["key", "1"])
|
58
|
+
|
59
|
+
# force use secondary index
|
60
|
+
SimpleOrderedKVS.get({
|
61
|
+
:index => "updated_at_index",
|
62
|
+
:simple_key => "key"
|
63
|
+
},{
|
64
|
+
:scan_index_forward => false,
|
65
|
+
:limit => 50,
|
66
|
+
})
|
67
|
+
|
68
|
+
# automatically use secondary index
|
69
|
+
SimpleOrderedKVS.get({:simple_key => "key"})
|
70
|
+
|
71
|
+
class Comment < Dynamosaurus::DynamoBase
|
72
|
+
key :content_id, :string, :message_id, :string
|
73
|
+
global_index :user_index, :user_id, :string
|
74
|
+
end
|
75
|
+
|
76
|
+
Comment.put({:content_id => "1", :message_id => "1", :user_id => "abc"})
|
77
|
+
Comment.put({:content_id => "1", :message_id => "2", :user_id => "abc"})
|
78
|
+
Comment.put({:content_id => "1", :message_id => "3", :user_id => "xyz"})
|
79
|
+
|
80
|
+
# automatically use global index
|
81
|
+
comments = Comment.get({:user_id => "abc"})
|
82
|
+
|
47
83
|
|
48
84
|
|
49
85
|
## Contributing
|
data/dynamosaurus.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["isamu.a@gmail.com"]
|
11
11
|
spec.description = %q{Dynamodb simple ORM}
|
12
12
|
spec.summary = %q{Dynamodb simple ORM}
|
13
|
-
spec.homepage = ""
|
13
|
+
spec.homepage = "https://github.com/isamu/dynamosaurus"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
data/lib/dynamosaurus.rb
CHANGED
@@ -1,163 +1,10 @@
|
|
1
1
|
require "dynamosaurus/version"
|
2
2
|
require "dynamosaurus/dynamo_base"
|
3
3
|
require "dynamosaurus/dynamo_class"
|
4
|
+
require "dynamosaurus/logger"
|
4
5
|
|
5
6
|
module Dynamosaurus
|
6
7
|
class << self
|
7
8
|
attr_accessor :logger
|
8
9
|
end
|
9
|
-
|
10
|
-
class Logger
|
11
|
-
|
12
|
-
attr_accessor :level
|
13
|
-
attr_accessor :delimiter
|
14
|
-
attr_accessor :auto_flush
|
15
|
-
attr_reader :buffer
|
16
|
-
attr_reader :log
|
17
|
-
attr_reader :init_args
|
18
|
-
|
19
|
-
Levels =
|
20
|
-
{
|
21
|
-
:fatal => 7,
|
22
|
-
:error => 6,
|
23
|
-
:warn => 4,
|
24
|
-
:info => 3,
|
25
|
-
:debug => 0
|
26
|
-
}
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
# Readies a log for writing.
|
31
|
-
#
|
32
|
-
# ==== Parameters
|
33
|
-
# log<IO, String>:: Either an IO object or a name of a logfile.
|
34
|
-
def initialize_log(log)
|
35
|
-
close if @log # be sure that we don't leave open files laying around.
|
36
|
-
|
37
|
-
if log.respond_to?(:write)
|
38
|
-
@log = log
|
39
|
-
elsif File.exist?(log)
|
40
|
-
@log = open(log, (File::WRONLY | File::APPEND))
|
41
|
-
@log.sync = true
|
42
|
-
else
|
43
|
-
FileUtils.mkdir_p(File.dirname(log)) unless File.directory?(File.dirname(log))
|
44
|
-
@log = open(log, (File::WRONLY | File::APPEND | File::CREAT))
|
45
|
-
@log.sync = true
|
46
|
-
@log.write("#{Time.now.httpdate} #{delimiter} info #{delimiter} Logfile created\n")
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
public
|
51
|
-
|
52
|
-
# To initialize the logger you create a new object, proxies to set_log.
|
53
|
-
#
|
54
|
-
# ==== Parameters
|
55
|
-
# *args:: Arguments to create the log from. See set_logs for specifics.
|
56
|
-
def initialize(*args)
|
57
|
-
@init_args = args
|
58
|
-
set_log(*args)
|
59
|
-
self.auto_flush = true
|
60
|
-
Dynamosaurus.logger = self
|
61
|
-
end
|
62
|
-
|
63
|
-
# Replaces an existing logger with a new one.
|
64
|
-
#
|
65
|
-
# ==== Parameters
|
66
|
-
# log<IO, String>:: Either an IO object or a name of a logfile.
|
67
|
-
# log_level<~to_sym>::
|
68
|
-
# The log level from, e.g. :fatal or :info. Defaults to :error in the
|
69
|
-
# production environment and :debug otherwise.
|
70
|
-
# delimiter<String>::
|
71
|
-
# Delimiter to use between message sections. Defaults to " ~ ".
|
72
|
-
# auto_flush<Boolean>::
|
73
|
-
# Whether the log should automatically flush after new messages are
|
74
|
-
# added. Defaults to false.
|
75
|
-
def set_log(log, log_level = nil, delimiter = " ~ ", auto_flush = false)
|
76
|
-
if log_level && Levels[log_level.to_sym]
|
77
|
-
@level = Levels[log_level.to_sym]
|
78
|
-
else
|
79
|
-
@level = Levels[:debug]
|
80
|
-
end
|
81
|
-
@buffer = []
|
82
|
-
@delimiter = delimiter
|
83
|
-
@auto_flush = auto_flush
|
84
|
-
|
85
|
-
initialize_log(log)
|
86
|
-
end
|
87
|
-
|
88
|
-
# Flush the entire buffer to the log object.
|
89
|
-
def flush
|
90
|
-
return unless @buffer.size > 0
|
91
|
-
@log.write(@buffer.slice!(0..-1).join)
|
92
|
-
end
|
93
|
-
|
94
|
-
# Close and remove the current log object.
|
95
|
-
def close
|
96
|
-
flush
|
97
|
-
@log.close if @log.respond_to?(:close) && !@log.tty?
|
98
|
-
@log = nil
|
99
|
-
end
|
100
|
-
|
101
|
-
# Appends a message to the log. The methods yield to an optional block and
|
102
|
-
# the output of this block will be appended to the message.
|
103
|
-
#
|
104
|
-
# ==== Parameters
|
105
|
-
# string<String>:: The message to be logged. Defaults to nil.
|
106
|
-
#
|
107
|
-
# ==== Returns
|
108
|
-
# String:: The resulting message added to the log file.
|
109
|
-
def <<(string = nil)
|
110
|
-
message = ""
|
111
|
-
message << delimiter
|
112
|
-
message << string if string
|
113
|
-
message << "\n" unless message[-1] == ?\n
|
114
|
-
@buffer << message
|
115
|
-
flush if @auto_flush
|
116
|
-
|
117
|
-
message
|
118
|
-
end
|
119
|
-
alias_method :push, :<<
|
120
|
-
|
121
|
-
# Generate the logging methods for DataMapper.logger for each log level.
|
122
|
-
Levels.each_pair do |name, number|
|
123
|
-
class_eval <<-LEVELMETHODS, __FILE__, __LINE__
|
124
|
-
|
125
|
-
# Appends a message to the log if the log level is at least as high as
|
126
|
-
# the log level of the logger.
|
127
|
-
#
|
128
|
-
# ==== Parameters
|
129
|
-
# string<String>:: The message to be logged. Defaults to nil.
|
130
|
-
#
|
131
|
-
# ==== Returns
|
132
|
-
# self:: The logger object for chaining.
|
133
|
-
def #{name}(message = nil)
|
134
|
-
self << message if #{number} >= level
|
135
|
-
self
|
136
|
-
end
|
137
|
-
|
138
|
-
# Appends a message to the log if the log level is at least as high as
|
139
|
-
# the log level of the logger. The bang! version of the method also auto
|
140
|
-
# flushes the log buffer to disk.
|
141
|
-
#
|
142
|
-
# ==== Parameters
|
143
|
-
# string<String>:: The message to be logged. Defaults to nil.
|
144
|
-
#
|
145
|
-
# ==== Returns
|
146
|
-
# self:: The logger object for chaining.
|
147
|
-
def #{name}!(message = nil)
|
148
|
-
self << message if #{number} >= level
|
149
|
-
flush if #{number} >= level
|
150
|
-
self
|
151
|
-
end
|
152
|
-
|
153
|
-
# ==== Returns
|
154
|
-
# Boolean:: True if this level will be logged by this logger.
|
155
|
-
def #{name}?
|
156
|
-
#{number} >= level
|
157
|
-
end
|
158
|
-
LEVELMETHODS
|
159
|
-
end
|
160
|
-
|
161
|
-
end
|
162
|
-
|
163
10
|
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
module Dynamosaurus
|
2
|
+
class Logger
|
3
|
+
|
4
|
+
attr_accessor :level
|
5
|
+
attr_accessor :delimiter
|
6
|
+
attr_accessor :auto_flush
|
7
|
+
attr_reader :buffer
|
8
|
+
attr_reader :log
|
9
|
+
attr_reader :init_args
|
10
|
+
|
11
|
+
Levels =
|
12
|
+
{
|
13
|
+
:fatal => 7,
|
14
|
+
:error => 6,
|
15
|
+
:warn => 4,
|
16
|
+
:info => 3,
|
17
|
+
:debug => 0
|
18
|
+
}
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
# Readies a log for writing.
|
23
|
+
#
|
24
|
+
# ==== Parameters
|
25
|
+
# log<IO, String>:: Either an IO object or a name of a logfile.
|
26
|
+
def initialize_log(log)
|
27
|
+
close if @log # be sure that we don't leave open files laying around.
|
28
|
+
|
29
|
+
if log.respond_to?(:write)
|
30
|
+
@log = log
|
31
|
+
elsif File.exist?(log)
|
32
|
+
@log = open(log, (File::WRONLY | File::APPEND))
|
33
|
+
@log.sync = true
|
34
|
+
else
|
35
|
+
FileUtils.mkdir_p(File.dirname(log)) unless File.directory?(File.dirname(log))
|
36
|
+
@log = open(log, (File::WRONLY | File::APPEND | File::CREAT))
|
37
|
+
@log.sync = true
|
38
|
+
@log.write("#{Time.now.httpdate} #{delimiter} info #{delimiter} Logfile created\n")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
public
|
43
|
+
|
44
|
+
# To initialize the logger you create a new object, proxies to set_log.
|
45
|
+
#
|
46
|
+
# ==== Parameters
|
47
|
+
# *args:: Arguments to create the log from. See set_logs for specifics.
|
48
|
+
def initialize(*args)
|
49
|
+
@init_args = args
|
50
|
+
set_log(*args)
|
51
|
+
self.auto_flush = true
|
52
|
+
Dynamosaurus.logger = self
|
53
|
+
end
|
54
|
+
|
55
|
+
# Replaces an existing logger with a new one.
|
56
|
+
#
|
57
|
+
# ==== Parameters
|
58
|
+
# log<IO, String>:: Either an IO object or a name of a logfile.
|
59
|
+
# log_level<~to_sym>::
|
60
|
+
# The log level from, e.g. :fatal or :info. Defaults to :error in the
|
61
|
+
# production environment and :debug otherwise.
|
62
|
+
# delimiter<String>::
|
63
|
+
# Delimiter to use between message sections. Defaults to " ~ ".
|
64
|
+
# auto_flush<Boolean>::
|
65
|
+
# Whether the log should automatically flush after new messages are
|
66
|
+
# added. Defaults to false.
|
67
|
+
def set_log(log, log_level = nil, delimiter = " ~ ", auto_flush = false)
|
68
|
+
if log_level && Levels[log_level.to_sym]
|
69
|
+
@level = Levels[log_level.to_sym]
|
70
|
+
else
|
71
|
+
@level = Levels[:debug]
|
72
|
+
end
|
73
|
+
@buffer = []
|
74
|
+
@delimiter = delimiter
|
75
|
+
@auto_flush = auto_flush
|
76
|
+
|
77
|
+
initialize_log(log)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Flush the entire buffer to the log object.
|
81
|
+
def flush
|
82
|
+
return unless @buffer.size > 0
|
83
|
+
@log.write(@buffer.slice!(0..-1).join)
|
84
|
+
end
|
85
|
+
|
86
|
+
# Close and remove the current log object.
|
87
|
+
def close
|
88
|
+
flush
|
89
|
+
@log.close if @log.respond_to?(:close) && !@log.tty?
|
90
|
+
@log = nil
|
91
|
+
end
|
92
|
+
|
93
|
+
# Appends a message to the log. The methods yield to an optional block and
|
94
|
+
# the output of this block will be appended to the message.
|
95
|
+
#
|
96
|
+
# ==== Parameters
|
97
|
+
# string<String>:: The message to be logged. Defaults to nil.
|
98
|
+
#
|
99
|
+
# ==== Returns
|
100
|
+
# String:: The resulting message added to the log file.
|
101
|
+
def <<(string = nil)
|
102
|
+
message = ""
|
103
|
+
message << delimiter
|
104
|
+
message << string if string
|
105
|
+
message << "\n" unless message[-1] == ?\n
|
106
|
+
@buffer << message
|
107
|
+
flush if @auto_flush
|
108
|
+
|
109
|
+
message
|
110
|
+
end
|
111
|
+
alias_method :push, :<<
|
112
|
+
|
113
|
+
# Generate the logging methods for DataMapper.logger for each log level.
|
114
|
+
Levels.each_pair do |name, number|
|
115
|
+
class_eval <<-LEVELMETHODS, __FILE__, __LINE__
|
116
|
+
|
117
|
+
# Appends a message to the log if the log level is at least as high as
|
118
|
+
# the log level of the logger.
|
119
|
+
#
|
120
|
+
# ==== Parameters
|
121
|
+
# string<String>:: The message to be logged. Defaults to nil.
|
122
|
+
#
|
123
|
+
# ==== Returns
|
124
|
+
# self:: The logger object for chaining.
|
125
|
+
def #{name}(message = nil)
|
126
|
+
self << message if #{number} >= level
|
127
|
+
self
|
128
|
+
end
|
129
|
+
|
130
|
+
# Appends a message to the log if the log level is at least as high as
|
131
|
+
# the log level of the logger. The bang! version of the method also auto
|
132
|
+
# flushes the log buffer to disk.
|
133
|
+
#
|
134
|
+
# ==== Parameters
|
135
|
+
# string<String>:: The message to be logged. Defaults to nil.
|
136
|
+
#
|
137
|
+
# ==== Returns
|
138
|
+
# self:: The logger object for chaining.
|
139
|
+
def #{name}!(message = nil)
|
140
|
+
self << message if #{number} >= level
|
141
|
+
flush if #{number} >= level
|
142
|
+
self
|
143
|
+
end
|
144
|
+
|
145
|
+
# ==== Returns
|
146
|
+
# Boolean:: True if this level will be logged by this logger.
|
147
|
+
def #{name}?
|
148
|
+
#{number} >= level
|
149
|
+
end
|
150
|
+
LEVELMETHODS
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
end
|
data/lib/dynamosaurus/version.rb
CHANGED
data/spec/dynamosaurus_spec.rb
CHANGED
@@ -52,6 +52,9 @@ describe Dynamosaurus do
|
|
52
52
|
expect(orderd_items[1].simple_id).to eq "3"
|
53
53
|
expect(orderd_items[2].simple_id).to eq "1"
|
54
54
|
|
55
|
+
expect(SimpleOrderedKVS.get({:simple_key => "key"}).size).to eq 3
|
56
|
+
|
57
|
+
|
55
58
|
batch_items = SimpleOrderedKVS.batch_get_item({:simple_key => ["key"], :simple_id => ["1", "2", "3"]})
|
56
59
|
expect(orderd_items.size).to eq 3
|
57
60
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dynamosaurus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Isamu Arimoto
|
@@ -84,11 +84,12 @@ files:
|
|
84
84
|
- lib/dynamosaurus.rb
|
85
85
|
- lib/dynamosaurus/dynamo_base.rb
|
86
86
|
- lib/dynamosaurus/dynamo_class.rb
|
87
|
+
- lib/dynamosaurus/logger.rb
|
87
88
|
- lib/dynamosaurus/version.rb
|
88
89
|
- spec/dynamosaurus_spec.rb
|
89
90
|
- spec/spec_helper.rb
|
90
91
|
- spec/testmodel.rb
|
91
|
-
homepage:
|
92
|
+
homepage: https://github.com/isamu/dynamosaurus
|
92
93
|
licenses:
|
93
94
|
- MIT
|
94
95
|
metadata: {}
|