solr_makr 0.0.4 → 0.5.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.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.agignore +1 -0
  3. data/README.md +24 -2
  4. data/Rakefile +1 -1
  5. data/bin/console +13 -0
  6. data/exe/solr-makr +9 -0
  7. data/lib/solr_makr.rb +76 -23
  8. data/lib/solr_makr/application.rb +24 -44
  9. data/lib/solr_makr/application_action.rb +182 -0
  10. data/lib/solr_makr/application_dispatch.rb +85 -0
  11. data/lib/solr_makr/collection.rb +17 -0
  12. data/lib/solr_makr/commands.rb +14 -0
  13. data/lib/solr_makr/commands/abstract_command.rb +60 -0
  14. data/lib/solr_makr/commands/buffer.rb +98 -0
  15. data/lib/solr_makr/commands/create_collection.rb +57 -0
  16. data/lib/solr_makr/commands/delete_collection.rb +13 -0
  17. data/lib/solr_makr/commands/execute.rb +67 -0
  18. data/lib/solr_makr/commands/fetch_collection_list.rb +17 -0
  19. data/lib/solr_makr/commands/push_config.rb +36 -0
  20. data/lib/solr_makr/commands/reload_collection.rb +13 -0
  21. data/lib/solr_makr/commands/set_up_local_configuration.rb +27 -0
  22. data/lib/solr_makr/commands/write_yaml.rb +28 -19
  23. data/lib/solr_makr/configsets.rb +15 -0
  24. data/lib/solr_makr/configsets/directory.rb +32 -0
  25. data/lib/solr_makr/configsets/get_nodes.rb +33 -0
  26. data/lib/solr_makr/configsets/install_default.rb +17 -0
  27. data/lib/solr_makr/configsets/lookup_dependent_collections.rb +20 -0
  28. data/lib/solr_makr/configsets/node.rb +56 -0
  29. data/lib/solr_makr/configsets/push_to_zookeeper.rb +19 -0
  30. data/lib/solr_makr/configsets/remote.rb +30 -0
  31. data/lib/solr_makr/configuration.rb +45 -0
  32. data/lib/solr_makr/errors/halt_execution.rb +4 -0
  33. data/lib/solr_makr/files/default-configset/README.md +1 -0
  34. data/lib/solr_makr/files/default-configset/conf/_rest_managed.json +1 -0
  35. data/lib/solr_makr/files/default-configset/conf/admin-extra.html +31 -0
  36. data/lib/solr_makr/files/default-configset/conf/currency.xml +67 -0
  37. data/lib/solr_makr/files/default-configset/conf/elevate.xml +1672 -0
  38. data/lib/solr_makr/files/default-configset/conf/lang/stopwords_en.txt +54 -0
  39. data/lib/solr_makr/files/default-configset/conf/mapping-ISOLatin1Accent.txt +2586 -0
  40. data/lib/solr_makr/files/default-configset/conf/protwords.txt +1613 -0
  41. data/lib/{files → solr_makr/files/default-configset/conf}/schema.xml +132 -40
  42. data/lib/solr_makr/files/default-configset/conf/scripts.conf +1623 -0
  43. data/lib/{files → solr_makr/files/default-configset/conf}/solrconfig.xml +294 -328
  44. data/lib/solr_makr/files/default-configset/conf/spellings.txt +1534 -0
  45. data/lib/solr_makr/files/default-configset/conf/synonyms.txt +1646 -0
  46. data/lib/solr_makr/local_configuration.rb +42 -0
  47. data/lib/solr_makr/local_configuration/cache.rb +21 -0
  48. data/lib/solr_makr/local_configuration/config_directory.rb +17 -0
  49. data/lib/solr_makr/local_configuration/directory.rb +17 -0
  50. data/lib/solr_makr/local_configuration/helper.rb +19 -0
  51. data/lib/solr_makr/local_configuration/save_settings.rb +9 -0
  52. data/lib/solr_makr/local_configuration/settings.rb +50 -0
  53. data/lib/solr_makr/meta/abstract_runner.rb +36 -0
  54. data/lib/solr_makr/meta/application_logger.rb +13 -0
  55. data/lib/solr_makr/meta/buffer_interaction.rb +41 -0
  56. data/lib/solr_makr/meta/disable_paging.rb +6 -0
  57. data/lib/solr_makr/meta/has_solr_attributes.rb +13 -0
  58. data/lib/solr_makr/meta/indifferent_options.rb +13 -0
  59. data/lib/solr_makr/meta/option_definition.rb +105 -0
  60. data/lib/solr_makr/meta/option_mapping.rb +38 -0
  61. data/lib/solr_makr/meta/pathlike.rb +9 -0
  62. data/lib/solr_makr/meta/set_global_options.rb +23 -0
  63. data/lib/solr_makr/meta/utility.rb +99 -0
  64. data/lib/solr_makr/meta/wraps_directory.rb +27 -0
  65. data/lib/solr_makr/meta/wraps_path.rb +18 -0
  66. data/lib/solr_makr/solr_api.rb +12 -0
  67. data/lib/solr_makr/solr_api/client.rb +32 -0
  68. data/lib/solr_makr/solr_api/client_macros.rb +61 -0
  69. data/lib/solr_makr/solr_api/cluster_response.rb +21 -0
  70. data/lib/solr_makr/solr_api/endpoint.rb +15 -0
  71. data/lib/solr_makr/solr_api/list_response.rb +19 -0
  72. data/lib/solr_makr/solr_api/request_params.rb +50 -0
  73. data/lib/solr_makr/solr_api/response.rb +69 -0
  74. data/lib/solr_makr/sunspot_configuration.rb +49 -0
  75. data/lib/solr_makr/version.rb +1 -1
  76. data/solr_makr.gemspec +17 -9
  77. metadata +171 -31
  78. data/bin/solr-makr +0 -7
  79. data/lib/solr_makr/commands/create_core.rb +0 -21
  80. data/lib/solr_makr/commands/destroy_core.rb +0 -17
  81. data/lib/solr_makr/commands/list_cores.rb +0 -17
  82. data/lib/solr_makr/commands/shared.rb +0 -84
  83. data/lib/solr_makr/core.rb +0 -94
  84. data/lib/solr_makr/core_status.rb +0 -56
  85. data/lib/solr_makr/solr_configuration.rb +0 -84
  86. data/lib/solr_makr/solr_request.rb +0 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4ab4901f4917ead570f380ab68ebcb7b7cdafa1b
4
- data.tar.gz: 67e750b0a1e551c90a1c062609499cd6d28812a2
3
+ metadata.gz: 2e4ea507a10b5bcd9b05ae529856fa3394456a34
4
+ data.tar.gz: 8a268eb91d40dba267e11f9bfdf1d8de8b05141c
5
5
  SHA512:
6
- metadata.gz: 8b704d4a52229f75c8c62210e481dba089b41a5ef5c352098884195376f99357059bbaa7cd910177ad69382eb5d6f2a6c913ce757f893056eb72429de476014a
7
- data.tar.gz: e0c13ff707f74bf9d5a436139c08035b389d938e19168ddc85344944dcb308bda93002c9ba91a2b81f5b4ed3a5db43b15407c601565926868daf2d06af88050d
6
+ metadata.gz: 0b29e04ce7b2fda319d937ed0747ba8d26dfa2b851377b9a5f2703f1b429b66eb45735a3f7e31f9406cd69469e621ba4cf6b0d75a8f04dfc07638d1b7f72668c
7
+ data.tar.gz: 185b6005cda2283402fe4026be8999e1269dcccaa2470d7002a85e1f0ccc0a859ee75ef5e541bb12487a4d1938ccee28f141b6d8beb906343417be25127b3438
@@ -0,0 +1 @@
1
+ solr
data/README.md CHANGED
@@ -2,17 +2,39 @@
2
2
 
3
3
  Create and destroy solr cores programmatically.
4
4
 
5
+ Assumes Solr 5.x with zookeeper running on the default ports.
6
+
7
+ See `solr-makr --help` to customize port information.
8
+
5
9
  ## Installation
6
10
 
7
11
  $ gem install solr_makr
8
12
 
9
13
  ## Usage
10
14
 
11
- TODO: Write usage instructions here
15
+ To set up:
16
+
17
+ ```sh
18
+ # only need to run once, to set up local configuration directory
19
+
20
+ solr-makr setup
21
+ ```
22
+
23
+ To create a core:
24
+
25
+ ```sh
26
+ solr-makr create --name foo
27
+ ```
28
+
29
+ To generate a valid yaml configuration for use with sunspot:
30
+
31
+ ```sh
32
+ solr-makr yaml --name foo -o sunspot.yml
33
+ ```
12
34
 
13
35
  ## Contributing
14
36
 
15
- 1. Fork it ( https://github.com/scryptmouse/apple_solr/fork )
37
+ 1. Fork it ( https://github.com/scryptmouse/solr_makr/fork )
16
38
  2. Create your feature branch (`git checkout -b my-new-feature`)
17
39
  3. Commit your changes (`git commit -am 'Add some feature'`)
18
40
  4. Push to the branch (`git push origin my-new-feature`)
data/Rakefile CHANGED
@@ -1,2 +1,2 @@
1
1
  require "bundler/gem_tasks"
2
-
2
+ require "sunspot/solr/tasks"
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "solr_makr"
5
+
6
+ require "pry"
7
+
8
+ SOLR = SolrMakr::SolrAPI::Client.new
9
+ #SUNSPOT = Pathname.new('/Users/mouse/projects/hral/hrsc-sunspot')
10
+
11
+ include SolrMakr
12
+
13
+ Pry.start
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "solr_makr"
4
+
5
+ $app = SolrMakr::Application.new
6
+
7
+ $app.run
8
+
9
+ exit $app.exit_status
@@ -1,44 +1,97 @@
1
1
  require "fileutils"
2
+ require "find"
2
3
  require "pathname"
4
+ require "set"
3
5
  require "yaml"
4
6
 
5
- class Pathname
6
- alias_method :to_str, :to_s
7
- end
8
-
7
+ require "active_support/callbacks"
9
8
  require "active_support/concern"
10
9
  require "active_support/configurable"
10
+ require 'active_support/core_ext/hash/indifferent_access'
11
11
  require "active_support/core_ext/object/blank"
12
12
  require "active_support/core_ext/object/try"
13
+ require "active_support/core_ext/object/with_options"
13
14
  require "active_support/core_ext/module/delegation"
15
+ require "active_support/dependencies/autoload"
16
+ require "active_interaction"
14
17
  require "attr_lazy"
15
18
  require "commander"
16
- require "nokogiri"
17
- require "typhoeus"
19
+ require "httparty"
20
+ require "lmdb"
21
+ require "rugged"
22
+ require "toml"
23
+ require "terminal-table"
18
24
  require "virtus"
25
+ require "zk"
19
26
 
20
27
  require "solr_makr/version"
21
- require "solr_makr/solr_request"
22
- require "solr_makr/core_status"
23
- require "solr_makr/solr_configuration"
24
- require "solr_makr/core"
25
- require "solr_makr/commands"
26
- require "solr_makr/commands/shared"
27
- require "solr_makr/commands/create_core"
28
- require "solr_makr/commands/destroy_core"
29
- require "solr_makr/commands/list_cores"
30
- require "solr_makr/commands/write_yaml"
31
- require "solr_makr/application"
32
28
 
33
29
  module SolrMakr
30
+ extend ActiveSupport::Autoload
31
+
32
+ # Executable name.
33
+ BIN_NAME = 'solr-makr'
34
+
35
+ autoload :Application
36
+ autoload :ApplicationAction
37
+ autoload :ApplicationDispatch
38
+ autoload :Collection
39
+ autoload :Commands
40
+ autoload :Configsets
41
+ autoload :Configuration
42
+ autoload :LocalConfiguration
43
+ autoload :SolrAPI
44
+ autoload :SunspotConfiguration
45
+
46
+ autoload_under 'errors' do
47
+ autoload :HaltExecution
48
+ end
49
+
50
+ autoload_under 'meta' do
51
+ autoload :AbstractRunner
52
+ autoload :BufferInteraction
53
+ autoload :DisablePaging
54
+ autoload :HasSolrAttributes
55
+ autoload :IndifferentOptions
56
+ autoload :SetGlobalOptions
57
+ autoload :OptionDefinition
58
+ autoload :OptionMapping
59
+ autoload :Pathlike
60
+ autoload :Utility
61
+ autoload :WrapsDirectory
62
+ autoload :WrapsPath
63
+ end
64
+
34
65
  class << self
35
- TEMPLATE_PATH = Pathname.new(File.dirname(__FILE__)).join('files')
66
+ delegate :with_zookeeper, to: :configuration
36
67
 
37
- # @param [String] path
38
- # @raise [Errno::ENOENT] if undefined template
39
- # @return [String] contents of file
40
- def template(path)
41
- TEMPLATE_PATH.join(path).read
68
+ attr_lazy_reader :buffer do
69
+ SolrMakr::Commands::Buffer.new
70
+ end
71
+
72
+ delegate :logger, to: :buffer
73
+
74
+ attr_lazy_reader :configuration do
75
+ SolrMakr::Configuration.new
76
+ end
77
+
78
+ attr_lazy_reader :root do
79
+ Pathname.new(__dir__)
80
+ end
81
+
82
+ attr_lazy_reader :files do
83
+ root.join('solr_makr', 'files')
84
+ end
85
+
86
+ attr_lazy_reader :default_configset do
87
+ files.join('default-configset')
88
+ end
89
+
90
+ attr_lazy_reader :local_configuration do
91
+ SolrMakr::LocalConfiguration
42
92
  end
43
93
  end
44
94
  end
95
+
96
+ Commander::Command::Options.prepend SolrMakr::IndifferentOptions
97
+ Commander::UI.singleton_class.prepend SolrMakr::DisablePaging
@@ -2,60 +2,40 @@ module SolrMakr
2
2
  class Application
3
3
  include Commander::Methods
4
4
 
5
- NAME = 'solr-makr'
5
+ # @param [IO, File, #write] output
6
+ def initialize(output: STDOUT)
7
+ @output = output
6
8
 
7
- def run
8
- program :name, NAME
9
- program :version, SolrMakr::VERSION
10
- program :description, 'Create a solr core programmatically'
11
- program :help, 'Author', 'Alexa Grey <alexag@hranswerlink.com>'
12
- program :help_formatter, Commander::HelpFormatter::TerminalCompact
13
-
14
- default_command :help
15
-
16
- global_option '-d', '--solr-home DIR', 'Path to the solr home directory'
17
- global_option '-p', '--solr-port PORT', Integer, 'Port to use to communicate with the solr API'
18
- global_option '-H', '--solr-host HOST', String, 'Host [default localhost]'
19
- global_option '-V', '--verbose', 'Show verbose output.'
20
-
21
- command :create do |c|
22
- c.syntax = "#{NAME} create NAME"
23
-
24
- c.description = "Create and register a solr core."
25
-
26
- c.when_called Commands::CreateCore, :run!
27
- end
28
-
29
- command :list do |c|
30
- c.syntax = "#{NAME} list"
31
-
32
- c.description = "List installed solr cores."
33
-
34
- c.when_called Commands::ListCores, :run!
35
- end
9
+ @exit_status = 0
10
+ end
36
11
 
37
- command :destroy do |c|
38
- c.syntax = "#{NAME} destroy NAME"
12
+ attr_reader :output
13
+ attr_reader :exit_status
39
14
 
40
- c.description = "Unload and remove a solr core."
15
+ delegate :configuration, to: SolrMakr
41
16
 
42
- c.when_called Commands::DestroyCore, :run!
17
+ def run
18
+ program :name, SolrMakr::BIN_NAME
19
+ program :version, SolrMakr::VERSION
20
+ program :description, 'Create and manage solr collections via CLI'
21
+ program :help, 'Author', 'Alexa Grey <alexag@hranswerlink.com>'
43
22
 
44
- c.option '--purge', 'Purge the solr core\'s instance directory'
45
- end
23
+ default_command :help
46
24
 
47
- command :yaml do |c|
48
- c.syntax = "#{NAME} yaml NAME"
25
+ global_option '-Z', '--zookeeper HOST', String, "Zookeeper host(s) [default: #{configuration.zookeeper}]"
26
+ global_option '-p', '--solr-port PORT', Integer, "Port solr is running on [default: #{configuration.solr_port}]"
27
+ global_option '-H', '--solr-host HOST', String, "Solr Host [default: #{configuration.solr_host}]"
28
+ global_option '-V', '--verbose', "Show verbose output."
49
29
 
50
- c.description = 'Print a YAML config for sunspot to stdout'
30
+ ApplicationDispatch.generate_commands! self
51
31
 
52
- c.when_called Commands::WriteYaml, :run!
32
+ run!.tap do |buffer|
33
+ if buffer.kind_of?(SolrMakr::Commands::Buffer)
34
+ output.write buffer.to_s
53
35
 
54
- c.option '-e', '--env ENVIRONMENT', 'Environment name'
55
- c.option '--log-level LEVEL', String, 'Log level'
36
+ @exit_status = buffer.exit_status
37
+ end
56
38
  end
57
-
58
- run!
59
39
  end
60
40
  end
61
41
  end
@@ -0,0 +1,182 @@
1
+ module SolrMakr
2
+ class ApplicationAction
3
+ include Virtus.model strict: true
4
+
5
+ attribute :name, String
6
+ attribute :command_name, String, default: :default_command_name
7
+ attribute :description, String, default: ''
8
+ attribute :requires_name, Boolean, default: false
9
+ attribute :multiple_names, Boolean, default: false
10
+ attribute :required_options, Set, default: proc { Set.new }
11
+ attribute :specifies_configset, Boolean, default: false
12
+ attribute :interaction, String, default: :derive_default_interaction
13
+
14
+ delegate :configuration, to: SolrMakr
15
+
16
+ # @return [SolrMakr::Commands::Buffer]
17
+ def execute(args, options)
18
+ buffer = SolrMakr::Commands::Buffer.new
19
+
20
+ execution = SolrMakr::Commands::Execute.run action: self, command_args: args, command_options: options
21
+
22
+ buffer.import execution.buffer
23
+
24
+ unless execution.valid?
25
+ execution.errors.full_messages.each do |error|
26
+ buffer.error error
27
+ end
28
+ end
29
+
30
+ return buffer
31
+ end
32
+
33
+ def configure(&block)
34
+ initial_configuration
35
+
36
+ yield Configurator.new(self) if block_given?
37
+
38
+ return self
39
+ end
40
+
41
+ # @param [Commander::Command] command
42
+ # @return [void]
43
+ def setup_command!(command)
44
+ command.syntax = "#{SolrMakr::BIN_NAME} #{command_name}"
45
+
46
+ if description.present?
47
+ command.description = description
48
+ end
49
+
50
+ add_options_to! command
51
+
52
+ format_command! command
53
+
54
+ command.when_called self, :execute
55
+ end
56
+
57
+ def requires?(option_name)
58
+ option_mapping[option_name].try(:required?)
59
+ end
60
+
61
+ # @api private
62
+ # @param [<String>] args
63
+ # @param [Commander::Command::Options] options
64
+ # @return [void]
65
+ def set_default_options!(args, options)
66
+ option_mapping.each do |option|
67
+ option.set_default!(args, options)
68
+ end
69
+
70
+ if default_options_formatter.respond_to?(:call)
71
+ instance_exec(args, options, &default_options_formatter)
72
+ end
73
+
74
+ return nil
75
+ end
76
+
77
+ # @api private
78
+ # @param [Commander::Command] command
79
+ # @return [void]
80
+ def format_command!(command)
81
+ if command_formatter.respond_to?(:call)
82
+ command_formatter.call(command)
83
+ end
84
+
85
+ return nil
86
+ end
87
+
88
+ # @!attribute [r] interaction_klass
89
+ # @return [Class]
90
+ attr_lazy_reader :interaction_klass do
91
+ "SolrMakr::Commands::#{interaction}".constantize
92
+ end
93
+
94
+ # @!attribute [rw] default_options_formatter
95
+ # @api private
96
+ # @return [Proc]
97
+ attr_accessor :default_options_formatter
98
+
99
+ # @!attribute [rw] command_formatter
100
+ # @api private
101
+ # @return [Proc]
102
+ attr_accessor :command_formatter
103
+
104
+ attr_lazy_reader :option_mapping do
105
+ SolrMakr::OptionMapping.new
106
+ end
107
+
108
+ # @param [Symbol] name
109
+ # @param [Hash] attributes
110
+ # @yieldparam [SolrMakr::OptionDefinition] option
111
+ # @yieldreturn [void]
112
+ def add_option!(name, **attributes, &configurator)
113
+ attributes[:name] = name
114
+
115
+ option = SolrMakr::OptionDefinition.new(attributes)
116
+
117
+ yield option if block_given?
118
+
119
+ option_mapping << option
120
+
121
+ return nil
122
+ end
123
+
124
+ # @api private
125
+ # @return [String]
126
+ def derive_default_interaction
127
+ name.to_s.classify
128
+ end
129
+
130
+ # @param [Commander::Command] command
131
+ # @return [void]
132
+ def add_options_to!(command)
133
+ option_mapping.add_to_command! command
134
+ end
135
+
136
+ # @api private
137
+ # @return [String]
138
+ def default_command_name
139
+ name.to_s.gsub(/_collections?\z/, '').humanize.downcase
140
+ end
141
+
142
+ # @!attribute [r] initial_configuration
143
+ # @return [nil]
144
+ attr_lazy_reader :initial_configuration do
145
+ if requires_name?
146
+ add_option! :name, short_name: 'n', description: 'Name of the collection', type: String, required: true
147
+ end
148
+
149
+ if specifies_configset?
150
+ add_option! :configset, value_name: 'NAME', description: 'Name of the configset', type: String, required: true do |c|
151
+ c.default_value = proc { SolrMakr.configuration.default_configset }
152
+ end
153
+ end
154
+ end
155
+
156
+ # @api private
157
+ class Configurator
158
+ def initialize(action)
159
+ @action = action
160
+ end
161
+
162
+ def description(new_description)
163
+ @action.description = new_description.to_s
164
+ end
165
+
166
+ def format_command(&formatter)
167
+ @action.command_formatter = formatter
168
+ end
169
+
170
+ def default_options(&formatter)
171
+ @action.default_options_formatter = formatter
172
+ end
173
+
174
+ def option(name, **attributes, &configurator)
175
+ @action.add_option!(name, **attributes, &configurator)
176
+ end
177
+
178
+ private
179
+ attr_reader :action
180
+ end
181
+ end
182
+ end