mongo-document 0.0.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mongo/document.rb +99 -0
  3. metadata +19 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9b05671822bad85d7e736d9e5b3749f6ea7222fb
4
- data.tar.gz: 9416bc4ae7dbec35fe24ba830172dd7dd9298474
3
+ metadata.gz: 321421ae3e2f2c78d3c86a04f509894de8ee3365
4
+ data.tar.gz: aa7d497d6c2e69fa0dd318358fd0667fa29cc956
5
5
  SHA512:
6
- metadata.gz: c7ec2292c2c669e54b66df768f40917e77ca7a5290ec4fb5f00818cdb228652eec5965952f227fde7af76c4d36b43191005bc267bd3fccaa541459a744efeb64
7
- data.tar.gz: c74b2243f05d11c223a9c56d0260271cfd0630af6a34799f67e3f614c1244cd9756023f9d8850f688bd951e1b291ff4faa081d459f9091f2593d1134d7804dc1
6
+ metadata.gz: 8680a58b6b74cf10a201e0abe7158aa591f402742fc80b33e015142b3d949e97166d06765352cad759952b122d7c6279e27c45b24ea291251cd61b4fcad9ef3d
7
+ data.tar.gz: 7f5905060f92d6bde8dfa85615afbbd0d2f9c4173811b97d4ccf3eaa9164bb231eaed89c327dd265b5b3748b9fc9072ff9824cbaaca8d4617e5d0d5d3fbb379e
@@ -0,0 +1,99 @@
1
+ require 'mongo'
2
+ require 'yaml'
3
+ require 'active_support'
4
+ require 'active_support/core_ext/string/inflections'
5
+ require 'active_support/core_ext/hash/keys'
6
+
7
+ module Mongo
8
+ module DocumentClass
9
+ def client
10
+ if !@client
11
+ raise "No connection! You should call Mongo::Document.establish_connection before."
12
+ end
13
+ @client
14
+ end
15
+ alias connection client
16
+
17
+ def collection
18
+ @collection ||= client[collection_name]
19
+ end
20
+
21
+ def collection_name
22
+ @collection_name ||= name.underscore.pluralize
23
+ end
24
+
25
+ def collection_name=(name)
26
+ @collection_name = name
27
+ end
28
+
29
+ # A little optimazation for the most frequently-used method.
30
+ def find(*args)
31
+ collection.find(*args)
32
+ end
33
+
34
+ # For other methods on collection(or not), just send to it.
35
+ def method_missing(name, *args)
36
+ collection.send(name, *args)
37
+ end
38
+
39
+ def respond_to_missing?(name, include_private = false)
40
+ collection.respond_to?(name, include_private) || super
41
+ end
42
+
43
+ end
44
+
45
+ module Document
46
+ class << self
47
+ def included(cls)
48
+ cls.extend DocumentClass
49
+ set_connection(cls)
50
+ descendants << cls
51
+ end
52
+
53
+ def descendants
54
+ @descendants ||= []
55
+ end
56
+
57
+ def client
58
+ @client
59
+ end
60
+ alias connection client
61
+
62
+ def establish_connection(spec)
63
+ spec = spec.symbolize_keys
64
+ hosts_or_uri = nil
65
+ spec.delete_if do |k, v|
66
+ if k == :hosts || k == :uri
67
+ hosts_or_uri = v
68
+ end
69
+ end
70
+ @client = Mongo::Client.new(hosts_or_uri, spec)
71
+
72
+ descendants.each do |model|
73
+ set_connection(model)
74
+ end
75
+ end
76
+
77
+ def database_file=(file)
78
+ config = YAML.load(File.read(file))
79
+ env = ENV['RAILS_ENV'] || ENV['RACK_ENV']
80
+ spec = config[env]
81
+ establish_connection(spec)
82
+ end
83
+
84
+ private
85
+
86
+ def set_connection(cls)
87
+ cls.instance_variable_set(:@client, @client) if @client
88
+ end
89
+
90
+ end
91
+
92
+ # Auto read database config
93
+ if !ENV["MD_NO_AUTO_CONFIG"] && File.exist?("#{Dir.pwd}/config/database.yml")
94
+ self.database_file = "#{Dir.pwd}/config/database.yml"
95
+ end
96
+
97
+ end
98
+
99
+ end
metadata CHANGED
@@ -1,16 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo-document
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Zhang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-10 00:00:00.000000000 Z
12
- dependencies: []
13
- description: A slim Mongo document model
11
+ date: 2016-10-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mongo
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.2'
27
+ description:
14
28
  email: louirobert@gmail.com
15
29
  executables: []
16
30
  extensions: []
@@ -37,7 +51,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
37
51
  version: '0'
38
52
  requirements: []
39
53
  rubyforge_project:
40
- rubygems_version: 2.2.2
54
+ rubygems_version: 2.5.1
41
55
  signing_key:
42
56
  specification_version: 4
43
57
  summary: A slim Mongo document model