gemmyrb 0.0.9 → 0.1.0
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.
- checksums.yaml +4 -4
- data/lib/gemmy/cli.rb +7 -0
- data/lib/gemmy/components/cache.rb +19 -12
- data/lib/gemmy/patches/hash_patch.rb +44 -4
- data/lib/gemmy/tasks/make_gem.rb +6 -10
- data/lib/gemmy/version.rb +1 -1
- data/lib/gemmy.rb +9 -2
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74c01cebf13722a15f5802d2d3264020e3dec979
|
4
|
+
data.tar.gz: 86990ea4e3d8bf73a8c0b8bbe99eb1923ca9e2be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b81ed9ba77a689af77d892a1ef609c99d98a6c5a130e898f8fbb684d60908377046ee196ab1101b0227dfb8af5c39b4b90a2ab0cd0b7340cffbc21adf160c689
|
7
|
+
data.tar.gz: 95fcd4ba24e28536747f092f1711137414db55c9756fceacea866fa9b4369aafd24793ea79d7707fd0e98daa8e179d179b1046c548ba5c516323031730fb3144
|
data/lib/gemmy/cli.rb
CHANGED
@@ -3,6 +3,7 @@ class Gemmy::Components::Cache < Hash
|
|
3
3
|
using Gemmy.patch("hash/i/persisted")
|
4
4
|
using Gemmy.patch("hash/i/bury")
|
5
5
|
using Gemmy.patch("object/i/home")
|
6
|
+
using Gemmy.patch("object/i/m")
|
6
7
|
|
7
8
|
CachePath = ENV["GEMMY_CACHE_PATH"] || "#{home}/gemmy/caches"
|
8
9
|
|
@@ -10,9 +11,9 @@ class Gemmy::Components::Cache < Hash
|
|
10
11
|
`mkdir -p #{CachePath}`
|
11
12
|
end
|
12
13
|
|
13
|
-
def initialize(db_name)
|
14
|
-
@db =
|
15
|
-
@
|
14
|
+
def initialize(db_name, hash={})
|
15
|
+
@db = hash.persisted "#{CachePath}/#{db_name}.yaml"
|
16
|
+
@db.set_state hash
|
16
17
|
end
|
17
18
|
|
18
19
|
def get_or_set(*keys, &blk)
|
@@ -24,26 +25,32 @@ class Gemmy::Components::Cache < Hash
|
|
24
25
|
result
|
25
26
|
end
|
26
27
|
|
28
|
+
def data
|
29
|
+
@db.data
|
30
|
+
end
|
31
|
+
|
27
32
|
def keys
|
28
33
|
@db.data.keys
|
29
34
|
end
|
30
35
|
|
31
|
-
def get(*keys
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
def get(*keys)
|
37
|
+
@db.dig *keys
|
38
|
+
end
|
39
|
+
|
40
|
+
def set_state(hash)
|
41
|
+
@db.set_state hash
|
42
|
+
each_key &m(:delete)
|
43
|
+
deep_merge! hash
|
39
44
|
end
|
40
45
|
|
41
46
|
def set(*keys, val)
|
47
|
+
Gemmy.patch("hash/i/bury").bury(self, *keys, val)
|
42
48
|
@db.set(*keys, val)
|
43
49
|
end
|
44
50
|
|
45
51
|
def clear
|
46
|
-
|
52
|
+
each_key &m(:delete)
|
47
53
|
@db.clear
|
48
54
|
end
|
55
|
+
|
49
56
|
end
|
@@ -57,6 +57,40 @@ module Gemmy::Patches::HashPatch
|
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
+
module RecursiveMap
|
61
|
+
def recursive_map(&blk)
|
62
|
+
Gemmy.patch("hash/i/recursive_map").recursive_map(self, &blk)
|
63
|
+
end
|
64
|
+
def self.recursive_map(hash, &blk)
|
65
|
+
hash.reduce({}) do |result, (key, val)|
|
66
|
+
if val.is_a?(Hash)
|
67
|
+
result[key] = recursive_map(val, &blk)
|
68
|
+
else
|
69
|
+
result[key] = blk.call(bal)
|
70
|
+
end
|
71
|
+
result
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
module RecursiveKeys
|
77
|
+
# returns an array of arrays. Each sub-array is a list of keys.
|
78
|
+
# This list can be passed to Hash#dig with a splat operator.
|
79
|
+
def recursive_keys
|
80
|
+
Gemmy.patch("hash/i/recursive_keys").recursive_keys self
|
81
|
+
end
|
82
|
+
def self.recursive_keys hash
|
83
|
+
toplevel_keys = hash.keys.map &Array.method(:wrap)
|
84
|
+
toplevel_keys.map do |key_array|
|
85
|
+
if hash[key].is_a? Hash
|
86
|
+
key_array.concat recursive_keys hash[key]
|
87
|
+
else
|
88
|
+
key_array
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
60
94
|
module Rekey
|
61
95
|
# facets
|
62
96
|
# rekey according to a block, i.e. {a: 1}.rekey &:to_s
|
@@ -205,10 +239,10 @@ module Gemmy::Patches::HashPatch
|
|
205
239
|
#
|
206
240
|
module Bury
|
207
241
|
def bury *args
|
208
|
-
Gemmy.patch("hash/i/bury").
|
242
|
+
Gemmy.patch("hash/i/bury").bury self, *args
|
209
243
|
end
|
210
244
|
# The bury method, taking the input hash as a parameter
|
211
|
-
def self.
|
245
|
+
def self.bury(caller_hash, *args)
|
212
246
|
if args.count < 2
|
213
247
|
raise ArgumentError.new("2 or more arguments required")
|
214
248
|
elsif args.count == 2
|
@@ -216,7 +250,7 @@ module Gemmy::Patches::HashPatch
|
|
216
250
|
else
|
217
251
|
arg = args.shift
|
218
252
|
caller_hash[arg] = {} unless caller_hash[arg]
|
219
|
-
|
253
|
+
bury(caller_hash[arg], *args) unless args.empty?
|
220
254
|
end
|
221
255
|
caller_hash
|
222
256
|
end
|
@@ -292,7 +326,7 @@ module Gemmy::Patches::HashPatch
|
|
292
326
|
disk ? @store.transaction { @store[:data].dig(*keys) } : dig(*keys)
|
293
327
|
end
|
294
328
|
def set(*keys, val)
|
295
|
-
bury = Gemmy::Patches::HashPatch::InstanceMethods::Bury.method(:
|
329
|
+
bury = Gemmy::Patches::HashPatch::InstanceMethods::Bury.method(:bury)
|
296
330
|
bury.call(self, *keys, val)
|
297
331
|
@store.transaction do
|
298
332
|
bury.call(@store[:data], *(keys + [val]))
|
@@ -302,6 +336,12 @@ module Gemmy::Patches::HashPatch
|
|
302
336
|
def data
|
303
337
|
@store.transaction { @store[:data] }
|
304
338
|
end
|
339
|
+
|
340
|
+
# This won't autovivify the hash automatically
|
341
|
+
def set_state(hash)
|
342
|
+
@store.transaction { @store[:data] = hash }
|
343
|
+
end
|
344
|
+
|
305
345
|
def clear
|
306
346
|
autovivified = Gemmy.patch("hash/i/autovivified")\
|
307
347
|
.method(:_autovivified)
|
data/lib/gemmy/tasks/make_gem.rb
CHANGED
@@ -51,7 +51,7 @@ class Gemmy::Tasks::MakeGem
|
|
51
51
|
|
52
52
|
attr_reader :name, :root_dir, :lib, :version_file, :main_file, :summary,
|
53
53
|
:author, :email, :gemspec_file, :class_name, :rubygems_version,
|
54
|
-
:gemfile
|
54
|
+
:gemfile, :url
|
55
55
|
|
56
56
|
private
|
57
57
|
|
@@ -103,10 +103,7 @@ class Gemmy::Tasks::MakeGem
|
|
103
103
|
def create_main_file
|
104
104
|
@main_file = "#{lib}/#{name}.rb"
|
105
105
|
main_text = <<-TXT.unindent
|
106
|
-
require '
|
107
|
-
require 'pry'
|
108
|
-
require 'active_support/all'
|
109
|
-
require 'thor'
|
106
|
+
require 'gemmy'
|
110
107
|
module #{class_name}
|
111
108
|
end
|
112
109
|
Gem.find_files("#{name}/**/*.rb").each &method(:require)
|
@@ -123,6 +120,7 @@ class Gemmy::Tasks::MakeGem
|
|
123
120
|
@summary = _prompt "add a one-line summary."
|
124
121
|
@author = _prompt "enter the author's name"
|
125
122
|
@email = _prompt "enter the author's email"
|
123
|
+
@url = _prompt "enter the homepage url"
|
126
124
|
@rubygems_version = `gem -v`.chomp
|
127
125
|
self
|
128
126
|
end
|
@@ -144,15 +142,13 @@ class Gemmy::Tasks::MakeGem
|
|
144
142
|
s.platform = Gem::Platform::RUBY
|
145
143
|
s.authors = ["#{author}"]
|
146
144
|
s.email = '#{email}'
|
147
|
-
s.
|
145
|
+
s.required_ruby_version = '~> 2.3'
|
146
|
+
s.homepage = "#{url}"
|
148
147
|
s.files = Dir["lib/**/*.rb", "bin/*", "**/*.md", "LICENSE"]
|
149
148
|
s.require_path = 'lib'
|
150
149
|
s.required_rubygems_version = ">= #{rubygems_version}"
|
151
150
|
s.executables = Dir["bin/*"].map &File.method(:basename)
|
152
|
-
s.add_dependency
|
153
|
-
s.add_dependency 'activesupport', '~> 4.2', '>= 4.2.7'
|
154
|
-
s.add_dependency 'pry', '~> 0.10.4'
|
155
|
-
s.add_dependency 'thor', '~> 0.19.4'
|
151
|
+
s.add_dependency 'gemmyrb'
|
156
152
|
s.license = 'MIT'
|
157
153
|
end
|
158
154
|
TXT
|
data/lib/gemmy/version.rb
CHANGED
data/lib/gemmy.rb
CHANGED
@@ -45,10 +45,13 @@ class Gemmy
|
|
45
45
|
.const_get(context_classname)
|
46
46
|
.const_get method_name.camelcase
|
47
47
|
end
|
48
|
+
singleton_class.send(:alias_method, :refinement, :patch)
|
49
|
+
|
48
50
|
|
49
51
|
def self.patches(*args)
|
50
52
|
Gemmy::Patches.class_refinements *args
|
51
53
|
end
|
54
|
+
singleton_class.send(:alias_method, :refinements, :patches)
|
52
55
|
|
53
56
|
# Get a constant,
|
54
57
|
# lookup on Gemmy::Constants
|
@@ -86,12 +89,16 @@ class Gemmy
|
|
86
89
|
end
|
87
90
|
[components, core_patches].flatten
|
88
91
|
end
|
92
|
+
singleton_class.send(:alias_method, :load, :load_globally)
|
89
93
|
end
|
90
94
|
|
95
|
+
|
91
96
|
Gem.find_files("gemmy/**/*.rb").sort_by do |x|
|
92
97
|
x.split("/").length
|
93
98
|
end.each &method(:require)
|
94
99
|
|
95
|
-
|
96
|
-
|
100
|
+
unless ENV["NO_G_MODE"]
|
101
|
+
# Alias for less typing
|
102
|
+
class G < Gemmy
|
103
|
+
end
|
97
104
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gemmyrb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- max pleaner
|
@@ -98,16 +98,16 @@ dependencies:
|
|
98
98
|
name: sentence_interpreter
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0
|
103
|
+
version: '0'
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0
|
110
|
+
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: awesome_print
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|