frazzle 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 352eda37ebf020ca7924f653b5ddcd7974b8b11c
4
+ data.tar.gz: 088c02ec046f2333d43c16790836d1cd550a16d3
5
+ SHA512:
6
+ metadata.gz: a4f4d8d7f5b9f17f64ad3ce2c5693b9dda04dfa36fe4a9255c2bbeaea9dd2cabe4d6b01cbfc0a0f507913913e9ba7a62969f90391332e5f388bb99f119ff8ddf
7
+ data.tar.gz: 8eae245d72fe68fdb4d9105431f3e3c911214ee8327a90dad704dbaaf602fa34741cb7bda26790f18e1e7e08dcdf1ed9caccad0bac604b532eaf1410a6ddb30d
data/README.md ADDED
@@ -0,0 +1,42 @@
1
+ frazzle
2
+ =========
3
+
4
+ Simple plugin-manager facilitating ruby gems.
5
+
6
+ ## Introduction
7
+ Lets say we want to implement a pizzaria without hardcoding recipes or
8
+ ovens. New recipes or ovens should be picked out automatically as soon
9
+ as a fitting gem is installed.
10
+
11
+ For this we would have to create the following "plugin" gems for the
12
+ recipes:
13
+
14
+ - pizzaria_margerita_recipe
15
+ - pizzaria_tonno_recipe
16
+ - pizzaria_diavola_recipe
17
+
18
+ and for the ovens:
19
+
20
+ - pizzaria_wood_oven
21
+ - pizzaria_electric_oven
22
+
23
+ The pizzaria application could then find all recipes and call them with:
24
+
25
+ registry = Frazzle::Registry.new('pizzaria', '_', '_')
26
+ plugins = registry.get_plugins('recipe')
27
+ plugins.each do |plugin|
28
+ registry.load_plugin(plugin, Context.new)
29
+ end
30
+
31
+ The interesting part is the second argument to load_plugin.
32
+ Frazzle executes the file lib/gemname/plugin.rb with instance oval on
33
+ this object. You are free to come up with a plugin mechanism you like.
34
+
35
+ ## Conventions
36
+ As seens in the intrductionary example, the plugin system has some
37
+ conventions hardcoded.
38
+
39
+ 1. The gems that can be used as plugin must follow a nameing scheme:
40
+ `application_plugin_type`. The seapator between application,
41
+ plugin and type can be configured.
42
+ 2. Frazzle always instance-evals the file lib/gemname/plugin.rb.
@@ -9,9 +9,9 @@ class PizzaFactory
9
9
 
10
10
  def run()
11
11
  pizzas = [ "Margerita", "Fungi", "Scampi" ]
12
- plugins = @registry.get_plugins("oven")
12
+ plugins = @registry.plugins("oven")
13
13
  plugins.each do |plugin|
14
- oven = @registry.load_plugin(plugin).create({ :pizza_type => pizzas.pop })
14
+ oven = plugin.load.create({ :pizza_type => pizzas.pop })
15
15
  oven.make_pizza()
16
16
  end
17
17
  end
data/frazzle.gemspec CHANGED
@@ -14,5 +14,5 @@ spec = Gem::Specification.new do |s|
14
14
  s.files = `git ls-files`.split($\)
15
15
  s.require_path = "lib"
16
16
  s.has_rdoc = false
17
- s.extra_rdoc_files = ["README"]
17
+ s.extra_rdoc_files = ["README.md"]
18
18
  end
@@ -18,6 +18,17 @@ module Frazzle
18
18
  # ******************************************************************************************************
19
19
  class Registry
20
20
 
21
+ class Plugin
22
+ attr_reader :name
23
+ def initialize(registry, name)
24
+ @registry = registry
25
+ @name = name
26
+ end
27
+ def load(context=Object.new)
28
+ @registry.load_plugin(@name, context)
29
+ end
30
+ end
31
+
21
32
  def initialize(base_name, base_separator='-', plugin_separator='-')
22
33
  @base_name = base_name
23
34
  @base_separator = base_separator
@@ -25,11 +36,19 @@ class Registry
25
36
  end
26
37
  attr_accessor :base_name
27
38
 
39
+ def plugins(plugin_type)
40
+ get_plugins(plugin_type).map{|name|Plugin.new(self, name)}
41
+ end
42
+
28
43
  def get_plugins(plugin_type)
29
44
  get_names(get_plugin_gems(plugin_type))
30
45
  end
31
46
 
32
47
 
48
+ def all_plugin
49
+ get_all_plugins.map{|name|Plugin.new(self, name)}
50
+ end
51
+
33
52
  def get_all_plugins
34
53
  get_names(find_gems do |spec|
35
54
  spec.name =~ /#{@base_name}#{@base_separator}.*/
@@ -1,3 +1,3 @@
1
1
  module Frazzle
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
File without changes
metadata CHANGED
@@ -1,33 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: frazzle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
5
- prerelease:
4
+ version: 0.1.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Kevin russ
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-09-10 00:00:00.000000000 Z
11
+ date: 2016-02-07 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: plugin registry based on gems
15
14
  email: kevin.russ@esrlabs.com
16
15
  executables: []
17
16
  extensions: []
18
17
  extra_rdoc_files:
19
- - README
18
+ - README.md
20
19
  files:
21
- - .gitignore
22
- - .rvmrc
23
- - Gemfile
24
- - Gemfile.lock
20
+ - ".gitignore"
21
+ - ".rvmrc"
25
22
  - LICENCE
26
- - README
27
- - Rakefile.rb
23
+ - README.md
28
24
  - example/.rvmrc
29
- - example/Gemfile
30
- - example/Gemfile.lock
31
25
  - example/Rakefile.rb
32
26
  - example/pizza-electric-oven/Rakefile.rb
33
27
  - example/pizza-electric-oven/gemspec
@@ -43,28 +37,28 @@ files:
43
37
  - lib/frazzle/core/registry.rb
44
38
  - lib/frazzle/frazzle.rb
45
39
  - lib/frazzle/version.rb
40
+ - rakefile.rb
46
41
  homepage:
47
42
  licenses: []
43
+ metadata: {}
48
44
  post_install_message:
49
45
  rdoc_options: []
50
46
  require_paths:
51
47
  - lib
52
48
  required_ruby_version: !ruby/object:Gem::Requirement
53
- none: false
54
49
  requirements:
55
- - - ! '>='
50
+ - - ">="
56
51
  - !ruby/object:Gem::Version
57
52
  version: '0'
58
53
  required_rubygems_version: !ruby/object:Gem::Requirement
59
- none: false
60
54
  requirements:
61
- - - ! '>='
55
+ - - ">="
62
56
  - !ruby/object:Gem::Version
63
57
  version: '0'
64
58
  requirements: []
65
59
  rubyforge_project:
66
- rubygems_version: 1.8.24
60
+ rubygems_version: 2.5.1
67
61
  signing_key:
68
- specification_version: 3
62
+ specification_version: 4
69
63
  summary: gem plugin-manager using extention-points
70
64
  test_files: []
data/Gemfile DELETED
@@ -1,2 +0,0 @@
1
- source :rubygems
2
- gem 'gem-release'
data/Gemfile.lock DELETED
@@ -1,10 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- gem-release (0.3.1)
5
-
6
- PLATFORMS
7
- ruby
8
-
9
- DEPENDENCIES
10
- gem-release
data/README DELETED
@@ -1 +0,0 @@
1
- gem plugin-manager using extention-points
data/example/Gemfile DELETED
@@ -1,2 +0,0 @@
1
- source :rubygems
2
- gem 'frazzle'
data/example/Gemfile.lock DELETED
@@ -1,10 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- frazzle (0.1.0)
5
-
6
- PLATFORMS
7
- ruby
8
-
9
- DEPENDENCIES
10
- frazzle