active_pstore 0.4.10 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b8e9351722c286fca7c3d7479e1b0bf92cc76550
4
- data.tar.gz: 5ab5c558ffaae1f4e6bf6fd9b395dde4d1b8c95d
3
+ metadata.gz: 8ddecb64b2c35e955f66716f4d39988c48d4e7bc
4
+ data.tar.gz: 951efa2d736bbef69a07826bd741f4d2f9742299
5
5
  SHA512:
6
- metadata.gz: 6652d3af6d54d323985c5fd6b65e07c93f9d88d3833e47318e515bba39cb82bd8f7d0a9ad32256e42482ddcce2ef159a10e61004f3b179b49bd5520e87a48f39
7
- data.tar.gz: 4c34716b4c75ef5aa4e598f23660d21c56826701c8ad106a0483cef097cc83d14efee74f756b33c0938cbdca1d7b78b1644e74306e7c4ac63e1e4a3c8be8f98a
6
+ metadata.gz: 00ac7cace452785391cb7cc434041f0924521a6af5761de04da193bdefbd3779d72b0d50a415e37b9a3702e96abb6f7d38de828373f5350f771148a3da2aade6
7
+ data.tar.gz: 2db3e10910cd48e568f6abeb37f7bb2b426b3a5355cc7c4f2de8d49f5007b5aaf7dfa8b1c353b1a88d8f2caa110df7512fbcccc8399603de83a85c2701db3c1e
data/README.md CHANGED
@@ -107,6 +107,37 @@ Artist.where(birth_date: Date.new(1948, 12, 3)..Date.new(1956, 12, 6))
107
107
 
108
108
  see [spec codes](https://github.com/koic/active_pstore/tree/master/spec) for more information.
109
109
 
110
+ ## Integration with Rails
111
+
112
+ ### Generate config file
113
+
114
+ Execute these lines to your Rails application directory:
115
+
116
+ ```
117
+ bundle exec rails g active_pstore:config
118
+ ```
119
+
120
+ And then create config/active_pstore.yml.
121
+
122
+ ### Generate model file
123
+
124
+ Execute these lines to your Rails application directory:
125
+
126
+ ```
127
+ bundle exec rails g active_pstore:model artist name associated_act instrument birth_date
128
+ ```
129
+
130
+ And then create app/models/artist.rb
131
+
132
+ ```ruby
133
+ class Artist < ActivePStore::Base
134
+ attr_accessor :name
135
+ attr_accessor :associated_act
136
+ attr_accessor :instrument
137
+ attr_accessor :birth_date
138
+ end
139
+ ```
140
+
110
141
  ## REQUIREMENTS
111
142
 
112
143
  * [Active Model](https://github.com/rails/rails/tree/master/activemodel)
@@ -1,109 +1,47 @@
1
- #require "mongoid/railties/document"
2
- require 'rails'
3
- require 'rails/active_pstore'
4
-
5
1
  module Rails
6
2
  module ActivePStore
7
-
8
- # Hooks ActivePStore into Rails 3 and higher.
9
- #
10
- # @since 2.0.0
11
3
  class Railtie < Rails::Railtie
12
-
13
- # Mapping of rescued exceptions to HTTP responses
14
- #
15
- # @example
16
- # railtie.rescue_responses
17
- #
18
- # @ return [Hash] rescued responses
19
- #
20
- # @since 2.4.3
21
4
  def self.rescue_responses
22
5
  {
23
- 'ActivePStore::Errors::RecordNotFound' => :not_found
24
- # "Mongoid::Errors::Validations" => 422
6
+ 'ActivePStore::RecordNotFound' => :not_found
25
7
  }
26
8
  end
27
9
 
28
- config.app_generators.orm :active_pstore, migration: false
29
-
30
10
  if config.action_dispatch.rescue_responses
31
11
  config.action_dispatch.rescue_responses.merge!(rescue_responses)
32
12
  end
33
13
 
34
- # rake_tasks do
35
- # load "mongoid/railties/database.rake"
36
- # end
37
-
38
- # Exposes Mongoid's configuration to the Rails application configuration.
39
- #
40
- # @example Set up configuration in the Rails app.
41
- # module MyApplication
42
- # class Application < Rails::Application
43
- # config.mongoid.logger = Logger.new($stdout, :warn)
44
- # config.mongoid.persist_in_safe_mode = true
45
- # end
46
- # end
47
- #
48
- # @since 2.0.0
49
- # config.mongoid = ::Mongoid::Config
50
-
51
- # Initialize Mongoid. This will look for a mongoid.yml in the config
52
- # directory and configure mongoid appropriately.
53
- #
54
- # @since 2.0.0
55
- =begin
56
- initializer "mongoid.load-config" do
57
- config_file = Rails.root.join("config", "mongoid.yml")
58
- if config_file.file?
59
- begin
60
- ::Mongoid.load!(config_file)
61
- rescue ::Mongoid::Errors::NoClientsConfig => e
62
- handle_configuration_error(e)
63
- rescue ::Mongoid::Errors::NoDefaultSession => e
64
- handle_configuration_error(e)
65
- rescue ::Mongoid::Errors::NoSessionDatabase => e
66
- handle_configuration_error(e)
67
- rescue ::Mongoid::Errors::NoSessionHosts => e
68
- handle_configuration_error(e)
69
- end
14
+ # Loads and returns the entire raw configuration of database from
15
+ # values stored in `config/active_pstore.yml`.
16
+ def database_configuration
17
+ yaml = Pathname.new('config/active_pstore.yml')
18
+
19
+ config = if yaml && yaml.exist?
20
+ require 'yaml'
21
+ require 'erb'
22
+ YAML.load(ERB.new(yaml.read).result) || {}
23
+ else
24
+ raise 'Could not load database configuration. No such file - config/active_pstore.yml'
70
25
  end
26
+
27
+ config
28
+ rescue Psych::SyntaxError => e
29
+ raise "YAML syntax error occurred while parsing config/active_pstore.yml. " \
30
+ "Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \
31
+ "Error: #{e.message}"
32
+ rescue => e
33
+ raise e, "Cannot load `Rails::ActivePStore::Railtie.database_configuration`:\n#{e.message}", e.backtrace
71
34
  end
72
- =end
73
35
 
74
- # Set the proper error types for Rails. DocumentNotFound errors should be
75
- # 404s and not 500s, validation errors are 422s.
76
- #
77
- # @since 2.0.0
78
- # config.after_initialize do
79
- # unless config.action_dispatch.rescue_responses
80
- # ActionDispatch::ShowExceptions.rescue_responses.update(Railtie.rescue_responses)
81
- # end
82
- # end
36
+ initializer 'active_pstore.initialize_database' do
37
+ config_file = Rails.root.join('config', 'active_pstore.yml')
83
38
 
84
- # Due to all models not getting loaded and messing up inheritance queries
85
- # and indexing, we need to preload the models in order to address this.
86
- #
87
- # This will happen for every request in development, once in other
88
- # environments.
89
- #
90
- # @since 2.0.0
91
- # initializer "mongoid.preload-models" do |app|
92
- # config.to_prepare do
93
- # ::Rails::Mongoid.preload_models(app)
94
- # end
95
- # end
39
+ if config_file.file?
40
+ database = database_configuration.fetch(ENV['RAILS_ENV'] || 'development').fetch('database')
96
41
 
97
- # Rails runs all initializers first before getting into any generator
98
- # code, so we have no way in the intitializer to know if we are
99
- # generating a mongoid.yml. So instead of failing, we catch all the
100
- # errors and print them out.
101
- #
102
- # @since 3.0.0
103
- # def handle_configuration_error(e)
104
- # puts "There is a configuration error with the current mongoid.yml."
105
- # puts e.message
106
- # end
42
+ ::ActivePStore::Base.establish_connection(database: database)
43
+ end
44
+ end
107
45
  end
108
46
  end
109
47
  end
@@ -1,3 +1,3 @@
1
1
  module ActivePStore
2
- VERSION = '0.4.10'
2
+ VERSION = '0.5.0'
3
3
  end
data/lib/active_pstore.rb CHANGED
@@ -16,3 +16,7 @@ require 'active_pstore/query_methods'
16
16
  require 'active_pstore/querying'
17
17
  require 'active_pstore/base'
18
18
  require 'active_pstore/errors'
19
+
20
+ if defined?(Rails)
21
+ require 'active_pstore/railtie'
22
+ end
@@ -1,22 +1,14 @@
1
- require 'rails/generators/active_pstore_generator'
2
-
3
- module Active_Pstore
1
+ module ActivePstore
4
2
  module Generators
5
3
  class ConfigGenerator < Rails::Generators::Base
6
- desc "Creates a Active_Pstore configuration file at config/active_pstore.yml"
7
-
8
- argument :database_name, type: :string, optional: true
4
+ desc 'Creates a Active PStore configuration file at config/active_pstore.yml'
9
5
 
10
6
  def self.source_root
11
- @_active_pstore_source_root ||= File.expand_path("../templates", __FILE__)
12
- end
13
-
14
- def app_name
15
- Rails::Application.subclasses.first.parent.to_s.underscore
7
+ File.expand_path('../templates', __FILE__)
16
8
  end
17
9
 
18
10
  def create_config_file
19
- template 'active_pstore.yml', File.join('config', "active_pstore.yml")
11
+ template 'active_pstore.yml', File.join('config', 'active_pstore.yml')
20
12
  end
21
13
  end
22
14
  end
@@ -1,135 +1,20 @@
1
- development:
2
- # Configure available database clients. (required)
3
- clients:
4
- # Defines the default client. (required)
5
- default:
6
- # Defines the name of the default database that Mongoid can connect to.
7
- # (required).
8
- database: <%= database_name || app_name %>_development
9
- # Provides the hosts the default client can connect to. Must be an array
10
- # of host:port pairs. (required)
11
- hosts:
12
- - localhost:27017
13
- options:
14
- # Change the default write concern. (default = { w: 1 })
15
- # write:
16
- # w: 1
17
-
18
- # Change the default read preference. Valid options for mode are: :secondary,
19
- # :secondary_preferred, :primary, :primary_preferred, :nearest
20
- # (default: primary)
21
- # read:
22
- # mode: :secondary_preferred
23
-
24
- # The name of the user for authentication.
25
- # user: 'user'
26
-
27
- # The password of the user for authentication.
28
- # password: 'password'
29
-
30
- # The user's database roles.
31
- # roles:
32
- # - 'dbOwner'
33
-
34
- # Change the default authentication mechanism. Valid options are: :scram,
35
- # :mongodb_cr, :mongodb_x509, and :plain. (default on 3.0 is :scram, default
36
- # on 2.4 and 2.6 is :plain)
37
- # auth_mech: :scram
38
-
39
- # The database or source to authenticate the user against. (default: admin)
40
- # auth_source: admin
41
-
42
- # Force a the driver cluster to behave in a certain manner instead of auto-
43
- # discovering. Can be one of: :direct, :replica_set, :sharded. Set to :direct
44
- # when connecting to hidden members of a replica set.
45
- # connect: :direct
46
-
47
- # Changes the default time in seconds the server monitors refresh their status
48
- # via ismaster commands. (default: 10)
49
- # heartbeat_frequency: 10
50
-
51
- # The time in seconds for selecting servers for a near read preference. (default: 5)
52
- # local_threshold: 5
53
-
54
- # The timeout in seconds for selecting a server for an operation. (default: 30)
55
- # server_selection_timeout: 30
56
-
57
- # The maximum number of connections in the connection pool. (default: 5)
58
- # max_pool_size: 5
59
-
60
- # The minimum number of connections in the connection pool. (default: 1)
61
- # min_pool_size: 1
62
-
63
- # The time to wait, in seconds, in the connection pool for a connection
64
- # to be checked in before timing out. (default: 5)
65
- # wait_queue_timeout: 5
66
-
67
- # The time to wait to establish a connection before timing out, in seconds.
68
- # (default: 5)
69
- # connect_timeout: 5
70
-
71
- # The timeout to wait to execute operations on a socket before raising an error.
72
- # (default: 5)
73
- # socket_timeout: 5
1
+ #
2
+ # Ensure the Active PStore gem is defined in your Gemfile
3
+ # gem 'active_pstore'
4
+ #
5
+ default: &default
74
6
 
75
- # The name of the replica set to connect to. Servers provided as seeds that do
76
- # not belong to this replica set will be ignored.
77
- # replica_set: name
78
-
79
- # Whether to connect to the servers via ssl. (default: false)
80
- # ssl: true
81
-
82
- # The certificate file used to identify the connection against MongoDB.
83
- # ssl_cert: /path/to/my.cert
84
-
85
- # The private keyfile used to identify the connection against MongoDB.
86
- # Note that even if the key is stored in the same file as the certificate,
87
- # both need to be explicitly specified.
88
- # ssl_key: /path/to/my.key
89
-
90
- # A passphrase for the private key.
91
- # ssl_key_pass_phrase: password
92
-
93
- # Whether or not to do peer certification validation. (default: false)
94
- # ssl_verify: true
95
-
96
- # The file containing a set of concatenated certification authority certifications
97
- # used to validate certs passed from the other end of the connection.
98
- # ssl_ca_cert: /path/to/ca.cert
99
-
100
-
101
- # Configure Mongoid specific options. (optional)
102
- options:
103
- # Includes the root model name in json serialization. (default: false)
104
- # include_root_in_json: false
105
-
106
- # Include the _type field in serialization. (default: false)
107
- # include_type_for_serialization: false
108
-
109
- # Preload all models in development, needed when models use
110
- # inheritance. (default: false)
111
- # preload_models: false
112
-
113
- # Raise an error when performing a #find and the document is not found.
114
- # (default: true)
115
- # raise_not_found_error: true
116
-
117
- # Raise an error when defining a scope with the same name as an
118
- # existing method. (default: false)
119
- # scope_overwrite_exception: false
120
-
121
- # Use Active Support's time zone in conversions. (default: true)
122
- # use_activesupport_time_zone: true
7
+ development:
8
+ <<: *default
9
+ database: db/active_pstore_development.yml
123
10
 
124
- # Ensure all times are UTC in the app side. (default: false)
125
- # use_utc: false
11
+ # Warning: The database defined as "test" will be erased and
12
+ # re-generated from your development database when you run "rake".
13
+ # Do not set this db to the same as development or production.
126
14
  test:
127
- clients:
128
- default:
129
- database: <%= database_name || app_name %>_test
130
- hosts:
131
- - localhost:27017
132
- options:
133
- read:
134
- mode: primary
135
- max_pool_size: 1
15
+ <<: *default
16
+ database: db/active_pstore_test.yml
17
+
18
+ production:
19
+ <<: *default
20
+ database: db/active_pstore_production.yml
@@ -1,18 +1,16 @@
1
- require 'rails/generators/active_pstore_generator'
2
-
3
- module Active_Pstore
1
+ module ActivePstore
4
2
  module Generators
5
- class ModelGenerator < Base
6
- desc 'Creates a ActivePStore model'
7
- argument :attributes, type: :array, default: [], banner: 'attribute_name attribute_name'
3
+ class ModelGenerator < Rails::Generators::NamedBase
4
+ desc 'Creates a Active PStore model'
5
+ argument :attributes, type: :array, default: [], banner: 'attribute_name_1 attribute_name_2'
8
6
 
9
- check_class_collision
7
+ def self.source_root
8
+ File.expand_path('../templates', __FILE__)
9
+ end
10
10
 
11
11
  def create_model_file
12
12
  template 'model.rb.tt', File.join('app/models', class_path, "#{file_name}.rb")
13
13
  end
14
-
15
- hook_for :test_framework
16
14
  end
17
15
  end
18
16
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_pstore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.10
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Koichi ITO
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-09 00:00:00.000000000 Z
11
+ date: 2015-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -72,11 +72,6 @@ files:
72
72
  - lib/active_pstore/dynamic_matchers.rb
73
73
  - lib/active_pstore/errors.rb
74
74
  - lib/active_pstore/finder_methods.rb
75
- - lib/active_pstore/generators/active_pstore/config/config_generator.rb
76
- - lib/active_pstore/generators/active_pstore/config/template/active_pstore.yml
77
- - lib/active_pstore/generators/active_pstore/model/model_generator.rb
78
- - lib/active_pstore/generators/active_pstore/model/templates/model.rb.tt
79
- - lib/active_pstore/generators/active_pstore_generator.rb
80
75
  - lib/active_pstore/inheritance.rb
81
76
  - lib/active_pstore/integration.rb
82
77
  - lib/active_pstore/model_schema.rb
@@ -85,12 +80,10 @@ files:
85
80
  - lib/active_pstore/querying.rb
86
81
  - lib/active_pstore/railtie.rb
87
82
  - lib/active_pstore/version.rb
88
- - lib/rails/active_pstore.rb
89
83
  - lib/rails/generators/active_pstore/config/config_generator.rb
90
84
  - lib/rails/generators/active_pstore/config/templates/active_pstore.yml
91
85
  - lib/rails/generators/active_pstore/model/model_generator.rb
92
86
  - lib/rails/generators/active_pstore/model/templates/model.rb.tt
93
- - lib/rails/generators/active_pstore_generator.rb
94
87
  homepage: http://github.com/koic/active_pstore
95
88
  licenses:
96
89
  - MIT
@@ -1,23 +0,0 @@
1
- require 'rails/generators/active_pstore_generator'
2
-
3
- module Active_Pstore
4
- module Generators
5
- class ConfigGenerator < Rails::Generators::Base
6
- desc 'Creates a Active_Pstore configuration file at config/active_pstore.yml'
7
-
8
- # argument :database_name, type: :string, optional: true
9
-
10
- def self.source_root
11
- @_active_pstore_source_root ||= File.expand_path('../templates', __FILE__)
12
- end
13
-
14
- def app_name
15
- Rails::Application.subclasses.first.parent.to_s.underscore
16
- end
17
-
18
- def create_config_file
19
- template 'active_pstore.yml', File.join('config', 'active_pstore.yml')
20
- end
21
- end
22
- end
23
- end
@@ -1,20 +0,0 @@
1
- #
2
- # Ensure the Active PStore gem is defined in your Gemfile
3
- # gem 'active_pstore'
4
- #
5
- default: &default
6
-
7
- development:
8
- <<: *default
9
- database: db/active_pstore_development.yml
10
-
11
- # Warning: The database defined as "test" will be erased and
12
- # re-generated from your development database when you run "rake".
13
- # Do not set this db to the same as development or production.
14
- test:
15
- <<: *default
16
- database: db/active_pstore_test.yml
17
-
18
- production:
19
- <<: *default
20
- database: db/active_pstore_production.yml
@@ -1,24 +0,0 @@
1
- require 'rails/generators/active_pstore_generator'
2
-
3
- module ActivePStore
4
- module Generators
5
- # class ModelGenerator < Base
6
- class ModelGenerator < Rails::Generators::Base
7
-
8
- desc "Creates a ActivePStore model"
9
- argument :attributes, type: :array, default: [], banner: "attribute attribute"
10
-
11
- check_class_collision
12
-
13
- # class_option :timestamps, type: :boolean
14
- # class_option :parent, type: :string, desc: "The parent class for the generated model"
15
- # class_option :collection, type: :string, desc: "The collection for storing model's documents"
16
-
17
- def create_model_file
18
- template 'model.rb.tt', File.join('app/models', class_path, "#{file_name}.rb")
19
- end
20
-
21
- hook_for :test_framework
22
- end
23
- end
24
- end
@@ -1,7 +0,0 @@
1
- <% module_namespacing do -%>
2
- class <%= class_name %> < ActivePStore::Base
3
- <% attributes.reject {|attr| attr.reference? }.each do |attribute| -%>
4
- attr_reader :<%= attribute.name %>
5
- <% end -%>
6
- end
7
- <% end -%>
@@ -1,28 +0,0 @@
1
- require "rails/generators/named_base"
2
- require "rails/generators/active_model"
3
-
4
- module ActivePStore
5
- module Generators
6
- class Base < ::Rails::Generators::NamedBase
7
-
8
- def self.source_root
9
- @_active_pstore_source_root ||=
10
- File.expand_path("../#{base_name}/#{generator_name}/templates", __FILE__)
11
- end
12
- end
13
- end
14
- end
15
-
16
- =begin
17
- module Rails
18
- module Generators
19
- class GeneratedAttribute
20
- def type_class
21
- return "Time" if type == :datetime
22
- return "String" if type == :text
23
- return "Mongoid::Boolean" if type == :boolean
24
- type.to_s.camelcase
25
- end
26
- end
27
- end
28
- =end
@@ -1,55 +0,0 @@
1
- module Rails
2
- module ActivePStore
3
- extend self
4
-
5
- # Use the application configuration to get every model and require it, so
6
- # that indexing and inheritance work in both development and production
7
- # with the same results.
8
- #
9
- # @example Load all the application models.
10
- # Rails::Mongoid.load_models(app)
11
- #
12
- # @param [ Application ] app The rails application.
13
- def load_models(app)
14
- app.config.paths['app/models'].expanded.each do |path|
15
- preload = ::ActivePStore.preload_models
16
- if preload.resizable?
17
- files = preload.map {|model| "#{path}/#{model.underscore}.rb" }
18
- else
19
- files = Dir.glob("#{path}/**/*.rb")
20
- end
21
-
22
- files.sort.each do |file|
23
- load_model(file.gsub("#{path}/" , "").gsub(".rb", ""))
24
- end
25
- end
26
- end
27
-
28
- # Conditionally calls `Rails::Mongoid.load_models(app)` if the
29
- # `::Mongoid.preload_models` is `true`.
30
- #
31
- # @param [ Application ] app The rails application.
32
- def preload_models(app)
33
- load_models(app) if ::ActivePStore.preload_models
34
- end
35
-
36
- private
37
-
38
- # I don't want to mock out kernel for unit testing purposes, so added this
39
- # method as a convenience.
40
- #
41
- # @example Load the model.
42
- # Mongoid.load_model("/mongoid/behaviour")
43
- #
44
- # @param [ String ] file The base filename.
45
- #
46
- # @since 2.0.0.rc.3
47
- def load_model(file)
48
- begin
49
- require_dependency(file)
50
- rescue Exception => e
51
- Logger.new($stdout).warn(e.message)
52
- end
53
- end
54
- end
55
- end
@@ -1,28 +0,0 @@
1
- require 'rails/generators/named_base'
2
- require 'rails/generators/active_model'
3
-
4
- module Active_Pstore
5
- module Generators
6
- class Base < ::Rails::Generators::NamedBase
7
- def self.source_root
8
- @_active_pstore_source_root ||=
9
- File.expand_path("../#{base_name}/#{generator_name}/templates", __FILE__)
10
- end
11
- end
12
- end
13
- end
14
-
15
- =begin
16
- module Rails
17
- module Generators
18
- class GeneratedAttribute
19
- def type_class
20
- return "Time" if type == :datetime
21
- return "String" if type == :text
22
- return "Mongoid::Boolean" if type == :boolean
23
- type.to_s.camelcase
24
- end
25
- end
26
- end
27
- end
28
- =end