dolly 1.1.7 → 3.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 +5 -5
- data/README.md +78 -0
- data/lib/dolly/attachment.rb +29 -0
- data/lib/dolly/bulk_document.rb +27 -26
- data/lib/dolly/class_methods_delegation.rb +15 -0
- data/lib/dolly/collection.rb +32 -65
- data/lib/dolly/configuration.rb +35 -10
- data/lib/dolly/connection.rb +93 -22
- data/lib/dolly/depracated_database.rb +24 -0
- data/lib/dolly/document.rb +61 -208
- data/lib/dolly/document_creation.rb +27 -0
- data/lib/dolly/document_state.rb +66 -0
- data/lib/dolly/document_type.rb +47 -0
- data/lib/dolly/exceptions.rb +32 -0
- data/lib/dolly/framework_helper.rb +7 -0
- data/lib/dolly/identity_properties.rb +29 -0
- data/lib/dolly/mango.rb +156 -0
- data/lib/dolly/mango_index.rb +73 -0
- data/lib/dolly/properties.rb +36 -0
- data/lib/dolly/property.rb +76 -46
- data/lib/dolly/property_manager.rb +53 -0
- data/lib/dolly/property_set.rb +23 -0
- data/lib/dolly/query.rb +63 -75
- data/lib/dolly/query_arguments.rb +35 -0
- data/lib/dolly/request.rb +12 -107
- data/lib/dolly/request_header.rb +26 -0
- data/lib/dolly/timestamp.rb +24 -0
- data/lib/dolly/version.rb +1 -1
- data/lib/dolly/view_query.rb +21 -0
- data/lib/dolly.rb +2 -23
- data/lib/{dolly → railties}/railtie.rb +2 -1
- data/lib/refinements/hash_refinements.rb +27 -0
- data/lib/refinements/string_refinements.rb +28 -0
- data/lib/tasks/db.rake +27 -4
- data/test/bulk_document_test.rb +8 -5
- data/test/document_test.rb +130 -95
- data/test/document_type_test.rb +28 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/log/test.log +46417 -46858
- data/test/inheritance_test.rb +23 -0
- data/test/mango_index_test.rb +64 -0
- data/test/mango_test.rb +273 -0
- data/test/property_manager_test.rb +18 -0
- data/test/test_helper.rb +63 -18
- data/test/view_query_test.rb +27 -0
- metadata +67 -140
- data/Rakefile +0 -11
- data/lib/dolly/bulk_error.rb +0 -16
- data/lib/dolly/db_config.rb +0 -20
- data/lib/dolly/interpreter.rb +0 -5
- data/lib/dolly/logger.rb +0 -9
- data/lib/dolly/name_space.rb +0 -28
- data/lib/dolly/timestamps.rb +0 -21
- data/lib/exceptions/dolly.rb +0 -47
- data/test/collection_test.rb +0 -59
- data/test/configuration_test.rb +0 -9
- data/test/dummy/README.rdoc +0 -28
- data/test/dummy/Rakefile +0 -6
- data/test/dummy/app/assets/javascripts/application.js +0 -13
- data/test/dummy/app/assets/stylesheets/application.css +0 -13
- data/test/dummy/app/controllers/application_controller.rb +0 -5
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/bin/bundle +0 -3
- data/test/dummy/bin/rails +0 -4
- data/test/dummy/bin/rake +0 -4
- data/test/dummy/config/application.rb +0 -27
- data/test/dummy/config/boot.rb +0 -5
- data/test/dummy/config/couchdb.yml +0 -13
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -29
- data/test/dummy/config/environments/production.rb +0 -80
- data/test/dummy/config/environments/test.rb +0 -36
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy/config/initializers/inflections.rb +0 -16
- data/test/dummy/config/initializers/mime_types.rb +0 -5
- data/test/dummy/config/initializers/secret_token.rb +0 -12
- data/test/dummy/config/initializers/session_store.rb +0 -3
- data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/test/dummy/config/locales/en.yml +0 -23
- data/test/dummy/config/routes.rb +0 -56
- data/test/dummy/config.ru +0 -4
- data/test/dummy/lib/couch_rest_adapter/railtie.rb +0 -10
- data/test/dummy/public/404.html +0 -58
- data/test/dummy/public/422.html +0 -58
- data/test/dummy/public/500.html +0 -57
- data/test/dummy/public/favicon.ico +0 -0
- data/test/factories/factories.rb +0 -8
- data/test/request_test.rb +0 -25
@@ -0,0 +1,24 @@
|
|
1
|
+
module Dolly
|
2
|
+
module Timestamp
|
3
|
+
def write_timestamps(is_persisted)
|
4
|
+
return unless timestamped?
|
5
|
+
write_attribute(:created_at, Time.now) unless is_persisted
|
6
|
+
write_attribute(:updated_at, Time.now)
|
7
|
+
end
|
8
|
+
|
9
|
+
def timestamped?
|
10
|
+
respond_to?(:created_at) && respond_to?(:updated_at)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.included(base)
|
14
|
+
base.extend(ClassMethods)
|
15
|
+
end
|
16
|
+
|
17
|
+
module ClassMethods
|
18
|
+
def timestamps!
|
19
|
+
property :created_at, :updated_at, class_name: Time
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
data/lib/dolly/version.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'dolly/class_methods_delegation'
|
2
|
+
|
3
|
+
module Dolly
|
4
|
+
module ViewQuery
|
5
|
+
def raw_view(design, view_name, opts = {})
|
6
|
+
design = "_design/#{design}/_view/#{view_name}"
|
7
|
+
connection.view(design, opts)
|
8
|
+
end
|
9
|
+
|
10
|
+
def view_value(doc, view_name, opts = {})
|
11
|
+
raw_view(doc, view_name, opts)[:rows].flat_map { |result| result[:value] }
|
12
|
+
end
|
13
|
+
|
14
|
+
def collection_view(design, view_name, opts = {})
|
15
|
+
opts.delete(:include_docs)
|
16
|
+
design = "_design/#{design}/_view/#{view_name}"
|
17
|
+
response = connection.view(design, opts)
|
18
|
+
Dolly::Collection.new(rows: response, options: opts)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/dolly.rb
CHANGED
@@ -1,28 +1,7 @@
|
|
1
1
|
require "dolly/version"
|
2
2
|
require "dolly/document"
|
3
|
-
require
|
4
|
-
require '
|
3
|
+
require 'dolly/mango_index'
|
4
|
+
require 'railties/railtie' if defined?(Rails)
|
5
5
|
|
6
6
|
module Dolly
|
7
|
-
class << self
|
8
|
-
def configure
|
9
|
-
yield config
|
10
|
-
end
|
11
|
-
|
12
|
-
def config
|
13
|
-
@config ||= Configuration.new
|
14
|
-
end
|
15
|
-
|
16
|
-
def reset!
|
17
|
-
@config = Configuration.new
|
18
|
-
end
|
19
|
-
|
20
|
-
def log_requests?
|
21
|
-
!!config.log_requests
|
22
|
-
end
|
23
|
-
|
24
|
-
def logger
|
25
|
-
@logger ||= config.logger
|
26
|
-
end
|
27
|
-
end
|
28
7
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module HashRefinements
|
2
|
+
refine Hash do
|
3
|
+
# File activesupport/lib/active_support/core_ext/hash/keys.rb, line 82
|
4
|
+
def deep_transform_keys(&block)
|
5
|
+
_deep_transform_keys_in_object(self, &block)
|
6
|
+
end
|
7
|
+
|
8
|
+
def slice(*keys)
|
9
|
+
keys.each_with_object(Hash.new) { |k, hash| hash[k] = self[k] if has_key?(k) }
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def _deep_transform_keys_in_object(object, &block)
|
15
|
+
case object
|
16
|
+
when Hash
|
17
|
+
object.each_with_object({}) do |(key, value), result|
|
18
|
+
result[yield(key)] = _deep_transform_keys_in_object(value, &block)
|
19
|
+
end
|
20
|
+
when Array
|
21
|
+
object.map { |e| _deep_transform_keys_in_object(e, &block) }
|
22
|
+
else
|
23
|
+
object
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module StringRefinements
|
2
|
+
UNESCAPABLE_PATTERNS = [
|
3
|
+
%r{_design/.+/_view/.+}
|
4
|
+
]
|
5
|
+
|
6
|
+
refine String do
|
7
|
+
#FROM ActiveModel::Name
|
8
|
+
def underscore
|
9
|
+
to_s.gsub(/::/, '/').
|
10
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
11
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
12
|
+
tr("-", "_").
|
13
|
+
downcase
|
14
|
+
end
|
15
|
+
|
16
|
+
def cgi_escape
|
17
|
+
return if nil?
|
18
|
+
return self unless escapable?
|
19
|
+
CGI.escape self
|
20
|
+
end
|
21
|
+
|
22
|
+
def escapable?
|
23
|
+
UNESCAPABLE_PATTERNS.none? do |pattern|
|
24
|
+
self =~ pattern
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/tasks/db.rake
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
namespace :db do
|
2
4
|
desc "Will create if missing database and add default views"
|
3
5
|
task setup: :environment do
|
4
|
-
Dolly::Document.
|
6
|
+
Dolly::Document.connection.put '', {}
|
5
7
|
puts "Database created"
|
6
8
|
end
|
7
9
|
|
@@ -38,9 +40,9 @@ namespace :db do
|
|
38
40
|
view_doc.merge!( '_id' => design_doc_name, 'language' => 'coffeescript')
|
39
41
|
|
40
42
|
begin
|
41
|
-
hash_doc =
|
43
|
+
hash_doc = Dolly::Document.connection.request(:get, view_doc["_id"])
|
42
44
|
|
43
|
-
rev = hash_doc.delete(
|
45
|
+
rev = hash_doc.delete(:_rev)
|
44
46
|
|
45
47
|
if hash_doc == view_doc
|
46
48
|
puts 'everything up to date'
|
@@ -55,8 +57,29 @@ namespace :db do
|
|
55
57
|
will_save = true
|
56
58
|
end
|
57
59
|
|
58
|
-
Dolly::Document.
|
60
|
+
Dolly::Document.connection.request :put, design_doc_name, view_doc if will_save
|
59
61
|
end
|
60
62
|
end
|
61
63
|
|
64
|
+
namespace :index do
|
65
|
+
desc 'Creates indexes for mango querys located in db/indexes/*.json'
|
66
|
+
task create: :environment do
|
67
|
+
indexes_dir = Rails.root.join('db', 'indexes')
|
68
|
+
files = Dir.glob File.join(indexes_dir, '**', '*.json')
|
69
|
+
|
70
|
+
files.each do |file|
|
71
|
+
index_data = JSON.parse(File.read(file))
|
72
|
+
database = index_data.fetch('db', 'default').to_sym
|
73
|
+
puts "*" * 100
|
74
|
+
puts "Creating index: #{index_data["name"]} for database: #{database}"
|
75
|
+
|
76
|
+
if database == Dolly::Connection::DEFAULT_DATABASE
|
77
|
+
puts Dolly::MangoIndex.create(index_data['name'], index_data['fields'])
|
78
|
+
else
|
79
|
+
puts Dolly::MangoIndex.create_in_database(database, index_data['name'], index_data['fields'])
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
62
84
|
end
|
85
|
+
|
data/test/bulk_document_test.rb
CHANGED
@@ -4,8 +4,7 @@ class Doc < Dolly::Document
|
|
4
4
|
property :name
|
5
5
|
end
|
6
6
|
|
7
|
-
class BulkDocumentTest <
|
8
|
-
|
7
|
+
class BulkDocumentTest < Test::Unit::TestCase
|
9
8
|
setup do
|
10
9
|
@doc = Dolly::Document.bulk_document
|
11
10
|
@req = "http://localhost:5984/test/_bulk_docs"
|
@@ -28,17 +27,21 @@ class BulkDocumentTest < ActiveSupport::TestCase
|
|
28
27
|
test 'save document will remove docs from payload' do
|
29
28
|
docs = 3.times.map{ Doc.new name: "a" }
|
30
29
|
docs.each do |d|
|
31
|
-
d.
|
30
|
+
d.id = "doc/#{SecureRandom.uuid}"
|
32
31
|
@doc << d
|
33
32
|
end
|
34
33
|
|
35
34
|
res = docs.map{|d| {ok: true, id: d.id, rev: "2-#{SecureRandom.uuid}"} }.to_json
|
36
|
-
|
35
|
+
|
36
|
+
stub_request(:post, @req).
|
37
|
+
to_return(body: res)
|
38
|
+
|
39
|
+
assert_equal docs, @doc.payload[:docs]
|
37
40
|
|
38
41
|
@doc.save
|
39
42
|
|
40
43
|
assert_equal [], @doc.errors
|
41
44
|
assert_equal [], @doc.docs
|
45
|
+
assert_equal [], @doc.payload[:docs]
|
42
46
|
end
|
43
|
-
|
44
47
|
end
|