solr_makr 0.0.4 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
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