umwelt 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.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +46 -0
  3. data/.gitignore +8 -0
  4. data/.rubocop.yml +28 -0
  5. data/.ruby-gemset +1 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +7 -0
  8. data/CODE_OF_CONDUCT.md +74 -0
  9. data/Gemfile +8 -0
  10. data/Gemfile.lock +79 -0
  11. data/LICENSE.txt +21 -0
  12. data/README.md +75 -0
  13. data/Rakefile +12 -0
  14. data/bin/console +14 -0
  15. data/bin/setup +8 -0
  16. data/bin/umwelt +7 -0
  17. data/lib/umwelt.rb +23 -0
  18. data/lib/umwelt/abstract.rb +7 -0
  19. data/lib/umwelt/abstract/file.rb +7 -0
  20. data/lib/umwelt/abstract/file/restore.rb +48 -0
  21. data/lib/umwelt/abstract/file/store.rb +44 -0
  22. data/lib/umwelt/abstract/mapper.rb +17 -0
  23. data/lib/umwelt/cli.rb +6 -0
  24. data/lib/umwelt/cli/commands.rb +15 -0
  25. data/lib/umwelt/cli/commands/clone.rb +16 -0
  26. data/lib/umwelt/cli/commands/convey.rb +57 -0
  27. data/lib/umwelt/cli/commands/pull.rb +11 -0
  28. data/lib/umwelt/cli/commands/version.rb +9 -0
  29. data/lib/umwelt/command.rb +6 -0
  30. data/lib/umwelt/command/convey.rb +84 -0
  31. data/lib/umwelt/episode.rb +7 -0
  32. data/lib/umwelt/episode/file.rb +7 -0
  33. data/lib/umwelt/episode/file/restore.rb +22 -0
  34. data/lib/umwelt/episode/file/store.rb +15 -0
  35. data/lib/umwelt/episode/mapper.rb +33 -0
  36. data/lib/umwelt/fragment.rb +6 -0
  37. data/lib/umwelt/fragment/mapper.rb +11 -0
  38. data/lib/umwelt/history.rb +10 -0
  39. data/lib/umwelt/history/aggregate.rb +49 -0
  40. data/lib/umwelt/history/file.rb +7 -0
  41. data/lib/umwelt/history/file/restore.rb +22 -0
  42. data/lib/umwelt/history/file/store.rb +15 -0
  43. data/lib/umwelt/history/follow.rb +32 -0
  44. data/lib/umwelt/history/mapper.rb +33 -0
  45. data/lib/umwelt/history/trace.rb +51 -0
  46. data/lib/umwelt/node.rb +46 -0
  47. data/lib/umwelt/node/build.rb +31 -0
  48. data/lib/umwelt/node/root.rb +6 -0
  49. data/lib/umwelt/node/space.rb +6 -0
  50. data/lib/umwelt/phase.rb +6 -0
  51. data/lib/umwelt/phase/mapper.rb +18 -0
  52. data/lib/umwelt/project.rb +7 -0
  53. data/lib/umwelt/project/file.rb +7 -0
  54. data/lib/umwelt/project/file/restore.rb +22 -0
  55. data/lib/umwelt/project/file/store.rb +15 -0
  56. data/lib/umwelt/project/mapper.rb +11 -0
  57. data/lib/umwelt/semantic.rb +57 -0
  58. data/lib/umwelt/semantic/plain.rb +12 -0
  59. data/lib/umwelt/semantic/plain/root.rb +13 -0
  60. data/lib/umwelt/semantic/plain/space.rb +13 -0
  61. data/lib/umwelt/structs/episode.rb +9 -0
  62. data/lib/umwelt/structs/fragment.rb +13 -0
  63. data/lib/umwelt/structs/history.rb +3 -0
  64. data/lib/umwelt/structs/node.rb +13 -0
  65. data/lib/umwelt/structs/phase.rb +13 -0
  66. data/lib/umwelt/structs/project.rb +10 -0
  67. data/lib/umwelt/structs/trunk.rb +8 -0
  68. data/lib/umwelt/tree.rb +8 -0
  69. data/lib/umwelt/tree/fill.rb +35 -0
  70. data/lib/umwelt/tree/imprint.rb +53 -0
  71. data/lib/umwelt/tree/trunk.rb +27 -0
  72. data/lib/umwelt/version.rb +5 -0
  73. data/umwelt.gemspec +56 -0
  74. metadata +248 -0
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Umwelt::Semantic::Plain
4
+ class Base < Umwelt::Semantic::Base
5
+ def default_location
6
+ Pathname.new 'umwelt/lib'
7
+ end
8
+ end
9
+ end
10
+
11
+ require_relative './plain/root'
12
+ require_relative './plain/space'
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Umwelt::Semantic::Plain
4
+ class Root < Base
5
+ def ast
6
+ s(:module, const, nil)
7
+ end
8
+
9
+ def const
10
+ s(:const, nil, csymbol)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Umwelt::Semantic::Plain
4
+ class Space < Base
5
+ def ast
6
+ s(:module, const, nil)
7
+ end
8
+
9
+ def const
10
+ s(:const, context&.const, csymbol)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ Struct.new(
4
+ 'Episode',
5
+ :phase,
6
+ :engaged,
7
+ :forgotten,
8
+ keyword_init: true
9
+ )
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ Struct.new(
4
+ 'Fragment',
5
+ :id,
6
+ :abstract_id,
7
+ :context_id,
8
+ :origin_id,
9
+ :kind,
10
+ :body,
11
+ :note,
12
+ keyword_init: true
13
+ )
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ Struct.new('History', :project, :phases, keyword_init: true)
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ Struct.new(
4
+ 'Node',
5
+ :id,
6
+ :abstract_id,
7
+ :context_id,
8
+ :origin_id,
9
+ :body,
10
+ :note,
11
+ :tree,
12
+ keyword_init: true
13
+ )
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ Struct.new(
4
+ 'Phase',
5
+ :id,
6
+ :parent_id,
7
+ :merge_id,
8
+ :user_id,
9
+ :finished_at,
10
+ :name,
11
+ :description,
12
+ keyword_init: true
13
+ )
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ Struct.new(
4
+ 'Project',
5
+ :user_name,
6
+ :project_name,
7
+ :project_id,
8
+ :description,
9
+ keyword_init: true
10
+ )
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ Struct.new(
4
+ 'Trunk',
5
+ :index,
6
+ :childs_ids,
7
+ keyword_init: true
8
+ )
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Umwelt::Tree
4
+ end
5
+
6
+ require_relative './tree/fill'
7
+ require_relative './tree/imprint'
8
+ require_relative './tree/trunk'
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Umwelt::Tree
4
+ class Fill
5
+ def initialize
6
+ @index = {}
7
+ @childs_ids = {}
8
+ end
9
+
10
+ def call(fragments)
11
+ fragments.each do |fragment|
12
+ add_to_index(fragment)
13
+ register_as_child(fragment)
14
+ end
15
+ fill_trunk
16
+ end
17
+
18
+ private
19
+
20
+ def add_to_index(fragment)
21
+ @index[fragment.id] = fragment
22
+ end
23
+
24
+ def register_as_child(fragment)
25
+ return if fragment.context_id.nil?
26
+
27
+ @childs_ids[fragment.context_id] ||= []
28
+ @childs_ids[fragment.context_id] << fragment.id
29
+ end
30
+
31
+ def fill_trunk
32
+ Trunk.new(index: @index, childs_ids: @childs_ids)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Umwelt::Tree
4
+ class Imprint
5
+ include Hanami::Interactor
6
+ extend Forwardable
7
+ def_delegators FileUtils, :mkpath
8
+
9
+ expose :written_paths
10
+
11
+ def initialize(trunk, location: nil)
12
+ @trunk = trunk
13
+ @location = location
14
+ @written_paths = {}
15
+ end
16
+
17
+ def call(semantic_name)
18
+ error! not_clean unless location_clean?
19
+
20
+ @trunk.nodes.map do |node|
21
+ write node.semantic(semantic_name)
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def write(semantic)
28
+ path = semantic.path(location: @location)
29
+
30
+ mkpath path.dirname
31
+
32
+ count = path.write(semantic.code)
33
+
34
+ @written_paths[path] = count
35
+ end
36
+
37
+ def location_clean?
38
+ mkpath imprint_root
39
+ imprint_root.empty?
40
+ end
41
+
42
+ def not_clean
43
+ <<~WARN_MESSAGE
44
+ #{imprint_root} contain files.
45
+ Try use another --target, or delete them.
46
+ WARN_MESSAGE
47
+ end
48
+
49
+ def imprint_root
50
+ Pathname.pwd / @location
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../structs/trunk'
4
+
5
+ module Umwelt::Tree
6
+ class Trunk < Struct::Trunk
7
+ def nodes
8
+ index
9
+ .values
10
+ .map { |fragment| builder.call(fragment) }
11
+ end
12
+
13
+ def node(id)
14
+ builder.call(index[id])
15
+ end
16
+
17
+ def childs(id)
18
+ childs_ids[id].map { |child_id| node(child_id) }
19
+ end
20
+
21
+ private
22
+
23
+ def builder
24
+ @builder ||= Umwelt::Node::Build.new(self)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Umwelt
4
+ VERSION = '0.1.0'
5
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'umwelt/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'umwelt'
9
+ spec.version = Umwelt::VERSION
10
+ spec.authors = ['Oleg Sovetnik']
11
+ spec.email = ['sovetnik@oblaka.biz']
12
+
13
+ spec.summary = 'Umwelt is a client for umwelt.dev'
14
+ spec.description = <<~DESCRIPTION
15
+ Umwelt is a domain architecture development(knowledge management) tool,
16
+ for handy prototyping domain specification with code structure.
17
+ DESCRIPTION
18
+ spec.homepage = 'http://umwelt.dev'
19
+ spec.license = 'MIT'
20
+
21
+ # Prevent pushing this gem to RubyGems.org.
22
+ # To allow pushes either set the 'allowed_push_host'
23
+ # to allow pushing to a single host or
24
+ # delete this section to allow pushing to any host.
25
+ if spec.respond_to?(:metadata)
26
+ # spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
27
+
28
+ spec.metadata['homepage_uri'] = spec.homepage
29
+ spec.metadata['source_code_uri'] = 'https://github.com/sovetnik/umwelt'
30
+ # spec.metadata["changelog_uri"] = "TODO: CHANGELOG.md URL here."
31
+ else
32
+ raise 'RubyGems 2.0 or newer is required to protect against ' \
33
+ 'public gem pushes.'
34
+ end
35
+
36
+ # Specify which files should be added to the gem when it is released.
37
+ # The `git ls-files -z` loads the files in
38
+ # the RubyGem that have been added into git.
39
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
40
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec)/}) }
41
+ end
42
+ spec.bindir = 'bin'
43
+ spec.executables = %w[console setup umwelt]
44
+ spec.require_paths = ['lib']
45
+
46
+ spec.add_dependency 'hanami-cli'
47
+ spec.add_dependency 'unparser'
48
+
49
+ spec.add_development_dependency 'bundler', '~> 1.16'
50
+ spec.add_development_dependency 'fabrication'
51
+ spec.add_development_dependency 'faker'
52
+ spec.add_development_dependency 'minitest', '~> 5.0'
53
+ spec.add_development_dependency 'minitest-reporters'
54
+ spec.add_development_dependency 'pry'
55
+ spec.add_development_dependency 'rake', '~> 10.0'
56
+ end
metadata ADDED
@@ -0,0 +1,248 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: umwelt
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Oleg Sovetnik
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-03-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: hanami-cli
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: unparser
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.16'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.16'
55
+ - !ruby/object:Gem::Dependency
56
+ name: fabrication
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: faker
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '5.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '5.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: minitest-reporters
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pry
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rake
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '10.0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '10.0'
139
+ description: |
140
+ Umwelt is a domain architecture development(knowledge management) tool,
141
+ for handy prototyping domain specification with code structure.
142
+ email:
143
+ - sovetnik@oblaka.biz
144
+ executables:
145
+ - console
146
+ - setup
147
+ - umwelt
148
+ extensions: []
149
+ extra_rdoc_files: []
150
+ files:
151
+ - ".circleci/config.yml"
152
+ - ".gitignore"
153
+ - ".rubocop.yml"
154
+ - ".ruby-gemset"
155
+ - ".ruby-version"
156
+ - ".travis.yml"
157
+ - CODE_OF_CONDUCT.md
158
+ - Gemfile
159
+ - Gemfile.lock
160
+ - LICENSE.txt
161
+ - README.md
162
+ - Rakefile
163
+ - bin/console
164
+ - bin/setup
165
+ - bin/umwelt
166
+ - lib/umwelt.rb
167
+ - lib/umwelt/abstract.rb
168
+ - lib/umwelt/abstract/file.rb
169
+ - lib/umwelt/abstract/file/restore.rb
170
+ - lib/umwelt/abstract/file/store.rb
171
+ - lib/umwelt/abstract/mapper.rb
172
+ - lib/umwelt/cli.rb
173
+ - lib/umwelt/cli/commands.rb
174
+ - lib/umwelt/cli/commands/clone.rb
175
+ - lib/umwelt/cli/commands/convey.rb
176
+ - lib/umwelt/cli/commands/pull.rb
177
+ - lib/umwelt/cli/commands/version.rb
178
+ - lib/umwelt/command.rb
179
+ - lib/umwelt/command/convey.rb
180
+ - lib/umwelt/episode.rb
181
+ - lib/umwelt/episode/file.rb
182
+ - lib/umwelt/episode/file/restore.rb
183
+ - lib/umwelt/episode/file/store.rb
184
+ - lib/umwelt/episode/mapper.rb
185
+ - lib/umwelt/fragment.rb
186
+ - lib/umwelt/fragment/mapper.rb
187
+ - lib/umwelt/history.rb
188
+ - lib/umwelt/history/aggregate.rb
189
+ - lib/umwelt/history/file.rb
190
+ - lib/umwelt/history/file/restore.rb
191
+ - lib/umwelt/history/file/store.rb
192
+ - lib/umwelt/history/follow.rb
193
+ - lib/umwelt/history/mapper.rb
194
+ - lib/umwelt/history/trace.rb
195
+ - lib/umwelt/node.rb
196
+ - lib/umwelt/node/build.rb
197
+ - lib/umwelt/node/root.rb
198
+ - lib/umwelt/node/space.rb
199
+ - lib/umwelt/phase.rb
200
+ - lib/umwelt/phase/mapper.rb
201
+ - lib/umwelt/project.rb
202
+ - lib/umwelt/project/file.rb
203
+ - lib/umwelt/project/file/restore.rb
204
+ - lib/umwelt/project/file/store.rb
205
+ - lib/umwelt/project/mapper.rb
206
+ - lib/umwelt/semantic.rb
207
+ - lib/umwelt/semantic/plain.rb
208
+ - lib/umwelt/semantic/plain/root.rb
209
+ - lib/umwelt/semantic/plain/space.rb
210
+ - lib/umwelt/structs/episode.rb
211
+ - lib/umwelt/structs/fragment.rb
212
+ - lib/umwelt/structs/history.rb
213
+ - lib/umwelt/structs/node.rb
214
+ - lib/umwelt/structs/phase.rb
215
+ - lib/umwelt/structs/project.rb
216
+ - lib/umwelt/structs/trunk.rb
217
+ - lib/umwelt/tree.rb
218
+ - lib/umwelt/tree/fill.rb
219
+ - lib/umwelt/tree/imprint.rb
220
+ - lib/umwelt/tree/trunk.rb
221
+ - lib/umwelt/version.rb
222
+ - umwelt.gemspec
223
+ homepage: http://umwelt.dev
224
+ licenses:
225
+ - MIT
226
+ metadata:
227
+ homepage_uri: http://umwelt.dev
228
+ source_code_uri: https://github.com/sovetnik/umwelt
229
+ post_install_message:
230
+ rdoc_options: []
231
+ require_paths:
232
+ - lib
233
+ required_ruby_version: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - ">="
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
238
+ required_rubygems_version: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - ">="
241
+ - !ruby/object:Gem::Version
242
+ version: '0'
243
+ requirements: []
244
+ rubygems_version: 3.0.1
245
+ signing_key:
246
+ specification_version: 4
247
+ summary: Umwelt is a client for umwelt.dev
248
+ test_files: []