missile_emitter 0.3.13 → 0.3.19

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
  SHA256:
3
- metadata.gz: 382a9efb5b134490f1dc7ecd6fafbca0de7538f919c5ac3008924ae75fcc81f7
4
- data.tar.gz: af37fa3f0472722368fa00e66f53a993654254dc692ffd557e08ab41d5d82327
3
+ metadata.gz: 525f92760c025042f96e1f370ad98633d46305238bc30c7041cc3c2c57fb247a
4
+ data.tar.gz: f4dd1e712152f896653f7c2c9dd45974eda854c44e28047704767a5333091c9a
5
5
  SHA512:
6
- metadata.gz: 0ed03ce48d5d7d6129561840bd03347f0b34f5085fa13becada1a066d782e7be365e28dbf95e1c8f5fa5d02a94e92664f1fc2732e13aeef8844a9daff84b20ed
7
- data.tar.gz: f38aec78ffddc890aa6398b87e31f047a3e3561b2fbc62849238a1c1d69ced187439edba83aa8b35a62a58f753b31ac40ab7ffff68a3a30bce56c6eccaef93b1
6
+ metadata.gz: 9593b253dc11e5d109bb2334b4ed2b0b18e3052139359812bc515216c9803cefe07d7e7652c13566839eab4dd0680c4b00292d8f8335c65d7885eb37ba479812
7
+ data.tar.gz: 55572f2c8b620fdaac999df889ff23a5d085e7878ddfae020812ce4849895e6d4dcfbb3c29d8a68d42bb1f9b875c353f74672b826fa314122edb3f94bb1cd4f1
@@ -1,31 +1,46 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- missile_emitter (0.3.13)
4
+ missile_emitter (0.3.19)
5
+ activesupport
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
8
9
  specs:
10
+ activesupport (6.0.3.1)
11
+ concurrent-ruby (~> 1.0, >= 1.0.2)
12
+ i18n (>= 0.7, < 2)
13
+ minitest (~> 5.1)
14
+ tzinfo (~> 1.1)
15
+ zeitwerk (~> 2.2, >= 2.2.2)
9
16
  coderay (1.1.2)
17
+ concurrent-ruby (1.1.6)
10
18
  diff-lcs (1.3)
11
- method_source (0.9.2)
12
- pry (0.12.2)
13
- coderay (~> 1.1.0)
14
- method_source (~> 0.9.0)
15
- rake (10.5.0)
19
+ i18n (1.8.2)
20
+ concurrent-ruby (~> 1.0)
21
+ method_source (1.0.0)
22
+ minitest (5.14.1)
23
+ pry (0.13.1)
24
+ coderay (~> 1.1)
25
+ method_source (~> 1.0)
26
+ rake (13.0.1)
16
27
  rspec (3.9.0)
17
28
  rspec-core (~> 3.9.0)
18
29
  rspec-expectations (~> 3.9.0)
19
30
  rspec-mocks (~> 3.9.0)
20
- rspec-core (3.9.1)
21
- rspec-support (~> 3.9.1)
22
- rspec-expectations (3.9.0)
31
+ rspec-core (3.9.2)
32
+ rspec-support (~> 3.9.3)
33
+ rspec-expectations (3.9.2)
23
34
  diff-lcs (>= 1.2.0, < 2.0)
24
35
  rspec-support (~> 3.9.0)
25
36
  rspec-mocks (3.9.1)
26
37
  diff-lcs (>= 1.2.0, < 2.0)
27
38
  rspec-support (~> 3.9.0)
28
- rspec-support (3.9.2)
39
+ rspec-support (3.9.3)
40
+ thread_safe (0.3.6)
41
+ tzinfo (1.2.7)
42
+ thread_safe (~> 0.1)
43
+ zeitwerk (2.3.0)
29
44
 
30
45
  PLATFORMS
31
46
  ruby
@@ -34,8 +49,8 @@ DEPENDENCIES
34
49
  bundler (~> 2.0)
35
50
  missile_emitter!
36
51
  pry
37
- rake (~> 10.0)
52
+ rake (~> 13.0)
38
53
  rspec (~> 3.0)
39
54
 
40
55
  BUNDLED WITH
41
- 2.1.2
56
+ 2.1.4
@@ -1,3 +1,4 @@
1
+ require "active_support/core_ext/string"
1
2
  require "missile_emitter/version"
2
3
  require "missile_emitter/battle_field"
3
4
 
@@ -16,11 +17,11 @@ module MissileEmitter
16
17
  attr_accessor :mapping
17
18
 
18
19
  def exec(namespace, &block)
19
- raise Error.new("需要提供代码块") unless block_given?
20
+ raise Error, '需要提供代码块' unless block
20
21
 
21
22
  context = block.binding.receiver
22
23
 
23
- raise Error.new("只能再具名模块中调用") unless context.instance_of?(Module) && context.name
24
+ raise Error, '只能再具名模块中调用' unless context.instance_of?(Module) && context.name
24
25
 
25
26
  mimic_method context, namespace: namespace
26
27
 
@@ -32,62 +33,22 @@ module MissileEmitter
32
33
  def mimic_method(context, namespace: true)
33
34
  path = context.name
34
35
 
35
- ns = deconstantize path
36
- name = demodulize path
36
+ ns = path.deconstantize
37
+ name = path.demodulize
37
38
 
38
39
  # 处理嵌套模块
39
- container = !ns.empty? && namespace ? constantize(ns) : Kernel
40
+ container = !ns.empty? && namespace ? ns.constantize : Kernel
40
41
  action = container == Kernel ? 'define_method' : 'define_singleton_method'
41
42
 
42
43
  container.send action, name do |*args, &missile|
43
44
  klass = missile.binding.receiver
44
45
  battle_field = BattleField.new klass, *args, MissileEmitter.mapping[context]
45
- battle_field.emit! &missile
46
+ battle_field.emit!(&missile)
46
47
 
47
48
  context
48
49
  end
49
50
  end
50
51
 
51
- def demodulize(path)
52
- path = path.to_s
53
-
54
- if i = path.rindex("::")
55
- path[(i + 2)..-1]
56
- else
57
- path
58
- end
59
- end
60
-
61
- def deconstantize(path)
62
- path.to_s[0, path.rindex("::") || 0]
63
- end
64
-
65
- def constantize(camel_cased_word)
66
- names = camel_cased_word.split("::")
67
-
68
- Object.const_get(camel_cased_word) if names.empty?
69
-
70
- names.shift if names.size > 1 && names.first.empty?
71
-
72
- names.inject(Object) do |constant, name|
73
- if constant == Object
74
- constant.const_get(name)
75
- else
76
- candidate = constant.const_get(name)
77
- next candidate if constant.const_defined?(name, false)
78
- next candidate unless Object.const_defined?(name)
79
-
80
- constant = constant.ancestors.inject(constant) do |const, ancestor|
81
- break const if ancestor == Object
82
- break ancestor if ancestor.const_defined?(name, false)
83
- const
84
- end
85
-
86
- constant.const_get(name, false)
87
- end
88
- end
89
- end
90
-
91
52
  end
92
53
 
93
54
  end
@@ -1,3 +1,5 @@
1
+ require 'set'
2
+
1
3
  module MissileEmitter
2
4
  module Configurable
3
5
 
@@ -27,15 +29,15 @@ module MissileEmitter
27
29
  end
28
30
  end
29
31
 
30
- # 获取所有配置项名称:Klass.option_names ---> [:logo, copyright, ...]
32
+ # 获取所有配置项名称:Configurable.option_names_for(Klass) ---> [:logo, copyright, ...]
31
33
  define_singleton_method :option_names_for do |klass|
32
34
  mapping.fetch klass, []
33
35
  end
34
36
 
35
- # 获取所有配置:Klass.options ---> {logo: '', copyright: '', ...}
37
+ # 获取所有配置:Configurable.options_for(Klass) ---> {logo: '', copyright: '', ...}
36
38
  define_singleton_method :options_for do |klass|
37
- option_names(klass).each_with_object({}) do |key, result|
38
- result[key] = send key
39
+ option_names_for(klass).each_with_object({}) do |key, result|
40
+ result[key] = klass.send key
39
41
  end
40
42
  end
41
43
 
@@ -1,3 +1,5 @@
1
+ require 'rubygems'
2
+
1
3
  module MissileEmitter
2
4
  module Searchable
3
5
 
@@ -9,14 +11,20 @@ module MissileEmitter
9
11
  (conditions[klass] ||= {}.with_indifferent_access)[key] = block
10
12
  end
11
13
 
14
+ has_underline_method = Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.0')
15
+
12
16
  define_method :search do |hash|
13
17
  hash.reduce all do |relation, (key, value)|
14
18
  next relation if value.blank? # ignore empty value
15
19
 
16
20
  if filter = conditions.fetch(self, {})[key]
21
+ # Inside the scope block, You can get value through calling the _ method
17
22
  relation.extending do
18
- # Just for fun :) With Ruby >= 2.7 you can use _1 instead of _.
23
+ # Just for fun :)
19
24
  define_method(:_) { value }
25
+ # With ruby >= 2.7 you can use _1 instead of _
26
+ # Polyfill for the earlier version
27
+ alias_method :_1, :_ unless has_underline_method
20
28
  end.instance_exec(value, &filter)
21
29
  elsif column_names.include?(key.to_s)
22
30
  relation.where key => value
@@ -1,3 +1,3 @@
1
1
  module MissileEmitter
2
- VERSION = "0.3.13"
2
+ VERSION = "0.3.19"
3
3
  end
@@ -29,7 +29,9 @@ Gem::Specification.new do |spec|
29
29
  spec.require_paths = ["lib"]
30
30
 
31
31
  spec.add_development_dependency "bundler", "~> 2.0"
32
- spec.add_development_dependency "rake", "~> 10.0"
32
+ spec.add_development_dependency "rake", "~> 13.0"
33
33
  spec.add_development_dependency "rspec", "~> 3.0"
34
34
  spec.add_development_dependency "pry"
35
+
36
+ spec.add_dependency "activesupport"
35
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: missile_emitter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.13
4
+ version: 0.3.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jerry Chen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-15 00:00:00.000000000 Z
11
+ date: 2020-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: activesupport
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: 'Ruby元编程小工具,让你能在类定义(class definition)级别触发 method_missing 事件,同时不用担心潜在的命名冲突。 '
70
84
  email:
71
85
  - code@coding-class.com